赞
踩
1
]
w
12
[
1
]
w
21
[
1
]
w
22
[
1
]
w
31
[
1
]
w
32
[
1
]
]
⋅
[
a
1
[
0
]
a
2
[
0
]
]
[
b
1
[
1
]
b
2
[
1
]
b
3
[
1
]
]
=
[
w
11
[
1
]
a
1
[
0
]
w
12
[
1
]
a
2
[
0
]
b
1
[
1
]
w
21
[
1
]
a
1
[
0
]
w
22
[
1
]
a
2
[
0
]
b
2
[
1
]
w
31
[
1
]
a
1
[
0
]
w
32
[
1
]
a
2
[
0
]
b
3
[
1
]
]
z{[1]}=\left[\begin{array}{lll}w_{11}{[1]} & w_{12}^{[1]} & \ w_{21}^{[1]} & w_{22}^{[1]} & \ w_{31}^{[1]} & w_{32}^{[1]}\end{array}\right] \cdot\left[\begin{array}{c}a_{1}^{[0]} \ a_{2}{[0]}\end{array}\right]+\left[\begin{array}{l}b_{1}{[1]} \ b_{2}^{[1]} \ b_{3}{[1]}\end{array}\right]=\left[\begin{array}{c}w_{11}{[1]} a_{1}{[0]}+w_{12}{[1]} a_{2}{[0]}+b_{1}{[1]} \ w_{21}^{[1]} a_{1}{[0]}+w_{22}{[1]}a_{2}{[0]}+b_{2}{[1]} \ w_{31}{[1]}a_{1}{[0]}+w_{32}{[1]}a_{2}{[0]}+b_{3}^{[1]}\end{array}\right]
z[1]=⎣
⎡w11[1]w21[1]w31[1]w12[1]w22[1]w32[1]⎦
⎤⋅[a1[0]a2[0]]+⎣
⎡b1[1]b2[1]b3[1]⎦
⎤=⎣
⎡w11[1]a1[0]+w12[1]a2[0]+b1[1]w21[1]a1[0]+w22[1]a2[0]+b2[1]w31[1]a1[0]+w32[1]a2[0]+b3[1]⎦
⎤
矩阵形状 (3,2) (2,1) (3,1) (3,1)
z
[
2
]
=
[
w
11
[
2
]
w
12
[
2
]
w
13
[
2
]
w
21
[
2
]
w
22
[
2
]
w
23
[
2
]
]
⋅
[
a
1
[
1
]
a
2
[
1
]
a
3
[
1
]
]
[
b
1
[
2
]
b
2
[
2
]
]
=
[
w
11
[
2
]
a
1
[
1
]
w
12
[
2
]
a
2
[
1
]
w
13
[
2
]
a
3
[
1
]
b
1
[
2
]
w
21
[
2
]
a
1
[
1
]
w
22
[
2
]
a
2
[
1
]
w
23
[
2
]
a
3
[
1
]
b
2
[
2
]
]
z{[2]}=\left[\begin{array}{ccc}w_{11}{[2]} & w_{12}^{[2]} & w_{13}^{[2]} \ w_{21}^{[2]} & w_{22}^{[2]} & w_{23}^{[2]}\end{array}\right] \cdot\left[\begin{array}{c}a_{1}^{[1]} \ a_{2}^{[1]} \ a_{3}{[1]}\end{array}\right]+\left[\begin{array}{c}b_{1}{[2]} \ b_{2}{[2]}\end{array}\right]=\left[\begin{array}{c}w_{11}{[2]} a_{1}{[1]}+w_{12}{[2]} a_{2}{[1]}+w_{13}{[2]} a_{3}{[1]}+b_{1}{[2]} \ w_{21}^{[2]} a_{1}{[1]}+w_{22}{[2]} a_{2}{[1]}+w_{23}{[2]} a_{3}{[1]}+b_{2}{[2]}\end{array}\right]
z[2]=[w11[2]w21[2]w12[2]w22[2]w13[2]w23[2]]⋅⎣
⎡a1[1]a2[1]a3[1]⎦
⎤+[b1[2]b2[2]]=[w11[2]a1[1]+w12[2]a2[1]+w13[2]a3[1]+b1[2]w21[2]a1[1]+w22[2]a2[1]+w23[2]a3[1]+b2[2]]
矩阵形状 (2,3) (3,1) (2,1) (2,1)
那么,前向传播过程可以表示为:
a
[
l
]
=
σ
(
w
[
l
]
a
[
l
−
1
]
b
[
l
]
)
a{[l]}=\sigma\left(w{[l]} a{[l-1]}+b{[l]}\right)
a[l]=σ(w[l]a[l−1]+b[l])
上述讲述的前向传播过程,输入层只有1个列向量,也就是只有一个输入样本。对于多个样本,输入不再是1个列向量,而是m个列向量,每1列表示一个输入样本。m个
a
[
l
−
1
]
a^{[l-1]}
a[l−1]列向量组成一个m列的矩阵
A
[
l
−
1
]
A^{[l-1]}
A[l−1]。
A
[
l
−
1
]
=
[
∣
∣
⋯
∣
a
[
l
−
1
]
(
1
)
a
[
l
−
1
]
(
2
)
…
a
[
l
−
1
]
(
m
)
∣
∣
…
∣
]
A^{[l-1]}=\left[\begin{array}{cccc}| & | & \cdots & | \ a^{l-1} & a^{l-1} & \dots & a^{l-1} \ | & | & \dots & |\end{array}\right]
A[l−1]=⎣
⎤
多样本输入的前向传播过程可以表示为:
Z
[
l
]
=
w
[
l
]
⋅
A
[
l
−
1
]
b
[
l
]
A
[
l
]
=
σ
(
Z
[
l
]
)
\begin{array}{c} Z{[l]}=w{[l]} \cdot A{[l-1]}+b{[l]} \ A{[l]}=\sigma\left(Z{[l]}\right) \end{array}
Z[l]=w[l]⋅A[l−1]+b[l]A[l]=σ(Z[l])
与单样本输入相比,多样本
w
[
l
]
w^{[l]}
w[l]和
b
[
l
]
b^{[l]}
b[l]的定义是完全一样的,不同的只是
Z
[
l
]
Z^{[l]}
Z[l]和
A
[
l
]
A^{[l]}
A[l]从1列变成m列,每1列表示一个样本的计算结果。
在有监督的机器学习算法中,我们希望在学习过程中最小化每个训练样例的误差。通过梯度下降等优化策略完成的,而这个误差来自损失函数。
损失函数用于单个训练样本,而成本函数是多个训练样本的平均损失。优化策略旨在最小化成本函数。下面例举几个常用的损失函数。
L
1
L_{1}
L1损失函数):
L
(
y
^
,
y
)
=
∣
y
−
y
^
∣
L(\hat{y},y)=|y-\hat{y}|
L(y,y)=∣y−y∣
y
y
y 表示真实值或期望值,
y
^
\hat{y}
y^ 表示预测值
L
2
L_{2}
L2损失函数):
L
(
y
^
,
y
)
=
(
y
−
y
^
)
2
L(\hat{y},y)=(y-\hat{y})^{2}
L(y,y)=(y−y)2
y
y
y 表示真实值或期望值,
y
^
\hat{y}
y^ 表示预测值
L
(
y
^
,
y
)
=
−
y
log
(
y
^
)
−
(
1
−
y
)
log
(
1
−
y
^
)
L(\hat{y}, y)=-y \log (\hat{y})-(1-y) \log (1-\hat{y})
L(y,y)=−ylog(y)−(1−y)log(1−y^)
y
y
y 表示真实值或期望值,
y
^
\hat{y}
y^ 表示预测值
反向传播的基本思想:通过计算输出层与期望值之间的误差来调整网络参数,使得误差变小(最小化损失函数或成本函数)。反向传播基于四个基础等式,非常简洁优美,但想要理解透彻还是挺烧脑的。
假设函数
f
:
R
n
×
1
→
R
f:R^{n \times 1} \rightarrow R
f:Rn×1→R 将输入的列向量(shape:
n
×
1
n \times 1
n×1 )映射为一个实数。那么,函数
f
f
f 的梯度定义为:
∇
x
f
(
x
)
=
[
∂
f
(
x
)
∂
x
1
∂
f
(
x
)
∂
x
2
⋮
∂
f
(
x
)
∂
x
n
]
\nabla_{x} f(x)=\left[∂f(x)∂x1 ∂f(x)∂x2 ⋮ ∂f(x)∂xn\right]
∇xf(x)=⎣
⎡∂x1∂f(x)∂x2∂f(x)⋮∂xn∂f(x)⎦
⎤
同理,假设函数
f
:
R
m
×
n
→
R
f: R^{m \times n} \rightarrow R
f:Rm×n→R 将输入的矩阵(shape:
m
×
n
m \times n
m×n )映射为一个实数。函数
f
f
f 的梯度定义为:
∇
A
f
(
A
)
=
[
∂
f
(
A
)
∂
A
11
∂
f
(
A
)
∂
A
12
…
∂
f
(
A
)
∂
A
13
∂
f
(
A
)
∂
A
21
∂
f
(
A
)
∂
A
22
…
∂
f
(
A
)
∂
A
2
n
⋮
⋮
⋱
⋮
∂
f
(
A
)
∂
A
m
1
∂
f
(
A
)
∂
A
m
2
…
∂
f
(
A
)
∂
A
m
n
]
\nabla_{A} f(A)=\left[∂f(A)∂A11∂f(A)∂A12…∂f(A)∂A13 ∂f(A)∂A21∂f(A)∂A22…∂f(A)∂A2n ⋮⋮⋱⋮ ∂f(A)∂Am1∂f(A)∂Am2…∂f(A)∂Amn\right]
∇Af(A)=⎣
⎡∂A11∂f(A)∂A21∂f(A)⋮∂Am1∂f(A)∂A12∂f(A)∂A22∂f(A)⋮∂Am2∂f(A)……⋱…∂A13∂f(A)∂A2n∂f(A)⋮∂Amn∂f(A)⎦
⎤
可以简化为:
(
∇
A
f
(
A
)
)
i
j
=
∂
f
(
A
)
∂
A
i
j
\left(\nabla_{A} f(A)\right)_{i j}=\frac{\partial f(A)}{\partial A_{i j}}
(∇Af(A))ij=∂Aij∂f(A)
注意:梯度求解的前提是函数
f
f
f 返回的必须是一个实数,如果函数返回的是一个矩阵或者向量,是没有办法求解梯度的。例如,函数
f
(
A
)
=
∑
i
=
0
m
∑
j
=
0
n
A
i
j
2
f(A) =\sum_{i=0}^{m} \sum_{j=0}^{n} A_{i j}^{2}
f(A)=∑i=0m∑j=0nAij2,函数返回一个实数,可以求解梯度矩阵。如果
f
(
x
)
=
A
x
(
A
∈
R
m
×
n
,
x
∈
R
n
×
1
)
,
f(x)=A x\left(A \in R^{m \times n}, x \in R^{n \times 1}\right),
f(x)=Ax(A∈Rm×n,x∈Rn×1), 函数返回一个m行的列向量,就不能对
f
f
f 求解梯度矩阵。
矩阵相乘
矩阵
A
=
[
1
2
3
4
]
A=\left[12 34\right]
A=[1324],矩阵
B
=
[
−
1
−
2
−
3
−
4
]
B=\left[−1−2 −3−4\right]
B=[−1−3−2−4]
A
B
=
[
1
×
−
1
2
×
−
3
1
×
−
2
2
×
−
4
3
×
−
1
4
×
−
3
3
×
−
2
4
×
−
4
]
=
[
−
7
−
10
−
15
−
22
]
A B=\left[1×−1+2×−31×−2+2×−4 3×−1+4×−33×−2+4×−4\right]=\left[−7−10 −15−22\right]
AB=[1×−1+2×−33×−1+4×−31×−2+2×−43×−2+4×−4]=[−7−15−10−22]
矩阵对应元素相乘
使用符号
⊙
\odot
⊙表示:
A
⊙
B
=
[
1
×
−
1
2
×
−
2
3
×
−
3
4
×
−
4
]
=
[
−
1
−
4
−
9
−
16
]
A \odot B=\left[1×−12×−2 3×−34×−4\right]=\left[−1−4 −9−16\right]
A⊙B=[1×−13×−32×−24×−4]=[−1−9−4−16]
从几何意义,梯度矩阵代表了函数增加最快的方向,沿着梯度相反的方向可以更快找到最小值。
反向传播的过程就是利用梯度下降法原理,逐步找到成本函数的最小值,得到最终的模型参数。
要想最小化成本函数,需要求解神经网络中的权重
w
w
w 和偏置
b
b
b 的梯度,再用梯度下降法优化参数。求解梯度也就是计算偏导数
∂
L
(
a
[
l
]
,
y
)
∂
w
j
k
[
l
]
\frac{\partial L\left(a^{[l]}, y\right)}{\partial w_{j k}^{[l]}}
∂wjk[l]∂L(a[l],y) 和
∂
L
(
a
[
l
]
,
y
)
∂
b
j
[
l
]
\frac{\partial L\left(a^{[l]}, y\right)}{\partial b_{j}^{[l]}}
∂bj[l]∂L(a[l],y) 。为了计算这些偏导数,引入一个中间变量
δ
j
[
l
]
\delta_{j}^{[l]}
δj[l],它表示网络中第
l
t
h
l^{t h}
lth 层第
j
t
h
j^{t h}
jth 个神经元的误差。反向传播能够计算出误差
δ
j
[
l
]
,
\delta_{j}^{[l]},
δj[l], 再根据链式法则求出
∂
L
(
a
[
l
]
,
y
)
∂
w
j
k
[
l
]
\frac{\partial L\left(a^{[l]}, y\right)}{\partial w_{j k}^{[l]}}
∂wjk[l]∂L(a[l],y) 和
∂
L
(
a
[
l
]
,
y
)
∂
b
j
l
\frac{\partial L\left(a^{[l]}, y\right)}{\partial b_{j}^{l}}
∂bjl∂L(a[l],y) 。
定义网络中第
l
l
l 层第
j
j
j 个神经元的误差为
δ
j
[
l
]
\delta_{j}^{[l]}
δj[l] :
δ
j
[
l
]
=
∂
L
(
a
[
L
]
,
y
)
∂
z
j
[
l
]
\delta_{j}^{[l]}=\frac{\partial L\left(a^{[L]},y\right)}{\partial z_{j}^{[l]}}
δj[l]=∂zj[l]∂L(a[L],y)
其中
L
(
a
[
L
]
,
y
)
L(a^{[L]},y)
L(a[L],y) 表示损失函数,
y
y
y 表示真实值,
a
[
L
]
a^{[L]}
a[L] 表示输出层的预测值。
每一层的误差向量可以表示为:
δ
[
l
]
=
[
δ
1
[
l
]
δ
2
[
l
]
⋮
δ
n
[
l
]
]
\delta{[l]}=\left[\begin{array}{c}\delta_{1}{[l]} \ \delta_{2}^{[l]} \ \vdots \ \delta_{n}^{[l]}\end{array}\right]
δ[l]=⎣
⎡δ1[l]δ2[l]⋮δn[l]⎦
⎤
δ
j
[
L
]
=
∂
L
∂
a
j
[
L
]
σ
′
(
z
j
[
L
]
)
\delta_{j}^{[L]}=\frac{\partial L}{\partial a_{j}^{[L]}} \sigma{\prime}\left(z_{j}{[L]}\right)
δj[L]=∂aj[L]∂Lσ′(zj[L])
L表示输出层层数。以下用
∂
L
\partial L
∂L 表示
∂
L
(
a
[
L
]
,
y
)
\partial L\left(a^{[L]}, y\right)
∂L(a[L],y)
写成矩阵形式是:
δ
[
L
]
=
[
∂
L
∂
a
1
[
L
]
∂
L
∂
a
2
[
L
]
⋮
∂
L
∂
a
j
[
L
]
]
⊙
[
σ
′
(
z
1
[
L
]
)
σ
′
(
z
2
[
L
]
)
⋮
σ
′
(
z
j
[
L
]
)
]
\delta^{[L]}= \left[∂L∂a[L]1 ∂L∂a[L]2 ⋮ ∂L∂a[L]j\right] \odot\left[\begin{array}{c}\sigma{\prime}\left(z_{1}{[L]}\right) \ \sigma{\prime}\left(z_{2}{[L]}\right) \ \vdots \ \sigma{\prime}\left(z_{j}{[L]}\right)\end{array}\right]
δ[L]=⎣
⎡∂a1[L]∂L∂a2[L]∂L⋮∂aj[L]∂L⎦
⎤⊙⎣
⎡σ′(z1[L])σ′(z2[L])⋮σ′(zj[L])⎦
⎤
表示成公式:
δ
[
L
]
=
∇
a
L
⊙
σ
′
(
z
[
L
]
)
\delta^{[L]}=\nabla_{a} L \odot \sigma{\prime}\left(z{[L]}\right)
δ[L]=∇aL⊙σ′(z[L])
计算输出层的误差
δ
j
[
L
]
=
∂
L
∂
z
j
[
L
]
\delta_{j}^{[L]}=\frac{\partial L}{\partial z_{j}^{[L]}}
δj[L]=∂zj[L]∂L ,根据链式法则
δ
j
[
L
]
=
∑
k
∂
L
∂
a
k
[
L
]
∂
a
k
[
L
]
∂
z
j
[
L
]
\delta_{j}^{[L]}=\sum_{k} \frac{\partial L}{\partial a_{k}^{[L]}} \frac{\partial a_{k}^{[L]}}{\partial z_{j}^{[L]}}
δj[L]=∑k∂ak[L]∂L∂zj[L]∂ak[L]
输出层不一定只有一个神经元,可能有多个神经元。成本函数是每个输出神经元的损失函数之和,每个输出神经元的误差与其它神经元没有关系,所以只有
k
=
j
k=j
k=j 的时候值不是0。
当
k
≠
j
k\neq j
k=j 时,
∂
L
∂
z
j
[
L
]
=
0
\frac{\partial L}{\partial z_{j}^{[L]}}=0
∂zj[L]∂L=0 ,简化误差
δ
j
[
L
]
\delta_{j}^{[L]}
δj[L] ,得到
δ
j
[
L
]
=
∂
L
∂
a
j
[
L
]
∂
a
j
[
L
]
∂
z
j
[
L
]
\delta_{j}^{[L]}=\frac{\partial L}{\partial a_{j}^{[L]}} \frac{\partial a_{j}^{[L]}}{\partial z_{j}^{[L]}}
δj[L]=∂aj[L]∂L∂zj[L]∂aj[L]
σ
\sigma
σ 表示激活函数,由
a
j
[
L
]
=
σ
(
z
j
[
L
]
)
a_{j}{[L]}=\sigma\left(z_{j}{[L]}\right)
aj[L]=σ(zj[L]),计算出
∂
a
j
[
L
]
∂
z
j
[
L
]
=
σ
′
(
z
j
[
L
]
)
\frac{\partial a_{j}^{[L]}}{\partial z_{j}{[L]}}=\sigma{\prime}\left(z_{j}^{[L]}\right)
∂zj[L]∂aj[L]=σ′(zj[L]) ,代入最后得到
δ
j
[
L
]
=
∂
L
∂
a
j
[
L
]
σ
′
(
z
j
[
L
]
)
\delta_{j}^{[L]}=\frac{\partial L}{\partial a_{j}^{[L]}} \sigma{\prime}\left(z_{j}{[L]}\right)
δj[L]=∂aj[L]∂Lσ′(zj[L])
δ
j
[
l
]
=
∑
k
w
k
j
[
l
1
]
δ
k
[
l
1
]
σ
′
(
z
j
[
l
]
)
\begin{array}{c} \delta_{j}^{[l]}=\sum_{k} w_{k j}^{[l+1]} \delta_{k}^{[l+1]} \sigma{\prime}\left(z_{j}{[l]}\right) \end{array}
δj[l]=∑kwkj[l+1]δk[l+1]σ′(zj[l])
写成矩阵形式:
δ
[
l
]
=
[
[
w
11
[
l
]
w
12
[
l
]
…
w
1
k
[
l
]
w
21
[
l
]
w
22
[
l
]
…
w
2
k
[
l
]
⋮
⋮
⋱
⋮
w
j
1
[
l
]
w
j
2
[
l
]
…
w
j
k
[
l
]
]
[
δ
1
[
l
1
]
δ
2
[
l
1
]
⋮
δ
k
[
l
1
]
]
]
⊙
[
σ
′
(
z
1
[
l
]
)
σ
′
(
z
2
[
l
]
)
⋮
σ
′
(
z
j
[
l
]
)
]
\delta^{[l]}=\left[\begin{array}{lll} \left[\begin{array}{lll}w_{11}^{[l]} & w_{12}^{[l]} & \dots & w_{1k}^{[l]} \ w_{21}^{[l]} & w_{22}^{[l]} & \dots & w_{2k}^{[l]} \ \vdots & \vdots & \ddots & \vdots\ w_{j1}^{[l]} & w_{j2}^{[l]} & \dots & w_{jk}^{[l]} \end{array}\right] \left[δ[l+1]1 δ[l+1]2 ⋮ δ[l+1]k\right] \end{array}\right] \odot\left[\begin{array}{c}\sigma{\prime}\left(z_{1}{[l]}\right) \ \sigma{\prime}\left(z_{2}{[l]}\right) \ \vdots \\sigma{\prime}\left(z_{j}{[l]}\right)\end{array}\right]
δ[l]=⎣
⎡⎣
⎡w11[l]w21[l]⋮wj1[l]w12[l]w22[l]⋮wj2[l]……⋱…w1k[l]w2k[l]⋮wjk[l]⎦
⎤⎣
⎡δ1[l+1]δ2[l+1]⋮δk[l+1]⎦
⎤⎦
⎤⊙⎣
⎡σ′(z1[l])σ′(z2[l])⋮σ′(zj[l])⎦
⎤
矩阵形状:(j,k) * (k,1)
⊙
\odot
⊙ (j,1) = (j,1)
权重矩阵的形状从(k,j)转置变成(j,k)。
表示成公式:
δ
[
l
]
=
[
w
[
l
1
]
T
δ
[
l
1
]
]
⊙
σ
′
(
z
[
l
]
)
\delta{[l]}=\left[w{[l+1]^{T}} \delta^{[l+1]}\right] \odot \sigma{\prime}\left(z{[l]}\right)
δ[l]=[w[l+1]Tδ[l+1]]⊙σ′(z[l])
推导
z
k
[
l
1
]
=
∑
j
w
k
j
[
l
1
]
a
j
[
l
]
b
k
[
l
1
]
=
∑
j
w
k
j
[
l
1
]
σ
(
z
j
[
l
]
)
b
k
[
l
1
]
z_{k}^{[l+1]}=\sum_{j} w_{k j}^{[l+1]} a_{j}{[l]}+b_{k}{[l+1]}=\sum_{j} w_{k j}^{[l+1]} \sigma\left(z_{j}{[l]}\right)+b_{k}{[l+1]}
zk[l+1]=∑jwkj[l+1]aj[l]+bk[l+1]=∑jwkj[l+1]σ(zj[l])+bk[l+1]
对
z
j
[
l
]
z_{j}^{[l]}
zj[l] 求偏导
∂
z
k
[
l
1
]
∂
z
j
[
l
]
=
w
k
j
[
l
1
]
σ
′
(
z
j
[
l
]
)
\frac{\partial z_{k}^{[l+1]}}{\partial z_{j}^{[l]}}=w_{k j}^{[l+1]} \sigma{\prime}\left(z_{j}{[l]}\right)
∂zj[l]∂zk[l+1]=wkj[l+1]σ′(zj[l])
根据链式法则
δ
j
[
l
]
=
∂
L
∂
z
j
[
l
]
=
∂
L
∂
z
k
[
l
1
]
∂
z
k
[
l
1
]
∂
z
j
[
l
]
=
∑
k
w
k
j
[
l
1
]
δ
k
[
l
1
]
σ
′
(
z
j
[
l
]
)
\delta_{j}^{[l]}=\frac{\partial L}{\partial z_{j}^{[l]}}=\frac{\partial L}{\partial z_{k}^{[l+1]}}\frac{\partial z_{k}^{[l+1]}}{\partial z_{j}^{[l]}}=\sum_{k} w_{k j}^{[l+1]} \delta_{k}^{[l+1]} \sigma{\prime}\left(z_{j}{[l]}\right)
δj[l]=∂zj[l]∂L=∂zk[l+1]∂L∂zj[l]∂zk[l+1]=∑kwkj[l+1]δk[l+1]σ′(zj[l])
∂
L
∂
b
j
[
l
]
=
δ
j
[
l
]
∂
L
∂
w
j
k
[
l
]
=
a
k
[
l
−
1
]
δ
j
[
l
]
\begin{array}{c} \frac{\partial L}{\partial b_{j}{[l]}}=\delta_{j}{[l]} \ \frac{\partial L}{\partial w_{j k}{[l]}}=a_{k}{[l-1]} \delta_{j}^{[l]} \end{array}
∂bj[l]∂L=δj[l]∂wjk[l]∂L=ak[l−1]δj[l]
写成矩阵形式:
∂
L
∂
b
[
l
]
=
[
δ
1
[
l
]
δ
2
[
l
]
⋮
δ
j
[
l
]
]
=
δ
[
l
]
\frac{\partial L}{\partial b{[l]}}=\left[\begin{array}{c}\delta_{1}{[l]} \ \delta_{2}^{[l]} \ \vdots \ \delta_{j}{[l]}\end{array}\right]=\delta{[l]}
∂b[l]∂L=⎣
⎡δ1[l]δ2[l]⋮δj[l]⎦
⎤=δ[l]
矩阵形状:(j,1)
∂
L
∂
w
[
l
]
=
[
δ
1
[
l
]
δ
2
[
l
]
⋮
δ
j
[
l
]
]
[
a
1
[
l
]
a
2
[
l
]
…
a
k
[
l
]
]
\frac{\partial L}{\partial w{[l]}}=\left[\begin{array}{c}\delta_{1}{[l]} \ \delta_{2}^{[l]} \ \vdots \ \delta_{j}^{[l]}\end{array}\right] \left[a[l]1a[l]2…a[l]k\right]
∂w[l]∂L=⎣
⎡δ1[l]δ2[l]⋮δj[l]⎦
⎤[a1[l]a2[l]…ak[l]]
矩阵形状:(j,1) * (1,k) = (j,k)
注意:
∂
L
∂
w
[
l
]
\frac{\partial L}{\partial w^{[l]}}
∂w[l]∂L 是一个dim
(
δ
[
l
]
)
\left(\delta^{[l]}\right)
(δ[l]) 行
dim
(
a
[
l
−
1
]
)
\operatorname{dim}\left(a^{[l-1]}\right)
dim(a[l−1]) 列的矩阵, 和
w
[
l
]
w^{[l]}
w[l] 的维度一致 ;$ \frac{\partial L}{\partial b^{[l]}}$ 是一个维度为
dim
(
δ
[
l
]
)
\operatorname{dim}\left(\delta^{[l]}\right)
dim(δ[l]) 的列向量
表示成公式:
∂
L
∂
b
[
l
]
=
δ
[
l
]
∂
L
∂
w
[
l
]
=
δ
[
l
]
a
[
l
−
1
]
T
\begin{array}{c} \frac{\partial L}{\partial b{[l]}}=\delta{[l]} \ \frac{\partial L}{\partial w{[l]}}=\delta{[l]} a^{[l-1] T} \end{array}
∂b[l]∂L=δ[l]∂w[l]∂L=δ[l]a[l−1]T
推导
z
j
[
l
]
=
∑
k
w
j
k
[
l
]
a
k
[
l
−
1
]
b
k
[
l
]
z_{j}^{[l]}=\sum_{k} w_{j k}^{[l]} a_{k}{[l-1]}+b_{k}{[l]}
zj[l]=∑kwjk[l]ak[l−1]+bk[l]
L 对
b
j
[
l
]
b_{j}^{[l]}
bj[l] 求偏导,根据链式法则得到
∂
L
∂
b
j
[
l
]
=
∂
L
∂
z
j
[
l
]
∂
z
j
[
l
]
b
j
[
l
]
=
∂
L
∂
z
j
[
l
]
∗
1
=
δ
j
[
l
]
\frac{\partial L}{\partial b_{j}^{[l]}}=\frac{\partial L}{\partial z_{j}^{[l]}} \frac{\partial z_{j}{[l]}}{b_{j}{[l]}}= \frac{\partial L}{\partial z_{j}^{[l]}} * 1 = \delta_{j}^{[l]}
∂bj[l]∂L=∂zj[l]∂Lbj[l]∂zj[l]=∂zj[l]∂L∗1=δj[l]
L 对
w
j
k
[
l
]
w_{j k}^{[l]}
wjk[l] 求偏导,根据链式法则得到
∂
L
∂
w
j
k
[
l
]
=
∂
L
∂
z
j
[
l
]
∂
z
j
[
l
]
w
j
k
[
l
]
=
a
k
[
l
−
1
]
δ
j
[
l
]
\frac{\partial L}{\partial w_{j k}^{[l]}}=\frac{\partial L}{\partial z_{j}^{[l]}} \frac{\partial z_{j}^{[l]}}{w_{j k}{[l]}}=a_{k}{[l-1]} \delta_{j}^{[l]}
∂wjk[l]∂L=∂zj[l]∂Lwjk[l]∂zj[l]=ak[l−1]δj[l]
根据梯度下降法原理,朝着梯度的反方向更新参数
b
j
[
l
]
←
b
j
[
l
]
−
α
∂
L
∂
b
j
[
l
]
w
j
k
[
l
]
←
w
j
k
[
l
]
−
α
∂
L
∂
w
j
k
[
l
]
b[l]j←b[l]j−α∂L∂b[l]j w[l]jk←w[l]jk−α∂L∂w[l]jk
bj[l]←bj[l]−α∂bj[l]∂Lwjk[l]←wjk[l]−α∂wjk[l]∂L
写成矩阵形式:
b
[
l
]
←
b
[
l
]
−
α
∂
L
∂
b
[
l
]
w
[
l
]
←
w
[
l
]
−
α
∂
L
∂
w
[
l
]
b[l]←b[l]−α∂L∂b[l] w[l]←w[l]−α∂L∂w[l]
b[l]←b[l]−α∂b[l]∂Lw[l]←w[l]−α∂w[l]∂L
这里的
α
\alpha
α 指的是学习率。学习率决定了反向传播过程中梯度下降的步长。
计算输出层误差
计算隐藏层误差
隐藏层误差公式写成矩阵形式
δ
[
l
]
=
[
w
[
l
1
]
T
δ
[
l
1
]
]
⊙
σ
′
(
z
[
l
]
)
\delta{[l]}=\left[w{[l+1]^{T}} \delta^{[l+1]}\right] \odot \sigma{\prime}\left(z{[l]}\right)
δ[l]=[w[l+1]Tδ[l+1]]⊙σ′(z[l]) 时, 权重矩阵需要转置。上面两幅图,直观地解释了转置的原因。
计算参数变化率
最后更新每层的参数。
说明 | 公式 |
---|---|
输出层误差 |
δ
[
L
]
=
∇
a
L
⊙
σ
′
(
z
[
L
]
)
\delta^{[L]}=\nabla_{a} L \odot \sigma{\prime}\left(z{[L]}\right)
δ[L]=∇aL⊙σ′(z[L]) |
| 隐含层误差 |
δ
[
l
]
=
[
w
[
l
1
]
T
δ
[
l
1
]
]
⊙
σ
′
(
z
[
l
]
)
\delta{[l]}=\left[w{[l+1]^{T}} \delta^{[l+1]}\right] \odot \sigma{\prime}\left(z{[l]}\right)
δ[l]=[w[l+1]Tδ[l+1]]⊙σ′(z[l]) |
| 参数变化率 |
∂
L
∂
b
[
l
]
=
δ
[
l
]
∂
L
∂
w
[
l
]
=
δ
[
l
]
a
[
l
−
1
]
T
\begin{array}{c}\frac{\partial L}{\partial b{[l]}}=\delta{[l]} \\frac{\partial L}{\partial w{[l]}}=\delta{[l]} a^{[l-1] T}\end{array}
∂b[l]∂L=δ[l]∂w[l]∂L=δ[l]a[l−1]T |
| 参数更新 |
b
[
l
]
←
b
[
l
]
−
α
∂
L
∂
b
[
l
]
w
[
l
]
←
w
[
l
]
−
α
∂
L
∂
w
[
l
]
b[l]←b[l]−α∂L∂b[l]\w[l]←w[l]−α∂L∂w[l]
b[l]←b[l]−α∂b[l]∂Lw[l]←w[l]−α∂w[l]∂L |
多样本输入使用的成本函数与单样本不同。假设单样本的成本函数是交叉熵损失函数。
L
(
a
,
y
)
=
−
[
y
⋅
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
) * (1,k) = (j,k)
注意:
∂
L
∂
w
[
l
]
\frac{\partial L}{\partial w^{[l]}}
∂w[l]∂L 是一个dim
(
δ
[
l
]
)
\left(\delta^{[l]}\right)
(δ[l]) 行
dim
(
a
[
l
−
1
]
)
\operatorname{dim}\left(a^{[l-1]}\right)
dim(a[l−1]) 列的矩阵, 和
w
[
l
]
w^{[l]}
w[l] 的维度一致 ;$ \frac{\partial L}{\partial b^{[l]}}$ 是一个维度为
dim
(
δ
[
l
]
)
\operatorname{dim}\left(\delta^{[l]}\right)
dim(δ[l]) 的列向量
表示成公式:
∂
L
∂
b
[
l
]
=
δ
[
l
]
∂
L
∂
w
[
l
]
=
δ
[
l
]
a
[
l
−
1
]
T
\begin{array}{c} \frac{\partial L}{\partial b{[l]}}=\delta{[l]} \ \frac{\partial L}{\partial w{[l]}}=\delta{[l]} a^{[l-1] T} \end{array}
∂b[l]∂L=δ[l]∂w[l]∂L=δ[l]a[l−1]T
推导
z
j
[
l
]
=
∑
k
w
j
k
[
l
]
a
k
[
l
−
1
]
b
k
[
l
]
z_{j}^{[l]}=\sum_{k} w_{j k}^{[l]} a_{k}{[l-1]}+b_{k}{[l]}
zj[l]=∑kwjk[l]ak[l−1]+bk[l]
L 对
b
j
[
l
]
b_{j}^{[l]}
bj[l] 求偏导,根据链式法则得到
∂
L
∂
b
j
[
l
]
=
∂
L
∂
z
j
[
l
]
∂
z
j
[
l
]
b
j
[
l
]
=
∂
L
∂
z
j
[
l
]
∗
1
=
δ
j
[
l
]
\frac{\partial L}{\partial b_{j}^{[l]}}=\frac{\partial L}{\partial z_{j}^{[l]}} \frac{\partial z_{j}{[l]}}{b_{j}{[l]}}= \frac{\partial L}{\partial z_{j}^{[l]}} * 1 = \delta_{j}^{[l]}
∂bj[l]∂L=∂zj[l]∂Lbj[l]∂zj[l]=∂zj[l]∂L∗1=δj[l]
L 对
w
j
k
[
l
]
w_{j k}^{[l]}
wjk[l] 求偏导,根据链式法则得到
∂
L
∂
w
j
k
[
l
]
=
∂
L
∂
z
j
[
l
]
∂
z
j
[
l
]
w
j
k
[
l
]
=
a
k
[
l
−
1
]
δ
j
[
l
]
\frac{\partial L}{\partial w_{j k}^{[l]}}=\frac{\partial L}{\partial z_{j}^{[l]}} \frac{\partial z_{j}^{[l]}}{w_{j k}{[l]}}=a_{k}{[l-1]} \delta_{j}^{[l]}
∂wjk[l]∂L=∂zj[l]∂Lwjk[l]∂zj[l]=ak[l−1]δj[l]
根据梯度下降法原理,朝着梯度的反方向更新参数
b
j
[
l
]
←
b
j
[
l
]
−
α
∂
L
∂
b
j
[
l
]
w
j
k
[
l
]
←
w
j
k
[
l
]
−
α
∂
L
∂
w
j
k
[
l
]
b[l]j←b[l]j−α∂L∂b[l]j w[l]jk←w[l]jk−α∂L∂w[l]jk
bj[l]←bj[l]−α∂bj[l]∂Lwjk[l]←wjk[l]−α∂wjk[l]∂L
写成矩阵形式:
b
[
l
]
←
b
[
l
]
−
α
∂
L
∂
b
[
l
]
w
[
l
]
←
w
[
l
]
−
α
∂
L
∂
w
[
l
]
b[l]←b[l]−α∂L∂b[l] w[l]←w[l]−α∂L∂w[l]
b[l]←b[l]−α∂b[l]∂Lw[l]←w[l]−α∂w[l]∂L
这里的
α
\alpha
α 指的是学习率。学习率决定了反向传播过程中梯度下降的步长。
计算输出层误差
计算隐藏层误差
隐藏层误差公式写成矩阵形式
δ
[
l
]
=
[
w
[
l
1
]
T
δ
[
l
1
]
]
⊙
σ
′
(
z
[
l
]
)
\delta{[l]}=\left[w{[l+1]^{T}} \delta^{[l+1]}\right] \odot \sigma{\prime}\left(z{[l]}\right)
δ[l]=[w[l+1]Tδ[l+1]]⊙σ′(z[l]) 时, 权重矩阵需要转置。上面两幅图,直观地解释了转置的原因。
计算参数变化率
最后更新每层的参数。
说明 | 公式 |
---|---|
输出层误差 |
δ
[
L
]
=
∇
a
L
⊙
σ
′
(
z
[
L
]
)
\delta^{[L]}=\nabla_{a} L \odot \sigma{\prime}\left(z{[L]}\right)
δ[L]=∇aL⊙σ′(z[L]) |
| 隐含层误差 |
δ
[
l
]
=
[
w
[
l
1
]
T
δ
[
l
1
]
]
⊙
σ
′
(
z
[
l
]
)
\delta{[l]}=\left[w{[l+1]^{T}} \delta^{[l+1]}\right] \odot \sigma{\prime}\left(z{[l]}\right)
δ[l]=[w[l+1]Tδ[l+1]]⊙σ′(z[l]) |
| 参数变化率 |
∂
L
∂
b
[
l
]
=
δ
[
l
]
∂
L
∂
w
[
l
]
=
δ
[
l
]
a
[
l
−
1
]
T
\begin{array}{c}\frac{\partial L}{\partial b{[l]}}=\delta{[l]} \\frac{\partial L}{\partial w{[l]}}=\delta{[l]} a^{[l-1] T}\end{array}
∂b[l]∂L=δ[l]∂w[l]∂L=δ[l]a[l−1]T |
| 参数更新 |
b
[
l
]
←
b
[
l
]
−
α
∂
L
∂
b
[
l
]
w
[
l
]
←
w
[
l
]
−
α
∂
L
∂
w
[
l
]
b[l]←b[l]−α∂L∂b[l]\w[l]←w[l]−α∂L∂w[l]
b[l]←b[l]−α∂b[l]∂Lw[l]←w[l]−α∂w[l]∂L |
多样本输入使用的成本函数与单样本不同。假设单样本的成本函数是交叉熵损失函数。
L
(
a
,
y
)
=
−
[
y
⋅
[外链图片转存中…(img-IkWIL8B5-4702036807265)]
[外链图片转存中…(img-veOE0yiz-4702036807265)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。