梯度下降演算法是機器學習中最流行的最佳化技術之一。它有三種類型:批次梯度下降(GD)、隨機梯度下降(SGD)和小批次梯度下降(在每次迭代中用於計算損失函式梯度的資料量不同)。
本文的目標是描述基於朗格文動力學(LD)的全域性最佳化器的研究進展,LD是一種分子運動的建模方法,它起源於20世紀初阿爾伯特·愛因斯坦和保羅·朗之萬關於統計力學的著作。
我將從理論物理學的角度提供一個優雅的解釋,為什麼梯度下降的變種是有效的全域性最佳化器。
奇蹟的一年
沒有跡象表明一場革命即將發生。1904年,如果阿爾伯特·愛因斯坦放棄了物理學,他的科學家同行們可能甚至都不會注意到。幸運的是,這並沒有發生。1905年,這位年輕的專利職員發表了四篇革命性的論文。
阿爾伯特·愛因斯坦
流體中的隨機運動
在其中一篇論文中,愛因斯坦推匯出了所謂的布朗運動模型,即液體中懸浮粒子的隨機運動,由與更小、快速運動的分子(例如在水中運動的花粉顆粒)的碰撞引起。
布朗運動:塵埃粒子與氣體分子的碰撞
在這篇論文中,他證實了原子和分子的存在,由此誕生了物理學的一個新的分支——分子動力學,創造了應用數學的一個嶄新領域——隨機微積分。
朗之萬動力學
1908年,在愛因斯坦發表他的里程碑式論文三年後,法國物理學家保羅·朗之萬發表了另一篇開創性的文章,他在文中概括了愛因斯坦的理論,並發展了一個描述布朗運動的新微分方程,即今天的朗之萬方程(LE):
其中x是運動粒子的位置,m是它的質量,R表示一個(隨機的)力產生與較小的,快速移動的流體分子的碰撞(見上面的動畫),F表示任何其他外力。隨機力R是一個delta相關的平穩高斯過程,其均值和方差如下:
R是一個正常的過程。
術語“delta相關”意味著兩個不同時間的力是零相關的。LE是第一個描述不平衡熱力學的數學方程。
法國物理學家保羅·朗之萬
如果粒子的質量足夠小,我們可以把左邊設為零。此外,我們可以用某個勢能的導數來表示一個(保守)力。我們得到:
小質量的朗之萬方程
寫作:
其中δt是一個小時間間隔,並有移動項,我們得到了小質量粒子的離散朗之萬方程:
小慣性粒子的離散朗之萬方程。
用這種方式表示,朗之萬方程描述了經歷布朗運動的粒子的增量位移。
布朗運動的Python程式碼
為了模擬二維離散佈朗過程,採用了兩種一維過程。步驟如下:
首先,選擇時間步數“steps”。
座標x和y是隨機跳躍的累積和(函式np。cumsum()用於計算它們)。
中間點X和Y透過使用np。interp()插值計算。
然後使用plot()函式繪製布朗運動。
程式碼是:
import numpy as np
import matplotlib。pyplot as plt
%matplotlib inlinesteps = 5000
random。seed(42)
x,y = np。cumsum(np。random。randn(steps)), np。cumsum(np。random。randn(steps))points = 10
ip = lambda x, steps, points: np。interp(np。arange(steps*points),
np。arange(steps)*points,
x)
X, Y = ip(x, steps, points), ip(y, steps, points)fig, ax = plt。subplots(1, 1, figsize=(10, 10))
ax。set_title(‘Brownian Motion’)
ax。set_xlabel(‘x’)
ax。set_ylabel(‘y’)
ax。plot(X, Y, color=‘blue’,
marker=‘o’, markersize=1)
布朗運動圖解
朗之萬動力學與全域性極小值
朗之萬動力學的一個重要性質是隨機過程x(t)(其中x(t)服從上面給出的Langevin方程)的擴散分佈p(x)收斂於平穩分佈,即普遍存在的波爾茲曼分佈(BD)。
波爾茲曼分佈
它集中在勢能E(x)的全域性最小值附近(從它的函式形式,我們可以很容易地看到BD峰在勢能E(x)的全域性最小值上)。更準確地說,如果溫度按照離散步驟緩慢降至零:
那麼p(x)在n的大值時收斂於玻爾茲曼分佈(x收斂於E(x)的全域性最小值)。朗之萬方程的時變溫度通常被解釋為描述亞穩態物理狀態的衰減到系統的基態(這是能量的全域性最小值)。因此,我們可以使用朗之萬動力學來設計算法,使其成為潛在非凸函式的全域性最小化。
這一原理是模擬退火技術的基礎,用於獲得近似的全域性最優函式。
模擬退火在尋找極大值中的應用。
梯度下降演算法
現在我將轉到機器學習最佳化演算法。
梯度下降是一個簡單的迭代最佳化演算法最小化(或最大化)函式。在機器學習的背景下,這些函式是損失函式。為具體起見,考慮一個多元損失函式L(w),定義了一些不動點p周圍的所有點w。GD演算法基於一個簡單的性質,即從任何點p開始,函式L(w)在其負梯度方向上衰減最快:
損失函式的負梯度。
人們首先猜測最小值的初始值,然後計算序列:
遵循迭代過程:
梯度下降法遞迴。
其中,γ為學習率,允許在每次迭代n時改變學習率。如果損失函式L及其梯度具有一定的性質,按照一定的協議選擇學習率變化,保證區域性收斂(只有當L是凸函式時才保證收斂到全域性最小值,因為對於凸函式,任何區域性最小值也是全域性最小值)。
隨機梯度下降(SGD)和小批次梯度下降
基本的GD演算法在每次迭代時都掃描完整的資料集,而SGD和小批次GD只使用訓練資料的一個子集。SGD在每次迭代中使用單個訓練資料樣本更新梯度,即在掃描訓練資料時,對每個訓練示例執行上述w的更新。小批次GD使用小批次的訓練示例執行引數更新。
讓我們用數學的方式來解釋。用於一般訓練集:
n個樣本的訓練集。
損失函式的一般形式為:
一般損失函式。
在小批梯度下降的情況下,總和僅在批內的訓練示例。特別是SGD只使用一個樣本。與普通的GD相比,這些過程有兩個主要優勢:它們速度更快,並且可以處理更大的資料集。
定義G和g如下所示,在這種情況下我們有:
在下面的動畫中,SGD的收斂和其他方法一起展示了(這些其他方法,本文沒有提到,是SGD的最新改進)。
機器學習與物理,作為朗之萬過程的梯度下降
下一個步驟對於論證是至關重要的。為了讓讀者理解主要思想,我省略了一些較為嚴格的細節。
我們可以把小批次梯度寫成全梯度和正態分佈的η之間的和:
現在將這個表示式代入GD迭代表達式中,我們得到:
小批次梯度下降迭代步驟
一個優雅的聯絡
將小批次梯度下降迭代的表示式與朗之萬方程進行比較,我們可以立即注意到它們的相似性。更準確地說,它們透過以下方式變得相同:
用γ代入δt,我們發現:
因此,SGD或小批次梯度下降演算法形式上類似於朗之萬過程,這就解釋了為什麼如果學習率按照前面提到的協議變化,它們有非常高的機率選擇全域性最小值。
這個結果並不新鮮。事實上,有許多證據表明,在通常的梯度下降遞迴中新增一個噪聲項會使演算法收斂到全域性最小值。
結論
在這篇文章中,我展示了將隨機或小批次梯度下降看作是朗之萬隨機過程,並透過學習率包括額外的隨機化級別,我們可以理解為什麼這些演算法可以作為全域性最佳化器工作得如此好。這是一個很好的結果,它表明從多個角度檢查一個問題通常是非常有用的。