锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

1.23 反向传播算法

时间:2023-09-22 21:37:02 63a传感器

1.23 反向传播算法

文章目录

  • 1.23 反向传播算法
    • @[toc] 九、学习神经网络(Neural Networks: Learning)
      • 9.1 代价函数
      • 9.2 反向传播算法
      • 9.3 对反向传播算法的直观理解
      • 9.4 注:展开参数
      • 9.5 梯度检验
      • 9.6 随机初始化
      • 9.7 综合起来
      • 9.8 自主驾驶

九、学习神经网络(Neural Networks: Learning)

9.1 代价函数

参考视频: 9 - 1 - Cost Function (7 min).mkv

首先,介绍一些便于以后讨论的新标记方法:

假设神经网络的训练样本有 m m m每个包含一组输入 x x x一组输出信号 y y y L L L表示神经网络层数, S I S_I SI表示每层的neuron个数( S l S_l Sl表示输出层神经元数), S L S_L SL代表最后一层处理单元的数量。

将神经网络的分类定义为种情况:二类分类和多类分类,

二类分类: S L = 0 , y = 0   o r   1 S_L=0, y=0\, or\, 1 SL=0,y=0or1表示哪一类;

K K K类分类: S L = k , y i = 1 S_L=k, y_i = 1 SL=k,yi=1表示分到第 i i i类; ( k > 2 ) (k>2) (k>2)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UnmUpwIg-1642948184917)(…/images/8f7c28297fc9ed297f42942018441850.jpg)]

我们回顾逻辑回归问题中我们的代价函数为:

KaTeX parse error: Expected group after '_' at position 45: …1}{m}\left[\sum_̲\limits{i=1}^{m…

在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量 y y y,但是在神经网络中,我们可以有很多输出变量,我们的 h θ ( x ) h_\theta(x) hθ(x)是一个维度为 K K K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为: \newcommand{\subk}[1]{ #1_k }
h θ ( x ) ∈ R K ( h θ ( x ) ) i = i t h output h_\theta\left(x\right)\in \mathbb{R}^{K}{\left({h_\theta}\left(x\right)\right)}_{i}={i}^{th} \text{output} hθ(x)RK(hθ(x))i=ithoutput

KaTeX parse error: Undefined control sequence: \subk at position 94: …_k}^{(i)} \log \̲s̲u̲b̲k̲{(h_\Theta(x^{(…

这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出 K K K个预测,基本上我们可以利用循环,对每一行特征都预测 K K K个不同结果,然后在利用循环在 K K K个预测中选择可能性最高的一个,将其与 y y y中的实际数据进行比较。

正则化的那一项只是排除了每一层 θ 0 \theta_0 θ0后,每一层的 θ \theta θ 矩阵的和。最里层的循环 j j j循环所有的行(由 s l + 1 s_{l+1} sl+1 层的激活单元数决定),循环 i i i则循环所有的列,由该层( s l s_l sl层)的激活单元数所决定。即: h θ ( x ) h_\theta(x) hθ(x)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularizationbias项处理所有参数的平方和。

9.2 反向传播算法

参考视频: 9 - 2 - Backpropagation Algorithm (12 min).mkv

之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的 h θ ( x ) h_{\theta}\left(x\right) hθ(x)

现在,为了计算代价函数的偏导数 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right) Θij(l)J(Θ),我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
以一个例子来说明反向传播算法。

假设我们的训练集只有一个样本 ( x ( 1 ) , y ( 1 ) ) \left({x}^{(1)},{y}^{(1)}\right) (x(1),y(1)),我们的神经网络是一个四层的神经网络,其中 K = 4 , S L = 4 , L = 4 K=4,S_{L}=4,L=4 K=4SL=4L=4

前向传播算法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTi1sFy2-1642948184920)(…/images/2ea8f5ce4c3df931ee49cf8d987ef25d.png)]

下面的公式推导过程见:https://blog.csdn.net/qq_29762941/article/details/80343185

我们从最后一层的误差开始计算,误差是激活单元的预测( a ( 4 ) {a^{(4)}} a(4))与实际值( y k y^k yk)之间的误差,( k = 1 : k k=1:k k=1:k)。
我们用 δ \delta δ来表示误差,则: δ ( 4 ) = a ( 4 ) − y \delta^{(4)}=a^{(4)}-y δ(4)=a(4)y
我们利用这个误差值来计算前一层的误差: δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) ∗ g ′ ( z ( 3 ) ) \delta^{(3)}=\left({\Theta^{(3)}}\right)^{T}\delta^{(4)}\ast g'\left(z^{(3)}\right) δ(3)=(Θ(3))Tδ(4)g(z(3))
其中 g ′ ( z ( 3 ) ) g'(z^{(3)}) g(z(3)) S S S 形函数的导数, g ′ ( z ( 3 ) ) = a ( 3 ) ∗ ( 1 − a ( 3 ) ) g'(z^{(3)})=a^{(3)}\ast(1-a^{(3)}) g(z(3))=a(3)(1a(3))。而 ( θ ( 3 ) ) T δ ( 4 ) (θ^{(3)})^{T}\delta^{(4)} (θ(3))Tδ(4)则是权重导致的误差的和。下一步是继续计算第二层的误差:
$ \delta{(2)}=(\Theta{(2)}){T}\delta{(3)}\ast g’(z^{(2)})$
因为第一层是输入变量,不存在误差。我们有了所有的误差的表达式后,便可以计算代价函数的偏导数了,假设 λ = 0 λ=0 λ=0,即我们不做任何正则化处理时有:
∂ ∂ Θ i j ( l ) J ( Θ ) = a j ( l ) δ i l + 1 \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1} Θij(l)J(Θ)=aj(l)δil+1

重要的是清楚地知道上面式子中上下标的含义:

l l l 代表目前所计算的是第几层。

j j j 代表目前计算层中的激活单元的下标,也将是下一层的第 j j j个输入变量的下标。

i i i 代表下一层中误差单元的下标,是受到权重矩阵中第 i i i行影响的下一层中的误差单元的下标。

如果我们考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用 Δ i j ( l ) \Delta^{(l)}_{ij} Δij(l)来表示这个误差矩阵。第 l l l 层的第 i i i 个激活单元受到第 j j j 个参数影响而导致的误差。

我们的算法表示为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3O2pGqp-1642948184921)(…/images/5514df14ebd508fd597e552fbadcf053.jpg)]

即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。

在求出了 Δ i j ( l ) \Delta_{ij}^{(l)} Δij(l)之后,我们便可以计算代价函数的偏导数了,计算方法如下:
$ D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}{(l)}+\lambda\Theta_{ij}{(l)}$ i f    j ≠ 0 {if}\; j \neq 0 ifj=0

$ D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}$ i f    j = 0 {if}\; j = 0 ifj=0

9.3 反向传播算法的直观理解

参考视频: 9 - 3 - Backpropagation Intuition (13 min).mkv

在上一段视频中,我们介绍了反向传播算法,对很多人来说,当第一次看到这种算法时,第一印象通常是,这个算法需要那么多繁杂的步骤,简直是太复杂了,实在不知道这些步骤,到底应该如何合在一起使用。就好像一个黑箱,里面充满了复杂的步骤。如果你对反向传播算法也有这种感受的话,这其实是正常的,相比于线性回归算法和逻辑回归算法而言,从数学的角度上讲,反向传播算法似乎并不简洁,对于反向传播这种算法,其实我已经使用了很多年了,但即便如此,即使是现在,我也经常感觉自己对反向传播算法的理解并

相关文章