(《机器学习》完整版系列)附录 ——4、神经网络中的梯度(链式法则的图形助记)

神经网络中,图形常以“层”体现,“层”中的参数对应为一“组”(向量),而神经网络的逆向传播算法就是梯度的链式法则所体现的传播特点,这里我们再从这一角度来讨论梯度。
复合函数梯度的链式法则式(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=xy(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=xy=([xiy])(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} xxTa=([xii=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.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=xky=([xiy])(xixk)(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=xy=([xiyj]ij)(A68)

图A.2 梯度助记(二)

我们以图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=xky=([xiyj])(xixk)(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”。

在这里插入图片描述

图A.3 梯度链式法则助记

(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} xiyi(标量);

( 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} xiyi

两种情形的图示为图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} xyxy=diag(,xiyi,)=diag(,xiyi,) (a1)=diag(,xiyi,)=diag(,xiyi,) (a2)(A71)(A72)
注:式(A71)与式(A72)两式形式一样,但式(A71)中的 x i x_i xi为标量,式(A72)中的 x i \boldsymbol{x}_i xi为向量。
在这里插入图片描述

图A.4 梯度的特例

( 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(,xifi(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(,xixiTa,)=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=xATx=x([aij]ij)T([xi])=x([i=1naijxi]j)=([xik=1nakjxk]ij)(由式(A68)=([aij]ij)=A(A75)

本文为原创,您可以:

  • 点赞(支持博主)
  • 收藏(待以后看)
  • 转发(他考研或学习,正需要)
  • 评论(或讨论)
  • 引用(支持原创)
  • 不侵权

上一篇:3、复合函数梯度的链式法则(链的次序不可交换)
下一篇:5、含矩阵的偏导数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值