高维张量运算应用—卷积层的反向求导

高维张量运算应用—卷积层的反向求导


一般形式的张量

所谓张量,不考虑物理意义,仅在形式上来看,是一个n阶的量 a i 1 i 2 i 3 . . . i n a_{i_1i_2i_3...i_n} ai1i2i3...in,张量积有以下特殊形式:
  n=0时是标量。
  n=1时是向量(矢量)。
  n=2时是矩阵。
  n更高时是高维张量。
  
  在tensorflow中可以用tensor定义张量。


一般形式的张量积

以下用I,J,K表示下标集合(可以为空), i i i j j j k k k 为下标。
  关于张量积, c I K = a I J b J K c_{IK}=a_{IJ}b_{JK} cIK=aIJbJK,表示 c I K = Σ J a I J b J K c_{IK}=\Sigma_{J}a_{IJ}b_{JK} cIK=ΣJaIJbJK,张量积有以下特殊形式:
   c = a i b i c=a_ib_i c=aibi,对应向量点积 c = a T b c=a^Tb c=aTb
   c I = a I b I c_I=a_Ib_I cI=aIbI,对应张量的按元素积 c = a ⊙ b c=a\odot b c=ab
   c I J = a I b J c_{IJ}=a_Ib_J cIJ=aIbJ,对应张量的张量积 c = a ⊗ b c=a\otimes b c=ab
   c i k = a i j b j k c_{ik}=a_{ij}b_{jk} cik=aijbjk,对应矩阵乘法 c = a b c=ab c=ab
  
  在tensorflow中可以用einsum('ij,jk->ik', a, b)定义张量乘法,前一个字符串指定了求和方式。


利用张量积运算推导张量导数

用张量积运算推导高维量的推导相比矩阵运算推导,处理维度更加方便清晰,下面以矩阵,向量运算,统一用张量进行推导:
  
   d ( A B ) d t = d ( A i j B j k ) d t = A i j d B j k + B j k d A i j d t = A d B d t + d A d t B {d(AB)\over dt}={d(A_{ij}B_{jk})\over dt}={A_{ij}dB_{jk}+B_{jk}dA_{ij}\over dt}=A{dB\over dt}+{dA\over dt}B dtd(AB)=dtd(AijBjk)=dtAijdBjk+BjkdAij=AdtdB+dtdAB
   d ( a T x ) d x = d ( a i x i ) d x k = d ( a i x i ) d x i = a i = a {d(a^Tx)\over dx}={d(a_{i}x_{i})\over dx_{k}}={d(a_{i}x_{i})\over dx_{i}}=a_i=a dxd(aTx)=dxkd(aixi)=dxid(aixi)=ai=a
   d ( W x ) d x = d ( W i j x j ) d x k = d ( W i j x j ) d x j = W i j = W {d(Wx)\over dx}={d(W_{ij}x_{j})\over dx_{k}}={d(W_{ij}x_{j})\over dx_{j}}=W_{ij}=W dxd(Wx)=dxkd(Wijxj)=dxjd(Wijxj)=Wij=W


利用张量积运算推导卷积层的反向求导

用张量积运算推导高维量的推导相比矩阵运算,更加清晰,不易错。
  
  下面假设卷积层 y = x ∗ w y=x * w y=xw,即 y i j = Σ k l x i + k , j + l w k l y_{ij}=\Sigma_{kl}x_{i+k,j+l}w_{kl} yij=Σklxi+k,j+lwkl
  下面用张量运算推导卷积层的反向求导:
  那么 ∂ y i j ∂ x k l = w i − k , j − l {\partial y_{ij}\over \partial x_{kl}}=w_{i-k,j-l} xklyij=wik,jl,进而 ∂ L ∂ x k l = ∂ L ∂ y i j ∂ y i j ∂ x k l = w i − k , j − l ∂ L ∂ y i j = ∂ L ∂ y i j ∗ w − {\partial L\over \partial x_{kl}}={\partial L\over \partial y_{ij}}{\partial y_{ij}\over \partial x_{kl}}=w_{i-k,j-l}{\partial L\over \partial y_{ij}}={\partial L\over \partial y_{ij}}*w^- xklL=yijLxklyij=wik,jlyijL=yijLw,其中 w i j − = w − i , − j w^-_{ij}=w_{-i,-j} wij=wi,j

更多

关于张量积更多请看我的另一篇博客 https://blog.csdn.net/PKU_ZZY/article/details/88058838

你可能感兴趣的:(Machine,Learing)