1. 程式人生 > >深度學習筆記之【隨機梯度下降(SGD)】

深度學習筆記之【隨機梯度下降(SGD)】

筆記 優化問題 toc 最終 來看 應用 優化算法 樣本 找到

隨機梯度下降

  • 幾乎所有的深度學習算法都用到了一個非常重要的算法:隨機梯度下降(stochastic gradient descent,SGD)
  • 隨機梯度下降是梯度下降算法的一個擴展

機器學習中一個反復出現的問題:

? 好的泛化需要大的訓練集,但是大的訓練集的計算代價也更大

機器學習算法中的代價函數通常可以分解成每個樣本的代價函數的總和。

訓練數據的負條件對數似然函數可以寫成:
\[ J(\theta)=E_{x,y}L(x,y,\theta)=\frac1m\sum_{i=1}^{m}L(x^{(i)},y^{(i)},\theta) \]
其中\(L\)是每個樣本的損失\(L(x,y,\theta)=-log\ p(y|x;\theta)\)

? 對於這些相加的代價函數,梯度下降需要計算
\[ \bigtriangledown_{\theta}J(\theta)=\frac1m\sum_{i=1}^{m}\bigtriangledown_{\theta}L(x^{(i)},y^{(i)},\theta) \]
這個運算的計算代價是\(O(m)\)

隨機梯度下降的核心:梯度是期望

期望可以使用小規模的樣本近似估計

具體操作步驟

在算法的每一步,我們從訓練樣本集中均勻抽出一小批量(minibatch)樣本\(B=\{x^{(1)},x^{(2)},x^{(3)},...,x^{(m^{'})}\}\)。小樣本批量的數目\(m^{’}\)

通常是一個相對較小的數,從一到幾百。重要的是,當訓練集大小\(m\)增長時,\(m^{’}\)通常是固定的。我們可能在擬合幾十億的樣本時,每次更新計算只用到幾百個樣本。

? 梯度的估計可以表示成:
\[ g = \frac{1}{m^{'}}\sum_{i=1}^{m^{'}}\bigtriangledown_{\theta}L(x^{(i)},y^{(i)},\theta) \]
使用來自小批量\(B\)的樣本。然後,隨機梯度下降算法使用如下的梯度下降估計:
\[ \theta \leftarrow \theta-\varepsilon g \]
其中,\(\varepsilon\)

是學習率。

? 梯度下降往往被認為很慢或不可靠。以前,將梯度下降應用到非凸優化問題被認為很魯莽或沒有原則。優化算法不一定能保證在合理的時間內達到一個局部最小值,但它通常能及時地找到代價函數一個很小的值,並且是有用的。

? 隨機梯度下降在深度學習之外有很多重要的應用。它是在大規模數據上訓練大型線性模型的主要方法。對於規定大小的模型,每一步隨機梯度下降更新的計算量不取決於訓練集的大小\(m\)。在實踐中,當訓練集大小增長時,我們通常會隨訓練集規模增大而增加。然而,當m趨向於無窮大時,該模型最終會在隨機梯度下降抽樣完訓練集上的所有樣本之前收斂到可能的最優測試誤差。繼續增加\(m\)不會延長達到模型可能的最優測試誤差的時間。從這點來看,我們可以認為用SGD訓練模型的漸進代價是關於\(m\)的函數的\(O(1)\)級別。

? 在深度學習興起之前,學習非線性模型的主要方法是結合核技巧的線性模型。很多核學習算法需要構建一個\(m\times m\)的矩陣\(G_{i,j}=k(x^{(i)},x^{(j)})\)。構建這個矩陣的計算量是\(O(m^2)\)。當數據集是幾十億個樣本時,這個計算量是不能接受的。在學術界,深度學習從2006年開始受到關註的原因是,在數以萬計樣本的中等規模數據集上,深度學習在新樣本上比當時很多熱門算法泛化得更好。不久後,深度學習在工業界收到了更多的關註,因為其提供了一種訓練大數據集上的非線性模型的可擴展方式。

深度學習筆記之【隨機梯度下降(SGD)】