優化你的神經網絡

DDD
發布: 2024-10-13 06:15:02
原創
915 人瀏覽過

上週我發布了一篇關於如何建立簡單神經網絡,特別是多層感知器的文章。本文將深入探討神經網路的細節,討論如何透過調整神經網路的配置來最大限度地提高神經網路的效能。

訓練模型多長時間

訓練模型時,您可能會認為如果模型訓練得夠多,模型就會變得完美無缺。這可能是真的,但這只適用於它所訓練的資料集。事實上,如果你給它另一組值不同的數據,模型可能會輸出完全錯誤的預測。

為了進一步理解這一點,假設您每天都在不移動方向盤的情況下直線駕駛來練習駕駛考試。 (請不要這樣做。)雖然您可能會在直線加速賽中表現出色,但如果在實際考試中被告知要左轉,您最終可能會變成停車標誌。

這種現象稱為過度擬合。您的模型可以學習其訓練資料的所有方面和模式,但如果它學習的模式與訓練資料集過於緊密地結合,那麼當給定新資料集時,您的模型將表現不佳。同時,如果您沒有充分訓練模型,那麼您的模型將無法正確識別其他資料集中的模式。在這種情況下,您將欠擬合

Optimizing Your Neural Networks


過度擬合的範例。驗證損失(以橙色線表示)逐漸增加,而訓練損失(以藍色線表示)逐漸減少。

在上面的範例中,當驗證損失達到最小值時,停止訓練模型的最佳位置是正確的。可以透過提前停止來做到這一點,一旦在任意數量的訓練週期(時期)後驗證損失沒有改善,它就會停止訓練。

訓練模型就是在過度擬合和欠擬合之間找到平衡,同時在必要時利用提前停止。這就是為什麼您的訓練資料集應該盡可能代表總體人群,以便您的模型可以更準確地對其未見過的資料進行預測。

損失函數

也許可以調整的最重要的訓練配置之一是損失函數,它是模型的預測與其實際值之間的「不準確性」。 「不準確度」可以用多種不同的數學方式來表示,最常見的一種是均方誤差(MSE)

MSE=ΣΣi=1n(((iˉyy 🎜>)2ntext{MSE} = frac{sum_{i=1}^n (條{y_i} - y_i)^2}{n} MSE=Σnyiiˉˉˉˉˉˉˉ
ˉˉ蠶🎜>−yii >)22 >

哪裡 yiˉiˉˉˉˉ>欄{y_i} yˉ 是模型的預測, yi >yi

是真正的價值。有一個類似的變體,稱為平均絕對誤差(MAE)
MAE=Σi=1nyiˉyy 🎜>∣n文字{MAE} = frac{sum_{i=1}^n |bar{y_i} - y_i|}{n} MAE=Σnyiiˉˉˉˉˉˉ
ˉˉˉ蠶🎜>−yii >∣

這兩個有什麼差別,哪個比較好?真正的答案是這取決於多種因素。讓我們考慮一個簡單的二維線性迴歸範例。

在許多情況下,可能存在異常值的資料點,即遠離其他資料點的點。就線性迴歸而言,這意味著有幾個點 xyxy xy

Optimizing Your Neural Networks

- 距離其他飛機較遠的飛機。如果您還記得統計課上的內容,那麼像這樣的點會顯著影響計算的線性迴歸線。 一個簡單的圖表,其中的點位於 (1, 1)、(2, 2)、(3, 3) 和 (4, 4) 如果你想想一條可以穿過所有四個點的線,那麼 y=xy = x xy = x

y=Optimizing Your Neural Networks
x 將是一個不錯的選擇,因為這條線會穿過所有點。 一個簡單的圖形,其中包含 (1, 1)、(2, 2)、(3, 3) 和 (4, 4) 上的點以及直線 y=xy = x xy = x
y=

x 經歷它 但是,假設我決定再增加一點 (5,11(5, 1) (5,1) 。現在迴歸線應該是什麼?好吧,事實證明這是完全不同的: y=0.2x0.2x

Optimizing Your Neural Networks


🎜>1.6

y = 0.2x 1.6

y=0.2x 🎜> 一個簡單圖形,其點位於(1, 1)、(2, 2)、(3, 3)、(4, 4) 和(5,1 ) ),並有一條線性迴歸線穿過它。 鑑於先前的數據點,該線預計的值 yy yy > 什麼時候

x=5x = 5 5x = 5 x = 5 x = 5 x=5 是 5,但由於異常值及其 MSE,迴歸線顯著「向下拉」。 這只是一個簡單的例子,但這提出了一個問題,作為機器學習開發人員,您需要停下來思考:我的模型對異常值應該有多敏感? 如果您想要如果模型對異常值更加敏感,那麼您會選擇像MSE 這樣的指標,因為在這種情況下,由於平方,涉及異常值的錯誤會更加明顯,並且您的模型會自行調整以最大限度地減少這種情況。否則,您會選擇像 MAE 這樣的指標,它不太關心異常值。

最佳化器

在我之前的文章中,我還討論了反向傳播、梯度下降的概念,以及它們如何最小化模型的損失。 梯度是一個指向最大變化方向的向量。梯度下降演算法將計算該向量並向完全相反的方向移動,使其最終達到最小值。

大多數最佳化器都有特定的學習率,通常表示為 αalpha αα

他們所堅持的。本質上,這表示演算法每次計算梯度時將向最小值移動多少。
小心學習率設定太大!您的演算法可能永遠不會達到最小值,因為它需要很大的步驟,可能會反覆跳過最小值。 Optimizing Your Neural Networks

[Tensorflow 的神經網路遊樂場](https://playground.tensorflow.org) 展示瞭如果將學習率設定得太大會發生什麼。請注意測試和訓練損失都是“NaN”。

回到梯度下降,雖然它可以有效地最小化損失,但這可能會顯著減慢訓練過程,因為損失函數是在整個資料集上計算的。梯度下降有幾種更有效的替代方案,但也有各自的缺點。

隨機梯度下降

標準梯度下​​降最受歡迎的替代方案之一是稱為

隨機梯度下降(SGD)

的變體。與梯度下降一樣,SGD 具有固定的學習率。但 SGD 不是像梯度下降那樣遍歷整個資料集,而是隨機選擇一個小樣本,並根據樣本更新神經網路的權重。最終,參數值收斂到近似(但不完全)最小化損失函數的點。這是 SGD 的缺點之一,因為它並不總是達到精確的最小值。此外,與梯度下降類似,它仍然對您設定的學習率敏感。

Adam 優化器 Adam 這個名字源自於自適應矩估計。它本質上結合了 SGD 的兩種變體,根據每次訓練迭代期間更新的頻率來調整每個輸入參數的學習率(自適應學習率

)。同時,它還追蹤過去的梯度計算作為移動平均值以平滑更新(

動量

)。然而,由於其動量特性,它有時會比其他演算法需要更長的時間才能收斂。

把它們放在一起

現在舉個例​​子!
我在 Google Colab 上建立了一個範例演練,它使用 PyTorch 建立一個學習簡單線性關係的神經網路。

如果您對 Python 有點陌生,別擔心!我添加了一些解釋來討論每個部分中發生的事情。

反射 雖然這顯然沒有涵蓋有關優化神經網路的所有內容,但我想至少涵蓋一些您在訓練自己的模型時可以利用的最重要的概念。希望您本週學到了一些東西,感謝您的閱讀!

以上是優化你的神經網絡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板