全文共3893字,預計學習時長10分鐘
圖源:unsplash
就業市場上,機器學習工程師總是受到質疑,人們不相信他們數學功底深厚。事實上,所有機器學習算法的本質都是數學問題,無論是支持向量機、主成分分析還是神經網絡最終都歸結為對偶優化、譜分解篩選和連續非線性函數組合等數學問題。隻有徹底理解數學,才能正真掌握這些機器學習算法。
Python中的各種數據庫能幫助人們利用高級算法來完成一些簡單步驟。例如包含了K近鄰算法、K均值、決策樹等算法的機器學習算法庫Scikit-learn,或者Keras,都可以幫助人們構建神經網絡架構,而不必了解卷積神經網絡CNNs或是循環神經網絡RNNs背後的細節。
然而,想要成為一名優秀的機器學習工程師需要的遠不止這些。在面試時,面試官通常會問及如何從零開始實現K近鄰算法、決策樹,又或者如何導出線性回歸、softmax反向傳播方程的矩陣閉式解等問題。
本文将回顧一些微積分的基本概念助你準備面試,如一元和多元函數的導數、梯度、雅可比矩陣和黑塞矩陣。同時,本文還能為你深入研究機器學習、尤其是神經網絡背後的數學運算打下良好的基礎。這些概念将通過5個導數公式來展示,絕對是面試必備幹貨。
導數1:複合指數函數
指數函數非常基礎常見,而且非常有用。它是一個标準正函數。在實數ℝ中eˣ > 0,同時指數函數還有一個重要的性質,即e⁰ = 1。
另外,指數函數與對數函數互為反函數。指數函數也是最容易求導的函數之一,因為指數函數的導數就是其本身,即(eˣ)’ = eˣ。當指數與另一個函數組合形成一個複合函數時,複合函數的導數就變得更為複雜了。在這種情況下,應遵循鍊式法則來求導,f(g(x))的導數等于f’(g(x))⋅g’(x),即:
運用鍊式法則可以計算出f(x)= eˣ²的導數。先求g(x)=x²的導數:g(x)’=2x。而指數函數的導數為其本身:(eˣ)’=eˣ。将這兩個導數相乘,就可以得到複合函數f(x)= eˣ²的導數:
這是個非常簡單的例子,乍一看可能無關緊要,但它經常在面試開始前被面試官用來試探面試者的能力。如果你已經很久沒有溫習過導數了,那麼很難确保自己能夠迅速應對這些簡單問題。雖然它不一定會讓你得到這份工作,但如果你連這麼一個基本問題都回答不上,那你肯定會失去這份工作。
導數2:底數為變量的複變指數
複變指數函數是一個經典面試問題,尤其是在計量金融領域,它比科技公司招聘機器學習職位更為看重數學技能。複變指數函數迫使面試者走出舒适區。但實際上,這個問題最難的部分是如何找準正确的方向。
當函數逼近一個指數函數時,首先最重要的是要意識到指數函數與對數函數互為反函數,其次,每個指數函數都可以轉化為自然指數函數的形式:
在對複變指數函數f(x) = xˣ求導前,要先用一個簡單的指數函數f(x) = 2ˣ來證明複變函數的一種性質。先用上述方程将2ˣ 轉化為exp(xln(2)),再用鍊式法則求導。
現在回到原來的函數f(x)=xˣ,隻要把它轉化為f(x)=exp(x ln x),求導就變得相對簡單,可能唯一困難的部分是鍊式法則求導這一步。
注意這裡是用乘積法則(uv)’=u’v uv’來求指數xln(x)的導數。
通常情況下,面試官提問這個函數時不會告訴你函數定義域。如果面試官沒有給定函數定義域,他可能是想測試一下你的數學敏銳度。這便是這個問題具有欺騙性的地方。沒有限定定義域,xˣ既可以為正也可以為負。當x為負時,如(-0.9)^(-0.9),結果為複數-1.05–0.34i。
一種解決方法是将該函數的定義域限定為ℤ⁻ ∪ ℝ⁺ \0,但對于負數來說,函數依然不可微。因此,為了正确推導出複變指數函數xˣ的導數,隻需要把該函數的定義域嚴格限定為正數即可。排除0是因為此時導數也為0,左右導數需相等,但在這種情況下,此條件是不成立的。因為左極限是沒有定義的,函數在0處不可微,因此函數的定義域隻能限定為正數。
在繼續以下内容之前,先考考你,這裡有一個比複變指數函數f(x) = xˣ更高級的函數f(x) = xˣ²。如果你理解了第一個例子背後的邏輯和步驟,再加一個指數應該毫無難度,可以推導出以下結果:
導數3:多元輸入函數的梯度
到目前為止,前面讨論的函數導數都是從ℝ映射到ℝ的函數,即函數的定義域和值域都是實數。但機器學習本質上是矢量的,函數也是多元的。
下面這個例子最能闡釋這種多元性:當神經網絡的輸入層大小為m和輸出層大小為k時,即f(x) = g(Wᵀx b),此函數是線性映射Wᵀx(權陣W和輸入向量x)和非線性映射g(激活函數)按元素組成的。一般情況下,該函數也可視作是從ℝᵐ到ℝᵏ的映射。
我們把k=1時的導數稱為梯度。現在來計算以下從ℝ³映射到ℝ的三元函數:
可以把f看作是一個函數,它從大小為3的向量映射到大小為1的向量。
圖源:unsplash
多元輸入函數的導數被稱為梯度,用倒三角符号∇(英文為nabla)表示。從ℝⁿ映射到ℝ的函數g的梯度是n個偏導數的集合,每個偏導數都是一個n元函數。因此,如果g是一個從ℝⁿ到ℝ的映射,其梯度∇g是一個從ℝⁿ到ℝⁿ的映射。
要推導出函數f(x,y,z) = 2ˣʸ zcos(x)的梯度,需要構造一個矢量的偏導數:∂f/∂x,∂f/∂y和∂f/∂z,結果如下:
需要注意,此處也需要利用公式進行等值轉化,即2ˣʸ=exp(xy ln(2))。
總之,對于一個從ℝ³映射到 ℝ的三元函數f,其導數是一個從ℝ³映射到ℝ³的梯度∇ f。從ℝᵐ映射到ℝᵏ(k > 1)的一般式中,一個從ℝᵐ映射到ℝᵏ的多元函數的導數是一個雅可比矩陣,而非一個梯度向量。
導數4:多元輸入輸出函數的雅可比矩陣
上一節中已經提到從ℝᵐ映射到ℝ的函數的導數,是一個從ℝᵐ映射到ℝᵐ的梯度。但如果輸出域也是多元的,即從ℝᵐ映射到ℝᵏ(k > 1),那又當如何?
這種情況下,導數為雅可比矩陣。可以把梯度簡單視為一個m x 1的特殊雅可比矩陣,此時m與變量個數相等。雅可比矩陣J(g)是一個從ℝᵐ到ℝᵏ*ᵐ的映射,其中函數g從ℝᵐ映射到ℝᵏ。這也就是說輸出域的維數是k x m,即為一個k x m矩陣。換言之,在雅可比矩陣J(g)中,第i行表示函數gᵢ的梯度∇ gᵢ。
假設上述函數f(x, y) = [2x², x √y]從ℝ²映射到ℝ²,通過推導該函數的導數可以發現函數的輸入和輸出域都是多元的。在這種情況下,由于平方根函數在負數上沒有定義,需要把y的定義域限定為ℝ⁺。輸出雅可比矩陣的第一行就是函數1的導數,即∇ 2x²;第二行為函數2的導數,即∇ x √y。
雅可比矩陣在深度學習中的可解釋性領域中有一個有趣用例,目的是為了理解神經網絡的行為,并分析神經網絡的輸出層對輸入的靈敏度。
雅可比矩陣有助于研究輸入空間的變化對輸出的影響,還可以用于理解神經網絡中間層的概念。總之需要記住梯度是标量對向量的導數,雅可比矩陣是一個向量對另一個向量的導數。
導數5:多元輸入函數的黑塞矩陣
目前僅讨論了一階導數求導,但在神經網絡中,會經常讨論多元函數的高階導數。其中一種特殊情況就是二階導數,也被稱為黑塞矩陣,用H(f)或∇ ²(微分算符的平方)表示。從ℝⁿ映射到ℝ的函數g的黑塞矩陣是從ℝⁿ到ℝⁿ*ⁿ的映射H(g)。
現在分析一下我們是如何将輸出域從ℝ轉化為ℝⁿ*ⁿ。一階導數,即梯度∇g,是一個從ℝⁿ到ℝⁿ的映射,其導數是一個雅可比矩陣。因此,每一個子函數的導數∇gᵢ都由n個從ℝⁿ映射到ℝⁿ的函數組成。可以這樣想,就好比是對展開成一個向量的梯度向量的每個元素都求導,從而變成向量中的向量,即為一個矩陣。
要計算黑塞矩陣,需要計算交叉導數,即先對x求導,再對y求導,反過來也可以。求交叉導數的順序會不會影響結果,換句話說,黑塞矩陣是否對稱。在這種情況下,函數f為二次連續可微函數(用符号²表示),施瓦茲定理表明交叉導數是相等的,因此黑塞矩陣是對稱的。一些不連續但可微的函數,不滿足交叉導數等式。
構造函數的黑塞矩陣就相當于求一個标量函數的二階偏導數。以f(x,y) = x²y³為例,計算結果如下:
可以看到交叉導數6xy²實際上是相等的。先對x求導得到關于x的偏導數2xy³,再對y求導得到關于y的偏導數6xy²。對于x或y的每個一元子函數,對角元素都為fᵢ。
此類函數的拓展部分将讨論從ℝᵐ映射到ℝᵏ的多元函數的二階導數的情況,可以将其視為一個二階雅可比矩陣。這是一個從ℝᵐ到ℝᵏ*ᵐ*ᵐ的映射,即一個三維張量。與黑塞矩陣相似,為了求出雅可比矩陣的梯度(求二階微分),要對k x m矩陣的每一個元素微分,得到一個向量矩陣,即為一個張量。雖然不太可能要求面試者進行手動計算,但了解多元函數的高階導數相當重要。
本文回顧了機器學習背後重要的微積分基礎知識,列舉了幾個一元和多元函數的例子,讨論了梯度、雅可比矩陣和黑塞矩陣,全面梳理了機器學習面試中可能出現的概念和涉及的微積分知識,希望你能面試順利!
留言點贊關注
我們一起分享AI學習與發展的幹貨
如轉載,請後台留言,遵守轉載規範
,