深度学习:(八)深层神经网络参数与流程

发布于:2024-10-09 ⋅ 阅读:(25) ⋅ 点赞:(0)

深层神经网络

符号规定

  • L L L :表示神经网络的层数;
  • l l l :表示第几层;
  • n [   l   ] n^{[~l~]} n[ l ] :表示第 l l l 层的节点数;
  • a [   l   ] a^{[~l~]} a[ l ] :表示第 l l l 层中的激活函数(泛指);
  • a [   l   ] = g [   l   ] ( z [   l   ] ) a^{[~l~]}=g^{[~l~]}(z^{[~l~]}) a[ l ]=g[ l ](z[ l ]) :表示第 l l l 层中的激活函数(泛指);
  • W [   l   ] W^{[~l~]} W[ l ] :表示第 l l l 层的参数 w w w 的集合;
  • b [   l   ] b^{[~l~]} b[ l ] :表示第 l l l 层的参数 b b b 的集合。

前向传播和反向传播都类似之前的笔记。

流程图

在这里插入图片描述

前向传播有输入数据 x x x ,反向传播的输入数据是 d a [   L   ] da^{[~L~]} da[ L ] ,即输出层(第 L L L 层)的输出,在向量化代码中,直接展示出来的结果是损失函数 L ( y ^ , y ) L(\widehat{y},y) L(y ,y)

因为 d a [   L   ] = − y a + 1 − y 1 − a da^{[~L~]}=-\frac{y}{a}+\frac{1-y}{1-a} da[ L ]=ay+1a1y ,而 L ( y ^ , y ) L(\widehat{y},y) L(y ,y) y ^ \widehat{y} y a a a)的导数,正好等于这个结果。因此将损失函数对 y ^ \widehat{y} y a a a)求导,可得出 d a [   L   ] da^{[~L~]} da[ L ] ,然后代入反向传播链的输入,开始迭代,如上图所示。

向量化时 d a [   L   ] da^{[~L~]} da[ L ] 需改为 d A [   L   ] dA^{[~L~]} dA[ L ] d A [   L   ] = ( d a [   1   ] , d a [   2   ] , . . . , d a [   m   ] ) dA^{[~L~]}=(da^{[~1~]},da^{[~2~]},...,da^{[~m~]}) dA[ L ]=(da[ 1 ],da[ 2 ],...,da[ m ])

为何 z [   l   ] z^{[~l~]} z[ l ]是反向传播的一个输入参数

∵ a [   l   ] = σ ( z [   l   ] ) = σ ( W [   l   ] a [   l − 1   ] + b [   l   ] ) ∵ d L d a [   l − 1   ] = d L d a [   l   ] ⋅ d a [   l   ] d a [   l − 1   ] = d a [   l   ] ⋅ σ ′ ( W [   l   ] a [   l − 1   ] + b [   l   ] ) W [   l   ] ⋅ d a [   l − 1   ] ∴ d a [   l − 1   ] = d a [   l   ] ⋅ σ ′ ( z [   l   ] ) W [   l   ] ⋅ d a [   l − 1   ] \begin{align*} ∵a^{[~l~]}=\sigma&(z^{[~l~]})=\sigma(W^{[~l~]}a^{[~l-1~]}+b^{[~l~]})\\ ∵\frac{dL}{da^{[~l-1~]}}&=\frac{dL}{da^{[~l~]}}·\frac{da^{[~l~]}}{da^{[~l-1~]}}\\ &=da^{[~l~]}·\sigma^{'}(W^{[~l~]}a^{[~l-1~]}+b^{[~l~]})W^{[~l~]}·da^{[~l-1~]}\\ ∴da^{[~l-1~]}&=da^{[~l~]}·\sigma^{'}(z^{[~l~]})W^{[~l~]}·da^{[~l-1~]} \end{align*} a[ l ]=σda[ l1 ]dLda[ l1 ](z[ l ])=σ(W[ l ]a[ l1 ]+b[ l ])=da[ l ]dLda[ l1 ]da[ l ]=da[ l ]σ(W[ l ]a[ l1 ]+b[ l ])W[ l ]da[ l1 ]=da[ l ]σ(z[ l ])W[ l ]da[ l1 ]

核对矩阵的维度

向量化前的单个样本
  • 前向传播:

    W [   l   ] W^{[~l~]} W[ l ] :维度为 ( n [   l   ] , n [   l − 1   ] ) (n^{[~l~]},n^{[~l-1~]}) (n[ l ],n[ l1 ])

    z [   l   ] z^{[~l~]} z[ l ] :维度为 ( n [   l   ] , 1 ) (n^{[~l~]},1) (n[ l ],1)

    a [   l   ] a^{[~l~]} a[ l ] :维度为 ( n [   l   ] , 1 ) (n^{[~l~]},1) (n[ l ],1)

    b [   l   ] b^{[~l~]} b[ l ] :维度为 ( n [   l   ] , 1 ) (n^{[~l~]},1) (n[ l ],1)

  • 反向传播:

    d W [   l   ] dW^{[~l~]} dW[ l ] W [   l   ] W^{[~l~]} W[ l ] 同维度;

    d b [   l   ] db^{[~l~]} db[ l ] b [   l   ] b^{[~l~]} b[ l ] 同维度。

向量化后的整个训练集
  • 前向传播:

    X ( A [   0   ] ) X(A^{[~0~]}) X(A[ 0 ]) :维度为 ( n [   0   ] , m ) (n^{[~0~]},m) (n[ 0 ],m)

    W [   l   ] W^{[~l~]} W[ l ] :维度为 ( n [   l   ] , n [   l − 1   ] ) (n^{[~l~]},n^{[~l-1~]}) (n[ l ],n[ l1 ])

    b [   l   ] b^{[~l~]} b[ l ] :维度为 ( n [   l   ] , 1 ) (n^{[~l~]},1) (n[ l ],1) ;# 要广播

    Z [   l   ] Z^{[~l~]} Z[ l ] :维度为 ( n [   l   ] , m ) (n^{[~l~]},m) (n[ l ],m)

    A [   l   ] A^{[~l~]} A[ l ] :维度为 ( n [   l   ] , m ) (n^{[~l~]},m) (n[ l ],m)

  • 反向传播:

    d W [   l   ] dW^{[~l~]} dW[ l ] W [   l   ] W^{[~l~]} W[ l ] 同维度;

    d b [   l   ] db^{[~l~]} db[ l ] b [   l   ] b^{[~l~]} b[ l ] 同维度;

    d Z [   l   ] dZ^{[~l~]} dZ[ l ] Z [   l   ] Z^{[~l~]} Z[ l ] 同维度;

    d A [   l   ] dA^{[~l~]} dA[ l ] A [   l   ] A^{[~l~]} A[ l ] 同维度。

超参数:

能控制参数 w w w b b b 的参数,需人为设置。

  • 学习率 α \alpha α
  • 梯度下降法循环次数;
  • 隐层数 L L L
  • 隐藏层的单元(节点)数;
  • 激活函数类型。

这些参数需要不断测试,实时评估损失函数(横坐标越大,纵坐标越小)。