Andrew Ng机器学习课程笔记--week5(上)

来源:互联网 发布:手机淘宝店铺头像尺寸 编辑:程序博客网 时间:2024/06/11 21:20

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:输出层个数

回顾正则化逻辑回归中的损失函数:

J(θ)=1mi=1m[y(i) log(hθ(x(i)))+(1y(i)) log(1hθ(x(i)))]+λ2mj=1nθ2j

在神经网络中损失函数略微复杂了些,但是也比较好理解,就是把所有层都算进去了。

J(Θ)=1mi=1mk=1K[y(i)klog((hΘ(x(i)))k)+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(Θ(l)j,i)2

2)BackPropagation反向传播

更详细的公式推导可以参考http://ufldl.stanford.edu–反向传导算法

下面给出我自己对BP算法的理解以及ufldl上的推导:

这里写图片描述

假设神经网络结构如下

神经网络结构

- 1. FP

  1. 利用前向传导公式(FP)计算2,3 直到 nl层(输出层)的激活值。
    计算过程如下:

前向传导公式(FP)

- 2. BP


  • 权值更新

首先需要知道的是BP算法是干嘛的?它是用来让神经网络自动更新权重W的。
这里权重W与之前线性回归权值更新形式上是一样:

那现在要做的工作就是求出后面的偏导,在求之前进一步变形:

注意J(W,b;x(i),y(i))表示的是单个样例的代价函数,而J(W,b)表示的是整体的代价函数。

所以接下来的工作就是求出J(W,b;x,y)Wij(l),求解这个需要用到微积分中的链式法则,即

J(W,b;x,y)Wij(l)=J(W,b;x,y)ai(l)ai(l)zi(l)zi(l)wij(l)=a(l)jδ(l+1)i

(上面公式可以参考下面的计算过程进行理解,跳过也不影响阅读)
BP算法示例计算1
BP算法示例计算2
BP算法示例计算3

具体推导过程可以参考[一文弄懂神经网络中的反向传播法——BackPropagation],这篇文章详细的介绍了BP算法的每一步骤。

上面的公式中出现了δ(误差error),所以后续的目的就是求出每层每个node的δ,具体过程如下:

  • 计算δ

对于第 nl层(输出层)的每个输出单元i,我们根据以下公式计算残差:

l=nl1,nl2,,3,2的各个层,第 l 层的第 i 个节点的残差计算方法如下:

将上面的结果带入权值更新的表达式中便可顺利的执行BackPropagation啦~~~

但是!!!需要注意的是上面式子中反复出现的 f(z(l)i) ,表示激活函数的导数。这个在刚开始的确困惑到我了,因为视频里老师在演示计算δ的时候根本就乘以这一项,难道老师错了?其实不是的,解释如下:
常用的激活函数有好几种,但使用是分情况的:

  • 线性情况下:f(z) = z
  • 非线性情况下:(只举一些我知道的例子)
    • sigmoid
    • tanh
    • relu

所以这就是为什么老师在视频中没有乘以 f(z(l)i) 的原因了,就是因为是线性的,求导后为1,直接省略了。

另外sigmoid函数表达式为f(z)=11+ez,很容易知道f(z)=ez(1+ez)2=f(z)(1f(z))这也就解释了Coursera网站上讲义的公式是这样的了:


所以现在总结一下BP算法步骤

  1. 进行前馈传导计算,利用前向传导公式,得到L2,L3,直到输出层 Lnl的激活值。
  2. 对输出层(第 nl层),计算:
    δ(nl)=(ya(nl))f(z(nl))
  3. 对于 l=nl1,nl2,nl3,,2 的各层,计算:
    δ(l)=((W(l))Tδ(l+1))f(z(l))
  4. 计算最终需要的偏导数值:
    W(l)J(W,b;x,y)=δ(l+1)(a(l))T,b(l)J(W,b;x,y)=δ(l+1)

使用批量梯度下降一次迭代过程:

  1. 对于所有l,令 ΔW(l):=0,Δb(l):=0 (设置为全零矩阵或全零向量)
  2. 对于i=1m
    使用反向传播算法计算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)
  3. 更新权重参数:
    W(l)=W(l)α[(1mΔW(l))+λW(l)]b(l)=b(l)α[1mΔb(l)]

3) Backpropagation Intuition

本小节演示了具体如何操作BP,不再赘述。

具体可参考Coursera讲义。





MARSGGBO原创

2017-8-5

原创粉丝点击