深度学习系列笔记(一)——深度学习简介与反向传播机制

深度学习的发展趋势

回顾一下deep learning的历史:

  • 1958: Perceptron (linear model)
  • 1969: Perceptron has limitation
  • 1980s: Multi-layer perceptron
    • Do not have significant difference from DNN today
  • 1986: Backpropagation
    • Usually more than 3 hidden layers is not helpful
  • 1989: 1 hidden layer is “good enough”, why deep?
  • 2006: RBM initialization (breakthrough)
  • 2009: GPU
  • 2011: Start to be popular in speech recognition
  • 2012: win ILSVRC image competition 感知机(Perceptron)非常像我们的逻辑回归(Logistics Regression)只不过是没有sigmoid激活函数。09年的GPU的发展是很关键的,使用GPU矩阵运算节省了很多的时间。

Fully Connect Feedforward Network举例

在这里插入图片描述
也可以写成矩阵形式:
在这里插入图片描述
s i g m o i d sigmoid sigmoid ( ( 权重w【黄色】 × \times × 输入【蓝色】 + + + 偏移量b【绿色】 ) ) = = = 输出

反向传播

符号表示

  1. 损失函数(Loss function)是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的,用 l l l表示。
  2. 代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。
  3. 总体损失函数(Total loss function)是定义在整个训练集上面的,也就是所有样本的误差的总和。也就是平时我们反向传播需要最小化的值,用 L L L表示。

符号解释
如图, C n C^n Cn 是一个表示 y n y^n yn y ^ n \hat{y}^n y^n 之间距离的函数。 L ( θ ) L(\theta) L(θ) (total loss)是总的 C n C^n Cn 之和。

计算Loss对Params的偏导数

取一个Neuron来看
在这里插入图片描述

符号说明

如图, x 1 , x 2 x_1,x_2 x1,x2是input, w 1 , w 2 w_1, w_2 w1,w2是weight, b b b是bias, z = x 1 w 1 + x 2 w 2 + b z=x_1w_1+x_2w_2+b z=x1w1+x2w2+b是激活前的值, a a a是经过途中蓝色神经元激活后(比如sigmoid)的值。
在这里插入图片描述

过程

我们要计算的目标是 ∂ l ∂ w \frac{\partial l}{\partial w} wl, 由链式法则 ∂ l ∂ w = ∂ z ∂ w × ∂ l ∂ z \frac{\partial l}{\partial w}=\frac{\partial z}{\partial w}\times \frac{\partial l}{\partial z} wl=wz×zl.
在这里插入图片描述

  • ∂ z ∂ w \frac{\partial z}{\partial w} wz(Forward pass的部分)
    • 可以秒算,因为 z = ∑ i = 1 n a i w i z=\sum_{i=1}^{n} a_iw_i z=i=1naiwi,其中 a i a_i ai是前一个神经元的输入,所以一个 ∂ z ∂ w \frac{\partial z}{\partial w} wz就是 a a a.
  • ∂ l ∂ z \frac{\partial l}{\partial z} zl ( Backward pass的部分 )

    • 初看貌似很复杂,但我们把整个网络方向反过来看,同样利用链式法则, ∂ l ∂ z = ∂ a ∂ z × ∂ l ∂ a \frac{\partial l}{\partial z}=\frac{\partial a}{\partial z} \times \frac{\partial l}{\partial a} zl=za×al.
    • ∂ a ∂ z \frac{\partial a}{\partial z} za σ ′ ( z ) \sigma'(z) σ(z),当输入确定后,逐层迭代,它就是一个定值.
    • ∂ l ∂ a \frac{\partial l}{\partial a} al类比于正向传播,同样利用链式法则, ∂ l ∂ a = ∑ i = 1 n ∂ z i ∂ a × ∂ l ∂ z i \frac{\partial l}{\partial a}=\sum_{i=1}^n \frac{\partial z_i}{\partial a}\times\frac{\partial l}{\partial z_i} al=i=1nazi×zil
      • 其中 ∂ z ∂ a \frac{\partial z}{\partial a} az可以秒算,就是 w i w_i wi(因为 z = ∑ i = 1 n a i w i z=\sum_{i=1}^{n} a_iw_i z=i=1naiwi)
      • ∂ l ∂ z i \frac{\partial l}{\partial z_i} zil当确定了loss function( l ( y , y ^ ) l(y,\hat{y}) l(y,y^))之后也不复杂(常见的loss function比如交叉熵、mean square等)
        ……
        套娃下去,从output往前看。
  • ∂ z ∂ w \frac{\partial z}{\partial w} wz ∂ l ∂ z \frac{\partial l}{\partial z} zl相乘,我们就可以得到 ∂ l ∂ w \frac{\partial l}{\partial w} wl, 即 ∂ l ∂ w = ∂ z ∂ w × ∂ l ∂ z \frac{\partial l}{\partial w}=\frac{\partial z}{\partial w}\times \frac{\partial l}{\partial z} wl=wz×zl.

  • 所有我们就可以得到神经网络中所有的参数,然后用梯度下降就可以不断更新,得到损失最小的函数。

例子

我成功的把自己也绕晕了,用一个简单的例子再梳理一下后向传播

在这里插入图片描述

如图,从输出层往前看,

  • 首先 ∂ l ∂ z 5 = ∂ l ∂ y 1 × ∂ y 1 ∂ z 5 = σ ′ ( z 5 ) ∂ l ∂ y 1 \frac{\partial l}{\partial z_5}=\frac{\partial l}{\partial y_1}\times\frac{\partial y_1}{\partial z_5} = \sigma'(z_5)\frac{\partial l}{\partial y_1} z5l=y1l×z5y1=σ(z5)y1l
    同理 ∂ l ∂ z 6 = ∂ l ∂ y 6 × ∂ y 2 ∂ z 6 = σ ′ ( z 6 ) ∂ l ∂ y 2 \frac{\partial l}{\partial z_6}=\frac{\partial l}{\partial y_6}\times\frac{\partial y_2}{\partial z_6} = \sigma'(z_6)\frac{\partial l}{\partial y_2} z6l=y6l×z6y2=σ(z6)y2l
    公式中每个量都是可算的,好的,那么目前为止,我们把 ∂ l ∂ z 5 , ∂ l ∂ z 6 \frac{\partial l}{\partial z_5},\frac{\partial l}{\partial z_6} z5lz6l直接当做已知量喽。
  • 继续, ∂ l ∂ z 3 = ∂ l ∂ a 3 × ∂ a 3 ∂ z 3 = σ ′ ( z 3 ) ∂ l ∂ a 3 \frac{\partial l}{\partial z_3}=\frac{\partial l}{\partial a_3}\times\frac{\partial a_3}{\partial z_3} = \sigma'(z_3)\frac{\partial l}{\partial a_3} z3l=a3l×z3a3=σ(z3)a3l
    • 又因为 z 5 = w 11 ′ a 3 + w 21 ′ a 4 , z 6 = w 12 ′ a 3 + w 22 ′ a 4 z_5 = w_{11}'a_3+w_{21}'a_4, z_6 = w_{12}'a_3+w_{22}'a_4 z5=w11a3+w21a4,z6=w12a3+w22a4,即 a 3 a_3 a3 z 5 , z 6 z_5, z_6 z5,z6都有关, a 3 a_3 a3 z 5 , z 6 z_5, z_6 z5,z6的函数, 用 a 3 ( z 5 , z 6 ) a_3(z_5, z_6) a3(z5,z6)表示.

    • 所以,继续链式法则: ∂ l ∂ a 3 = ∂ l ∂ z 5 × ∂ z 5 ∂ a 3 + ∂ l ∂ z 6 × ∂ z 6 ∂ a 3 \frac{\partial l}{\partial a_3}=\frac{\partial l}{\partial z_5}\times\frac{\partial z_5}{\partial a_3}+\frac{\partial l}{\partial z_6}\times\frac{\partial z_6}{\partial a_3} a3l=z5l×a3z5+z6l×a3z6,由前面计算, ∂ l ∂ z 5 , ∂ l ∂ z 6 \frac{\partial l}{\partial z_5},\frac{\partial l}{\partial z_6} z5l,z6l是已知量; ∂ z 5 ∂ a 3 = w 11 ′ , ∂ z 6 ∂ a 3 = w 12 ′ \frac{\partial z_5}{\partial a_3}=w_{11}', \frac{\partial z_6}{\partial a_3}=w_{12}' a3z5=w11,a3z6=w12

    • 整理得 ∂ l ∂ z 3 = ∂ l ∂ a 3 × ∂ a 3 ∂ z 3 = σ ′ ( z 3 ) ∂ l ∂ a 3 = σ ′ ( z 3 ) ( ∂ l ∂ z 5 w 11 ′ + ∂ l ∂ z 6 w 12 ′ ) \frac{\partial l}{\partial z_3}=\frac{\partial l}{\partial a_3}\times\frac{\partial a_3}{\partial z_3} = \sigma'(z_3)\frac{\partial l}{\partial a_3}=\sigma'(z_3)(\frac{\partial l}{\partial z_5}w_{11}'+\frac{\partial l}{\partial z_6}w_{12}') z3l=a3l×z3a3=σ(z3)a3l=σ(z3)(z5lw11+z6lw12)
      同理 ∂ l ∂ z 4 = ∂ l ∂ a 4 × ∂ a 4 ∂ z 4 = σ ′ ( z 4 ) ∂ l ∂ a 4 = σ ′ ( z 4 ) ( ∂ l ∂ z 5 w 21 ′ + ∂ l ∂ z 6 w 22 ′ ) \frac{\partial l}{\partial z_4}=\frac{\partial l}{\partial a_4}\times\frac{\partial a_4}{\partial z_4} = \sigma'(z_4)\frac{\partial l}{\partial a_4}=\sigma'(z_4)(\frac{\partial l}{\partial z_5}w_{21}'+\frac{\partial l}{\partial z_6}w_{22}') z4l=a4l×z4a4=σ(z4)a4l=σ(z4)(z5lw21+z6lw22)
      ……
      后面再继续套娃,即可第一层算出 ∂ l ∂ z \frac{\partial l}{\partial z} zl

恩,滤了一遍,我把自己捋清楚了,但我估计看的人还是很晕。其实懂了之后过程很简单,就是有些繁琐,手写很快就捋完了,附一个手写版本。
在这里插入图片描述

参考文献

本文笔记摘自Datawhale组队学习,仅仅结合自己的理解略加修改。

  1. Datawhale2021年12月组队学习开源文档P13深度学习简介
  2. Datawhale2021年12月组队学习开源文档P14反向传播
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值