詳解梯度下降算法 正確訓練模型利刃!

2021-01-09 IT168

  【IT168 資訊】梯度下降是目前最流行的優化策略,目前用於機器學習和深度學習。它在訓練模型時使用,可以與每種算法結合使用,易於理解和實施。因此,每個使用機器學習的人都應該理解它的概念。閱讀完這篇文章後,你將了解梯度下降是如何工作的,它今天使用了哪些類型,以及它們的優點和權衡。

  介紹

  在訓練機器學習模型時使用梯度下降。它是一種基於凸函數的優化算法,它迭代地調整參數以使給定函數最小化。

  它只是用來儘可能地找到使成本函數最小化的函數參數(係數)的值。

  首先定義初始參數值,然後在漸變下降中使用微積分迭代調整值,以使它們最小化給定的成本函數。但要充分理解它的概念,首先需要知道梯度是什麼。

  什麼是梯度?

  「一個梯度可以衡量一個函數的輸出如果你稍微改變輸入就會改變多少。」 ——Lex Fridman(麻省理工學院)

  它簡單的衡量了所有權重的變化,並考慮到誤差的變化。你也可以將梯度看作函數的斜率,坡度越高,坡度越陡,模型可以學習得越快。但如果斜率為零,模型就停止學習了。更精確地說,梯度是關於其輸入的偏導數。

  想像一下,一個蒙著眼睛的男人想要爬上一座小山,儘可能的少走幾步。他只是從最陡峭的方向開始爬山,只要他不靠近山頂,他就可以做到。隨著他越來越高,他會做越來越少的步驟,因為他不想超越它。這個過程可以使用梯度、數學方法來描述。

  請看下面的圖片。想像一下,它從自上而下的角度展示了我們的山、紅色箭頭顯示了我們的登山者的步伐。在這種情況下,想像一個梯度,把它作為一個矢量,包含被蒙住眼睛的人可以走的最陡峭的方向,以及步驟的長度。

  請注意,從X0到X1的梯度遠遠長於從X3到X4的梯度。這是因為山的陡坡/坡度較小,這決定了矢量的長度。這完全代表了小山的例子,因為小山變得不那麼陡峭。因此,伴隨著爬坡者坡度和步長的減小坡度減小。

  怎麼運行的?

  梯度下降可以被認為是攀登到山谷的底部,而不是爬上山丘。這是因為它是使給定函數最小化的最小化算法。

  下面的等式描述了梯度下降的作用:「b」描述了我們登山者的下一個位置,而「a」代表了他的當前位置。減號表示梯度下降的最小化部分。中間的「gamma」是一個等待因素,梯度項(Δf(a))僅僅是最陡下降的方向。

  所以這個公式基本上告訴你下一個你需要去的位置,這是最陡下降的方向。

  但要確保你完全理解這個概念,需要通過另一個例子。

  想像一下,你正在處理機器學習問題,並希望通過梯度下降訓練你的算法,以最小化成本函數J(w,b),並通過調整其參數(w和b)來達到其局部最小值。

  讓我們來看看下面的圖片,這是梯度下降的例證。水平軸表示參數(w和b),成本函數J(w,b)表示在垂直軸上。你也可以在圖像中看到漸變下降是一個凸函數。

  就像你已經知道的那樣,我們想要查找與成本函數的最小值相對應的W和B的值(用紅色箭頭標記)。首先找到正確的值,我們用一些隨機數初始化W和B的值,然後梯度下降從那一點開始(在我們的插圖的頂部附近)。然後以最陡的下行方向(例如從圖的頂部到底部)一步接一步,直到它達到成本函數儘可能小的點。

  學習率的重要性

  梯度下降到佔據局部最小值的方向有多大,取決於所謂的學習率。它決定了我們如何快速或慢速朝著最優權重。

  為了使梯度下降達到當地最低限度,我們必須將學習率設置為適當的值,該值既不低也不太高。

  這是因為如果步驟太大,它可能不會達到局部最小值,因為它只是在梯度下降的凸函數之間來回跳動,就像你可以在下面的圖像左側看到的那樣。如果你將學習速率設置為非常小的值,漸變下降最終將達到局部最小值,但它可能會花費太多時間,就像你可以在圖像的右側看到的那樣。

  這就是為什麼學習率不應該太高也不能太低。你可以通過在圖表上繪製學習率來檢查你的學習速度是否正常,我們將在下面部分討論。

  如何確保它正常工作

  確保梯度下降正常運行的一種好方法是將梯度下降運行時的成本函數繪製成圖。x軸上的迭代次數和y軸上的成本函數值使你可以在每次迭代梯度下降後查看成本函數的值。這可以讓你輕鬆找出適合的學習率。而你只需嘗試不同的值並將它們一起繪製。

  你可以在左側看到這樣的情節,右側的圖像顯示了好的和不好的學習率之間的差異:

  如果梯度下降是正常工作,則每次迭代後成本函數應該降低。

  當梯度下降不再降低成本函數並且保持或多或少處於同一水平時,我們說它已經收斂。請注意,梯度下降需要收斂的迭代次數有時會有很大差異。它可能需要50次迭代,6萬次甚至300萬次。因此,迭代次數很難預先估計。

  另外還有一些算法可以自動告訴你,如果梯度下降已經收斂,但你需要事先定義一個閥值的收斂,這也很難估計。這就是為什麼這些簡單的情節是首選的收斂性測試。

  通過繪圖監視漸變下降的另一個優點是,你可以很容易地發現它是否無法正常工作,例如,如果成本函數正在增加。大多數情況下,使用漸變下降的成本函數越來越多,原因是學習速度過高。

  如果你在情節中看到你的學習曲線正在上升和下降,而沒有真正達到低點,你也應該嘗試降低學習速度。順便說一下,當你在一個給定的問題上開始使用梯度下降法時,只需簡單地嘗試0.001,0.003,0.01,0.03,0.1,0.3,1等等,看看它的學習速度哪一個表現最好。

  梯度下降的類型

  外面有三種流行的梯度下降類型,主要是它們使用的數據量不同,我們一一瀏覽它們。

  批次梯度下降

  批次梯度下降也稱為香草梯度下降,計算訓練數據集內每個示例的誤差,但只有在所有訓練樣例已經評估後,模型才會更新。整個過程就像一個循環,稱為訓練時代。

  它的優點是它的計算效率高,它產生一個穩定的誤差梯度和穩定的收斂。批梯度下降具有的缺點是,穩定的誤差梯度有時可能導致收斂狀態不是模型能達到的最佳狀態。它還要求整個訓練數據集存儲在內存中並可供算法使用。

  隨機梯度下降

  相反,隨機梯度下降(SGD)對於數據集內的每個訓練樣例都是這樣。這意味著它會逐個更示例個訓練示例的參數。這可能會使SGD比批量漸變下降更快,具體取決於問題。一個好處是頻繁的更新使我們有一個相當詳細的改進速度。

  問題在於頻繁更新的批處理梯度下降方法在計算上更加昂貴。這些更新的頻率也會導致噪音梯度,這可能會導致錯誤率跳躍,而不是緩慢下降。

  迷你批次梯度下降

  小批量梯度下降法是一種先進的方法,因為它是SGD和批次梯度下降概念的組合。它只是將訓練數據集分成小批量,並為這些批次中的每個批次執行更新。因此它可以在隨機梯度下降的穩健性和批梯度下降的效率之間建立平衡。

  常見的小批量大小範圍在50到256之間,但是對於任何其他機器學習技術而言,沒有明確的規則,因為它們可以針對不同的應用而變化。請注意,它是在訓練神經網絡時的go-to算法,它是深度學習中最常見的梯度下降類型。

  總結

  在這篇文章中,你學到了很多關於梯度下降的知識。你現在知道它的基本術語,並且了解該算法如何在幕後工作。此外,你了解了為什麼學習率是最重要的超參數,以及如何檢查算法是否能夠使你正確訓練你的模型。

  最後,你了解了三種最常見的梯度下降類型及其優缺點。這些知識使你能夠正確地訓練模型。

相關焦點

  • 從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法
    最後,當訓練過程滿足特定的條件或停止標準時,訓練算法就會停止迭代,而這個時候的參數也就是最優參數(神經網絡中可能是局部最優解),神經網絡的性能也由它們所決定。下面,本文將描述在神經網絡中最重要的學習算法。梯度下降梯度下降,又稱為最速下降法是一種非常簡單和直觀的訓練算法。該算法從梯度向量中獲取優化信息,因此其為一階算法(通過一階偏導求最優權重)。
  • 梯度下降算法詳解
    原創 | CDA數據分析研究院,轉載需授權介紹如果說在機器學習領域有哪個優化算法最廣為認知,用途最廣,非梯度下降算法莫屬。梯度下降算法是一種非常經典的求極小值的算法,比如在線性回歸裡我們可以用最小二乘法去解析最優解,但是其中會涉及到對矩陣求逆,由於多重共線性問題的存在是很讓人難受的,無論進行L1正則化的Lasso回歸還是L2正則化的嶺回歸,其實並不讓人滿意,因為它們的產生是為了修復此漏洞,而不是為了提升模型效果,甚至使模型效果下降。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    應該用梯度下降,隨機梯度下降,還是Adam方法? 這篇文章介紹了不同優化算法之間的主要區別,以及如何選擇最佳的優化方法。 什麼是優化算法? 優化算法的功能,是通過改善訓練方式,來最小化(或最大化)損失函數E(x)。 模型內部有些參數,是用來計算測試集中目標值Y的真實值和預測值的偏差程度的,基於這些參數,就形成了損失函數E(x)。
  • 【乾貨】機器學習最常用優化之一——梯度下降優化算法綜述
    有三種梯度下降算法框架,它們不同之處在於每次學習(更新模型參數)使用的樣本個數,每次更新使用不同的樣本會導致每次學習的準確性和學習時間不同。 批量梯度下降每次學習都使用整個訓練集,因此其優點在於每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點(凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點),但是其缺點在於每次學習時間過長,並且如果訓練集很大以至於需要消耗大量的內存,並且全量梯度下降不能進行在線模型參數更新。
  • 技術| 深度解讀最流行的優化算法:梯度下降
    本文旨在讓你對不同的優化梯度下降法的算法有一個直觀認識,以幫助你使用這些算法。我們首先會考察梯度下降法的各種變體,然後會簡要地總結在訓練(神經網絡或是機器學習算法)的過程中可能遇到的挑戰。我們首先會考察梯度下降法的各種變體,然後會簡要地總結在訓練(神經網絡或是機器學習算法)的過程中可能遇到的挑戰。接著,我們將會討論一些最常見的優化算法,研究它們的解決這些挑戰的動機及推導出更新規律(update rules)的過程。我們還會簡要探討一下,在平行計算或是分布式處理情況下優化梯度下降法的算法和架構。最後,我們會考慮一下其他有助於優化梯度下降法的策略。
  • 10個梯度下降優化算法+備忘單
    ,在深度學習模型中常常用來在反向傳播過程中更新神經網絡的權值。在一個線性回歸問題中,我已經用梯度下降實現了SGD, momentum, Nesterov, RMSprop 以及Adam,獲取代碼(JavaScript)通過梯度下降,優化算法可以在如下三個主要方面起作用:1、修改學習率成分,α, 或2、修改梯度成分
  • 機器學習:隨機梯度下降和批量梯度下降算法介紹
    機器學習:隨機梯度下降和批量梯度下降算法介紹 佚名 發表於 2017-11-28 04:00:28 隨機梯度下降(Stochastic gradient descent)
  • 梯度下降背後的數學原理幾何?
    v=yvouUpxIqts&t=145s一、梯度下降變體:不止一個梯度下降採用機器學習算法實現了三種主要的變體,每個變體在計算效率上各異並且都具有各自獨特的優勢。1、第一種變體:批量梯度下降批量梯度下降(Batch Gradient Descent)可以說是梯度下降變體中最簡單的一種。
  • 機器學習之多元線性回歸模型梯度下降公式與代碼實現(篇二)
    ,我們確定用梯度下降法來計算多元線性模型,當然還有更多計算方式。梯度下降法又稱最速下降法,是求解無約束最優化問題的一種最常用的方法,在對損失函數最小化時經常使用。梯度下降法是一種迭代算法。選取適當的初值x(0),不斷迭代,更新x的值,進行目標函數的極小化,直到收斂。
  • 訓練神經網絡的五大算法
    1. 梯度下降法(Gradient descent) 梯度下降方法是最簡單的訓練算法。這個參數既可以設置為固定值,也可以用一維優化方法沿著訓練的方向逐步更新計算。人們一般傾向於逐步更新計算學習率,但很多軟體和工具仍舊使用固定的學習率。 下圖是梯度下降訓練方法的流程圖。如圖所示,參數的更新分為兩步:第一步計算梯度下降的方向,第二步計算合適的學習率。
  • 吳恩達深度學習筆記(12)-計算圖計算梯度下降
    邏輯回歸中的梯度下降(Logistic Regression Gradient Descent)本節我們討論怎樣通過計算偏導數來實現邏輯回歸的梯度下降算法。它的關鍵點是幾個重要公式,其作用是用來實現邏輯回歸中梯度下降算法。但是在本節中,將使用計算圖對梯度下降算法進行計算。
  • 最清晰的講解各種梯度下降法原理與Dropout
    二、全量梯度下降法(Batch gradient descent)全量梯度下降法每次學習都使用整個訓練集,因此每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點,凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點,缺陷就是學習時間太長,消耗大量內存。
  • 梯度下降—Python實現
    梯度下降是數據科學的基礎,無論是深度學習還是機器學習。深入了解梯度下降原理一定會對你今後的工作有所幫助。你將真正了解這些超參數的作用以及處理使用此算法可能遇到的問題。然而,梯度下降並不局限於一種算法。另外兩種流行的梯度下降(隨機和小批量梯度下降)建立在主要算法的基礎上,你可能會看到比普通批量梯度下降更多的算法。
  • 隨機梯度下降法介紹及其參數講解
    算法介紹簡單來說,梯度下降就是從山頂找一條最短的路走到山腳最低的地方。
  • 從頭開始:用Python實現帶隨機梯度下降的Logistic回歸
    輸入數據中的每一列都有一個相關係數 b(一個常數實數值),這個係數是從訓練集中學習的。存儲在存儲器或文件中的最終模型的實際上是等式中的係數(β值或 b)。logistic 回歸算法的係數必須從訓練集中估計。隨機梯度下降梯度下降是通過順著成本函數(cost function)的梯度來最小化函數的過程。
  • 吳恩達機器學習筆記 - 線性回歸、代價函數與梯度下降
    - 分類問題1.3 監督學習監督學習可以理解為:算法使用的數據集中已經人為設置了正確的屬性。比如用監督學習來根據房屋面積預測房價,那麼在訓練數據集中每個房屋面積都對應一個確定的價格(750, 200)。這個確定的價格 200 就是我們人為給定的,用來訓練算法模型(預測函數參數)。
  • 梯度提升算法
    在上一篇介紹提升樹模型時,我們用到的損失函數一般都是指數函數或者平方函數,這些函數都比較容易求導,也能很方便的求出優化後的結果。 但對於更為一般的損失函數而言,求解優化的過程並沒有那麼簡單。為此,Friedman提出了梯度提升算法。
  • 機器學習 101:一文帶你讀懂梯度下降
    因為對於初學者來說,這樣做能夠讓你更好地理解大多數機器學習算法是如何工作的。另外,想要培養對複雜項目的直覺,理解基本的概念也是十分關鍵的。  為了理解梯度下降的核心,讓我們來看一個運行的例子。這項任務是這個領域的一項老任務——使用一些歷史數據作為先驗知識來預測房價。 我們的目標是討論梯度下降。
  • 梯度下降兩大痛點:陷入局部極小值和過擬合
    介紹 基於梯度下降訓練神經網絡時,我們將冒網絡落入局部極小值的風險,網絡在誤差平面上停止的位置並非整個平面的最低點。此外,儘管在訓練數據上,網絡可能到達全局最小值,並收斂於所需點,我們無法保證網絡所學的概括性有多好。這意味著它們傾向於過擬合訓練數據。
  • 把梯度下降算法變成酷炫遊戲,這有一份深度學習通俗講義
    原來梯度下降算法還能變得像遊戲視頻一樣酷炫:梯度下降算法的可視化到底什麼是梯度?深度學習的架構和最新發展,包括CNN、RNN、造出無數假臉的GAN,都離不開梯度下降算法。梯度可以理解成山坡上某一點上升最快的方向,它的反方向就是下降最快的方向。想要以最快的方式下山,就沿著梯度的反方向走。看起來像沙盤推演的東西,其實是我們撒出的小球,它們會沿著梯度下降的方向滾到谷底。