機器學習 101:一文帶你讀懂梯度下降

2020-12-08 雷鋒網

原標題 | Machine Learning 101: An Intuitive Introduction to Gradient Descent

作者 | Thalles Silva

譯者 | 汪鵬(重慶郵電大學)、通夜(中山大學)

編輯:王立魚

英語原文:https://towardsdatascience.com/machine-learning-101-an-intuitive-introduction-to-gradient-descent-366b77b52645

梯度下降無疑是大多數機器學習(ML)算法的核心和靈魂。我絕對認為你應該花時間去理解它。因為對於初學者來說,這樣做能夠讓你更好地理解大多數機器學習算法是如何工作的。另外,想要培養對複雜項目的直覺,理解基本的概念也是十分關鍵的。  

為了理解梯度下降的核心,讓我們來看一個運行的例子。這項任務是這個領域的一項老任務——使用一些歷史數據作為先驗知識來預測房價。 

我們的目標是討論梯度下降。所以我們讓這個例子簡單一點,以便我們可以專注於重要的部分。

但是在我們開始之前,你可以點擊此處獲取代碼

假設你想爬一座很高的山,你的目標是最快到達山頂,可你環顧四周後,你意識到你有不止一條路可以走,既然你在山腳,但似乎所有選擇都能讓你離山頂更近。  

如果你想以最快的方式到達頂峰,所以你要怎麼做呢?你怎樣才能只邁出一步,而能夠離山頂最近?  

到目前為止,我們還不清楚如何邁出這一步!而這就是梯度的用武之地。  

正如可汗學院的這段視頻所述,梯度獲取了一個多變量函數的所有偏導數。

讓我們一步步來看看它是如何工作的。

用更簡單的話來說,導數是一個函數在某一點的變化率或斜率。 

以f(x)=x²函數為例。f(x)的導數就是另一個函數f'(x)在一個定點x的值,f'(x)就是f(x)的斜率函數。在這種情況下,當x=2時,f(x) = x²的斜率是2 x,也就是2*2=4。  

f(x) = x²在不同點的斜率。

簡單地說,導數指向上升最陡的方向。恰巧的是,梯度和導數基本上是一樣的。除了一點,即梯度是一個向量值函數,向量裡包含著偏導數。換句話說,梯度是一個向量,它的每一個分量都是對一個特定變量的偏導數。  

以函數f(x,y)=2x²+y²為另一個例子。  

這裡的f(x,y)是一個多變量函數。它的梯度是一個向量,其中包含了f(x,y)的偏導數,第一個是關於x的偏導數,第二個是關於y的偏導數。

如果我們計算f(x,y)的偏導數。 

得到的梯度是以下這樣的向量:  

請注意,其中每個元素都指示了函數裡每個變量的最陡上升方向。換句話說,梯度指向函數增長最多的方向。 

回到爬山的例子中,坡度指向的方向是最快到達山頂的方向。換句話說,梯度指向一個面更高的地方。 

同樣的,如果我們有一個有四個變量的函數,我們會得到一個有四個偏導數的梯度向量。通常,一個有n個變量的函數會產生一個n維梯度向量。 

但是對於梯度下降,我們不想讓f函數儘快地最大化,我們想讓它最小化。  

所以讓我們先定義我們的任務,讓目標變得更清晰明確一點。

我們的目標是基於歷史數據來預測房價。而想要建立一個機器學習模型,我們通常需要至少3個要素——問題T、性能度量P和經驗E,我們的模型將從這其中學習到一些模式知識。  

為了解決問題T,我們將使用一個簡單的線性回歸模型。該模型將從經驗E中學習,經過訓練,模型就能將其知識推廣到未知數據中。  

線性模型是一個很好的學習模型。它是許多其他ML算法的基礎,比如神經網絡和支持向量機。  

在本例中,經驗E就是房屋數據集。房屋數據集包含了聖路易斯奧比斯波縣及其周邊地區最近的房地產清單。  

數據集包含了781條數據記錄,可以在原文下載CSV格式的數據文件。為了簡便,在數據的8個特徵中,我們只關注其中的兩個特徵 : 房屋大小和價格。在這781條記錄中,每一條記錄的房屋大小(以平方英尺為單位)將是我們的輸入特徵,而價格則是我們的預測目標值。  

此外,為了檢查我們的模型是否正確地從經驗E中學習到了模式知識,我們需要一個機制來衡量它的性能。因此,我們將平方誤差(MSE)的均值作為性能度量P。

多年來,MSE一直是線性回歸的標準。但從理論上講,任何其他誤差測量方法,比如絕對誤差,都是可用的。而MSE的一些優點是,它對誤差的衡量比絕對誤差更好。 

現在我們已經公式化了我們的學習算法,讓我們深入研究代碼。 

首先,我們使用pandas在python中加載數據,並分離房屋大小和價格特徵。之後,我們對數據進行標準化,以防止某些特徵的大小範圍與其他特徵不同。而且,標準化過的數據在進行梯度下降時,收斂速度比其他方法快得多。

下面,你可以看到以平方米為單位的房價分布。

按面積計算的房價分布。數據被標準化到了[0,1]區間。

線性回歸模型的工作原理是在數據上畫一條線。因此,我們的模型由一個簡單的直線方程表示。

線性方程,m和b分別是斜率和y軸的截距,x變量是輸入值。  

對於線性模型,斜率m和y軸的截距b是兩個自由的參數。我們則要通過改變這兩個參數來找到最好的直線方程。  

我們將對它們迭代執行一些細小的改變,這樣它就可以沿著誤差曲面上最陡的下降方向走。在每次迭代之後,這些權重變化將改善我們的模型,使得它能夠表示數據集的趨勢。  

在繼續往下看之前,請記住我們要取梯度的反方向來進行梯度下降。 

你可以把梯度下降想像成一個球滾下山谷。我們想讓它落在最深的山谷裡,然而很明顯,我們看到實際情況可能會出錯。  

打個比方,我們可以把梯度下降想像成一個球滾下山谷。最深的山谷是最優的全局最小值,這是我們的目標。  

根據球開始滾動的位置,它可能停在某一個山谷的底部。但不是最低的。這叫做局部極小值,在我們的模型中,山谷就是誤差面。 

注意,在類比中,並不是所有的局部極小值都是糟糕的。實際上其中一些幾乎和最低的(全局)一樣低(好)。事實上,對於高維誤差曲面,最常見的方法是使用這些局部極小值中的一個(其實也不是很糟糕)。 

類似地,我們初始化模型權重的方法可能會導致它停留在局部極小值。為了避免這種情況,我們從均值為零且方差較小的隨機正態分布中初始化兩個權值向量。 

在每次迭代中,我們將取數據集的一個隨機子集,並將其與權重線性組合。這個子集稱為迷你批處理(mini-batch)。在線性組合後,我們把得到的向量輸入MSE函數,計算新的誤差。 

利用這個誤差,我們可以計算出誤差的偏導數,然後得到梯度。 

首先,我們得到關於W0的偏導數:

W0的偏導數

接下來,我們求W1的偏導數

W1的偏導數

由這兩個偏導數,我們可以得到梯度向量:

梯度向量

其中Err是MSE錯誤函數。

有了這個,我們的下一步是使用梯度更新權重向量W0和W1,以最小化誤差。

我們想要更新權重,以便它們可以在下一次迭代中將錯誤降低。我們需要使它們遵循每個相應梯度信號的相反方向。為此,我們將在這個方向上採取小尺寸η的小步驟。

步長η是學習率,它控制學習速度。根據經驗,一個好的起點是0.1。最後,更新步驟規則設置為:

在代碼中,完整的模型看起來像這樣。查看兩個梯度DW0和DW1前面的減號。這保證了我們將在與梯度相反的方向上採取步驟。

更新權重後,我們使用另一個隨機小批量重複該過程,就是這樣。

逐步地,每次重量更新導致線路中的小的移動朝向其最佳表示。最後,當誤差方差足夠小時,我們就可以停止學習。

隨時間變換的線性模型。第一次權重更新使線條快速達到理想的表示。

此版本的梯度下降稱為迷你批處理(Mini-Batch)隨機梯度下降。在這個版本中,我們使用一小部分訓練數據來計算梯度。每個小批量梯度提供最佳方向的近似值。即使梯度沒有指向確切的方向,實際上它也會收斂到非常好的解決方案。


每一個Epoch的錯誤信號。請注意,在非常快地減小誤差信號之後,模型會減慢並收斂。

如果你仔細觀察錯誤圖表,你會注意到,在開始時學習速度會更快。

然而,在經過一些Epoch之後,它會放慢速度並保持平穩。這是因為,在開始時,指向最陡下降的梯度向量的幅度很長。結果,兩個權重變量W0和W1遭受更大的變化。

接著,隨著它們越來越靠近誤差表面的頂點,梯度逐漸變得越來越小,這導致了權重的非常小的變化。

最後,學習曲線穩定,並且過程完成。雷鋒網(公眾號:雷鋒網)雷鋒網雷鋒網

想要繼續查看該篇文章相關連結和參考文獻?

點擊【機器學習101:一文帶你讀懂梯度下降】即可訪問!

今日博客推薦:「元學習」解析:學習如何梯度下降與學習新的算法

本文作者 Cody Marie Wild,她是一位機器學習領域的數據科學家,在生活中還是名貓咪鏟屎官,她鍾愛語言和簡潔優美的系統。在這篇文章中,Cody 介紹了元學習的基本概念和方法類別,討論了「元學習」到底在學什麼、又有哪些限制。

詳情查看點擊:https://ai.yanxishe.com/page/blogDetail/5798


雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 一文讀懂線性回歸和梯度下降
    這一計算公式稱為回歸方程,得到這個方程的過程就稱為回歸。    線性回歸就是假設這個方式是一個線性方程,即假設這個方程是一個多元一次方程。以咱們上面提到的例子為例:假設房子的房屋面積和臥室數量為自變量x,用x1表示房屋面積,x2表示臥室數量;房屋的交易價格為因變量y,我們用h(x)來表示y。
  • 機器學習:隨機梯度下降和批量梯度下降算法介紹
    機器學習:隨機梯度下降和批量梯度下降算法介紹 佚名 發表於 2017-11-28 04:00:28 隨機梯度下降(Stochastic gradient descent)
  • 【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述
    原標題:【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述 1新智元獲授權轉載 【新智元導讀】梯度下降算法是機器學習中使用非常廣泛的優化算法,也是眾多機器學習算法中最常用的優化方法。幾乎當前每一個先進的(state-of-the-art)機器學習庫或者深度學習庫都會包括梯度下降算法的不同變種實現。
  • 一文帶你讀懂計算機視覺
    該方法基於計算圖像像素的梯度。然後將這些特徵饋送到機器學習算法,例如SVM。這種方法具有比Haar分類器更好的精度。這種方法的實現在dlib中,就是在face_recognition ( https://github.com/ageitgey/face_recognition ) lib中。
  • 梯度下降背後的數學原理幾何?
    雷鋒網 AI 科技評論按:對於諸位「機器學習兒」而言,梯度下降這個概念一定不陌生,然而從直觀上來看,梯度下降的複雜性無疑也會讓人「敬而遠之」。本文作者 Suraj Bansal 通過對梯度下降背後的數學原理進行拆解,並配之以簡單的現實案例,以輕鬆而有趣的口吻帶大家深入了解梯度下降這一在機器學習領域至關重要的方法。
  • 文科生都能看懂的機器學習教程:梯度下降、線性回歸、邏輯回歸
    現在,機器學習這麼火,想入行的人越來越多,然而被搞糊塗的人也越來越多。因為大眾很難理解機器學習是幹嗎的?那些神秘拗口的概念,比如邏輯回歸、梯度下降到底是什麼?j  一個23歲的藥物學專業的學生說,當他去參加機器學習培訓課程的時候,感覺自己就家裡那位不懂現代科技的奶奶。
  • 機器學習 梯度到底是什麼
    梯度,到底是什麼?很容易混淆。站在山底,哪個方向爬坡最快,這個容易想像,但問題是,如果所在的高度是我們優化的目標的話,這個爬坡的方向並不是梯度的方向,這個是我們的目標值(函數值)的變化趨勢。我們先看一下定義:即:梯度是一個向量,而向量就有方向,該方向是方向導數取得最大值的方向,那方向導數是什麼?可見:方向導數是一個數方向指的是函數定義域的內點變化的方向 綜上,自變量沿著該方向變化,使函數值變化最大,機器學習中,函數值就是我們的優化目標。當函數值是損失函數值的時候,我們期望的是最小值,這個時候取梯度的反方向,即梯度下降即可。
  • 一分鐘看完梯度下降法
    今天,我想講一下梯度下降法(Gradient Descent),基於線性回歸損失函數的梯度下降法。
  • 梯度下降算法詳解
    原創 | CDA數據分析研究院,轉載需授權介紹如果說在機器學習領域有哪個優化算法最廣為認知,用途最廣,非梯度下降算法莫屬。神經網絡中的後向傳播算法其實就是在進行梯度下降,GDBT(梯度提升樹)每增加一個弱學習器(CART回歸樹),近似於進行一次梯度下降,因為每一棵回歸樹的目的都是去擬合此時損失函數的負梯度,這也可以說明為什麼GDBT往往沒XGBoost的效率高,因為它沒辦法擬合真正的負梯度,而Xgboost 的每增加的一個弱學習器是使得損失函數下降最快的解析解。
  • VGGNet vs ResNet:機器學習中的梯度消失問題
    你能解釋一下VGGNet和ResNet的區別嗎?這是人工智慧和機器學習領域的一個常見面試問題。雖然答案可以在網上找到,但一直還沒能找到一個簡明扼要的答案。我們將從什麼是VGGNet開始,然後看看VGGNet遇到了什麼問題,以及ResNet如何解決它。
  • 從頭開始:用Python實現帶隨機梯度下降的Logistic回歸
    在本教程中,你將了解如何在 Python 中實現隨機梯度下降的 logistic 回歸算法。學完本教程後,你將了解:如何使用 logistic 回歸模型進行預測。在機器學習中,我們可以使用一種技術來評估和更新每次迭代後的係數,這種技術稱為隨機梯度下降,它可以使模型的訓練誤差(training error)最小化。此優化算法每次將每個訓練樣本傳入模型。模型對訓練樣本進行預測,計算誤差並更新模型以便減少下一預測的誤差。該過程可以找到使訓練誤差最小的一組係數。
  • 一文帶你讀懂自然語言處理 - 事件提取
    我們的目的是抽取這些文章總的事件。為簡化這一過程,只保留文章標題 (理論上,標題應該蘊涵新聞的核心內容)。總的來說,由於我們期望同一組中包含非常相似的句子,也就是得到一個較高的分類數。因此選取 0.08 ~ 0.12之間。參見 Scikit Learn 中關於 eps 和其他參數的說明。
  • 梯度下降—Python實現
    梯度下降是數據科學的基礎,無論是深度學習還是機器學習。深入了解梯度下降原理一定會對你今後的工作有所幫助。你將真正了解這些超參數的作用以及處理使用此算法可能遇到的問題。然而,梯度下降並不局限於一種算法。另外兩種流行的梯度下降(隨機和小批量梯度下降)建立在主要算法的基礎上,你可能會看到比普通批量梯度下降更多的算法。
  • 詳解梯度下降算法 正確訓練模型利刃!
    【IT168 資訊】梯度下降是目前最流行的優化策略,目前用於機器學習和深度學習。它在訓練模型時使用,可以與每種算法結合使用,易於理解和實施。因此,每個使用機器學習的人都應該理解它的概念。閱讀完這篇文章後,你將了解梯度下降是如何工作的,它今天使用了哪些類型,以及它們的優點和權衡。
  • Batch、Mini-batch和隨機梯度下降的區別和Python示例
    在研究機器學習和深度學習時出現的主要問題之一是梯度下降的幾種類型。在梯度下降的三種類型(Batch梯度下降、Mini-batch梯度下降和隨機梯度下降)中,我應該使用哪一種呢?在這篇文章中,我們將了解這些概念之間的區別,並從梯度下降的代碼實現來闡明這些方法。
  • 機器學習之多元線性回歸模型梯度下降公式與代碼實現(篇二)
    機器學習之線性回歸模型詳細手推公式與代碼實現(篇一)今天這一篇來介紹多元線性回歸模型多元線性回歸模型介紹在回歸分析中,如果有兩個或兩個以上的自變量,就稱為多元回歸,我們確定用梯度下降法來計算多元線性模型,當然還有更多計算方式。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    原標題:一文看懂各種神經網絡優化算法:從梯度下降到Adam方法 王小新 編譯自 Medium 量子位 出品 | 公眾號 QbitAI 在調整模型更新權重和偏差參數的方式時,你是否考慮過哪種優化算法能使模型產生更好且更快的效果?
  • 最清晰的講解各種梯度下降法原理與Dropout
    一、梯度法思想梯度法思想的三要素:出發點、下降方向、下降步長。機器學習中常用的權重更新表達式為:,這裡的λ就是學習率,本文從這個式子出發來把機器學習中的各種「梯度」下降法闡釋清楚。機器學習目標函數,一般都是凸函數,什麼叫凸函數?限於篇幅,我們不做很深的展開,在這兒我們做一個形象的比喻,凸函數求解問題,可以把目標損失函數想像成一口鍋,來找到這個鍋的鍋底。非常直觀的想法就是,我們沿著初始某個點的函數的梯度方向往下走(即梯度下降)。
  • 線性回歸和梯度下降的初學者教程
    這就是為什麼我們需要使用梯度下降。梯度下降是一種找到最佳擬合線的工具。在深入研究梯度下降之前,先看看另一種計算最佳擬合線的方法。最佳擬合線的統計計算方法:直線可以用公式表示:y=mx+b。回歸線斜率m的公式為:m = r * (SD of y / SD of x)。
  • 吳恩達機器學習筆記 - 線性回歸、代價函數與梯度下降
    漁網圖像中(theta_0,theta_1)在漁網的最底部取得,使得代價函數達到最小值;h_theta(x) 圖像中預測的函數曲線對訓練數據的擬合效果達到最優;四、梯度下降算法如何在程序中求代價函數的最小值呢?可以使用經典的梯度下降算法,迭代求代價函數 J(theta_0, theta_1) 的最小值。