深度神经网络的训练过程(以向量化的角度)

BP 算法的训练过程,各种博客和参考书已经讲的很清楚了,但不管是周志华的《机器学习》,还是林轩田的《机器学习技法》,都只是对 3 层的神经网络的训练做了非向量化的推导。本文将结合 Andrew Ng 的最新视频,从向量和矩阵运算的角度推一遍任意层神经网络(全连接)的训练算法。

为什么要公式向量化

从工程的角度来讲,向量化可以极大的加快程序的运行速度。举一个例子,求两个向量(列向量)的内积,你可能会写出以下两个公式:


在实现的过程中,公式 (1) 使用了 for 循环,公式 (2) 使用了优化过的矩阵乘法,第一种的速度会远快于第二种。

符号约定

符号 意义
l 表示神经网络的层数
m batch_size
C 表示每一层的神经元的个数
J cost function
a 学习率
符号 shape 意义 i 的取值
Z[i] (Ci, ) 表示第 i 层的输入(未经激活函数) 2 - l
A[i] (Ci, ) 表示第 i 层的输入 1 - l
w[i] (Ci, Ci-1) 表示第 i 层神经元的权重矩阵 2 - l
b[i] (Ci, ) 表示第 i 层神经元的偏置(bias 2 - l

正向传播过程

输入:A[1],即 X
输出:A[l] ,即 y^
对于 i = 2, 3, ... l

其中


式子中的 * 符号指的是智能乘法,表示矩阵的对应位置相乘。

误差反向传导过程

BP 算法的原理是利用链式法则,对于每一个路径只访问一次就能求顶点对所有下层节点的偏导值。
先来看看 Jw[l] 的导数

其中


再来看 Jw[l-1] 的导数

通过观察 dw[l]dw[l-1],可以找到递推的规律:

BP 算法前向递推的规律:
起始条件


对于 i = l - 1, l - 2, ... 2,有

经过了一轮循环,求出了神经网络各层的 dw,然后按照下式更新网络参数:


这就完成了一个 epoch 的训练。

技巧

上述算法的缺点是,由于在后向传播的过程中,需要求激活函数 φ 对 输入 Z[i] 的导数,所以我们在进行前向传播的过程中,需要保存一下每一层的 Z 的值,这无疑增大了内存的消耗,在这里我们有一个技巧:

当激活函数为 SigomidTanhReLU 时,其导数可由其函数值表示,例如:Sigomid 函数的导数为 f(x) * (1 - f(x))Tanh 函数的导数为 1 - f(x)^2

所以,在参与上式 dZ 的运算中,利用函数的化简可以约分掉与 Z[i] 相关的项(用 A[i] 替代了) 的值,这样我们就可以适当的变换一下迭代公式,使 Z[i] 不出现在公式中,这样就不用再额外存储 Z 了。

实现

具体的 Python 实现,请点击这里

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归、逻辑回归、Soft...
    hfk阅读 9,826评论 4 18
  • 每个父母都希望子女成龙成凤,又希望子女一直在自己的身边。每一步自己都认同,社会是不一样的。时代也不一样了,就不能去...
    静静的等待着阅读 1,423评论 0 0
  • 心随物动,情随事迁,如果一个人的房间里充斥的是不需要的东西,自己也会有一种不被需要的感觉。 只买自己需要和喜欢的,...
    当向上翊遇上文艺翊阅读 1,930评论 0 0
  • 第一次见到汤一介先生,大约是在上个世纪80年代初夏季的北京孔庙。那时,中国学术界正处于复苏时期。汤先生清...
    丁怀超阅读 2,976评论 0 0
  • 美国最高法院周五以5张同意票,4张反对票的结果判决各州都不可以禁止同性恋婚姻。至此,美国成为了世界上又一个同性恋婚...
    根号四等于二阅读 14,874评论 20 51