神经网络中,图形常以“层”体现,“层”中的参数对应为一“组”(向量),而神经网络的逆向传播算法就是梯度的链式法则所体现的传播特点,这里我们再从这一角度来讨论梯度。
复合函数梯度的链式法则式(A58)、式(A59)的图形助记。
神经网络中的梯度
我们归纳总结一下函数的梯度。
(1)当
y
=
f
(
x
)
y=f(x)
y=f(x)(自变量为标量,因变量为标量)时
∇
x
y
=
∂
y
∂
x
\begin{align} {\nabla}_{x}y=\frac{\partial y}{\partial x} \tag{A63} \end{align}
∇xy=∂x∂y(A63)
(2)当
y
=
f
(
x
)
y=f(\boldsymbol{x})
y=f(x)(自变量为向量,因变量为标量)时,即【西瓜书附录式(A.20)】。
∇
x
y
=
∂
y
∂
x
=
(
[
∂
y
∂
x
i
]
)
\begin{align} {\nabla}_{\boldsymbol{x}}y %=(D_{\boldsymbol{x}}y)^{mathrm{T}} =\frac{\partial y}{\partial \boldsymbol{x}} =\left( \left[\frac{\partial y}{\partial x_i} \right] \right) \tag{A64} \end{align}
∇xy=∂x∂y=([∂xi∂y])(A64)
要学会判断含向量或矩阵的表达式是否为标量,如,
x
T
a
\boldsymbol{x}^\mathrm{T}\boldsymbol{a}
xTa为标量,由此有
∂
x
T
a
∂
x
=
(
[
∂
∑
i
=
1
n
x
i
a
i
∂
x
i
]
)
=
(
[
a
i
]
)
=
a
\begin{align} \frac{\partial \boldsymbol{x}^\mathrm{T}\boldsymbol{a}}{\partial \boldsymbol{x}} =\left( \left[\frac{\partial \sum_{i=1}^nx_ia_i}{\partial x_i} \right] \right) =\left( \left[a_i \right] \right) =\boldsymbol{a} \tag{A65} \end{align}
∂x∂xTa=([∂xi∂∑i=1nxiai])=([ai])=a(A65)
这即是【西瓜书附录式(A.22)】(注意:该式中的向量
x
\boldsymbol{x}
x改为矩阵
X
\mathbf{X}
X并不成立)。
我们将BP神经网络的隐层抽象成一条线、输出结点视为顶点,这样任一个隐层与输出结点构成一个三角形(如图A.1所示),第一个隐层与顶点构成的三角形最大,其余隐层为该三角形中平行于底的截线段(如图图A.3所示),两隐层截三角形为梯形(如图图A.2所示),后续我们以这种形象的方式进行理解与记忆。
注1:实际上是将神经网络转化为计算图后,再进行这种形象化。
注2:这里博主首创了一套图形助记符号(包含若干图:图A.1、图A.2、图图A.3及图A.4),利用它形象化地助记梯度及其链式法则,能很方便地搞定BP神经网络。
我们以图A.1来辅助记忆:(a)梯度
∇
x
y
{\nabla}_{\boldsymbol{x}}y
∇xy以三角形表示:底边
x
\boldsymbol{x}
x的
n
n
n个点与顶点
y
y
y的连线有
n
×
1
n\times 1
n×1条,代表这个梯度向量式(A64);(b)表示自变量向量
x
\boldsymbol{x}
x分拆成两个(
x
1
;
x
2
\boldsymbol{x}_1;\boldsymbol{x}_2
x1;x2)或更多个子向量,对每个子向量
x
k
\boldsymbol{x}_k
xk式(A64)仍成立:
∇
x
k
y
=
∂
y
∂
x
k
=
(
[
∂
y
∂
x
i
]
)
(
x
i
∈
x
k
)
\begin{align} {\nabla}_{\boldsymbol{x}_k}y =\frac{\partial y}{\partial \boldsymbol{x}_k} =\left( \left[\frac{\partial y}{\partial x_i} \right] \right)_{(x_i \in \boldsymbol{x}_k)} \tag{A66} \end{align}
∇xky=∂xk∂y=([∂xi∂y])(xi∈xk)(A66)
则原梯度为子向量梯度的拼接,即
∇
x
y
=
(
∇
x
1
y
;
∇
x
2
y
)
\begin{align} {\nabla}_{\boldsymbol{x}}y =({\nabla}_{\boldsymbol{x}_1}y\,;\,{\nabla}_{\boldsymbol{x}_2}y) \tag{A67} \end{align}
∇xy=(∇x1y;∇x2y)(A67)
极端情况:分拆为一个个的标量,即情形(2)由一组(1)构成的向量。
(3)当
y
=
f
(
x
)
\boldsymbol{y}=f(\boldsymbol{x})
y=f(x)(自变量与因变量均为向量)时,由式(A51)及式(A43)有
∇
x
y
=
∂
y
∂
x
=
(
[
∂
y
j
∂
x
i
]
i
j
)
\begin{align} {\nabla}_{\boldsymbol{x}}\boldsymbol{y} =\frac{\partial \boldsymbol{y}}{\partial\boldsymbol{x}} =\left( \left[ \frac{\partial y_j}{\partial x_i} \right]_{ij} \right) \tag{A68} \end{align}
∇xy=∂x∂y=([∂xi∂yj]ij)(A68)
我们以图A.2来辅助记忆:(a)梯度矩阵
∇
x
y
{\nabla}_{\boldsymbol{x}}\boldsymbol{y}
∇xy以梯形表示:底边
x
\boldsymbol{x}
x的
n
n
n个点与顶边
y
\boldsymbol{y}
y的
m
m
m个点是全连接,有
n
×
m
n\times m
n×m条,代表这个梯度矩阵式(A68)的大小;(b)表示自变量向量
x
\boldsymbol{x}
x分拆成两个(
x
1
,
x
2
\boldsymbol{x}_1,\boldsymbol{x}_2
x1,x2)或更多个子向量,对每个子向量
x
k
\boldsymbol{x}_k
xk式(A68)仍成立:
∇
x
k
y
=
∂
y
∂
x
k
=
(
[
∂
y
j
∂
x
i
]
)
(
x
i
∈
x
k
)
\begin{align} {\nabla}_{\boldsymbol{x}_k}\boldsymbol{y} =\frac{\partial \boldsymbol{y}}{\partial\boldsymbol{x}_k} =\left( \left[ \frac{\partial y_j}{\partial x_i} \right] \right)_{(x_i \in \boldsymbol{x}_k )} \tag{A69} \end{align}
∇xky=∂xk∂y=([∂xi∂yj])(xi∈xk)(A69)
同样有拼接关系
∇
x
y
=
(
∇
x
1
y
;
∇
x
2
y
)
\begin{align} {\nabla}_{\boldsymbol{x}}\boldsymbol{y} =({\nabla}_{\boldsymbol{x}_1}\boldsymbol{y}\,;\,{\nabla}_{\boldsymbol{x}_2}\boldsymbol{y}) \tag{A70} \end{align}
∇xy=(∇x1y;∇x2y)(A70)
结合图A.1 和图A.2,我们有如图图A.3所示:
(a)复合函数梯度的链式法则式(A58)、式(A59)助记:“外层三角形(底至顶) ∇ x z {\nabla}_{\boldsymbol{x}}z ∇xz=底层梯形 ∇ x y {\nabla}_{\boldsymbol{x}}\boldsymbol{y} ∇xy ⋅ \cdot ⋅上层三角形 ∇ y z {\nabla}_{\boldsymbol{y}}z ∇yz”。
(b)表示自变量向量 x \boldsymbol{x} x分拆成两个( x 1 , x 2 \boldsymbol{x}_1,\boldsymbol{x}_2 x1,x2)或更多个子向量,对每个子向量 x k \boldsymbol{x}_k xk链式法则式(A58)、式(A59)仍成立。
如图图A.3所示的梯度规则常用于神经网络的误差逆传播算法(参见第5章)。
我们考虑图A.2(a)中 x \boldsymbol{x} x的每点仅出发一条有向线段的情况,它有两种特殊情形:
( a 1 ) (a1) (a1):当 x \boldsymbol{x} x的点与 y \boldsymbol{y} y的点一样多时,“一对一”连接时(实际上可把“全连接”中的其余连接视为权重为0),通过调整 x \boldsymbol{x} x中元素的次序,可以使得每个连接的两端点下标一致(即 x i x_i xi与 y i y_i yi连接),这时,梯度矩阵为对角矩阵,其主对角线的元素为 ∂ y i ∂ x i \frac{\partial y_i}{\partial{x}_i} ∂xi∂yi(标量);
(
a
2
)
(a2)
(a2):当
x
\boldsymbol{x}
x分为多组,组数与
y
\boldsymbol{y}
y的点一样多,“组与点”形成“一对一”的连接,
y
i
y_i
yi对应的组为
x
i
\boldsymbol{x}_i
xi(组的编号为
i
i
i),这时,梯度矩阵仍为“对角矩阵”,但其主对角线上不是标量,而是向量
∂
y
i
∂
x
i
\frac{\partial y_i}{\partial\boldsymbol{x}_i}
∂xi∂yi。
两种情形的图示为图A.4,式子为
∇
x
y
=
d
i
a
g
(
⋯
,
∂
y
i
∂
x
i
,
⋯
)
=
d
i
a
g
(
⋯
,
∇
x
i
y
i
,
⋯
)
若
(
a
1
)
∇
x
y
=
d
i
a
g
(
⋯
,
∂
y
i
∂
x
i
,
⋯
)
=
d
i
a
g
(
⋯
,
∇
x
i
y
i
,
⋯
)
若
(
a
2
)
\begin{align} {\nabla}_{\boldsymbol{x}}\boldsymbol{y} & ={\mathrm{diag}}(\cdots ,\frac{\partial y_i}{\partial{x}_i},\cdots)={\mathrm{diag}}(\cdots ,{\nabla}_{x_i}y_i,\cdots) \quad \text{若}\ (a1)\tag{A71} \\ {\nabla}_{\boldsymbol{x}}\boldsymbol{y} & =\mathrm{diag}(\cdots ,\frac{\partial y_i}{\partial\boldsymbol{x}_i},\cdots) ={\mathrm{diag}}(\cdots ,{\nabla}_{\boldsymbol{x}_i}y_i,\cdots)\quad \text{若}\ (a2)\tag{A72} \end{align}
∇xy∇xy=diag(⋯,∂xi∂yi,⋯)=diag(⋯,∇xiyi,⋯)若 (a1)=diag(⋯,∂xi∂yi,⋯)=diag(⋯,∇xiyi,⋯)若 (a2)(A71)(A72)
注:式(A71)与式(A72)两式形式一样,但式(A71)中的
x
i
x_i
xi为标量,式(A72)中的
x
i
\boldsymbol{x}_i
xi为向量。
(
a
3
)
(a3)
(a3):更进一步将
(
a
2
)
(a2)
(a2)情形加强为每组大小相同(设为
m
m
m),则将向量
x
\boldsymbol{x}
x依组拆断成
n
n
n个子向量
x
i
\boldsymbol{x}_i
xi,子向量依次向右排列,形成矩阵,即
X
=
(
x
1
,
x
2
,
⋯
,
x
n
)
y
=
(
[
y
i
]
)
=
(
[
f
i
(
x
i
)
]
)
\begin{align*} \mathbf{X} & =(\boldsymbol{x}_1\,,\, \boldsymbol{x}_2\,,\, \cdots\,,\, \boldsymbol{x}_n) %=([x_{ji}]_{ji})_{m\times n} \notag \\ \boldsymbol{y} & =([y_i])=([f_i(\boldsymbol{x}_i)]) \end{align*}
Xy=(x1,x2,⋯,xn)=([yi])=([fi(xi)])
这时,由式(A72)有
∇
x
y
=
d
i
a
g
(
⋯
,
∂
f
i
(
x
i
)
∂
x
i
,
⋯
)
若
(
a
3
)
\begin{align} {\nabla}_{\boldsymbol{x}}\boldsymbol{y} =\mathrm{diag}(\cdots ,\frac{\partial f_i(\boldsymbol{x}_i)}{\partial\boldsymbol{x}_i},\cdots) \quad \text{若}\ (a3) \tag{A73} \end{align}
∇xy=diag(⋯,∂xi∂fi(xi),⋯)若 (a3)(A73)
此情形下,向量
x
\boldsymbol{x}
x和矩阵
X
\mathbf{X}
X可按上述方式相互转换
X
=
(
x
1
,
x
2
,
⋯
,
x
n
)
⟺
x
=
(
x
1
;
x
2
;
⋯
;
x
n
)
\begin{align*} \mathbf{X}=(\boldsymbol{x}_1\,,\, \boldsymbol{x}_2\,,\, \cdots\,,\, \boldsymbol{x}_n) \Longleftrightarrow \boldsymbol{x}=(\boldsymbol{x}_1\,;\, \boldsymbol{x}_2\,;\, \cdots\,;\, \boldsymbol{x}_n) \end{align*}
X=(x1,x2,⋯,xn)⟺x=(x1;x2;⋯;xn)
例如,
y
=
X
T
a
\boldsymbol{y}=\mathbf{X}^\mathrm{T}\boldsymbol{a}
y=XTa,将
X
\mathbf{X}
X按列依次向下拼接,形成向量
x
\boldsymbol{x}
x,则
X
T
=
(
x
1
T
;
x
2
T
;
⋯
;
x
n
T
)
(由式(A14))
y
=
(
[
y
i
]
)
=
(
[
x
i
T
a
]
)
\begin{align*} \mathbf{X}^\mathrm{T} & =(\boldsymbol{x}_1^\mathrm{T}\,;\, \boldsymbol{x}_2^\mathrm{T}\,;\, \cdots\,;\, \boldsymbol{x}_n^\mathrm{T})\quad \text{(由式(A14))}\notag \\ \boldsymbol{y} & =([y_i])=([\boldsymbol{x}_i^\mathrm{T}\boldsymbol{a}])\notag \end{align*}
XTy=(x1T;x2T;⋯;xnT)(由式(A14))=([yi])=([xiTa])
满足上述
(
a
3
)
(a3)
(a3)由式(A73)有
∇
x
y
=
∇
x
X
T
a
=
d
i
a
g
(
⋯
,
∂
x
i
T
a
∂
x
i
,
⋯
)
=
d
i
a
g
(
⋯
,
a
,
⋯
)
(由式(A65))
\begin{align} {\nabla}_{\boldsymbol{x}}\boldsymbol{y} & ={\nabla}_{\boldsymbol{x}}\mathbf{X}^\mathrm{T}\boldsymbol{a}\notag \\ & =\mathrm{diag}(\cdots ,\frac{\partial {\boldsymbol{x}_i}^\mathrm{T}\boldsymbol{a}}{\partial\boldsymbol{x}_i},\cdots) \notag \\ & ={\mathrm{diag}}(\cdots ,\boldsymbol{a},\cdots) \qquad \text{(由式(A65))} \tag{A74} \end{align}
∇xy=∇xXTa=diag(⋯,∂xi∂xiTa,⋯)=diag(⋯,a,⋯)(由式(A65))(A74)
其中,“对角矩阵”中主对角线全为向量
a
\boldsymbol{a}
a,且个数为矩阵
X
\mathbf{X}
X的列数
n
n
n,即向量
x
\boldsymbol{x}
x等分成的子向量数(对应
y
\boldsymbol{y}
y的大小);而
a
\boldsymbol{a}
a的大小为矩阵
X
\mathbf{X}
X的行数
m
m
m,即向量
x
\boldsymbol{x}
x等分成的子向量大小。
然而,在
y
=
A
T
x
\boldsymbol{y}=\mathbf{A}^\mathrm{T}\boldsymbol{x}
y=ATx中,不存在分组关系,故只能按式(A68)计算
∇
x
y
=
∂
A
T
x
∂
x
=
∂
(
[
a
i
j
]
i
j
)
T
(
[
x
i
]
)
∂
x
=
∂
(
[
∑
i
=
1
n
a
i
j
x
i
]
j
)
∂
x
=
(
[
∂
∑
k
=
1
n
a
k
j
x
k
∂
x
i
]
i
j
)
(由式(A68))
=
(
[
a
i
j
]
i
j
)
=
A
\begin{align} {\nabla}_{\boldsymbol{x}}\boldsymbol{y} & =\frac{\partial \mathbf{A}^\mathrm{T}\boldsymbol{x}}{\partial\boldsymbol{x}}\notag \\ & =\frac{\partial \left( \left[ a_{ij} \right]_{ij} \right)^\mathrm{T} \left( \left[x_i \right] \right) }{\partial\boldsymbol{x}}\notag \\ & =\frac{\partial \left( \left[ \sum_{i=1}^na_{ij}x_{i} \right]_j \right)}{\partial\boldsymbol{x}}\notag \\ & =\left( \left[ \frac{\partial \sum_{k=1}^na_{kj}x_{k}}{\partial x_i} \right]_{ij} \right)\qquad \text{(由式(A68))}\notag \\ & =\left( \left[ a_{ij} \right]_{ij} \right)\notag \\ & =\mathbf{A} \tag{A75} \end{align}
∇xy=∂x∂ATx=∂x∂([aij]ij)T([xi])=∂x∂([∑i=1naijxi]j)=([∂xi∂∑k=1nakjxk]ij)(由式(A68))=([aij]ij)=A(A75)
本文为原创,您可以:
- 点赞(支持博主)
- 收藏(待以后看)
- 转发(他考研或学习,正需要)
- 评论(或讨论)
- 引用(支持原创)
- 不侵权
上一篇:3、复合函数梯度的链式法则(链的次序不可交换)
下一篇:5、含矩阵的偏导数