- 开篇介绍:《深度学习入门-基于Python的理论与实现》书籍介绍
- 第一章:《深度学习入门-基于Python的理论与实现》第一章带读
- 第二章:《深度学习入门-基于Python的理论与实现》第二章带读 – 感知机
- 第三章:深度学习入门-基于Python的理论与实现》第三章带读 – 神经网络
- 第四章:《深度学习入门-基于Python的理论与实现》第四章带读 – 神经网络的学习
在之前的内容中,我们介绍了神经网络的学习,同时在更新损失函数关于权重梯度的时候,使用了微分计算。该方法虽然容易实现,但是在计算过程中比较消耗时间。如何去高效的计算权重数梯度?此时就必须通过误差反向传播实现。
如何理解误差反向传播,接下来通过两种方式,助你更直观理解该内容。
5.1 计算图介绍
计算图其实是用图形表示计算过程,该节介绍主要是为了更好理解误差反向传播内容。
问题举例:太郎在超市买了2个100日元一个的苹果,消费税是10%,请计算支付金额。
基于计算图求解的问题:
通过如上图,我们可以得出共花费220日元。
上图中,“从左向右进行计算”是一种正方向上的传播,简称为正向传播(forward propagation)。正向传播是从计算图出发点到结束点的传播。
既然有正向传播这个名称,当然也可以考虑反向(从图上看的话,就是从右向左)的传播。实际上,这种传播称为反向传播(backward propagation)。
计算图求解的优势:
- 优势一:计算图可以集中精力于局部计算。无论全局的计算有多么复杂,各个步骤所要做的就是对象节点的局部计算。通过局部计算,最后求出最优解。
- 优势二:利用计算图可以将中间的计算结果全部保存起来,通过反向传播高效计算导数。
5.2 链式法则
说到链式法则,必须要从复合函数说起,复合函数是由多个函数构成的函数。比如,z = (x+y)^2是由式(5*.*1)所示的两个式子构成的。
链式法则,其实就是复合函数的导数性质:如果某个函数由复合函数表示,则该复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。
上复合函数,通过求导得到的结果为:
链式法则计算图:
根据计算图的反向传播计算得到的结果:
5.3 反向传播
现在我们已经知道了计算图和链式法则,接下来看看究竟反向传播是如何传递权重的。
a. 加法节点的反向传播
加法节点的反向传播只是将输入信号输出到下一个节点。
假设有“10 + 5=15”这一计算,反向传播时,从上游会传来值1*.3,反向传播将1.*3向下一个节点传递。
b. 乘法节点的反向传播
乘法的反向传播会将上游的值乘以正向传播时的输入信号的“翻转值”后传递给下游。
假设有“10 × 5 = 50”这一计算,反向传播时,从上游会传来值1*.3。因为乘法的反向传播会乘以输入信号的翻转值,所以各自可按1.3 × 5 = 6.5、1.*3 × 10 = 13计算。另外,加法的反向传播只是将上游的值传给下游,并不需要正向传播的输入信号。但是,乘法的反向传播需要正向传播时的输入信号值。因此,实现乘法节点的反向传播时,要保存正向传播的输入信号。
现在我们已经知道了误差反向传播基本概念,接下来就看一下不同层中误差反向传播的计算图。
5.4 不同层中误差反向传播介绍
a. 激活函数-ReLU层
激活函数ReLU(Rectified Linear Unit)由下式(5*.*7)表示。
通过式(5*.7),可以求出y关于x的导数,如式(5.*8)所示。
如果正向传播时的输入x大于0,则反向传播会将上游的值原封不动地传给下游。反过来,如果正向传播时的x小于等于0,则反向传播中传给下游的信号将停在此处。
b. 激活函数-Sigmoid层
sigmoid函数由式(5*.*9)表示。
计算图表示:
对上式中反向传播结果记性化简:
简洁版表示:
c. Affine层
在Affine层变换时,一定要注意矩阵维度的大小:
d. Softmax-with-Loss层
Softmax层将输入值正规化(将输出值的和调整为1)之后再输出。如在手写数字识别中经过softmax后的结果为:
Softmax层中的误差反向传播也包含作为损失函数的交叉熵误差(cross entropy error),所以称为“Softmax-with-Loss层”。其简易计算图如下:
5.5 神经网络学习全貌图(包含反向传播版)
-
前提
-
- 神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习。神经网络的学习分为下面4个步骤。
-
步骤1(mini-batch)
-
- 从训练数据中随机选择一部分数据。
-
步骤2(计算梯度)
-
- 计算损失函数关于各个权重参数的梯度。(该步骤中实现误差反向传播法)
-
步骤3(更新参数)
-
- 将权重参数沿梯度方向进行微小的更新。
-
步骤4(重复)
-
- 重复步骤1、步骤2、步骤3。
具体代码见p156
本篇中主要介绍了误差反向传播是如何实现的,分别使用了计算图和链式法则进行介绍。最后绘制了常见的relu函数、sigmoid函数等函数的计算图。
书籍下载链接:https://pan.baidu.com/s/1goHhf2GZt0gxxbLXa42CmA
密码: 4vi2
欢迎关注微信公众号【布道NLP】获取更多AI相关知识。