我觉得GPT老师的语言功底比大多数的博客主要好(包括我自己),阅读起来更易理解,而且哪里不明白还可以直接问gpt老师,孜孜不倦,尽心尽责,全天待命,究极贴心。有这么厉害的一个老师,不学习简直暴殄天物。
于是乎我准备立一个flag,挑战跟着GPT老师学习365天,每天我都会整理自己的学习心得和脉络(文字大部分都是GPT直接生成的,我觉得比我自己写肯定好多了)感谢gpt老师!跪谢
全系列文章:跟着GPT学习-AI系列
前一篇文章整理了单个神经元输出层的权重推导,接下来将整理单个神经元隐藏层的权重推导。
🤖 推导隐藏层的权重更新公式
假设隐藏层只有一个神经元,我们将基于此单个隐藏层神经元推导其梯度。这将有助于理解反向传播算法在单个神经元情况下的工作机制。
隐藏层的梯度
∂
C
∂
a
(
l
)
\frac{\partial C}{\partial a^{(l)}}
∂a(l)∂C递推公式:
对于任意隐藏层
l
l
l,使用链式法则递推计算梯度:
∂
C
∂
a
(
l
)
=
∂
C
∂
z
(
l
+
1
)
⋅
∂
z
(
l
+
1
)
∂
a
(
l
)
\frac{\partial C}{\partial a^{(l)}} = \frac{\partial C}{\partial z^{(l+1)}} \cdot \frac{\partial z^{(l+1)}}{\partial a^{(l)}}
∂a(l)∂C=∂z(l+1)∂C⋅∂a(l)∂z(l+1)
由于:
∂
z
(
l
+
1
)
∂
a
(
l
)
=
w
(
l
+
1
)
\frac{\partial z^{(l+1)}}{\partial a^{(l)}} = w^{(l+1)}
∂a(l)∂z(l+1)=w(l+1)
所以:
∂
C
∂
a
(
l
)
=
∂
C
∂
z
(
l
+
1
)
⋅
w
(
l
+
1
)
\frac{\partial C}{\partial a^{(l)}} = \frac{\partial C}{\partial z^{(l+1)}} \cdot w^{(l+1)}
∂a(l)∂C=∂z(l+1)∂C⋅w(l+1)
隐藏层加权输入
∂
C
∂
z
(
l
)
\frac{\partial C}{\partial z^{(l)}}
∂z(l)∂C的梯度:
∂
C
∂
z
(
l
)
=
∂
C
∂
a
(
l
)
⋅
σ
′
(
z
(
l
)
)
\frac{\partial C}{\partial z^{(l)}} = \frac{\partial C}{\partial a^{(l)}} \cdot \sigma'(z^{(l)})
∂z(l)∂C=∂a(l)∂C⋅σ′(z(l))
代入上一步结果:
∂
C
∂
z
(
l
)
=
(
∂
C
∂
z
(
l
+
1
)
⋅
w
(
l
+
1
)
)
⋅
σ
′
(
z
(
l
)
)
\frac{\partial C}{\partial z^{(l)}} = \left( \frac{\partial C}{\partial z^{(l+1)}} \cdot w^{(l+1)} \right) \cdot \sigma'(z^{(l)})
∂z(l)∂C=(∂z(l+1)∂C⋅w(l+1))⋅σ′(z(l))
隐藏层权重
∂
C
∂
w
(
l
)
\frac{\partial C}{\partial w^{(l)}}
∂w(l)∂C的梯度:
∂
C
∂
w
(
l
)
=
∂
C
∂
z
(
l
)
⋅
∂
z
(
l
)
∂
w
(
l
)
\frac{\partial C}{\partial w^{(l)}} = \frac{\partial C}{\partial z^{(l)}} \cdot \frac{\partial z^{(l)}}{\partial w^{(l)}}
∂w(l)∂C=∂z(l)∂C⋅∂w(l)∂z(l)
∂
z
(
l
)
∂
w
(
l
)
=
a
(
l
−
1
)
\frac{\partial z^{(l)}}{\partial w^{(l)}} = a^{(l-1)}
∂w(l)∂z(l)=a(l−1)
所以:
∂
C
∂
w
(
l
)
=
∂
C
∂
z
(
l
)
⋅
a
(
l
−
1
)
=
(
∂
C
∂
z
(
l
+
1
)
⋅
w
(
l
+
1
)
)
⋅
σ
′
(
z
(
l
)
)
⋅
a
(
l
−
1
)
\frac{\partial C}{\partial w^{(l)}} = \frac{\partial C}{\partial z^{(l)}} \cdot a^{(l-1)} = \left( \frac{\partial C}{\partial z^{(l+1)}} \cdot w^{(l+1)} \right) \cdot \sigma'(z^{(l)}) \cdot a^{(l-1)}
∂w(l)∂C=∂z(l)∂C⋅a(l−1)=(∂z(l+1)∂C⋅w(l+1))⋅σ′(z(l))⋅a(l−1)
📈 对于权重w的最终梯度公式
对于任意隐藏层
l
l
l中的权重
w
(
l
)
w^{(l)}
w(l),梯度公式为:
∂
C
∂
w
(
l
)
=
(
∂
C
∂
z
(
l
+
1
)
⋅
w
(
l
+
1
)
)
⋅
σ
′
(
z
(
l
)
)
⋅
a
(
l
−
1
)
\frac{\partial C}{\partial w^{(l)}} = \left( \frac{\partial C}{\partial z^{(l+1)}} \cdot w^{(l+1)} \right) \cdot \sigma'(z^{(l)}) \cdot a^{(l-1)}
∂w(l)∂C=(∂z(l+1)∂C⋅w(l+1))⋅σ′(z(l))⋅a(l−1)
对于输出层的权重梯度公式为:
∂
C
∂
w
(
L
)
=
(
a
(
L
)
−
y
)
⋅
σ
′
(
z
(
L
)
)
⋅
a
(
L
−
1
)
\frac{\partial C}{\partial w^{(L)}} = \left( a^{(L)}-y\right) \cdot \sigma'(z^{(L)}) \cdot a^{(L-1)}
∂w(L)∂C=(a(L)−y)⋅σ′(z(L))⋅a(L−1)
对于偏置量b的最终梯度公式:
由于 Z ( L ) = w ( L ) ⋅ a ( L − 1 ) + b ( L ) Z^{(L)} = w^{(L)} \cdot a^{(L-1)} + b^{(L)} Z(L)=w(L)⋅a(L−1)+b(L)
所以将上面公式中的z对于w求导结果
a
(
L
−
1
)
a^{(L-1)}
a(L−1) 都换成z对于b求导的1即可。
所以:
对于任意隐藏层
l
l
l中的权重
b
(
l
)
b^{(l)}
b(l),梯度公式为:
∂
C
∂
w
(
l
)
=
(
∂
C
∂
z
(
l
+
1
)
⋅
w
(
l
+
1
)
)
⋅
σ
′
(
z
(
l
)
)
\frac{\partial C}{\partial w^{(l)}} = \left( \frac{\partial C}{\partial z^{(l+1)}} \cdot w^{(l+1)} \right) \cdot \sigma'(z^{(l)})
∂w(l)∂C=(∂z(l+1)∂C⋅w(l+1))⋅σ′(z(l))
对于输出层的权重梯度公式为:
∂
C
∂
w
(
L
)
=
(
a
(
L
)
−
y
)
⋅
σ
′
(
z
(
L
)
)
\frac{\partial C}{\partial w^{(L)}} = \left( a^{(L)}-y\right) \cdot \sigma'(z^{(L)})
∂w(L)∂C=(a(L)−y)⋅σ′(z(L))
多个神经元的通用梯度公式
对于隐藏层中具有多个神经元的情况,通用梯度公式如下:
1. 对于任意隐藏层 l l l 中的权重 w i j ( l ) w_{ij}^{(l)} wij(l),梯度公式为:
∂ C ∂ w i j ( l ) = ( ∑ k ∂ C ∂ z k ( l + 1 ) ⋅ w j k ( l + 1 ) ) ⋅ σ ′ ( z j ( l ) ) ⋅ a i ( l − 1 ) \frac{\partial C}{\partial w_{ij}^{(l)}} = \left( \sum_{k} \frac{\partial C}{\partial z_k^{(l+1)}} \cdot w_{jk}^{(l+1)} \right) \cdot \sigma'(z_j^{(l)}) \cdot a_i^{(l-1)} ∂wij(l)∂C=(k∑∂zk(l+1)∂C⋅wjk(l+1))⋅σ′(zj(l))⋅ai(l−1)
2. 对于输出层的权重 w i j ( L ) w_{ij}^{(L)} wij(L),梯度公式为:
∂ C ∂ w i j ( L ) = ( a j ( L ) − y j ) ⋅ σ ′ ( z j ( L ) ) ⋅ a i ( L − 1 ) \frac{\partial C}{\partial w_{ij}^{(L)}} = (a_j^{(L)} - y_j) \cdot \sigma'(z_j^{(L)}) \cdot a_i^{(L-1)} ∂wij(L)∂C=(aj(L)−yj)⋅σ′(zj(L))⋅ai(L−1)
3. 对于任意隐藏层 l l l 中的偏置 b j ( l ) b_j^{(l)} bj(l),梯度公式为:
∂ C ∂ b j ( l ) = ( ∑ k ∂ C ∂ z k ( l + 1 ) ⋅ w j k ( l + 1 ) ) ⋅ σ ′ ( z j ( l ) ) \frac{\partial C}{\partial b_j^{(l)}} = \left( \sum_{k} \frac{\partial C}{\partial z_k^{(l+1)}} \cdot w_{jk}^{(l+1)} \right) \cdot \sigma'(z_j^{(l)}) ∂bj(l)∂C=(k∑∂zk(l+1)∂C⋅wjk(l+1))⋅σ′(zj(l))
4. 对于输出层的偏置 b j ( L ) b_j^{(L)} bj(L),梯度公式为:
∂ C ∂ b j ( L ) = ( a j ( L ) − y j ) ⋅ σ ′ ( z j ( L ) ) \frac{\partial C}{\partial b_j^{(L)}} = (a_j^{(L)} - y_j) \cdot \sigma'(z_j^{(L)}) ∂bj(L)∂C=(aj(L)−yj)⋅σ′(zj(L))