摘要
Affine 仿射层, 又称 Linear 线性变换层, 常用于神经网络结构中的全连接层.
本文给出了 Affine 层的两种定义及相关的反向传播梯度.
相关
配套代码, 请参考文章 :
Python和PyTorch对比实现affine/linear(仿射/线性)变换函数及全连接层的反向传播
系列文章索引 :
affine/linear(仿射/线性)变换函数详解及全连接层反向传播的梯度求导
正文
1. Affine 的一种定义
考虑一个输入向量 x, Affine 层的权重为 k 维向量 w, 偏置为标量 b, 则 :
x = ( x 1 , x 2 , x 3 , ⋯   , x k )    w = ( w 1 , w 2 , w 3 , ⋯   , w k )    a f f i n e ( x i , w i , b ) = x i w i + b x = (x_1,x_2,x_3,\cdots,x_k)\\ \;\\ w = (w_1, w_2,w_3,\cdots,w_k)\\ \;\\ affine(x_i,w_i,b) = x_iw_i+b x=(x1,x2,x3,⋯,xk)w=(w1,w2,w3,⋯,wk)affine(xi,wi,b)=xiwi+b
使用 X 表示 m 行 k 列的矩阵, 偏置为标量 b, 则一次仿射变换为 :
a T = a f f i n e ( X , w , b ) = X w T + b    a T = ( x 11 x 12 x 13 ⋯ x 1 k x 21 x 22 x 23 ⋯ x 2 k x 31 x 32 x 33 ⋯ x 3 k ⋮ ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 x m 3 ⋯ x m k ) ( w 1 w 2 w 3 ⋮ w k ) + b    a = ( a 1 , a 2 , a 3 , ⋯   , a k ) a^T=affine(X,w,b) = Xw^T + b\\\;\\ a^T= \begin{pmatrix} x_{11}&x_{12} &x_{13}&\cdots&x_{1k}\\ x_{21}&x_{22}&x_{23}&\cdots&x_{2k}\\ x_{31}&x_{32}&x_{33}&\cdots&x_{3k}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ x_{m1}&x_{m2}&x_{m3}&\cdots&x_{mk} \end{pmatrix} \begin{pmatrix} w_1\\ w_2\\ w_3\\ \vdots\\ w_k \end{pmatrix} +b\\ \;\\ a= (a_1,a_2,a_3,\cdots,a_k) aT=affine(X,w,b)=XwT+baT=⎝⎜⎜⎜⎜⎜⎛x11x21x31⋮xm1x12x22x32⋮xm2x13x23x33⋮xm3⋯⋯⋯⋱⋯x1kx2kx3k⋮xmk⎠⎟⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎛w1w2w3⋮wk⎠⎟⎟⎟⎟⎟⎞+ba=(a1,a2,a3,⋯,ak)
更一般的, 若使用 W 表示 n 行 k 列的矩阵, 偏置为向量 b , 则 n 次仿射变换为 :
W n × k = ( w 11 w 12 w 13 ⋯ w 1 k w 21 w 22 w 23 ⋯ w 2 k w 31 w 32 w 33 ⋯ w 3 k ⋮ ⋮ ⋮ ⋱ ⋮ w n 1 w n 2 w n 3 ⋯ w n k )    b 1 × n = ( b 1 , b 2 , b 3 , ⋯   , b n )    A m × n = a f f i n e ( X , W , b ) = X m × k W n × k T + b 1 × n W_{n\times k} =\begin{pmatrix} w_{11}&w_{12} &w_{13}&\cdots&w_{1k}\\ w_{21}&w_{22}&w_{23}&\cdots&w_{2k}\\ w_{31}&w_{32}&w_{33}&\cdots&w_{3k}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ w_{n1}&w_{n2}&w_{n3}&\cdots&w_{nk} \end{pmatrix}\\ \;\\ b_{1 \times n} = (b_1,b_2,b_3,\cdots,b_n)\\\;\\ A_{m\times n} = affine(X,W,b) = X_{m\times k}W^T_{n\times k} + b_{1 \times n} Wn×k=⎝⎜⎜⎜⎜⎜⎛w11w21w31⋮wn1w12w22w32⋮wn2w13w23w33⋮wn3⋯⋯⋯⋱⋯w1kw2kw3k⋮wnk⎠⎟⎟⎟⎟⎟⎞b1×n=(b1,b2,b3,⋯,bn)Am×n=affine(X,W,b)=Xm×kWn×kT+b1×n
使用求和符号表示 A 矩阵中的元素 :
a i j = ∑ t = 1 k x i t ⋅ w j t + b j a_{ij} =\sum_{t=1}^{k} x_{it} \cdot w_{jt} + b_j aij=t=1∑kxit⋅wjt+bj
取其中一项展开作为示例 :
a 23 = ∑ t = 1 k x 2 t ⋅ w 3 t + b 3 = x 21 w 31 + x 22 w 32 + x 23 w 33 + ⋯ + x 2 k w 3 k + b 3 a_{23} =\sum_{t=1}^{k} x_{2t} \cdot w_{3t} + b_3= x_{21}w_{31}+x_{22}w_{32}+x_{23}w_{33}+\cdots+x_{2k}w_{3k}+ b_3 a23=t=1∑kx2t⋅w3t+b3=x21w31+x22w32+x23w33+⋯+x2kw3k+b3
2. 梯度的定义
三维XYZ空间中的梯度定义:
∇ e ( 3 ) = ∂ e ∂ x i + ∂ e ∂ y j + ∂ e ∂ z k \nabla e_{(3)} = \frac{\partial e}{\partial x}i+\frac{\partial e}{\partial y}j+\frac{\partial e}{\partial z}k ∇e(3)=∂x∂ei+∂y∂ej+∂z∂ek
式中, i , j , k i, j, k i,j,k是三个两两相互垂直的单位向量, 或 i , j , k i, j, k i,j,k 是正交单位向量组, 或 i , j , k i, j, k i,j,k 是一组线性无关的单位向量, 这三种说法是等价的.
推广到 t t t 维向量空间 V V V, 若 t t t 个向量 I 1 , I 2 , I 3 , ⋯   , I t I_1, I_2, I_3,\cdots, I_t I1,I2,I3,⋯,It 是一组两两正交的单位向量, 或单位向量组 I 1 , I 2 , I 3 , ⋯   , I t I_1, I_2, I_3,\cdots, I_t I1,I2,I3,⋯,It 线性无关, 那么, 该向量空间 V V V 中的梯度可定义为 :
∇ e ( V ) = ∂ e ∂ x 1 I 1 + ∂ e ∂ x 2 I 2 + ∂ e ∂ x 3 I 3 + ⋯ + ∂ e ∂ x t I t \nabla e_{(V)} = \frac{\partial e}{\partial x_1}I_1+\frac{\partial e}{\partial x_2}I_2+\frac{\partial e}{\partial x_3}I_3+\cdots+\frac{\partial e}{\partial x_t}I_t ∇e(V)=∂x1∂eI1+∂x2∂eI2+∂x3∂eI3+⋯+∂xt∂eIt
梯度的定义可以在 <高等数学> 中找到, 正交和线性无关的定义可以在 <线性代数> 中找到.
3. 反向传播中的梯度求导
若 X 矩阵经过 affine 层变换得到 A 矩阵, 往前 forward 传播得到误差值 error (标量 e ), 求 e 关于 X 的梯度:
A m × n = X m × k W n × k T + b 1 × n    e = f o r w a r d ( A ) A_{m \times n} = X_{m\times k}{W_{n\times k}}^T + b_{1 \times n}\\ \;\\ e=forward(A) Am×n=Xm×kWn×kT+b1×ne=forward(A)
3.1 损失值 e 对 A 矩阵的梯度
首先, 我们说求梯度, 究竟是在求什么?
答 : 一个让损失值 e 变小的最快的方向.
比如, e 对 A 的梯度矩阵 :
d e d A = ( ∂ e / ∂ a 11 ∂ e / ∂ a 12 ∂ e / ∂ a 13 ⋯ ∂ e / ∂ a 1 n ∂ e / ∂ a 21 ∂ e / ∂ a 22 ∂ e / ∂ a 23 ⋯ ∂ e / ∂ a 2 n ∂ e / ∂ a 31 ∂ e / ∂ a 32 ∂ e / ∂ a 33 ⋯ ∂ e / ∂ a 3 n ⋮ ⋮ ⋮ ⋱ ⋮ ∂ e / ∂ a m 1 ∂ e / ∂ a m 2 ∂ e / ∂ a m 3 ⋯ ∂ e / ∂ a m n ) \frac{de}{dA} = \begin{pmatrix} \partial e/ \partial a_{11}&\partial e/ \partial a_{12}&\partial e/ \partial a_{13}&\cdots& \partial e/ \partial a_{1n}\\ \partial e/ \partial a_{21}&\partial e/ \partial a_{22}&\partial e/ \partial a_{23}&\cdots& \partial e/ \partial a_{2n}\\ \partial e/ \partial a_{31}&\partial e/ \partial a_{32}&\partial e/ \partial a_{33}&\cdots& \partial e/ \partial a_{3n}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ \partial e/ \partial a_{m1}&\partial e/ \partial a_{m2}&\partial e/ \partial a_{m3}&\cdots& \partial e/ \partial a_{mn}\\ \end{pmatrix} dAde=⎝⎜⎜⎜⎜⎜⎛∂e/∂a11∂e/∂a21∂e/∂a31⋮∂e/∂am1∂e/∂a12∂e/∂a22∂e/∂a32⋮∂e/∂am2∂e/∂a13∂e/∂a23∂e/∂a33⋮∂e/∂am3⋯⋯⋯⋱⋯∂e/∂a1n∂e/∂a2n∂e/∂a3n⋮∂e/∂amn⎠⎟⎟⎟⎟⎟⎞
为了书写方便, 记 :
∂ e ∂ a i j = a i j ′    ∇ e ( A ) = d e d A = ( a 11 ′ a 12 ′ a 13 ′ ⋯ a 1 n ′ a 21 ′ a 22 ′ a 23 ′ ⋯ a 2 n ′ a 31 ′ a 32 ′ a 33 ′ ⋯ a 3 n ′ ⋮ ⋮ ⋮ ⋱ ⋮ a m 1 ′ a m 2 ′ a m 3 ′ ⋯ a m n ′ ) \frac{\partial e}{\partial a_{ij}} = a_{ij}'\\ \;\\ \nabla e_{(A)}= \frac{de}{dA} = \begin{pmatrix} a_{11}'& a_{12}'& a_{13}'&\cdots& a_{1n}'\\ a_{21}'& a_{22}'& a_{23}'&\cdots& a_{2n}'\\ a_{31}'& a_{32}'& a_{33}'&\cdots& a_{3n}'\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ a_{m1}'& a_{m2}'& a_{m3}'&\cdots& a_{mn}' \end{pmatrix} ∂aij∂e=aij′∇e(A)=dAde=⎝⎜⎜⎜⎜⎜⎛a11′a21′a31′⋮am1′a12′a22′a32′⋮am2′a13′a23′a33′⋮am3′⋯⋯⋯⋱⋯a1n′a2n′a3n′⋮amn′⎠⎟⎟⎟⎟⎟⎞
所有的 a i j ′ a_{ij}' aij′ 都是已知的, 是上游的 forward 函数帮我们算好的.
只要矩阵 A 中所有的元素按照这个矩阵等比例的更新, 那么就是使 e 值减少最快的方向.
梯度本身的定义并不是一个矩阵, 而是一个向量 :
∇ e ( A ) = ( a 11 ′ , a 12 ′ , ⋯   , a 21 ′ , a 22 ′ , ⋯   , a m 1 ′ , a m 2 ′ , ⋯   , a m n ′ ) \nabla e_{(A)}= (a_{11}', a_{12}',\cdots, a_{21}', a_{22}',\cdots,a_{m1}', a_{m2}',\cdots, a_{mn}') ∇e(A)=(a11′,a12′,⋯,a21′,a22′,⋯,am1′,a
今天的文章拉普拉斯变换的逆变换_仿射变换公式推导分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89145.html