天天看點

最優化和深度學習的差別

「導語:有人說深度學習實質上是最優化,但它們具體又有什麼不同呢?」

作者:Frank Odom

編譯:McGL

如今訓練神經網絡最常見的方法是使用梯度下降或 Adam 等變種。梯度下降是尋找函數極小值的疊代優化算法。簡單的說,在最優化問題中,我們對某個度量 P 感興趣,想找到一個在某些資料(或分布)D上最大化(或最小化)該度量的函數(或函數的參數)。這聽起來就像是機器學習或深度學習。我們有一些名額,例如準确率,甚至更好的精度/召回率或F1值;有一個帶有可學習參數的模型(我們的網絡);還有資料(訓練和測試集)。使用梯度下降,我們将“搜尋”或“優化”模型的參數,進而最終使訓練和測試集上的資料名額(準确率)最大化。

最優化和深度學習的差別

來自論文《The general inefficiency of batch training for gradient descent learning》

最優化與深度學習之間至少存在兩個主要差異,這些差異對于在深度學習中獲得更好的結果很重要。

第一個差別是度量/損失函數。在最優化中,我們有一個單一的明确定義的度量,希望将其最小化(或最大化)。不幸的是,在深度學習中,我們經常使用無法或很難優化的度量。例如,在分類問題中,我們可能對模型的“準确率”或“F1值”感興趣。準确率和F1值的問題是這些都不是可微函數,我們無法計算梯度,是以不能使用梯度下降。是以,我們使用諸如negative log-likelihood(或cross-entropy)之類的代理度量/損失,希望最小化代理函數将最大化我們的原始度量。這些代理度量不一定不行,甚至可能有一些優勢,但是我們需要記住我們真正關心的東西,而不是代理度量。

確定我們關心原始度量的一種方法是使用Early Stopping。每個epoch,我們都會在某些驗證集上用原始度量(準确率或F1值)評估模型,并在開始過拟合時停止訓練。最好在每個epoch列印出準确率(或其它任意度量),友善更好的了解模型的性能。

第二個重要差別是資料。在最優化中,我們隻關心現有資料。我們知道找到最大值是解決我們問題的最佳解決方案。在深度學習中,我們主要關心泛化,即我們沒有的資料。這意味着,即使我們找到了已有的資料(訓練集)的最大值(或最小值),我們仍然可能在還沒有的資料上得到較差的結果。将我們的資料分為不同的部分并将測試集視為“我們沒有的資料”非常重要。我們不能基于測試集做出任何決定。為了做出有關超參數,模型結構或 early stopping 标準的決策,我們可以使用驗證集,而不能使用測試集。

還沒完呢。我們通過梯度下降将參數推向“正确的”方向來訓練模型。但是什麼是“正确的”?對所有資料還是僅對我們的訓練集正确呢?例如,當我們選擇batch size時,這是相關的。有人可能會說,通過使用整個訓練資料(稱為“批梯度下降”),我們獲得了“真實”梯度。但這僅适用于我們擁有的資料。為了将模型推向“正确”方向,我們需要近似我們沒有的資料的梯度。這可以通過更小的 batch size 來實作(所謂的迷你批處理(Mini-batch)或随機(Stochastic)梯度下降)。論文《The general inefficiency of batch training for gradient descent learning》顯示,僅使用batch size 為1(也叫 On-line Training)即可達到最佳結果。通過應用較小的batch size,将噪聲引入梯度,可以提高泛化能力減少過拟合。下表展示了在20多個資料集上進行“batch”與“on-line”訓練的性能。可以看出“on-line” 方式平均更好。

最優化和深度學習的差別

來自論文《The general inefficiency of batch training for gradient descent learning》

盡管機器學習問題有時被稱為最優化問題。了解差異并加以解決很重要。

「來源:」https://towardsdatascience.com/what-is-the-difference-between-optimization-and-deep-learning-and-why-should-you-care-e4dc7c2494fe