梯度下降理論推導

最近一段時間關于機器學習、人工智能等話題充斥著各大社區(qū)。作為一枚熱愛技術的系統(tǒng)工程師,我迫切想去揭開它神秘的面紗。

學習的過程是辛苦的,尤其是在大學數(shù)學早就還給老師的情況下?;艘稽c時間惡補了下線性代數(shù),又看了網上很多優(yōu)秀的博客,總算小有收獲。特此將收獲總結歸納,希望大家批評指正!

線性回歸

讓我們先來搞清楚什么是機器學習吧。

舉個具體的的例子。我們現(xiàn)在手上有一些關于房屋價格的數(shù)據(jù)樣本,這些數(shù)據(jù)樣本包括了房屋的大小、臥室數(shù)量、建造年份,以及這個房屋所對應的價格。

然后機器學習就是讓我們利用已知的這些數(shù)據(jù)去訓練出一個有關房屋價格預判的數(shù)學模型。

我們假設房屋價格符合線性模型,也就是下面的一般線性方程。

一般線性方程.png

θ代表我們所選舉的特征所占的權重。我們在評估一個房屋價格的時候,會選取房屋的大小、臥室數(shù)量等特征。

x則代表數(shù)據(jù)集中該特征的實際大小。例如A房屋的面積是120平方米、3個臥室……

h(θ)就是在當前特征向量θ下,對當前數(shù)據(jù)樣本預測的房屋價格。

所以,你可以理解為機器學習做的事情就是給你一堆歷史數(shù)據(jù),然后讓你找出一個最優(yōu)的h(θ)函數(shù)。

初中的數(shù)學題目

已知一元一次函數(shù) y=ax+b
x=2 y=3
x=3 y=5
問:當x=4時,y=?

是不是覺得這道題目特別簡單?

其實機器學習做的事情和這道題目是一樣的,我們的目的就是求出a和b的值,然后將x帶入數(shù)學函數(shù),求出目標值y

只是我們在處理實際問題的時候,遇到的模型肯定不是一元函數(shù)、大部分情況下他們也不是一次函數(shù)。而且,我們也不確定我們的數(shù)據(jù)就一定是符合某一種數(shù)學模型的,搞不好他都不是線性模型(這里我們先不討論這種情況)。

那這種情況我們肯定不能用初中數(shù)學的解法,去將x和y的值代入數(shù)學模型求參數(shù),那我們該怎么辦呢?

最小二乘法

沿用上面的一般性回歸假設函數(shù),我們預測的房價是h(θ),我們設真實的房價值是Y。我們既然沒有辦法讓h(θ)和Y完全一樣,那么我們可以讓他們的差盡可能的小,直到小到一個我們可以接受的誤差范圍。(比如房價500萬和500.1萬的誤差我們是完全可以接受的)

這樣,我們又引入了第二個數(shù)學公式——誤差函數(shù)

誤差函數(shù).png

好了,又到了名詞解釋時間了。

上標i代表了是第i個訓練樣本,后面的y含義一樣。

整個J(θ)的含義就是m個訓練樣本,預測值和真實值差的平方和*1/2。

至于為什么乘以1/2就是為了后面求導計算方便,并沒有特殊意義。因為我們的目的是求這個函數(shù)在何處求得最小值(取得最小值時θ的值),那么乘以1/2并不影響對θ的求值。

梯度下降

既然是誤差函數(shù),那我們必然需要想辦法讓這個誤差函數(shù)取得最小值了。

說到取最小值,那自然會想到對一個函數(shù)求導,當導數(shù)=0的時候就是函數(shù)的最小值的點了。但我們是個多元函數(shù),所以只能挨個對每個變量求偏導,然后讓函數(shù)沿著讓導數(shù)下降的方向移動。

求偏導過程

所以,我們需要對每一個特征讓它沿著導數(shù)遞減的方向去移動:

大家可能會問,怎么莫名其妙多出了一個α?

原因是這樣的,我們對一個函數(shù)求偏導數(shù),我們得出的是這個函數(shù)是上升/下降和他們的幅度,如果一個函數(shù)過于陡峭,我們很有可能移動過多,跑到了最低點的另外一邊,然后下一次迭代又跑到了另外一邊,循環(huán)往復……

所以,我們就靠這個α來控制步長,避免移動過快或過慢 。

矩陣運算

其實,上面我們已經可以解決一般線性方程求近似最小值的問題了,但上面的方式不夠直觀,也不夠簡單,現(xiàn)在我們換一種解決方式——矩陣。

我們先將參數(shù)使用矩陣表示:

樣本參數(shù)矩陣
樣本值矩陣

其中m代表是m個樣本。

當我們將樣本使用矩陣表示以后,h(θ)的表示就變成了:

h(θ)的矩陣表示

通過使用矩陣,我們只需要一次矩陣運算就可以將預期值h(θ)計算出來了,是不是很方便?當然,還有更神奇的!

既然我們的h(θ)可以使用矩陣表示,那我們的誤差函數(shù)J(θ)自然也可以使用矩陣去表示。

預測值與真實值誤差

通過一個m*n的矩陣我們就可以將有N個特征值、M個訓練樣本的誤差值表示出來。

上面我們是通過最小二乘法去表示損失函數(shù)的,現(xiàn)在我們將矩陣表達的誤差函數(shù)代入最小二乘法,得到下面的J(θ)表達式:

矩陣表示的J(θ)

老套路,讓我們來看看使用矩陣的時候,θ在何種情況下J(θ)取得最小值,也就是我們的目標θ矩陣。

在進行公示推導之前,我們先復習幾個矩陣運算的基礎知識。

矩陣運算

結合等式(2)和(3)我們又可以得出一個新的等式:

回憶完上面的線性代數(shù)基礎以后,我們可以下面開始我們愉快的推導了:

在第三步的時候,我們利用了一個實數(shù)的trace等于這個實數(shù)的性質。

第四步的時候,我們利用了一個矩陣的trace=它的轉置矩陣的trace的性質。

第五步的話,我們令A的轉置=θ;B=X和它轉置的積;C=I。

最后,我們令J(θ)的導數(shù)=0,這樣θ的取值就代表了J(θ)的最小值。

所以,使用矩陣表示損失函數(shù)最小值的最終公式變?yōu)?

我們使用矩陣的目的是為了讓我們的運算更簡單易懂,我們推導出矩陣表示表達時的θ求值函數(shù)以后,只需要對樣本參數(shù)做4次矩陣運算就可以求出特征矩陣,而不是像上面那樣用好幾個for循環(huán)。

怎么樣,有沒有感覺數(shù)學真的很神奇!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容