affine/linear(仿射/线性)变换函数详解及全连接层反向传播的梯度求导

本文详细解释了仿射(Affine)变换,即线性变换在神经网络全连接层中的应用。通过两种不同的定义,介绍了Affine变换的数学表达,并详细阐述了反向传播过程中梯度的计算,包括损失值对A矩阵、X矩阵和权重W以及偏置b的梯度。提供了清晰的推导过程,帮助理解神经网络的反向传播机制。
摘要由CSDN通过智能技术生成

摘要

Affine 仿射层, 又称 Linear 线性变换层, 常用于神经网络结构中的全连接层.
本文给出了 Affine 层的两种定义及相关的反向传播梯度.

相关

配套代码, 请参考文章 :

Python和PyTorch对比实现affine/linear(仿射/线性)变换函数及全连接层的反向传播

系列文章索引 :
https://blog.csdn.net/oBrightLamp/article/details/85067981

正文

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=x11x21x31xm1x12x22x32xm2x13x23x33xm3x1kx2kx3kxmkw1w2w3wk+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=w11w21w31wn1w12w22w32wn2w13w23w33wn3w1kw2kw3kwnkb1×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=1kxitwjt+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=1kx2tw3t+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)=xei+yej+zek

式中, 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)=x1eI1+x2eI2+x3eI3++xteIt

梯度的定义可以在 <高等数学> 中找到, 正交和线性无关的定义可以在 <线性代数> 中找到.

3. 反向传播中的梯度求导

若 X 矩阵经过 affine 层变换得到 A 矩阵, 往前 forward 传播得到误差值 error (标量 e ), 求 e 关于 X 的梯度:
A m × n = X m × k W n × k T + b 1 × n &ThickSpace; 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}&amp;\partial e/ \partial a_{12}&amp;\partial e/ \partial a_{13}&amp;\cdots&amp; \partial e/ \partial a_{1n}\\ \partial e/ \partial a_{21}&amp;\partial e/ \partial a_{22}&amp;\partial e/ \partial a_{23}&amp;\cdots&amp; \partial e/ \partial a_{2n}\\ \partial e/ \partial a_{31}&amp;\partial e/ \partial a_{32}&amp;\partial e/ \partial a_{33}&amp;\cdots&amp; \partial e/ \partial a_{3n}\\ \vdots&amp;\vdots&amp;\vdots&amp;\ddots&amp;\vdots\\ \partial e/ \partial a_{m1}&amp;\partial e/ \partial a_{m2}&amp;\partial e/ \partial a_{m3}&amp;\cdots&amp; \partial e/ \partial a_{mn}\\ \end{pmatrix} dAde=e/a11e/a21e/a31e/am1e/a12e/a22e/a32e/am2e/a13e/a23e/a33e/am3e/a1ne/a2ne/a3ne/amn

为了书写方便, 记 :
∂ e ∂ a i j = a i j ′ &ThickSpace; ∇ 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}&#x27;\\ \;\\ \nabla e_{(A)}= \frac{de}{dA} = \begin{pmatrix} a_{11}&#x27;&amp; a_{12}&#x27;&amp; a_{13}&#x27;&amp;\cdots&amp; a_{1n}&#x27;\\ a_{21}&#x27;&amp; a_{22}&#x27;&amp; a_{23}&#x27;&amp;\cdots&amp; a_{2n}&#x27;\\ a_{31}&#x27;&amp; a_{32}&#x27;&amp; a_{33}&#x27;&amp;\cdots&amp; a_{3n}&#x27;\\ \vdots&amp;\vdots&amp;\vdots&amp;\ddots&amp;\vdots\\ a_{m1}&#x27;&amp; a_{m2}&#x27;&amp; a_{m3}&#x27;&amp;\cdots&amp; a_{mn}&#x27; \end{pmatrix} aije=aije(A)=dAde=a11a21a31am1a12a22a32am2a13a23a33am3a1na2na3namn

所有的 a i j ′ a_{ij}&#x27; aij 都是已知的, 是上游的 forward 函数帮我们算好的.
只要矩阵 A 中所有的元素按照这个矩阵等比例的更新, 那么就是使 e 值减少最快的方向.
梯度本身的定义并不是一个矩阵, 而是一个向量 :
∇ e ( A ) = ( a 11 ′ , a 12 ′ , ⋯ &ThinSpace; , a 21 ′ , a 22 ′ , ⋯ &ThinSpace; , a m 1 ′ , a m 2 ′ , ⋯ &ThinSpace; , a m n ′ ) \nabla e_{(A)}= (a_{11}&#x27;, a_{12}&#x27;,\cdots, a_{21}&#x27;, a_{22}&#x27;,\cdots,a_{m1}&#x27;, a_{m2}&#x27;,\cdots, a_{mn}&#x27;) e(A)=(a11,a12,,a21,a22,,am1,a

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值