目錄
隨機梯度下降(SGD)
動量
首頁 後端開發 Python教學 優化你的神經網絡

優化你的神經網絡

Oct 13, 2024 am 06:15 AM

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

訓練模型多長時間

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

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

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

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1414
52
Laravel 教程
1307
25
PHP教程
1253
29
C# 教程
1227
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

您可以在2小時內學到多少python? 您可以在2小時內學到多少python? Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

See all articles