定义
向量函数是指输入和输出都是向量的函数。向量函数
y=f(x) 的导数是著名的雅可比矩阵:
∂x∂y=∂x1∂y1⋮∂x1∂ym⋯⋱⋯∂xn∂y1⋮∂xn∂ym
根据定义,y 的微小变动等于导数乘 x 的微小变动,
此时的乘法是矩阵乘法。
[m×1]Δy=[m×n]∂x∂y⋅[n×1]Δx
矩阵函数是指输入和输出都是矩阵的函数,
矩阵函数 Y=f(X) 的导数仍然要满足 ΔY=∂X∂Y⋅ΔX。
此时,ΔY 是与 Y 大小相同的矩阵,ΔX 是与 X
大小相同的矩阵。那么 ∂X∂Y 应该是一个张量,
此时的乘法是张量点乘。
假设 Y 的大小是 [M×N],X 的大小是 [I×J],
那么这个(广义)雅可比张量的大小是 [M×N×I×J]。
很直观地,这个四维张量的每一个元素都对应了一个 Y 中的元素对一个 X 中的元素的偏导。
(∂X∂Y)m,n,i,j=∂Xi,j∂Ym,n
在反向传播(Back Propagation)中的应用
神经网络中使用到的矩阵函数几乎都是简单的线性变换,即 Y=wX。
反向传播时通常也并不需要计算出雅可比张量,而是要把它应用在链式法则中,
与其他的偏导数相乘。比如神经网络最终的损失函数是 L,更新 X 时,
只需要知道 ∂X∂L,
也就是 ∂Y∂L∂X∂Y 即可。
假如 ∂Y∂L 已知,那么此时这个乘积其实可以直接用
wT∂Y∂L 计算。
假设 Y 的大小为 [H×J],w 的大小为 [H×I],X 的大小为 [I×J],证明如下:
首先损失函数 L 是一个标量,
所以 ∂Y∂L 是一个大小为 [1×(H×J)] 的张量,
∂X∂L 是一个大小为 [1×(I×J)] 的张量。
对于 X 的每一个元素:
[1×1]∂Xi,j∂L=[1×(H×J)]∂Y∂L[H×J]∂Xi,j∂Y
∂Xi,j∂Y=∂Xi,j∂Y1,1⋮∂Xi,j∂YH,1⋯⋱⋯∂Xi,j∂Y1,J⋮∂Xi,j∂YH,J
因为 [H×J]Y=[H×I]w[I×J]X,
所以 Yh,n 是 w 的第 h 行与 X 的第 n 列对应元素相乘的和,
当 j=n 时,Xi,j 并不参与 Yh,n 的计算,对应的偏导数为 0,
也就是说,这个矩阵只有第 j 列的元素不为 0。
∂Xi,j∂Y=0⋮0⋯⋯∂Xi,j∂Y1,j⋮∂Xi,j∂YH,j⋯⋯0⋮0
又因为
Yh,j=wh,1X1,j+wh,2X2,j+...+wh,IXI,j
所以
∂Xi,j∂Y=0⋮0⋯⋯w1,i⋮wH,i⋯⋯0⋮0
根据张量乘法的定义
∂Xi,j∂L=h∑n∑(∂Y∂L)h,n(∂Xi,j∂Y)h,n=h∑(∂Y∂L)h,j(∂Xi,j∂Y)h,j=h∑(∂Y∂L)h,jwh,i
自然
[I×J]∂X∂L=[I×H]wT[H×J]∂Y∂L
同理
[H×I]∂w∂L=[H×J]∂Y∂L[J×I]XT
Word2vec
在最简单的 Word2vec 模型中,我们计算每一个单词周围的一些单词出现的可能性,
把所有这样的可能性乘起来得到整个句子的可能性。最大化这个可能性就是我们的目标。
假定词向量是维度为 N 的列向量。词表中单词总数为 V。
y^oJ=p(o∣c)=∑w=1VeuwTvceuoTvc=CE(y,y^)=−i=1∑Vyilogy^i
为了更新词向量 U 和 vc,我们需要求出 J 对它们的导数。
先定义 [V×1]θ=[V×N]UT[N×1]vc,
那么我们已知,∂θ∂J=y^−y。
直接应用上面的结果得到:
[N×1]∂vc∂J[N×V]∂U∂J=[N×V]U[V×1](y^−y)=[N×1]vc[1×V](y^−y)T