吴恩达机器学习——第10章 神经网络参数的反向传播算法

1、代价函数

神经网络的代价函数类似于逻辑回归的代价函数:
J ( θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 k y k ( i ) l o g ( h θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) l o g ( 1 − ( h θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( θ j i ( l ) ) 2 J(θ)=-\frac{1}{m}\left[\sum_{i=1}^m\sum_{k=1}^ky^{(i)}_klog(h_θ(x^{(i)}))_k+(1-y_k^{(i)})log(1-(h_θ(x^{(i)}))_k)\right]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(θ_{ji}^{(l)})^2 J(θ)=m1[i=1mk=1kyk(i)log(hθ(x(i)))k+(1yk(i))log(1(hθ(x(i)))k)]+2mλl=1L1i=1slj=1sl+1(θji(l))2

上述的代价函数看上去非常复杂,其实跟逻辑回归函数的含义是一样的,区别在于神经网络支持多个输出 h θ ( x ) h_θ(x) hθ(x)

下面介绍一下函数中各个函数的含义:

  • m:代表样本的数量,i代表某个样本的下标, x ( i ) x^{(i)} x(i)代表某个样本对应的所有特征, y ( i ) y^{(i)} y(i)代表某个样本对应的实际分类结果,而 h θ ( x ( i ) ) h_θ(x^{(i)}) hθ(x(i))代表预测的结果。
  • k:代表分类的数量,神经网络的输出层的节点数=k。 y k ( i ) y_k^{(i)} yk(i)代表第k个节点的实际分类结果,而 ( h θ ( x ( i ) ) ) k (h_θ(x^{(i)}))_k (hθ(x(i)))k代表第k个节点预测的结果。
  • λ \lambda λ是正则化参数。
  • L代表神经网络的层的总数,之前我们介绍神经网络 θ ( i ) θ^{(i)} θ(i)的时候提起过,它是第i层到第i+1层的权重矩阵,所以 θ θ θ所对应的的层数是(1,L-1)。
  • s l s_l sl代表是第 l l l层的激活项的数量,所以 ∑ i = 1 s l \sum_{i=1}^{s_l} i=1sl代表的是第l层的每一项的和。i代表的是特征的数量,在这里因为 s l s_l sl代表的就是该层的输入项的数量,也就是特征的数量,所以i的取值范围是(0, s l s_l sl),不过一般会省略 θ 0 θ_0 θ0,所以i的取值范围就是(1, s l s_l sl)。
  • s l + 1 s_l+1 sl+1:应该是包含上 θ 0 \theta_0 θ0的意思。 θ j i ( l ) \theta_{ji}^{(l)} θji(l) 中的上标l的指的是网络的层数,j指的是节点的下标,i指的是 θ \theta θ的下标。

2、反向传播算法

在这之前,我们先回顾一下前向传播算法。

假设只有一个训练集(x,y)、神经网络为4层的情况,则:

  • 第一层的激活项就是: a ( 1 ) = x a^{(1)} = x a(1)=x
  • z ( 2 ) = θ ( 1 ) a ( 1 ) z^{(2)}=θ^{(1)}a^{(1)} z(2)=θ(1)a(1)
  • a ( 2 ) = g ( z ( 2 ) ) a^{(2)}=g(z^{(2)}) a(2)=g(z(2))
  • z ( 3 ) = θ ( 2 ) a ( 2 ) z^{(3)}=θ^{(2)}a^{(2)} z(3)=θ(2)a(2)
  • a ( 3 ) = g ( z ( 3 ) ) a^{(3)}=g(z^{(3)}) a(3)=g(z(3))
  • z ( 4 ) = θ ( 3 ) a ( 3 ) z^{(4)}=θ^{(3)}a^{(3)} z(4)=θ(3)a(3)
  • a ( 4 ) = g ( z ( 4 ) ) = h θ ( x ) a^{(4)}=g(z^{(4)})=h_θ(x) a(4)=g(z(4))=hθ(x)

2.1 定义

前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵。

在不断重复前后传递的过程中,优化权重矩阵,得到最优模型。

2.2 原理

下面通过两个例子来说明反向传播的原理。

两人猜数字:
在这里插入图片描述

  • input:代表输入。
  • output:代表输出。
  • 机器猫:代表预测结果与实际值的差距。

计算过程是这样的:

  1. 输入数据,经过小黄帽的计算,输出结果(前向传播)。
  2. 机器猫计算预测结果与真实结果的差。
  3. 小黄帽根据误差值,调整权重矩阵(反向传播)。
  4. 小黄帽根据最新的权重矩阵,重新进行结果(前向传播)。
  5. 重复上述步骤,直到误差值满足要求为止。

可以看出,反向传播就是把误差传递到上一层,推动上一层对权重矩阵进行优化。

三人猜数字
在这里插入图片描述
下面我们增加一个参与人员,即增加一个隐藏层。这时候计算过程就变成了如下的过程:

  1. 输入值经过小红帽、小黄帽的计算,输出结果(前向传播)。
  2. 机器猫计算预测值与实际值的误差 δ 1 \delta_1 δ1
  3. 小黄帽根据误差值,调整权重矩阵(反向传播)。
  4. 小黄帽调整完权重矩阵后,如果还有误差 δ 2 \delta_2 δ2,就把这个误差 δ 2 \delta_2 δ2再传递给小红帽(反向传播)。
  5. 小红帽根据误差值,调整权重矩阵(反向传播)。
  6. 由于小红帽是第一层,所以小红帽根据最新的权重矩阵进行计算(前向传播)。
  7. 小黄帽根据最新的权重矩阵,重新进行结果(前向传播)。
  8. 重复上述步骤,直到误差值满足要求为止。

值得注意的是第4步,我认为小黄帽传递给小红帽的误差值 δ 2 \delta_2 δ2,与机器猫传递给小黄帽的误差值 δ 1 \delta_1 δ1是不同的。 δ 2 \delta_2 δ2是在更新权重矩阵后重新计算出来的误差值。

2.3 模型

δ ( l ) = ( θ ( l ) ) T δ ( l + 1 ) . ∗ g ′ ( z ( l ) ) \delta^{(l)}=(\theta^{(l)})^T\delta^{(l+1)}.*g^{'}(z^{(l)}) δ(l)=(θ(l))Tδ(l+1).g(z(l))
推导过程就算了,没那个能力,下面介绍下各个参数的含义:

  1. δ ( l ) \delta^{(l)} δ(l):代表第 l l l 层的误差。
  2. θ ( l ) \theta^{(l)} θ(l):代表第 l l l 层的权重矩阵。
  3. . ∗ .* .”:是前后两个向量的乘法。
  4. g ′ ( z ( l ) ) g^{'}(z^{(l)}) g(z(l)):是对激活函数的求导。

2.4 反向传播的理解

下面用示意图的形式解释一下反向传播误差计算的大概原理,注意这只是示意,为了理解原理,实际上并没有这么简单:
在这里插入图片描述

如上图所示,该神经网络共有4层:

  1. s 1 s_1 s1:第一层为输入层,输入样本为 x 1 , x 2 x_1, x_2 x1,x2
  2. s 2 s_2 s2:第二层为隐藏层,预估结果为 a ( 2 ) a^{(2)} a(2),误差项为 δ ( 2 ) \delta^{(2)} δ(2),权重矩阵为 θ ( 2 ) \theta^{(2)} θ(2)
  3. s 3 s_3 s3:第三层为隐藏层,预估结果为 a ( 3 ) a^{(3)} a(3),误差项为 δ ( 3 ) \delta^{(3)} δ(3),权重矩阵为 θ ( 3 ) \theta^{(3)} θ(3)
  4. s 4 s_4 s4:第四层为输出层,预估结果为 a ( 4 ) a^{(4)} a(4),误差项为 δ ( 4 ) \delta^{(4)} δ(4)

我们知道误差=实际值-预估值,从第四层反向来看,实际结果为 y ( i ) y^{(i)} y(i),可以得出各层的误差计算结果为:

  1. δ 1 ( 4 ) = y ( i ) − a 1 ( 4 ) \delta_1^{(4)}=y^{(i)}-a^{(4)}_1 δ1(4)=y(i)a1(4)
  2. 第三层的误差计算方式与前向传播类似,但是方向是反的,所以可以得出:说实话,不知道为什么能推导出这个公式来?
    δ 1 ( 3 ) = θ 11 ( 3 ) ∗ δ 1 ( 4 ) \delta^{(3)}_1=\theta^{(3)}_{11}*\delta^{(4)}_1 δ1(3)=θ11(3)δ1(4)
    δ 2 ( 3 ) = θ 12 ( 3 ) ∗ δ 1 ( 4 ) \delta^{(3)}_2=\theta^{(3)}_{12}*\delta^{(4)}_1 δ2(3)=θ12(3)δ1(4)
  3. 第二层的误差为:
    δ 1 ( 2 ) = θ 11 ( 2 ) ∗ δ 1 ( 3 ) + θ 21 ( 2 ) ∗ δ 2 ( 3 ) \delta^{(2)}_1=\theta^{(2)}_{11}*\delta^{(3)}_1+\theta^{(2)}_{21}*\delta^{(3)}_2 δ1(2)=θ11(2)δ1(3)+θ21(2)δ2(3)
    δ 2 ( 2 ) = θ 12 ( 2 ) ∗ δ 1 ( 3 ) + θ 22 ( 2 ) ∗ δ 2 ( 3 ) \delta^{(2)}_2=\theta^{(2)}_{12}*\delta^{(3)}_1+\theta^{(2)}_{22}*\delta^{(3)}_2 δ2(2)=θ12(2)δ1(3)+θ22(2)δ2(3)

3、展开参数

本章介绍矩阵和向量的相互转换。

假设 T i T_i Ti是矩阵, V V V是向量。

矩阵转向量:

V = [ T 1 ( : ) ; T 2 ( : ) ; T 3 ( : ) ; ] V=[T_1(:);T_2(:);T_3(:);] V=[T1(:);T2(:);T3(:);]

这样把每个矩阵的所有数据平铺形成一个向量。
向量转矩阵:

T 1 = r e s h a p e ( V ( 1 : 110 ) , 10 , 11 ) T_1=reshape(V(1:110),10,11) T1=reshape(V(1:110),10,11)

取1-110元素,形成10*11的矩阵。

4、梯度检测

4.1 目的

反向传播在使用过程中非常容易出错,而且不容易发现,梯度检测就是一种校验反向传播结果的有效方式。

4.2 原理

使用梯度下降的方式求导,然后比较梯度检测的结果与反向传播的结果是否类似,如果类似则说明反向传播的计算结果无误,否则则应该进行优化。

先看一下梯度下降的求导方式:
在这里插入图片描述

如上图所示,是求导数的一种方式。

假设 ϵ \epsilon ϵ 是一个非常小的值,接近于0,则 ∂ ∂ θ ≈ J ( θ + ϵ ) − J ( θ − ϵ ) 2 ϵ \frac{\partial}{\partial\theta}\approx\frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2\epsilon} θ2ϵJ(θ+ϵ)J(θϵ)

下面把该公式引入到 θ \theta θ为向量的情况下:

∂ ∂ θ 1 ≈ J ( θ 1 + ϵ , θ 2 , θ 3 , . . . . . . θ n ) − J ( θ 1 − ϵ , θ 2 , θ 3 , . . . . . . θ n ) 2 ϵ \frac{\partial}{\partial\theta_1}\approx\frac{J(\theta_1+\epsilon,\theta_2,\theta_3,......\theta_n)-J(\theta_1-\epsilon,\theta_2,\theta_3,......\theta_n)}{2\epsilon} θ12ϵJ(θ1+ϵ,θ2,θ3,......θn)J(θ1ϵ,θ2,θ3,......θn)

∂ ∂ θ m ≈ J ( θ 1 , θ 2 , θ 3 , . . . . . . θ m + ϵ . . . . . . θ n ) − J ( θ 1 , θ 2 , θ 3 , . . . . . . θ m − ϵ . . . . . . θ n ) 2 ϵ \frac{\partial}{\partial\theta_m}\approx\frac{J(\theta_1,\theta_2,\theta_3,......\theta_m+\epsilon......\theta_n)-J(\theta_1,\theta_2,\theta_3,......\theta_m-\epsilon......\theta_n)}{2\epsilon} θm2ϵJ(θ1,θ2,θ3,......θm+ϵ......θn)J(θ1,θ2,θ3,......θmϵ......θn)

注意:梯度校验计算量非常大,校验完成后需要关闭掉。

5、随机初始化

参数 θ \theta θ需要设置初始值,一般采用随机方式: r a n d ( 10 , 11 ) ∗ ( 2 ∗ ϵ ) − ϵ rand(10,11)*(2*\epsilon)-\epsilon rand(10,11)(2ϵ)ϵ,产生的随机数界于( − ϵ , ϵ -\epsilon,\epsilon ϵ,ϵ)之间。

6、处理流程

6.1 选择网络架构

神经网络的第一步是选择网络架构,选择网络架构需要遵循几个原则:

  • 输入项的数目=特征的数量
  • 输出项的数据=类别的数量
  • 隐藏层的数目:一般选择 1
  • 隐藏层单元的数目:各个隐藏层保持一致。单元的数目越多效果越好,但是计算量响应变大。

6.2 处理流程

神经网络整体的处理流程是:

  1. 构建神经网络架构。
  2. 前向传播计算。
  3. 计算 J ( θ ) J(\theta) J(θ)
  4. 反向传播。
  5. 梯度检测。
  6. 停用梯度检测。
  7. 计算 m i n J ( θ ) minJ(\theta) minJ(θ)

7、资料

参考一文搞懂反向传播算法,本文对于反向传递的介绍非常容易理解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值