Andrew Ng机器学习课程笔记--week5(上)
Neural Networks: Learning
内容较多,故分成上下两篇文章。
一、内容概要
-
Cost Function and Backpropagation
- Cost Function
- Backpropagation Algorithm
- Backpropagation Intuition
Backpropagation in Practice
Application of Neural Networks
二、重点&难点
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…… 直到nl 层(输出层)的**值。
计算过程如下:
- 2. BP
- 权值更新
首先需要知道的是BP算法是干嘛的?它是用来让神经网络自动更新权重
这里权重
那现在要做的工作就是求出后面的偏导,在求之前进一步变形:
注意
J(W,b;x(i),y(i)) 表示的是单个样例的代价函数,而J(W,b) 表示的是整体的代价函数。
所以接下来的工作就是求出
(上面公式可以参考下面的计算过程进行理解,跳过也不影响阅读)
具体推导过程可以参考[一文弄懂神经网络中的反向传播法——BackPropagation],这篇文章详细的介绍了BP算法的每一步骤。
上面的公式中出现了
- 计算δ
对于第
对
将上面的结果带入权值更新的表达式中便可顺利的执行BackPropagation啦~~~
但是!!!需要注意的是上面式子中反复出现的
f′(z(l)i) ,表示**函数的导数。这个在刚开始的确困惑到我了,因为视频里老师在演示计算δ 的时候根本就乘以这一项,难道老师错了?其实不是的,解释如下:
常用的**函数有好几种,但使用是分情况的:
- 在线性情况下:f(z) = z
- 在非线性情况下:(只举一些我知道的例子)
- sigmoid
- tanh
- relu
所以这就是为什么老师在视频中没有乘以
另外sigmoid函数表达式为
所以现在总结一下BP算法步骤:
- 进行前馈传导计算,利用前向传导公式,得到
L2,L3,… 直到输出层Lnl 的**值。- 对输出层(第
nl 层),计算:δ(nl)=−(y−a(nl))∙f′(z(nl)) - 对于
l=nl−1,nl−2,nl−3,…,2 的各层,计算:δ(l)=((W(l))Tδ(l+1))∙f′(z(l)) - 计算最终需要的偏导数值:
∇W(l)J(W,b;x,y)=δ(l+1)(a(l))T,∇b(l)J(W,b;x,y)=δ(l+1)
使用批量梯度下降一次迭代过程:
- 对于所有
l ,令ΔW(l):=0,Δb(l):=0 (设置为全零矩阵或全零向量)- 对于
i=1 到m ,
使用反向传播算法计算∇W(l)J(W,b;x,y) 和∇b(l)J(W,b;x,y) 。
计算ΔW(l):=ΔW(l)+∇W(l)J(W,b;x,y) 。
计算Δb(l):=Δb(l)+∇b(l)J(W,b;x,y) 。- 更新权重参数:
W(l)=W(l)−α[(1mΔW(l))+λW(l)]b(l)=b(l)−α[1mΔb(l)]
3) Backpropagation Intuition
本小节演示了具体如何操作BP,不再赘述。
具体可参考Coursera讲义。