標籤:

矩陣求導的理解(重要!)

《矩陣求導術》重點筆記

首先是標量對矩陣的求導

一元微積分(標量對標量)中的導數與微分的關係: df=f(x)dx

多元微積分(標量對向量)中的梯度與微分的關係: df=sum_{i=1}^n frac{partial f}{partial x_i}dx_i=frac{{partial f}^T}{partial x}dx

(第一個等號是全微分公式,第二個等號表達了梯度與微分的聯繫:全微分 df 是梯度向量 frac{partial f}{partial x} (nx1)與微分向量 dx (nx1)的內積)

矩陣導數與微分建立聯繫: df=sum_{i=1}^msum_{j=1}^nfrac{partial f}{partial X_{ij}}dX_{ij}=tr(frac{partial f^T}{partial X}dX)

其中tr代表跡(trace)是方陣對角線元素之和,滿足性質:

對尺寸相同的矩陣A,B, tr(A^TB)=sum_{i,j}A_{ij}B_{ij} ,即 tr(A^TB) 是矩陣A,B的內積。

這裡表示,全微分 df 是導數 frac{partial f}{partial X} (m×n)與微分矩陣 dX (m×n)的內積。

矩陣微分的運演算法則:

1.加減法: d(Xpm Y)=dXpm dY

矩陣乘法: d(XY)=(dX)Y+XdY

轉置: d(X^T)=(dX)^T

跡: dtr(X)=tr(dX)

2.逆: dX^{-1}=-X^{-1}dXX^{-1}

3.行列式: d|X|=tr(X^ast dX)X^ast 表示X的伴隨矩陣

如果X可逆,上式可寫成 d|X|=|X|tr(X^{-1}dX)

4.逐元素乘法: d(Xodot Y)=dXodot Y+Xodot dY , odot 代表尺寸相同的矩陣逐元素相乘

5.逐元素函數: dsigma(X)=sigma(X)odot dX,sigma(X)=[sigma(X_{ij})] 是逐元素標量函數運算, sigma(X)=[sigma(X_{ij})] 是逐元素求導數。

一些跡技巧:

1.標量套上跡: a=tr(a)

2.轉置: tr(A^T)=tr(A)

3.線性: tr(Apm B)=tr(A)pm tr(B)

4.矩陣乘法交換: tr(AB)=tr(BA) ,其中 AB^T 尺寸相同,兩側都等於 sum_{i,j}A_{ij}B_{ij}

5.矩陣乘法/逐元素乘法交換: tr(A^T(Bodot C))=tr((Aodot B)^TC) ,其中A,B,C尺寸相同,兩側都等於 sum_{i,j}A_{ij}B_{ij}C_{ij}

觀察一下可以斷言,若標量函數f是矩陣X經加減乘法、逆、行列式、逐元素函數等運算構成,則使用相應的運演算法則對f求微分,再使用跡技巧給df套上跡並將其它項交換至dX左側,即能得到導數。

關於複合:

假設已求得 frac{partial f}{partial Y} ,而Y是X的函數,如何求 frac{partial f}{partial X} 呢?在微積分中有標量求導的鏈式法則 frac{partial f}{partial x}=frac{partial f}{partial y}frac{partial y}{partial x} ,但這裡我們不能沿用鏈式法則,因為矩陣對矩陣的導數 frac{partial Y}{partial X} 截止目前仍是未定義的。我們直接從微分入手建立複合法則:先寫出 df=tr(frac{partial f}{partial Y}^TdY) ,再將dY用dX表示出來代入,並使用跡技巧將其他項交換至dX左側,即可得到 frac{partial f}{partial X}

來看幾個例子:

例1:f = oldsymbol{a}^T Xoldsymbol{b},求frac{partial f}{partial X}。其中oldsymbol{a}m×1列向量,Xm	imes n矩陣,oldsymbol{b}n×1列向量,f是標量。

解:先使用矩陣乘法法則求微分,這裡的oldsymbol{a}, oldsymbol{b}是常量,doldsymbol{a} = oldsymbol{0}, doldsymbol{b} = oldsymbol{0},得到:df = oldsymbol{a}^T dXoldsymbol{b} ,再套上跡並做矩陣乘法交換:df = 	ext{tr}(oldsymbol{a}^TdXoldsymbol{b}) = 	ext{tr}(oldsymbol{b}oldsymbol{a}^TdX),注意這裡我們根據	ext{tr}(AB) = 	ext{tr}(BA)交換了oldsymbol{a}^TdXoldsymbol{b}。對照導數與微分的聯繫df = 	ext{tr}left(frac{partial f}{partial X}^T dX
ight),得到frac{partial f}{partial X} = (oldsymbol{b}oldsymbol{a}^T)^T= oldsymbol{a}oldsymbol{b}^T

注意:這裡不能用frac{partial f}{partial X} =oldsymbol{a}^T frac{partial X}{partial X}oldsymbol{b}=?,導數與乘常數矩陣的交換是不合法則的運算(而微分是合法的)。有些資料在計算矩陣導數時,會略過求微分這一步,這是邏輯上解釋不通的。

例2:f = oldsymbol{a}^T exp(Xoldsymbol{b}),求frac{partial f}{partial X}。其中oldsymbol{a}m×1列向量,Xm	imes n矩陣,oldsymbol{b}n×1列向量,exp表示逐元素求指數,f是標量。

解:先使用矩陣乘法、逐元素函數法則求微分:df = oldsymbol{a}^T(exp(Xoldsymbol{b})odot (dXoldsymbol{b})),再套上跡並做df = 	ext{tr}( oldsymbol{a}^T(exp(Xoldsymbol{b})odot (dXoldsymbol{b}))) =	ext{tr}((oldsymbol{a}odot exp(Xoldsymbol{b}))^TdX oldsymbol{b}) = 	ext{tr}(oldsymbol{b}(oldsymbol{a}odot exp(Xoldsymbol{b}))^TdX),注意這裡我們先根據	ext{tr}(A^T(Bodot C)) = 	ext{tr}((Aodot B)^TC)交換了oldsymbol{a}exp(Xoldsymbol{b})dXoldsymbol{b},再根據	ext{tr}(AB) = 	ext{tr}(BA)交換了(oldsymbol{a}odot exp(Xoldsymbol{b}))^TdXoldsymbol{b}。對照導數與微分的聯繫df = 	ext{tr}left(frac{partial f}{partial X}^T dX
ight),得到frac{partial f}{partial X} = (oldsymbol{b}(oldsymbol{a}odot exp(Xoldsymbol{b}))^T)^T= (oldsymbol{a}odot exp(Xoldsymbol{b}))oldsymbol{b}^T

例3:f = 	ext{tr}(Y^T M Y), Y = sigma(WX),求frac{partial f}{partial X}。其中Wl×m列向量,Xm	imes n矩陣,Yl	imes n矩陣,Ml×l對稱矩陣,sigma是逐元素函數,f是標量。

解:先求frac{partial f}{partial Y},求微分,使用矩陣乘法、轉置法則:df = 	ext{tr}((dY)^TMY) + 	ext{tr}(Y^TMdY) = 2	ext{tr}(Y^TMdY),對照導數與微分的聯繫,得到frac{partial f}{partial Y}=2MY。為求frac{partial f}{partial X},寫出df = 	ext{tr}left(frac{partial f}{partial Y}^T dY
ight),再將dY用dX表示出來代入,並使用矩陣乘法/逐元素乘法交換:df = 	ext{tr}left(frac{partial f}{partial Y}^T (sigma(WX)odot (WdX))
ight) = 	ext{tr}left(left(frac{partial f}{partial Y} odot sigma(WX)
ight)^T W dX
ight),對照導數與微分的聯繫,得到frac{partial f}{partial X}=W^T left(frac{partial f}{partial Y}odot sigma(WX)
ight)=W^T((2Msigma(WX))odotsigma(WX))

例4【線性回歸】:l = |Xoldsymbol{w}- oldsymbol{y}|^2, 求oldsymbol{w}的最小二乘估計,即求frac{partial l}{partial oldsymbol{w}}的零點。其中oldsymbol{y}m×1列向量,Xm	imes n矩陣,oldsymbol{w}n×1列向量,l是標量。

解:嚴格來說這是標量對向量的導數,不過可以把向量看做矩陣的特例。先將向量模平方改寫成向量與自身的內積:l = (Xoldsymbol{w}- oldsymbol{y})^T(Xoldsymbol{w}- oldsymbol{y}),求微分,使用矩陣乘法、轉置等法則:dl = (Xdoldsymbol{w})^T(Xoldsymbol{w}-oldsymbol{y})+(Xoldsymbol{w}-oldsymbol{y})^T(Xdoldsymbol{w}) = 2(Xoldsymbol{w}-oldsymbol{y})^TXdoldsymbol{w}。對照導數與微分的聯繫dl = frac{partial l}{partial oldsymbol{w}}^Tdoldsymbol{w},得到frac{partial l}{partial oldsymbol{w}}= (2(Xoldsymbol{w}-oldsymbol{y})^TX)^T = 2X^T(Xoldsymbol{w}-oldsymbol{y})frac{partial l}{partial oldsymbol{w}}的零點即oldsymbol{w}的最小二乘估計為oldsymbol{w} = (X^TX)^{-1}X^Toldsymbol{y}

例5【方差的最大似然估計】:樣本oldsymbol{x}_1,dots, oldsymbol{x}_nsim N(oldsymbol{mu}, Sigma),求方差Sigma的最大似然估計。寫成數學式是:l = log|Sigma|+frac{1}{n}sum_{i=1}^n(oldsymbol{x}_i-oldsymbol{ar{x}})^TSigma^{-1}(oldsymbol{x}_i-oldsymbol{ar{x}}),求frac{partial l }{partial Sigma}的零點。其中oldsymbol{x}_im	imes 1列向量,overline{oldsymbol{x}}=frac{1}{n}sum_{i=1}^n oldsymbol{x}_i是樣本均值,Sigmam	imes m對稱正定矩陣,l是標量。

解:首先求微分,使用矩陣乘法、行列式、逆等運演算法則,第一項是dlog|Sigma| = |Sigma|^{-1}d|Sigma| = 	ext{tr}(Sigma^{-1}dSigma),第二項是frac{1}{n}sum_{i=1}^n(oldsymbol{x}_i-oldsymbol{ar{x}})^TdSigma^{-1}(oldsymbol{x}_i-oldsymbol{ar{x}}) = -frac{1}{n}sum_{i=1}^n(oldsymbol{x}_i-oldsymbol{ar{x}})^TSigma^{-1}dSigmaSigma^{-1}(oldsymbol{x}_i-oldsymbol{ar{x}})。再給第二項套上跡做交換: 	ext{tr}left(frac{1}{n}sum_{i=1}^n(oldsymbol{x}_i-oldsymbol{ar{x}})^TSigma^{-1}dSigmaSigma^{-1}(oldsymbol{x}_i-oldsymbol{ar{x}})
ight) = frac{1}{n} sum_{i=1}^n 	ext{tr}((oldsymbol{x}_i-oldsymbol{ar{x}})^TSigma^{-1} dSigma Sigma^{-1}(oldsymbol{x}_i-oldsymbol{ar{x}}))= frac{1}{n}sum_{i=1}^n	ext{tr}left(Sigma^{-1}(oldsymbol{x}_i-oldsymbol{ar{x}})(oldsymbol{x}_i-oldsymbol{ar{x}})^TSigma^{-1}dSigma
ight)=	ext{tr}(Sigma^{-1}SSigma^{-1}dSigma),其中先交換跡與求和,然後將 Sigma^{-1} (oldsymbol{x}_i-oldsymbol{ar{x}})交換到左邊,最後再交換跡與求和,並定義S = frac{1}{n}sum_{i=1}^n(oldsymbol{x}_i-oldsymbol{ar{x}})(oldsymbol{x}_i-oldsymbol{ar{x}})^T為樣本方差矩陣。得到dl = 	ext{tr}left(left(Sigma^{-1}-Sigma^{-1}SSigma^{-1}
ight)dSigma
ight)。對照導數與微分的聯繫,有frac{partial l }{partial Sigma}=(Sigma^{-1}-Sigma^{-1}SSigma^{-1})^T,其零點即Sigma的最大似然估計為Sigma = S

例6【多元logistic回歸】:l = -oldsymbol{y}^Tlog	ext{softmax}(Woldsymbol{x}),求frac{partial l}{partial W}。其中oldsymbol{y}是除一個元素為1外其它元素為0的m×1列向量,Wm	imes n矩陣,oldsymbol{x}n×1列向量,l是標量;	ext{softmax}(oldsymbol{a}) = frac{exp(oldsymbol{a})}{oldsymbol{1}^Texp(oldsymbol{a})},其中exp(oldsymbol{a})表示逐元素求指數,oldsymbol{1}代表全1向量。

解:首先將softmax函數代入並寫成l = -oldsymbol{y}^T left(log (exp(Woldsymbol{x}))-oldsymbol{1}log(oldsymbol{1}^Texp(Woldsymbol{x}))
ight) = -oldsymbol{y}^TWoldsymbol{x} + log(oldsymbol{1}^Texp(Woldsymbol{x})),這裡要注意逐元素log滿足等式log(oldsymbol{u}/c) = log(oldsymbol{u}) - oldsymbol{1}log(c),以及oldsymbol{y}滿足oldsymbol{y}^T oldsymbol{1} = 1。求微分,使用矩陣乘法、逐元素函數等法則:dl =- oldsymbol{y}^TdWoldsymbol{x}+frac{oldsymbol{1}^Tleft(exp(Woldsymbol{x})odot(dWoldsymbol{x})
ight)}{oldsymbol{1}^Texp(Woldsymbol{x})}。再套上跡並做交換,注意可化簡oldsymbol{1}^Tleft(exp(Woldsymbol{x})odot(dWoldsymbol{x})
ight) = exp(Woldsymbol{x})^TdWoldsymbol{x},這是根據等式oldsymbol{1}^T (oldsymbol{u}odot oldsymbol{v}) = oldsymbol{u}^T oldsymbol{v},故dl = 	ext{tr}left(-oldsymbol{y}^TdWoldsymbol{x}+frac{exp(Woldsymbol{x})^TdWoldsymbol{x}}{oldsymbol{1}^Texp(Woldsymbol{x})}
ight) =	ext{tr}(oldsymbol{x}(	ext{softmax}(Woldsymbol{x})-oldsymbol{y})^TdW)。對照導數與微分的聯繫,得到frac{partial l}{partial W}= (	ext{softmax}(Woldsymbol{x})-oldsymbol{y})oldsymbol{x}^T

另解:定義oldsymbol{a} = Woldsymbol{x},則l = -oldsymbol{y}^Tlog	ext{softmax}(oldsymbol{a}) ,先如上求出frac{partial l}{partial oldsymbol{a}} = 	ext{softmax}(oldsymbol{a})-oldsymbol{y} ,再利用複合法則:dl = 	ext{tr}left(frac{partial l}{partial oldsymbol{a}}^Tdoldsymbol{a}
ight) = 	ext{tr}left(frac{partial l}{partial oldsymbol{a}}^TdW oldsymbol{x}
ight) = 	ext{tr}left(oldsymbol{x}frac{partial l}{partial oldsymbol{a}}^TdW
ight),得到frac{partial l}{partial W}= frac{partial l}{partialoldsymbol{a}}oldsymbol{x}^T

然後是矩陣對矩陣的求導

先定義向量 f (p×1)對向量 x (m×1)的導數:

df=frac{partial f}{partial x}^Tdx

再定義矩陣的(按列優化)向量化

vec(X)=[X_{11},...,X_{m1},X_12,...X_{m2},...,X_{1n},...,X_{mn}]^T (mn×1),並定義矩陣F對矩陣X的導數 frac{partial F}{partial X}=frac{partial vec(F)}{partial vec(X)} (mn×pq)。導數與微分有聯繫:

vec(dF)=frac{partial F}{partial X}^T vec(dX)

向量化的技巧:

1.線性: vec(A+B)=vec(A)+vec(B)

2.矩陣乘法: vec(AXB)=(B^Totimes A)vec(X) ,其中 otimes 代表Kronecker積,A(m×n)與B(p×q)的Kronecker積是Aotimes B = [A_{ij}B](mp×nq)。

3.轉置:mathrm{vec}(A^T) = K_{mn}mathrm{vec}(A),A是m×n矩陣,其中K_{mn}(mn×mn)是交換矩陣(commutation matrix)。

4.逐元素乘法:mathrm{vec}(Aodot X) = mathrm{diag}(A)mathrm{vec}(X),其中mathrm{diag}(A)(mn×mn)是用A的元素(按列優先)排成的對角陣。

觀察一下可以斷言,若矩陣函數F是矩陣X經加減乘法、逆、行列式、逐元素函數等運算構成,則使用相應的運演算法則對F求微分,再做向量化並使用技巧將其它項交換至vec(dX)左側,即能得到導數。

再談一談複合:假設已求得frac{partial F}{partial Y},而Y是X的函數,如何求frac{partial F}{partial X}呢?從導數與微分的聯繫入手,mathrm{vec}(dF) = frac{partial F}{partial Y}^Tmathrm{vec}(dY) = frac{partial F}{partial Y}^Tfrac{partial Y}{partial X}^Tmathrm{vec}(dX) ,可以推出鏈式法則frac{partial F}{partial X} = frac{partial Y}{partial X}frac{partial F}{partial Y}

有一些Kronecker積和交換矩陣相關的恆等式,可用來做等價變形:

  1. (Aotimes B)^T = A^T otimes B^T
  2. mathrm{vec}(oldsymbol{ab}^T) = oldsymbol{b}otimesoldsymbol{a}
  3. (Aotimes B)(Cotimes D) = (AC)otimes (BD)。可以對F = D^TB^TXAC求導來證明,一方面,直接求導得到frac{partial F}{partial X} = (AC) otimes (BD);另一方面,引入Y = B^T X A,有frac{partial F}{partial Y} = C otimes D, frac{partial Y}{partial X} = A otimes B,用鏈式法則得到frac{partial F}{partial X} = (Aotimes B)(C otimes D)
  4. K_{mn} = K_{nm}^T, K_{mn}K_{nm} = I
  5. K_{pm}(Aotimes B) K_{nq} = Botimes A,A是m×n矩陣,B是p×q矩陣。可以對AXB^T做向量化來證明,一方面,mathrm{vec}(AXB^T) = (Botimes A)mathrm{vec}(X);另一方面,mathrm{vec}(AXB^T) = K_{pm}mathrm{vec}(BX^TA^T) = K_{pm}(Aotimes B)mathrm{vec}(X^T) = K_{pm}(Aotimes B) K_{nq}mathrm{vec}(X)

例子:

例1:F = AX,X是m×n矩陣,求frac{partial F}{partial X}

解:先求微分:dF=AdX,再做向量化,使用矩陣乘法的技巧,注意在dX右側添加單位陣:mathrm{vec}(dF) = mathrm{vec}(AdX) = (I_notimes A)mathrm{vec}(dX),對照導數與微分的聯繫得到frac{partial F}{partial X} = I_notimes A^T

特例:如果X退化為向量,即oldsymbol{f} = A oldsymbol{x},則根據向量的導數與微分的關係doldsymbol{f} = frac{partial oldsymbol{f}}{partial oldsymbol{x}}^T doldsymbol{x},得到frac{partial oldsymbol{f}}{partial oldsymbol{x}} = A^T

例2:f = log |X| ,X是n×n矩陣,求
abla_X f
abla^2_X f

解:使用上篇中的技術可求得
abla_X f = X^{-1T} 。為求
abla^2_X f,先求微分:d
abla_X f = -(X^{-1}dXX^{-1})^T,再做向量化,使用轉置和矩陣乘法的技巧mathrm{vec}(d
abla_X f)= -K_{nn}mathrm{vec}(X^{-1}dX X^{-1}) = -K_{nn}(X^{-1T}otimes X^{-1})mathrm{vec}(dX),對照導數與微分的聯繫,得到
abla^2_X f = -K_{nn}(X^{-1T}otimes X^{-1}),注意它是對稱矩陣。在X是對稱矩陣時,可簡化為
abla^2_X f = -X^{-1}otimes X^{-1}

例3:F = Aexp(XB),A是l×m矩陣,X是m×n矩陣,B是n×p矩陣,exp為逐元素函數,求frac{partial F}{partial X}

解:先求微分:dF = A(exp(XB)odot (dXB)),再做向量化,使用矩陣乘法的技巧:mathrm{vec}(dF) = (I_potimes A)mathrm{vec}(exp(XB)odot (dXB)),再用逐元素乘法的技巧:mathrm{vec}(dF) = (I_p otimes A) mathrm{diag}(exp(XB))mathrm{vec}(dXB),再用矩陣乘法的技巧:mathrm{vec}(dF) = (I_potimes A)mathrm{diag}(exp(XB))(B^Totimes I_m)mathrm{vec}(dX),對照導數與微分的聯繫得到frac{partial F}{partial X} = (Botimes I_m)mathrm{diag}(exp(XB))(I_potimes A^T)

例4【一元logistic回歸】:l = -y oldsymbol{x}^T oldsymbol{w} + log(1 + exp(oldsymbol{x}^Toldsymbol{w})),求
abla_oldsymbol{w} l
abla^2_oldsymbol{w} l。其中y是取值0或1的標量,oldsymbol{x},oldsymbol{w}n×1列向量。

解:使用上篇中的技術可求得
abla_oldsymbol{w} l = oldsymbol{x}(sigma(oldsymbol{x}^Toldsymbol{w}) - y),其中sigma(a) = frac{exp(a)}{1+exp(a)} 為sigmoid函數。為求
abla^2_oldsymbol{w} l,先求微分:d
abla_oldsymbol{w} l = oldsymbol{x} sigma(oldsymbol{x}^Toldsymbol{w})oldsymbol{x}^T doldsymbol{w} ,其中sigma(a) = frac{exp(a)}{(1+exp(a))^2}為sigmoid函數的導數,對照導數與微分的聯繫,得到
abla_w^2 l = oldsymbol{x}sigma(oldsymbol{x}^Toldsymbol{w})oldsymbol{x}^T

推廣:樣本(oldsymbol{x}_1, y_1), dots, (oldsymbol{x}_n,y_n)l = sum_{i=1}^N left(-y_i oldsymbol{x}_i^Toldsymbol{w} + log(1+exp(oldsymbol{x_i}^Toldsymbol{w}))
ight),求
abla_w l
abla^2_w l。有兩種方法,方法一:先對每個樣本求導,然後相加;方法二:定義矩陣X = egin{bmatrix}oldsymbol{x}_1^T \ vdots \ oldsymbol{x}_n^T end{bmatrix},向量oldsymbol{y} = egin{bmatrix}y_1 \ vdots \ y_nend{bmatrix},將l寫成矩陣形式l = -oldsymbol{y}^T Xoldsymbol{w} + oldsymbol{1}^Tlog(oldsymbol{1} + exp(Xoldsymbol{w})),進而可以求得
abla_oldsymbol{w} l = X^T(sigma(Xoldsymbol{w}) - oldsymbol{y})
abla_w^2 l = X^T	ext{diag}(sigma(Xoldsymbol{w}))X

例5【多元logistic回歸】:l = -oldsymbol{y}^Tlog 	ext{softmax}(Woldsymbol{x}) = -oldsymbol{y}^TWoldsymbol{x} + log(oldsymbol{1}^Texp(Woldsymbol{x})),求
abla_W l
abla^2_W l 。其中其中oldsymbol{y}是除一個元素為1外其它元素為0的m×1列向量,Wm	imes n矩陣,oldsymbol{x}n×1列向量,l是標量。

解:上篇中已求得
abla_W l = (	ext{softmax}(Woldsymbol{x})-oldsymbol{y})oldsymbol{x}^T。為求
abla^2_W l,先求微分:定義oldsymbol{a} = Woldsymbol{x}d	ext{softmax}(oldsymbol{a}) = frac{exp(oldsymbol{a})odot doldsymbol{a}}{oldsymbol{1}^Texp(oldsymbol{a})} - frac{exp(oldsymbol{a}) (oldsymbol{1}^T(exp(oldsymbol{a})odot doldsymbol{a}))}{(oldsymbol{1}^Texp(oldsymbol{a}))^2},這裡需要化簡去掉逐元素乘法,第一項中exp(oldsymbol{a})odot doldsymbol{a} = 	ext{diag}(exp(oldsymbol{a})) doldsymbol{a} ,第二項中oldsymbol{1}^T(exp(oldsymbol{a})odot doldsymbol{a}) = exp(oldsymbol{a})^Tdoldsymbol{a},故有d	ext{softmax}(oldsymbol{a}) = D	ext{softmax}(oldsymbol{a})doldsymbol{a},其中D	ext{softmax}(oldsymbol{a}) = frac{	ext{diag}(exp(oldsymbol{a}))}{oldsymbol{1}^Texp(oldsymbol{a})} - frac{exp(oldsymbol{a})exp(oldsymbol{a})^T}{(oldsymbol{1}^Texp(oldsymbol{a}))^2} ,代入有d
abla_W l =D 	ext{softmax}(oldsymbol{a})doldsymbol{a}oldsymbol{x}^T = D	ext{softmax}(Woldsymbol{x})dW oldsymbol{x}oldsymbol{x}^T,做向量化並使用矩陣乘法的技巧,得到
abla^2_W l = (oldsymbol{x}oldsymbol{x}^T) otimes D	ext{softmax}(Woldsymbol{x})

最後做個總結。我們發展了從整體出發的矩陣求導的技術,導數與微分的聯繫是計算的樞紐,標量對矩陣的導數與微分的聯繫是df = mathrm{tr}(
abla_X^T f dX),先對f求微分,再使用跡技巧可求得導數,特別地,標量對向量的導數與微分的聯繫是df = 
abla^T_{oldsymbol{x}}f doldsymbol{x};矩陣對矩陣的導數與微分的聯繫是mathrm{vec}(dF) = frac{partial F}{partial X}^T mathrm{vec}(dX),先對F求微分,再使用向量化的技巧可求得導數,特別地,向量對向量的導數與微分的聯繫是doldsymbol{f} = frac{partial oldsymbol{f}}{partial oldsymbol{x}}^Tdoldsymbol{x}

參考資料:

Matrix calculus - Wikipedia

通過一個例子快速上手矩陣求導 - NoGeek - CSDN博客

矩陣求導術(上)

矩陣求導術(下)

推薦閱讀:

TAG:理解 |