Neural Networks: Learning
内容较多,故分成上下两篇文章。
一、内容概要
-
Cost Function and Backpropagation
- Cost Function
- Backpropagation Algorithm
- Backpropagation Intuition
-
Backpropagation in Practice
- Implementation Note:Unroll Parameters
- Gradient Checking
- Random Initialization
- Putting it Together
-
Application of Neural Networks
- Autonomous Driving
二、重点&难点
1.Cost Function and Backpropagation
1) Cost Function
首先定义一下后面会提到的变量
L: 神经网络总层数
Sl:l层单元个数(不包括bias unit)
k:输出层个数
回顾正则化逻辑回归中的损失函数:
在神经网络中损失函数略微复杂了些,但是也比较好理解,就是把所有层都算进去了。
2)BackPropagation反向传播
更详细的公式推导可以参考http://ufldl.stanford.edu--反向传导算法
下面给出我自己对BP算法的理解以及ufldl上的推导:
假设神经网络结构如下
- 1. FP
- 利用前向传导公式(FP)计算(2,3……) 直到 ({n_l})层(输出层)的激活值。
计算过程如下:
- 2. BP
- 权值更新
首先需要知道的是BP算法是干嘛的?它是用来让神经网络自动更新权重(W)的。
这里权重(W)与之前线性回归权值更新形式上是一样:
那现在要做的工作就是求出后面的偏导,在求之前进一步变形:
注意(J(W,b;x^{(i)},y^{(i)}))表示的是单个样例的代价函数,而(J(W,b))表示的是整体的代价函数。
所以接下来的工作就是求出(frac{∂J(W,b;x,y)}{∂W_{ij^{(l)}}}),求解这个需要用到微积分中的链式法则,即
更加详细运算过程可以参考一文弄懂神经网络中的反向传播法——BackPropagation,这篇文章详细的介绍了BP算法的每一步骤。
上面的公式中出现了(δ)(误差error),所以后续的目的就是求出每层每个node的(δ),具体过程如下:
- 计算δ
对于第 (n_l)层(输出层)的每个输出单元(i),我们根据以下公式计算残差:
对 (l = n_l-1, n_l-2, ……,3,2)的各个层,第 (l) 层的第 (i) 个节点的残差计算方法如下:
将上面的结果带入权值更新的表达式中便可顺利的执行BackPropagation啦~~~
但是!!!需要注意的是上面式子中反复出现的 (f '(z_i^{(l)})) ,表示激活函数的导数。这个在刚开始的确困惑到我了,因为视频里老师在演示计算(δ)的时候根本就乘以这一项,难道老师错了?其实不是的,解释如下:
常用的激活函数有好几种,但使用是分情况的:
- 在线性情况下:f(z) = z
- 在非线性情况下:(只举一些我知道的例子)
- sigmoid
- tanh
- relu
所以这就是为什么老师在视频中没有乘以 (f '(z_i^{(l)})) 的原因了,就是因为是线性的,求导后为1,直接省略了。
另外sigmoid函数表达式为(f(z)=frac{1}{1+e^{-z}}),很容易知道(f'(z)=frac{-e^{-z}}{ (1+e^{-z}) ^2 } = f(z)·(1-f(z)))这也就解释了Coursera网站上讲义的公式是这样的了:
所以现在总结一下BP算法步骤:
- 进行前馈传导计算,利用前向传导公式,得到(L_2, L_3, ldots)直到输出层 ( extstyle L_{n_l})的激活值。
- 对输出层(第 ( extstyle n_l)层),计算:
(delta^{(n_l)}= - (y - a^{(n_l)}) ullet f'(z^{(n_l)}))- 对于 ( extstyle l = n_l-1, n_l-2, n_l-3, ldots, 2) 的各层,计算:
(delta^{(l)} = left((W^{(l)})^T delta^{(l+1)} ight) ullet f'(z^{(l)}))- 计算最终需要的偏导数值:
使用批量梯度下降一次迭代过程:
- 对于所有( extstyle l),令 ( extstyle Delta W^{(l)} := 0 , extstyle Delta b^{(l)} := 0) (设置为全零矩阵或全零向量)
- 对于( extstyle i = 1) 到( extstyle m) ,
使用反向传播算法计算( extstyle abla_{W^{(l)}} J(W,b;x,y)) 和( extstyle abla_{b^{(l)}} J(W,b;x,y)) 。
计算( extstyle Delta W^{(l)} := Delta W^{(l)} + abla_{W^{(l)}} J(W,b;x,y)) 。
计算( extstyle Delta b^{(l)} := Delta b^{(l)} + abla_{b^{(l)}} J(W,b;x,y)) 。- 更新权重参数:
3) Backpropagation Intuition
本小节演示了具体如何操作BP,不再赘述。
具体可参考Coursera讲义。