深度学习(一)--反向传播算法

本文介绍了深度学习中的反向传播算法,从损失函数的选择出发,详细讲解了Multiclass SVM loss的理论推导、实例和程序实现,并探讨了正则化项的引入以防止过拟合。接着,文章详细阐述了反向传播的四个基本方程及其意义,帮助理解神经网络中误差的反向传播过程。最后,总结了反向传播算法的重要性和应用。
摘要由CSDN通过智能技术生成


本文从李飞飞的课件cs231n的得到启发,将关于反向传播算法的内容做下总结。

下图是对深度学习的直观解释:

该图右侧表示图像空间,通过几个分界面将图像空间分成几个不同的区域,每个区域的图像具有相似的特征。
左侧为卷积神经网络的简单版,将输入图像与权重矩阵W想乘,加上偏置项即可得到属于各个类别的scores,score越大,属于该类的概率越大。
但是,基本思路是这样,具体实施的话,需要考虑很多问题:
1. 上述方法虽然能计算出scores,但当scores不满足我们的期望时(也就是说当前分类器并不是最优),如何去处理? 通过最小化损失函数的方法来找到最优的分类器。
2. 如何去量化损失?
3. 量化损失后,如何将损失最小化?

损失函数的选择

Multiclass SVM loss

理论推导

{ xiyi}Ni=1 { x i y i } i = 1 N

其中 xi x i is image and yi y i is integer label
整个数据集上的损失函数如下所示:
L=1NiLi(f(xi,W),yi) L = 1 N ∑ i L i ( f ( x i , W ) , y i )

Li L i 又如何定义呢?
Li=jyi{ 0sjsyi+1syisj+1otherwise=jyimax(0,sjsyi+1)(1)(2) (1) L i = ∑ j ≠ y i { 0 s y i ≥ s j + 1 s j − s y i + 1 otherwise (2) = ∑ j ≠ y i m a x ( 0 , s j − s y i + 1 )

该是的直观理解:当非目标的score比目标的score大1以上时,认为损失为零,否则,认为损失为 sjsyi+1 s j − s y i + 1

Example

假设有一个分类任务:设计一个分类器将三幅图像分类。

给定三幅图像,通过下图的方法计算出每幅图对应的scores向量:

每幅图对应一个scores向量,如下图所示:

但是据我们观察,每幅图对应的scores向量中最大值并非对图像的正确分类,因此,说明目前的分类器(也就是 W,b W , b )并不是最优,需要进行优化。
根据上述loss计算公式进行如下计算:
我们计算第三幅图像的scores,因此, i=3 i = 3 , y3=3 y 3 = 3 , j=1,2 j = 1 , 2

Li=jyimax(0,sjsyi+1)=max(0,2.2(3.1)+1)+max(0,2.5(3.1)+1)=max(0,6.3)+max(0,6.6)=6.3+6.6=12.09(3)(4)(5)(6)(7) (3) L i = ∑ j ≠ y i m a x ( 0 , s j − s y i + 1 ) (4) = m a x ( 0 , 2.2 − ( − 3.1 ) + 1 ) + m a x ( 0 , 2.5 − ( − 3.1 ) + 1 ) (5) = m a x ( 0 , 6.3 ) + m a x ( 0 , 6.6 ) (6) = 6.3 + 6.6 (7) = 12.09

最终计算结果如下图所示:

总的损失为:
L=1Ni=1NLi=(2.9+0+12.9)=5.27(8)(9)(10) (8) L = 1 N ∑ i = 1 N L i (9) = ( 2.9 + 0 + 12.9 ) (10) = 5.27

现在损失已经计算好了。

程序实现

这种损失在通过Python程序如何实现呢?

def L_i_vectorized(x,y,w):
    scores = W.dot(x) //计算scores
    margins = np.maximum(0,scores-scores[y]+1)  //计算SVM loss Ly
    margins[y] = 0  //无需计算该样本对应的margin,因此,将margins对应的值置0
    loss_i = np.sim(margins) //elements to sum
    return loss_i   //返回SVM loss L_y

正则化项的引入

当不引入正则化项时,最终的分类器仅在训练数据上有良好的分类效果,从而引入了Data loss,如下图所示,此时并不能对test data进行好的估计,也就是所谓的过拟合,我们期待最终的分类器是简单的,因此,引入正则项,则最终的效果如下图所示:
!DL4-未引入正则项
!DL5-引入正则项
常用的正则项:
1. L2 regularization $R(W)=\sum{k}

back-propagation

BP算法的主要流程可以总结如下:
  BP算法的主要流程可以总结如下:
  输入:训练集 D=(xk,yk)mk=1 D = ( x k , y k ) k = 1 m ; 学习率;
  过程:
  1. 在(0, 1)范围内随机初始化网络中所有连接权和阈值
  2. repeat:
  3.   for all (xk,yk)D ( x k , y k ) ∈ D do
  4.     根据当前参数计算当前样本的输出;
  5.     计算输出层神经元的梯度项;
  6.     计算隐层神经元的梯度项;
  7.     更新连接权与阈值
  8.   end for
  9. until 达到停止条件
  输出:连接权与阈值确定的多层前馈神经网络

参数说明

wljk w j k l :从第 (l1)th ( l − 1 ) t h 层的 kth k t h neural到第 lth l t h 层的 jth j t h neural;
blj b j l :第 lth l t h 层的第 jth j t h 个神经元的bias;
alj a j l :第 lth l t h 层的第 jth j t h 个神经元的输出(与 (l1)th ( l − 1 ) t h 的加权输入并通过激活函数的结果);
zlj z j l :第 lth l t h 层的第 jth j t h 个神经元未经过激活函数的加权值;
这里写图片描述
DL1-2-变量对应图

alj=σ(zlj)=σ(kwljkal1k+blj)(181)(182) (181) a j l = σ ( z j l ) (182) = σ ( ∑ k w j k l ∗ a k l − 1 + b j l )

矩阵形式为:
al=σ(zl)=σ(wlal1+bl)(183)(184) (183) a l = σ ( z l ) (184) = σ ( w l ∗ a l − 1 + b l )

注意: σ() σ ( ) 是激活函数,主要目的是引入非线性,有多种激活函数。
同时,损失函数也有多种类型,此例子中为误差均方根函数。

关于误差函数有两个假设:

first:误差函数 C C 被看做所被训练样本的误差的均方根的平均(在批量梯度下降中会用到),

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值