上一篇文章從數學角度上分析了過擬合產生的原因以及在損失函數中添加正則化從而在一定程度上避免過擬合,並從MLE和MAP兩個角度來對線性回歸進行建模,進而求解。然而在求解過程中,涉及到一些矩陣求導的基礎知識,由於篇幅原因,現在本篇文章中做一個簡要說明。
對一元函數 \(y=f(x)\),輸入是一維變量(標量),輸出也是一個標量。那么:
\[\dfrac{dy}{dx} = \dfrac{df(x)}{dx}, dy = \dfrac{df(x)}{dx}dx,(1) \]
對於二元函數\(y=f(x), x = (x_{1}, x_{2})^{T}\),輸入是一維變量(標量),輸出也是一個標量。那么:
\[\dfrac{\partial y}{\partial x_{1}} = \dfrac{\partial f(x)}{dx_{1}}, \dfrac{\partial y}{\partial x_{2}} = \dfrac{\partial f(x)}{dx_{2}}, dy = \dfrac{\partial f(x)}{dx_{1}} dx_{1} + \dfrac{\partial f(x)}{dx_{2}} dx_{2},(2) \]
相應地,若輸入變量為\(n\)維度,即\(x = (x_{1}, x_{2},...,x_{n})^{T}\),那么:
\[dy = \dfrac{\partial f(x)}{dx_{1}} dx_{1}+\dfrac{\partial f(x)}{dx_{2}} dx_{2}+...+\dfrac{\partial f(x)}{dx_{n}} dx_{n} = \sum_{i=1}^{n} \dfrac{\partial f(x)}{dx_{i}} dx_{i},(3) \]
在這里,由於 \(y\) 是一個標量,標量對向量求導就等於標量對向量里的每一個元素分別求導,所以:
\[\dfrac{\partial f(x)}{dx} = (\dfrac{\partial f(x)}{dx_{1}}, \dfrac{\partial f(x)}{dx_{2}},...,\dfrac{\partial f(x)}{dx_{n}}),(4) \]
所以我們可以得到n維輸入向量的全微分矩陣表示形式:
\[dy = \dfrac{\partial f(x)}{dx}^{T} dx,(5) \]
由於之前提到過,統計學習的輸入通常是向量,而不管以后的BP神經網絡,深度學習中的大部分輸入(比如圖像超分辨率,圖像去噪,圖像分割)等都是以向量的方式輸入,最后的損失函數一般選取\(L_{1}, L_{2}\)或者交叉熵等標量,因此本文重點討論標量對向量的求導過程。
根據上述公式,找出標量對輸入的導數,只需要將公式轉換為全微分的形式,在 \(dx\) 之前的就是所要求的結果。類似於一元/二元微積分,由於向量運算的特殊性質,仍需要重新定義一套基本的求導法則,然后根據簡單的求導法則逐步去求解更為復雜的函數導數。
\[d(x \pm y) = dx \pm dy, d(xy) = (dx)y + xdy, d(x^{T}) = (dx)^{T},(6) \]
\[df(x) = f'(x) \odot dx, d(x \odot y) = (dx) \odot y + x \odot dy,(7) \]
下面利用這些公式對 \(X^{-1}\) 的導數進行證明:
\[d(x^{-1}) = -x^{-1}(dx)x^{-1},(8) \]
證明:
\[xx^{-1} = I, 於是:dxx^{-1} = (dx)x^{-1} + xdx^{-1} = 0,d(x^{-1}) = -x^{-1}(dx)x^{-1} \]
有了上述的基礎之后,我們來再一次求解上節中的線性回歸問題,問題描述如下:
\[Loss = \dfrac{1}{2} \sum (y_{i}-x_{i}w)^{2} = \dfrac{1}{2} (y-xw)^{2},(9) \]
求解過程:
\[dLoss = d(y-xw)^{2} = d(y-xw)^{T}(y-xw),(10) \]
展開后,得公式(11):
\[d(y-xw)^{T}(y-xw) = d(y-xw)^{T}(y-xw) + (y-xw)^{T}d(y-xw) \]
計算到這里,似乎陷入了僵局,由於個人能力有限,無法對上式再進行進一步地化簡,那么就必須引入另外的一個概念來幫助我們求解。
矩陣的跡:
矩陣的跡表示行列式主對角線上所有元素的和,即為兩個矩陣的元素乘積。下面借用一個例子來解釋一下這個概念:
\[A = [a_{11}, a_{12}; a_{21}, a_{22};], B = [b_{11}, b_{12}; b_{21}, b_{22};] \]
那么:
\[trace(A^{T}B) = trace( [a_{11},a_{12}; a_{21}, a_{22};]^{T} [b_{11}, b_{12}; b_{21}, b_{22};]) \]
所以:
\[trace(A^{T}B) = a_{11}b_{11}+a_{12}b_{12}+a_{21}b_{21}+a_{22}b_{22} \]
於是,公式(5)可以表示為:
\[dy = \dfrac{\partial f(x)}{dx}^{T} dx = trace(\dfrac{\partial f(x)}{dx}^{T} dx), (12) \]
因此,通過將全微分化成矩陣的跡的形式,便可以找到偏導數。似乎看起來並沒有什么用,那么通過下面的性質,便可以輕松地對公式(11)進行求解。
\[tr(a) = a, tr(A^{T}) = A, tr(A \pm B) = tr(A) \pm tr(B), tr(AB) = tr(BA) \]
下面繼續求解公式(11):
\[d(y-xw)^{T}(y-xw) = d(y-xw)^{T}(y-xw) + (y-xw)^{T}d(y-xw) \\ = ((y-xw)^{T}d(y-xw))^{T}+ (y-xw)^{T}d(y-xw) \]
又因為:
\[tr(((y-xw)^{T}d(y-xw))^{T}+ (y-xw)^{T}d(y-xw)) = tr(((y-xw)^{T}d(y-xw))^{T}) + tr((y-xw)^{T}d(y-xw)) \\ = 2tr((y-xw)^{T}d(y-xw)) \]
所以:
\[-(y-xw)^{T}x = -(x^{T}(y-xw)) = x^{T}y-x^{T}xw = 0 \]
解得:\(w = (x^{T}x)^{-1}x^{T}y\)
再來看一個例子:求 \(f = a^{T}xb\) 對 \(x\) 的偏導數 \(\partial f / \partial x\)
首先通過全微分展開,由於 \(a, b\) 均不是\(x\)的函數,因此我們得到:
\[df = d(a^{T}xb) = a^{T}d(x)b = a^{T}(dx)b \]
由於矩陣無法隨意交換乘法的位置,通過trace的性質,我們得到:
\[tr(a^{T}(dx)b) = tr(ba^{T}dx) \]
因此:\(\dfrac{\partial f}{\partial x} = (ba^{T})^{T} = ab^{T}\)