【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算法,它是深度學習中最常見的梯度下降類型。
總結
在這篇文章中,你學到了很多關於梯度下降的知識。你現在知道它的基本術語,並且了解該算法如何在幕後工作。此外,你了解了為什麼學習率是最重要的超參數,以及如何檢查算法是否能夠使你正確訓練你的模型。
最後,你了解了三種最常見的梯度下降類型及其優缺點。這些知識使你能夠正確地訓練模型。