机器学习入门与实践

一、Machine Learning Introduce

1.1 Loss Function

以下式子中 x i x_i xi 表示第 i i i 个训练资料通过神经网络后的输出(估计值), y i y_i yi 表示第 i i i 个训练资料的标签(真实值)。

1.1.1 基于距离度量的损失函数

(1)均方误差损失函数 MSE

M E S L o s s = 1 n ∑ i = 1 n ( x i − y i ) 2   ,   n = B a t c h S i z e \large MESLoss = \frac {1} {n} \sum_{i=1}^{n}{(x_i-y_i)^2}\ ,\ n=BatchSize MESLoss=n1i=1n(xiyi)2 , n=BatchSize
(2)L1 损失函数( MAE )
L 1 L o s s = 1 n ∑ i = 1 n ∣ x i − y i ∣ \large L1Loss=\frac {1} {n} \sum_{i=1}^{n}{|x_i-y_i|} L1Loss=n1i=1nxiyi

1.1.2 基于概率分布的损失函数

(1)交叉熵 CrossEntropyLoss

​ 交叉熵可依次利用 softmax() 、log() 和 NLLLoss() 得到。在下式中设 x i x_i xi 是第 i i i 图片经过 C N N CNN CNN 得到的 n n n 维向量, x i j x_{ij} xij 表示没有进行归一化的概率; C l a s s i Class_i Classi 表示第 i i i 张图片属于的真实类别(如:0 表示猫、1 表示狗等)。
对  x i  向量进行归一化: x i , j = e x i , j s u m   ,   s u m = ∑ j = 1 n e x i , j 对归一化后的  x i  向量取对数: x i , j = l o g ( x i , j ) 最后对 x i 向量用于 N L L o s s : r e s u l t = − x i [ C l a s s i ] C r o s s E n t r o p y L o s s = − ∑ i = 1 b a c t c h s i z e l o g ( e x i , c l a s s i ∑ j = 1 n e x i , j ) \begin{align} &\Large 对\ x_i \ 向量进行归一化:x_{i,j}=\frac {e^{x_{i,j}}} {sum}\ , \ sum=\sum_{j=1}^{n}e^{x_{i,j}} \\ &\Large 对归一化后的\ x_i \ 向量取对数: x_{i,j}=log(x_{i,j}) \\ \\ &\Large 最后对x_i向量用于NLLoss:result=-x_i[Class_i] \\ \\ &\Large CrossEntropyLoss=-\sum_{i=1}^{bactchsize}log(\frac {e^{x_{i,class_i}}} {\sum_{j=1}^{n} e^{x_{i,j}}}) \end{align}  xi 向量进行归一化:xi,j=sumexi,j , sum=j=1nexi,j对归一化后的 xi 向量取对数:xi,j=log(xi,j)最后对xi向量用于NLLoss:result=xi[Classi]CrossEntropyLoss=i=1bactchsizelog(j=1nexi,jexi,classi)

import torch
input=torch.randn(2,2)
print(input)					# tensor([[-1.6243, -0.4164],
                                #		 [-0.2492, -0.9667]])
# 归一化
soft = torch.nn.Softmax(dim=1) 	
soft(input) 					# tensor([[0.2301, 0.7699],
        				 	    #		  [0.6721, 0.3279]])
# 取对数
torch.log(soft(input))			# tensor([[-1.4694, -0.2615],
        					    # 		 [-0.3974, -1.1149]])

# 运用NLLLoss函数
nll = nn.NLLLoss()
target = torch.tensor([0,1])
nll(torch.log(soft(input)),target)# tensor(1.2921)

# 直接使用CrossEntropyLoss
ce = nn.CrossEntropyLoss()
ce(input,target)				# tensor(1.2921)

1.2 Optimization

  • θ t \theta_{t} θt : model parameters at time step t t t
  • ∇𝐿( θ t \theta_{t} θt) or g t g_t gt : gradient at θ t \theta_{t} θt , used to compute θ t + 1 \theta_{t+1} θt+1
  • m t + 1 m_{t+1} mt+1: momentum accumulated from time step 0 to time step 𝑡, which is used to compute θ t + 1 \theta_{t+1} θt+1

(1)SGDM

​ SGDM 在 SGD 增添了动量特性,之前所求的 Gradient 会影响当前,影响的强度有 λ \lambda λ 的大小决定, λ \lambda λ 越大影响也越大。

在这里插入图片描述

(2)Adagrad

​ 作用:动态调整Learning Rate的大小,使用自适应的学习率就可以帮助算法在梯度大的参数方向减缓学习速率,而在梯度小的参数方向加快学习速率,这就可以促使神经网络的训练速度的加快。Adagrad 的核心想法就是,如果一个参数的梯度一直都非常大,那么其对应的学习率就变小一点,防止震荡,而一个参数的梯度一直都非常小,那么这个参数的学习率就变大一点,使得其能够更快地更新,这就是Adagrad算法加快深层神经网络的训练速度的核心。

在这里插入图片描述

(3)RMSProp
在这里插入图片描述

(4)Adam

Adam 结合了 SGDM 和 RMSProp,使其同时具有动量特性和自适应的学习速率。

在这里插入图片描述

1.3 BackPropagation

作用

在运用 Gradient Descent 方法更新神经网络中的 weight 时,可以利用BP算法快速计算 $\nabla L(θ) $。

  • C n ( θ ) C^n(θ) Cn(θ) :第 n 个训练资料的训练值与真实值的误差值;
  • N N N :等于 batchsize ;
    在这里插入图片描述

算法过程

​ 定义如下图所示 Neural Network ,其使用的激活函数 f ( x ) = s i g m o i d ( x ) f(x)=sigmoid(x) f(x)=sigmoid(x) ,输入为 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) ,输出为 ( y 1 , y 2 ) (y_1,y_2) (y1,y2) ,训练资料标签为 ( t a r g e t 1 , t a r g e t 2 ) (target_1,target_2) (target1,target2) ,使用的损失函数为均方差 MSE 。
在这里插入图片描述

​ 已知条件如下:
y 1 = f ( z 3 ) = s i g m o i d ( z 3 )   ,   y 2 = f ( z 4 ) = s i g m o i d ( z 4 ) f ( x ) ′ = f ( x ) ⋅ [ 1 − f ( x ) ] C = ( f ( z 3 ) − t a r g e t 1 ) 2 + ( f ( z 4 ) − t a r g e t 2 ) 2 \large y_1=f(z_3)=sigmoid(z_3)\ ,\ y_2=f(z_4)=sigmoid(z_4) \\ \large f(x)^{'}=f(x)·[1-f(x)] \\ \large C=(f(z_3)-target_1)^2+(f(z_4)-target_2)^2 y1=f(z3)=sigmoid(z3) , y2=f(z4)=sigmoid(z4)f(x)=f(x)[1f(x)]C=(f(z3)target1)2+(f(z4)target2)2
​ 利用链式求导法则,求各个 w w w C C C 的偏导:

∂ C ∂ w 5 = ∂ C ∂ z 3 ∂ z 3 ∂ w 5 = 2 f ( z 3 ) ′ ( f ( z 3 ) − t a r g e t 1 ) ⋅ f ( z 1 ) ∂ C ∂ w 1 = ∂ z 1 ∂ w 1 ∂ C ∂ z 1 = ∂ z 1 ∂ w 1 ∂ f ( z 1 ) ∂ z 1 ∂ C ∂ f ( z 1 ) = ∂ z 1 ∂ w 1 ∂ f ( z 1 ) ∂ z 1 [ ∂ z 3 ∂ f ( z 1 ) ∂ C ∂ z 3 + ∂ z 4 ∂ f ( z 1 ) ∂ C ∂ z 4 ] ∂ C ∂ w 1 = x 1 ⋅ f ( z 1 ) ′ ⋅ [ w 5 ∂ C ∂ z 3 + w 7 ∂ C ∂ z 4 ] \large \frac {\partial C } {\partial w_5 }=\frac {\partial C} {\partial z_3}\frac {\partial z_3} {\partial w_5}=2f(z_3)^{'}(f(z_3)-target_1)·f(z_1) \\ \large \frac {\partial C} {\partial w_1}=\frac {\partial z_1} {\partial w_1} \frac {\partial C} {\partial z_1}=\frac {\partial z_1} {\partial w_1} \frac {\partial f(z_1)} {\partial z_1} \frac {\partial C} {\partial f(z_1)}=\frac {\partial z_1} {\partial w_1} \frac {\partial f(z_1)} {\partial z_1} [\frac {\partial z_3} {\partial f(z_1)} \frac {\partial C} {\partial z_3} +\frac {\partial z_4} {\partial f(z_1)} \frac {\partial C} {\partial z_4}] \\ \large \frac {\partial C} {\partial w_1}=x_1·f(z_1)^{'}·[w_5\frac {\partial C} {\partial z_3}+w_7\frac {\partial C} {\partial z_4}] w5C=z3Cw5z3=2f(z3)(f(z3)target1)f(z1)w1C=w1z1z1C=w1z1z1f(z1)f(z1)C=w1z1z1f(z1)[f(z1)z3z3C+f(z1)z4z4C]w1C=x1f(z1)[w5z3C+w7z4C]

​ 从上式可以看出:
∂ C ∂ w i = ∂ z j ∂ w i ∂ C ∂ z j 前一个神经元的输出 = ∂ C ∂ w i   ,   ∂ C ∂ z j 可以根据下图快速求出。 \large \frac {\partial C } {\partial w_i }=\large \frac {\partial z_j } {\partial w_i } \frac {\partial C } {\partial z_j } \\ \large 前一个神经元的输出=\frac{\partial C} {\partial w_i}\ ,\ \frac {\partial C } {\partial z_j }可以根据下图快速求出。 wiC=wizjzjC前一个神经元的输出=wiC , zjC可以根据下图快速求出。

在这里插入图片描述

二、卷积神经网络 CNN

Ⅰ 附录

Piecewise Linear Curves [kɜːvz] 分段线性曲线

Rectified Linear Unit [ˈrektɪfaɪd] 整流线性单元

approximant [əˈprɒksɪmənt] 近似值,逼近式

parameters [pəˈræmɪtəz] 参数,决定因素

gradient [ˈɡreɪdiənt] 梯度,坡度

Activation function 激活函数

backpropagation [prɒpə’ɡeɪʃ(ə)n] 反向传播

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习是一门涉及数据处理和模式识别的学科,它通过构建和训练模型来进行预测和分类。而MATLAB作为一种功能强大的计算机编程语言,具备丰富的数据处理和分析工具,因此成为了机器学习中常用的工具之一。 MATLAB提供了多种机器学习实践应用源码,供初学者进行入门学习和实践。学习者可以通过这些源码了解机器学习的基本原理和流程,以及如何将其应用于实际问题中。 MATLAB的机器学习实战源码通常涵盖以下内容: 1. 数据预处理:通过MATLAB的数据处理函数,对原始数据进行清洗、归一化等预处理操作,以减少噪声的影响,并保证数据的可靠性和一致性。 2. 特征选择:根据问题的需求和特征的相关性,选择最具代表性的特征集,以提高分类和预测的准确度。 3. 模型训练:使用MATLAB的机器学习工具箱,选择相应的模型算法进行训练。常见的算法包括线性回归、逻辑回归、支持向量机、决策树等。 4. 模型评估:使用交叉验证、混淆矩阵等评估指标,对训练出的模型进行评估,判断其预测和分类的准确度。 5. 结果可视化:利用MATLAB的绘图函数,对机器学习模型的结果进行可视化展示,以便更直观地理解和分析。 通过实践应用源码,学习者可以在实际操作中深入理解机器学习的原理和算法,并掌握如何使用MATLAB进行数据处理、模型训练和结果评估。这也为进一步深入研究和应用机器学习奠定了基础。 ### 回答2: 机器学习人工智能领域的重要分支,通过训练模型和算法来使机器能够自动学习和提高性能。机器学习的应用非常广泛,包括图像识别、自然语言处理、推荐系统等等。 在机器学习实践中,MATLAB 是一种常用的工具。MATLAB 具有丰富的机器学习函数和工具箱,可以帮助用户快速实现算法和模型。 要进行机器学习的实战,首先需要学习一些基本的概念和算法。机器学习中的一些常见算法包括线性回归、逻辑回归、决策树、支持向量机、神经网络等。MATLAB 中都有相应的函数和工具箱可以使用。可以通过学习 MATLAB 的帮助文档和示例代码来掌握这些算法的使用方法和原理。 在实际应用中,可以使用 MATLAB 来处理数据、建立模型、进行训练和评估。首先,将数据导入到 MATLAB 环境中,可以使用 MATLAB 提供的数据处理函数进行数据清洗和预处理。然后,选择合适的算法和模型,使用 MATLAB 提供的函数进行训练和优化。训练完成后,可以使用测试数据对模型进行评估。MATLAB 提供了丰富的可视化函数,可以对结果进行可视化展示和分析。 除了基本的算法和模型,MATLAB 中还有一些专门的工具箱,例如深度学习工具箱和图像处理工具箱,可以更方便地进行相关任务的实现。 总而言之,MATLAB 是一个强大的工具,提供了丰富的函数和工具箱,可以帮助用户进行机器学习入门到实战。通过学习 MATLAB 的相关函数和示例代码,掌握机器学习的基本概念和算法,并在实际应用中进行模型的训练和评估,可以更好地理解和应用机器学习的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值