机器学习入门与实践

一、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] 反向传播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值