如果大家有過高數的學習經歷,就一定對梯度有過一定的學習。接下來,人郵君帶著大家簡單複習一下梯度的概念和意義。
梯度(gradient) 的概念
在空間的每一個點都可以確定無限多個方向,一個多元函式在某個點也必然有無限多個方向。因此,導數在這無限多個方向導數中最大的一個(它直接反映了函式在這個點的變化率的數量級)等於多少?它是沿什麼方向達到的?描述這個最大方向導數及其所沿方向的向量,就是我們所說的梯度。
梯度是場論裡的一個基本概念。所謂“場”, 它表示空間區域上某種物理量的一種分佈。從數學上看,這種分佈常常表示為 2 上的一種數值函式或向量函式。能表示為數值函式u=u (x,y,z) 的場,稱為數量場,如溫度場、密度場等。
梯度的本意是一個向量(向量), 表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。
梯度是雅可比矩陣的一種特殊形式,當m=1時函式的雅可比矩陣就是梯度,這個概念原是為場論設定的,任何場都可以用來理解梯度,後來被引用到數學中用來指明函式在指定點的變數率最快的方向和大小,是一種變化效率的數字抽象。
舉一個降維的例子,在修建一個通向山頂的纜車時,纜車的路線怎麼修建效率最高呢?從山頂到山底一條直線中間可能有山峰阻攔,一昧的修高山頂的到達站不僅不安全還會增加施工效率,在調整修建纜車的角度時的角度變化率就是梯度,角度太低了通不到山頂這個梯度方向角度就是零,方向導數就也是零。
我們可以理解物理中梯度是一個用來做用空間中純量場的一個數學運算,可以用來了解純量場隨空間的變化。而數學中單從梯度的下降演算法而言能夠幫我們找到函式的極小值點。
梯度的使用(之一):梯度下降
類比之前的修纜車的概念,從山頂向山底修纜車就是一個梯度下降的基本過程。修建梯度的山峰就是一個可微分的函式。目標是最有效率的修建到山底的纜車上車點(函式的最小值)最快修建的方式就是找到當前位置最陡峭的方向,沿著此方向向下探索,對應到函式中,就是找到給定點的梯度 ,沿著梯度相反的方向,就能讓函式值下降的最快!因為梯度的方向就是函式之變化最快的方向。在《百面機器學習》中進行很詳細的介紹。
梯度下降演算法,圖源《深度學習原理與實踐》
這種演算法在機器學習中,最佳化問題的目標函式通常可以表示成:
經典的梯度下降法採用所有訓練資料的平均損失來近似目標函式,即
因此經典的梯度下降法在每次對模型引數進行更新時,需要遍歷所有的訓練資料。當M很大時,需要很大的計算量,耗費很長的計算時間,在實際應用中基本不可行。
為了解決該問題,隨機梯度下降法,用單個樣本的損失來近似平均損失,即
因此,隨機梯度下降法用單個訓練資料即可對模型引數進行一次更新,大大加快了收斂速率。該方法也非常適用於資料來源源不斷到來的線上更新場景。
為了降低隨機梯度的方差,從而使得迭代演算法更加穩定,也為了充分利用高度最佳化的矩陣運算操作,在實際應用中我們會同時處理若干訓練資料,該方法被稱為小批次梯度下降法(Mini- Batch Gradient Descent)。假設需要同時處理m個訓練資料
則目標函式及其梯度為
對於小批次梯度下降法的使用,有以下三點需要注意的地方。
(1)如何選取引數m?在不同的應用中,最優的m通常會不一樣需要透過調參選取。一般m取2的冪次時能充分利用矩陣運算操作,所以可以在2的冪次中挑選最優的取值,例32、64、128、256等。
(2)如何挑選m個訓練資料?為了避免資料的特定順序給演算法收斂帶來的影響,一般會在每次遍歷訓練資料之前,先對所有的資料進行隨機排序,然後在每次迭代時按順序挑選m個訓練資料直至遍歷完所有的資料。
(3) 如何選取學習速率a? 為了加快收斂速率,同時提高求解精度,通常會採用衰減學習速率的方案:一開始演算法採用較大的學習速率,當誤差曲線進入平臺期後,減小學習速率做更精細的調整。最優的學習速率方案也通常需要調參才能得到。
綜上,通常採用小批次梯度下降法解決訓練資料量過大的問題。每次更新模型引數時,只需要處理m個訓練資料即可,其中m是一個遠小於總資料量M的常數,這樣能夠大大加快訓練過程。
以上就是梯度的基本概念,和一個基於梯度的實際最佳化的演算法案例。梯度的理解對於機器學習尤其深度學習來說是至關重要的。更多梯度詳解的書籍可以參閱花書《深度學習》中的第七章。
深度學習(非同步圖書出品)
及《百面機器學習》中的第七章部分。
【來源:人民郵電出版社】
宣告:轉載此文是出於傳遞更多資訊之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯絡,我們將及時更正、刪除,謝謝。 郵箱地址:[email protected]