机器学习|李宏毅机器学习13、14-深度学习和反向传播

李宏毅机器学习13、14-深度学习和反向传播 深度学习的步骤

  • Step1:神经网络(Neural network)
  • Step2:模型评估(Goodness of function)
  • Step3:选择最优函数(Pick best function)
Step1:神经网络(Neural network) 神经元之间的连接方式
全连接前馈神经网络 神经网络可以有很多不同的连接方式,会产生不同的结构(structure)。全连接前馈神经网络是其中的一种。
全链接和前馈的理解 前馈(feedforward)也可以称为前向,从信号流向来理解就是输入信号进入网络后,信号流动是单向的,即信号从前一层流向后一层,一直到输出层,其中任意两层之间的连接并没有反馈(feedback),亦即信号没有从后一层又返回到前一层。
  • 全链接Fully Connect:layer1与layer2之间两两都有连接;
  • 前馈Feedforward:传递的方向是由前往后传。
全连接前馈神经网络结构
  • 输入层(Input Layer):1层
  • 隐藏层(Hidden Layer):N层
  • 输出层(Output Layer):1层 机器学习|李宏毅机器学习13、14-深度学习和反向传播
    文章图片
深度Deep Deep = Many hidden layer。(留下一个疑问为什么deep好(相对少的神经元多层)而不是fat(单层超多神经元)好?)
矩阵运算加速 机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

本质:隐藏层-特征提取器 把隐藏层通过特征提取来替代原来的特征工程,最后一个隐藏层输出的就是一组新的特征(相当于黑箱操作)。而对于输出层,其实是把前面的隐藏层的输出当做输入(经过特征提取得到的一组最好的特征)然后通过一个多分类器(可以是softmax函数)得到最后的输出 y y y。 机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

问题
  1. 多少层? 每层有多少神经元?
    用尝试加上直觉的方法来进行调试。对于有些机器学习相关的问题,我们一般用特征工程来提取特征,但是对于深度学习,我们只需要设计神经网络模型的结构。
  2. 结构可以自动确定吗?
    有方法可以让机器自动找到神经网络的结构的,比如进化人工神经网络(Evolutionary Artificial Neural Networks) 。
  3. 可以设计网络结构吗?
    可以的,比如 CNN卷积神经网络(Convolutional Neural Network )。
在这里插入图片描述
Step2:模型评估(Goodness of function) 一般采用损失函数来反应模型的好差,比如对于用于分类的神经网络来说,我们采用交叉熵(cross entropy)函数来对 y y y和 y ^ \hat{y} y^?的损失进行计算,调整参数,让交叉熵越小越好。
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

总体损失 不单单要计算一笔数据的,而是要计算整体所有训练数据的损失加起来,得到一个总体损失 L L L。然后在function set里面找到一组函数能最小化这个总体损失 L L L,或者说找一组神经网络的参数 θ \theta θ,来最小化总体损失 L L L。机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

Step3:选择最优函数(Pick best function) 用梯度下降的方式找到最优的函数和最好的一组参数。
具体流程:
  1. θ \theta θ是一组包含权重和偏差的参数集合,随机找一个初始值;
  2. 计算一下每个参数对应偏微分,得到的一个偏微分的集合 ? L \nabla{L} ?L(梯度);
  3. 利用这些偏微分,不断更新梯度得到新的参数,这样不断反复进行;
  4. 最终能得到一组最好的参数使得损失函数的值最小。
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

反向传播Backpropagation 反向传播Backpropagation是一个有效率的梯度下降算法。
链式法则
  • 连锁影响(可以看出x会影响y,y会影响z)
  • BP主要用到了chain rule
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

取出一个Neuron进行分析
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

可以把计算梯度分成两个部分:
  • 计算 ? z ? w \frac{\partial z}{\partial w} ?w?z?(Forward pass的部分)
  • 计算 ? l ? z \frac{\partial l}{\partial z} ?z?l?( Backward pass的部分 )
如下图所示,我们的目标是要计算 ? z ? w \frac{\partial z}{\partial w} ?w?z?(Forward pass的部分)和计算 ? l ? z \frac{\partial l}{\partial z} ?z?l? ( Backward pass的部分 ),然后把 ? z ? w \frac{\partial z}{\partial w} ?w?z?和 ? l ? z \frac{\partial l}{\partial z} ?z?l?相乘,得到 ? l ? w \frac{\partial l}{\partial w} ?w?l?。然后就可以得到神经网络中所有的参数,用梯度下降不断更新,得到损失最小的函数 。
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

forward pass-计算 ? z ? w \frac{\partial z}{\partial w} ?w?z? 根据求微分原理,forward pass的运算规律就是:
? z ? w 1 = x 1 ? z ? w 2 = x 2 \frac{\partial z}{\partial w_1} = x_1 \\ \frac{\partial z}{\partial w_2} = x_2 ?w1??z?=x1??w2??z?=x2?
所以计算得到的 x 1 x_1 x1?和 x 2 x_2 x2?恰好就是输入的 x 1 x_1 x1?和 x 2 x_2 x2? 。
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

也就是说,对于每一层的 ? z ? w \frac{\partial z}{\partial w} ?w?z?都是其输入:
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

backward pass-计算 ? l ? z \frac{\partial l}{\partial z} ?z?l? 计算所有激活函数的偏微分,激活函数有很多,这里使用Sigmoid函数为例:
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

使用链式法则(Chain Rule)的case1,可以把 ? l ? z \frac{\partial l}{\partial z} ?z?l?拆分为:
? l ? z = ? a ? z ? l ? a \frac{\partial l}{\partial z} = \frac{\partial a}{\partial z}\frac{\partial l}{\partial a} ?z?l?=?z?a??a?l?
进一步根据链式法则case2计算过程如下:
? l ? z = ? a ? z ? l ? a ? σ ′ ( z ) ? l ? a = ? z ′ ? a ? l ? z ′ + ? z ′ ′ ? a ? l ? z ′ ′ \frac{\partial l}{\partial z} = \frac{\partial a}{\partial z}\frac{\partial l}{\partial a} \Rightarrow {\sigma}'(z) \frac{\partial l}{\partial a} = \frac{\partial z'}{\partial a}\frac{\partial l}{\partial z'} +\frac{\partial z''}{\partial a}\frac{\partial l}{\partial z''} ?z?l?=?z?a??a?l??σ′(z)?a?l?=?a?z′??z′?l?+?a?z′′??z′′?l?
根据forward pass的结论得到:
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

则 ? l ? z \frac{\partial l}{\partial z} ?z?l?式子为:
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

观察这个式子,我们可以反向看待一下:
机器学习|李宏毅机器学习13、14-深度学习和反向传播
文章图片

如何求 ? l ? z ′ \frac{\partial l}{\partial z'} ?z′?l?和 ? l ? z ′ ′ \frac{\partial l}{\partial z''} ?z′′?l?呢?
  1. 【机器学习|李宏毅机器学习13、14-深度学习和反向传播】case1 该层后直接接到output layer
    假设 ? l ? z ′ \frac{\partial l}{\partial z'} ?z′?l?和 ? l ? z ′ ′ \frac{\partial l}{\partial z''} ?z′′?l?是最后一层的隐藏层,那么y1与y2是输出值,可以根据损失函数直接计算得出结果 :机器学习|李宏毅机器学习13、14-深度学习和反向传播
    文章图片

  2. case2 该层后还有隐藏层,而不是output layer
    但是如果不是最后一层,计算 ? l ? z ′ \frac{\partial l}{\partial z'} ?z′?l?和 ? l ? z ′ ′ \frac{\partial l}{\partial z''} ?z′′?l?需要继续往后一直通过链式法则算下去。继续乘 w 5 w_5 w5?和 w 6 w_6 w6?得到 ? l ? z ′ \frac{\partial l}{\partial z'} ?z′?l?,如果 ? l ? z a \frac{\partial l}{\partial z_a} ?za??l?和 ? l ? z b \frac{\partial l}{\partial z_b} ?zb??l?仍然不知道,那么就继续往后面层计算,一直到碰到输出值(case1),得到输出值之后再反向往输入方向传。
    机器学习|李宏毅机器学习13、14-深度学习和反向传播
    文章图片

    机器学习|李宏毅机器学习13、14-深度学习和反向传播
    文章图片
    对上图,可以从最后一个 ? l ? z 5 \frac{\partial l}{\partial z_5} ?z5??l?和 ? l ? z 6 \frac{\partial l}{\partial z_6} ?z6??l?看,因为 ? l ? z 5 \frac{\partial l}{\partial z_5} ?z5??l?和 ? l ? z 6 \frac{\partial l}{\partial z_6} ?z6??l?可以通过output求出来,然后继续往前(反向的前)求 ? l ? z 3 \frac{\partial l}{\partial z_3} ?z3??l?和 ? l ? z 4 \frac{\partial l}{\partial z_4} ?z4??l?,再继续求 ? l ? z 1 \frac{\partial l}{\partial z_1} ?z1??l?和 ? l ? z 2 \frac{\partial l}{\partial z_2} ?z2??l?,最后我们就得到下图的结果 :机器学习|李宏毅机器学习13、14-深度学习和反向传播
    文章图片

    如此,实际上进行backward pass时候和向前传播的计算量差不多。
参考资料 李宏毅机器学习笔记
李宏毅机器学习视频2019春季

    推荐阅读