【深度學習】如何選擇神經網絡的超參數

1. 神經網絡的超參數分類

神經網路中的超參數主要包括:

1. 學習率?η

2. 正則化參數?λ

3. 神經網絡的層數?L

4. 每一個隱層中神經元的個數?j

5. 學習的回合數Epoch

6. 小批量數據?minibatch?的大小

7. 輸出神經元的編碼方式

8. 代價函數的選擇

9. 權重初始化的方法

10. 神經元激活函數的種類

11.參加訓練模型數據的規模

這十一類超參數。

這些都是可以影響神經網絡學習速度和最后分類結果,其中神經網絡的學習速度主要根據訓練集上代價函數下降的快慢有關,而最后的分類的結果主要跟在驗證集上的分類正確率有關。因此可以根據該參數主要影響代價函數還是影響分類正確率進行分類,如圖1所示

如何選擇神經網絡的超參數

圖1. 十一類超參數的分類情況
在上圖中可以看到超參數 2,3,4, 7 主要影響的時神經網絡的分類正確率;9 主要影響代價函數曲線下降速度,同時有時也會影響正確率;1,8,10 主要影響學習速度,這點主要體現在訓練數據代價函數曲線的下降速度上;5,6,11 主要影響模型分類正確率和訓練用總體時間。這上面所提到的時某個超參數對于神經網絡想到的首要影響,并不代表著該超參數只影響學習速度或者正確率。

因為不同的超參數的類別不同,因此在調整超參數的時候也應該根據對應超參數的類別進行調整。再調整超參數的過程中有根據機理選擇超參數的方法,有根據訓練集上表現情況選擇超參數的方法,也有根據驗證集上訓練數據選擇超參數的方法。他們之間的關系如圖2所示。

如何選擇神經網絡的超參數

圖2. 不同超參數的選擇方法不同。
如圖2所示,超參數 7,8,9,10 由神經網絡的機理進行選擇。在這四個參數中,應該首先對第10個參數神經元的種類進行選擇,根據目前的知識,一種較好的選擇方式是對于神經網絡的隱層采用sigmoid神經元,而對于輸出層采用softmax的方法;根據輸出層采用sotmax的方法,因此第8個代價函數采用 log-likelihood 函數(或者輸出層還是正常的sigmoid神經元而代價函數為交叉熵函數),第9個初始化權重采用均值為0方差為? 1nin1nin?的高斯隨機分布初始化權重;對于輸出層的編碼方式常常采用向量式的編碼方式,基本上不會使用實際的數值或者二進制的編碼方式。超參數1由訓練數據的代價函數選擇,在上述這兩部分都確定好之后在根據檢驗集數據確定最后的幾個超參數。這只是一個大體的思路,具體每一個參數的確定將在下面具體介紹。

2. 寬泛策略

根據上面的分析我們已經根據機理將神經網絡中的神經元的種類、輸出層的模式(即是否采用softmax)、代價函數及輸出層的編碼方式進行了設定。所以在這四個超參數被確定了之后變需要確定其他的超參數了。假設我們是從頭開始訓練一個神經網絡的,我們對于其他參數的取值本身沒有任何經驗,所以不可能一上來就訓練一個很復雜的神經網絡,這時就要采用寬泛策略。
寬泛策略的核心在于簡化和監控。簡化具體體現在,如簡化我們的問題,如將一個10分類問題轉變為一個2分類問題;簡化網絡的結構,如從一個僅包含10個神經元你的隱層開始訓練,逐漸增加網絡的層數和神經元的個數;簡化訓練用的數據,在簡化問題中,我們已經減少了80%的數據量,在這里我們該要精簡檢驗集中數據的數量,因為真正驗證的是網絡的性能,所以僅用少量的驗證集數據也是可以的,如僅采用100個驗證集數據。監控具體指的是提高監控的頻率,比如說原來是每5000次訓練返回一次代價函數或者分類正確率,現在每1000次訓練就返回一次。其實可以將“寬泛策略”當作是一種對于網絡的簡單初始化和一種監控策略,這樣可以更加快速地實驗其他的超參數,或者甚至接近同步地進行不同參數的組合的評比。
直覺上看,這看起來簡化問題和架構僅僅會降低你的效率。實際上,這樣能夠將進度加快,因為你能夠更快地找到傳達出有意義的信號的網絡。一旦你獲得這些信號,你可以嘗嘗通過微調超參數獲得快速的性能提升。

3. 學習率的調整

假設我們運行了三個不同學習速率(?η=0.025η=0.025η=0.25η=0.25η=2.5η=2.5)的 MNIST 網 絡,其他的超參數假設已經設置為進行30回合,minibatch 大小為10,然后?λ=5.0λ=5.0?,使用50000幅訓練圖像,訓練代價的變化情況如圖3

如何選擇神經網絡的超參數

圖3. 不同學習率下代價函數曲線的變化情況
使用? η=0.025η=0.025,代價函數平滑下降到最后的回合;使用? η=0.25η=0.25,代價剛開始下降,在大約20 回合后接近飽和狀態,后面就是微小的震蕩和隨機抖動;最終使用? η=2.5η=2.5?代價從始至終都震蕩得非常明顯。

因此學習率的調整步驟為:首先,我們選擇在訓練數據上的代價立即開始下降而非震蕩或者增加時的作為?ηη?閾值的估計,不需要太過精確,確定量級即可。如果代價在訓練的前面若干回合開始下降,你就可以逐步增加?ηη?的量級,直到你找到一個的值使得在開始若干回合代價就開始震蕩或者增加;相反,如果代價函數曲線開始震蕩或者增加,那就嘗試減小量級直到你找到代價在開始回合就下降的設定,取閾值的一半就確定了學習速率 。在這里使用訓練數據的原因是學習速率主要的目的是控制梯度下降的步長,監控訓練代價是最好的檢測步長過大的方法。

4. 迭代次數

提前停止表示在每個回合的最后,我們都要計算驗證集上的分類準確率,當準確率不再提升,就終止它也就確定了迭代次數(或者稱回合數)。另外,提前停止也能夠幫助我們避免過度擬合。
我們需要再明確一下什么叫做分類準確率不再提升,這樣方可實現提前停止。正如我們已經看到的,分類準確率在整體趨勢下降的時候仍舊會抖動或者震蕩。如果我們在準確度剛開始下降的時候就停止,那么肯定會錯過更好的選擇。一種不錯的解決方案是如果分類準確率在一段時間內不再提升的時候終止。建議在更加深入地理解 網絡訓練的方式時,僅僅在初始階段使用 10 回合不提升規則,然后逐步地選擇更久的回合,比如 20 回合不提升就終止,30回合不提升就終止,以此類推。

5. 正則化參數

我建議,開始時代價函數不包含正則項,只是先確定?ηη?的值。使用確定出來的?ηη,用驗證數據來選擇好的?λλ?。嘗試從?λ=1λ=1?開始,然后根據驗證集上的性能按照因子 10 增加或減少其值。一旦我已經找到一個好的量級,你可以改進?λλ?的值。這里搞定?λλ?后,你就可以返回再重新優化?ηη?。

6. 小批量數據的大小

選擇最好的小批量數據大小也是一種折衷。太小了,你不會用上很好的矩陣庫的快速計算;太大,你是不能夠足夠頻繁地更新權重的。你所需要的是選擇一個折衷的值,可以最大化學習的速度。幸運的是,小批量數據大小的選擇其實是相對獨立的一個超參數(網絡整體架構外的參數),所以你不需要優化那些參數來尋找好的小批量數據大小。因此,可以選擇的方式就是使用某些可以接受的值(不需要是最優的)作為其他參數的選擇,然后進行不同小批量數據大小的嘗試,像上面那樣調整?ηη?。畫出驗證準確率的值隨時間(非回合)變化的圖,選擇哪個得到最快性能的提升的小批量數據大小。得到了小批量數據大小,也就可以對其他的超參數進行優化了。

7. 總體的調參過程

首先應該根據機理確定激活函數的種類,之后確定代價函數種類和權重初始化的方法,以及輸出層的編碼方式;其次根據“寬泛策略”先大致搭建一個簡單的結構,確定神經網絡中隱層的數目以及每一個隱層中神經元的個數;然后對于剩下的超參數先隨機給一個可能的值,在代價函數中先不考慮正則項的存在,調整學習率得到一個較為合適的學習率的閾值,取閾值的一半作為調整學習率過程中的初始值 ;之后通過實驗確定minibatch的大小;之后仔細調整學習率,使用確定出來的?ηη,用驗證數據來選擇好的?λλ?,搞定?λλ?后,你就可以返回再重新優化?ηη。而學習回合數可以通過上述這些實驗進行一個整體的觀察再確定。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163177.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言哈希查找

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXKEY 1000 typedef struct Info_s {int num;char name[30];int age;char addr[30]; }Info_t, *pInfo_t; //哈希函數 int hash(char *key) {int h 0…

軟件測試之安全測試

軟件安全測試是指對軟件的安全性能和安全缺陷進行檢測和評估的過程&#xff0c;目的是保證軟件的安全性和穩定性&#xff0c;防止軟件受到惡意攻擊或者泄露敏感信息。 軟件安全測試要怎么測&#xff0c;主要取決于軟件的安全需求、風險和威脅。 在這我準備了一份軟件測試視頻…

C語言--給定一個數組,把第一項的值減去第二項的值,第二項的值減去第三項的值,第三項的值減去第四項的值,依次類推。放到一個新的數組中,并打印新的數組

一.題目描述&#xff1a; 給定一個數組&#xff0c;把第一項的值減去第二項的值&#xff0c;第二項的值減去第三項的值&#xff0c;第三項的值減去第四項的值&#xff0c;依次類推。放到一個新的數組中&#xff0c;并打印新的數組。 比如&#xff1a;輸入一個數組是5&#xff…

SA實戰 ·《SpringCloud Alibaba實戰》第14章-服務網關加餐:SpringCloud Gateway核心技術

大家好,我是冰河~~ 一不小心《SpringCloud Alibaba實戰》專欄都更新到第14章了,再不上車就跟不上了,小伙伴們快跟上啊! 在《SpringCloud Alibaba實戰》專欄前面的文章中,我們實現了用戶微服務、商品微服務和訂單微服務之間的遠程調用,并且實現了服務調用的負載均衡。也基…

Nginx結合cpolar實現內網穿透多個Windows Web站點端口

文章目錄 1. 下載windows版Nginx2. 配置Nginx3. 測試局域網訪問4. cpolar內網穿透5. 測試公網訪問6. 配置固定二級子域名7. 測試訪問公網固定二級子域名 1. 下載windows版Nginx 進入官方網站(http://nginx.org/en/download.html)下載windows版的nginx 下載好后解壓進入nginx目…

[autojs]利用console實現懸浮窗日志輸出

"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"開啟懸浮窗" textSize"15sp" /><button id"autoService" text"開啟無障礙服務" textSize"15sp" /><button id"…

vue中怎么根據選擇的名稱 生成印章圖片

項目中需要根據選擇的印章名稱&#xff0c;動態生成印章 &#xff0c;印章下方顯示當前的日期 代碼如下 <template><div><label for"name">選擇名稱&#xff1a;</label><select id"name" v-model"selectedName">…

技術面時,一定要掌握這3個關鍵點

前言 現在有這么多優秀的測試工程師&#xff0c;大家都知道技術面試是不可避免的一個環節&#xff0c;一般技術面試官都會通過自己的方式去考察你的技術功底與基礎理論知識。 如果你參加過一些大廠面試&#xff0c;肯定會遇到一些這樣的問題&#xff1a; 1、看你項目都用到了…

機器學習/sklearn 筆記:K-means,kmeans++,MiniBatchKMeans

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…

為什么要寫測試用例,測試用例寫給誰看?

&#x1f4e2;專注于分享軟件測試干貨內容&#xff0c;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01;&#x1f4e2;交流討論&#xff1a;歡迎加入我們一起學習&#xff01;&#x1f4e2;資源分享&#xff1a;耗時200小時精選的「軟件測試」資…

mysql查詢統計最近12個月的數據

項目場景&#xff1a; mysql查詢統計最近12個月的數據&#xff0c;按每個月縱向展示&#xff0c;效果圖 sql語句 注意&#xff1a;count( v.uuid ) 這里的是被統計那張表的id SELECT m.month,count( v.uuid ) AS total FROM (SELECT DATE_FORMAT(( CURDATE()), %Y-%m ) AS mon…

Leetcode—6.N字形變換【中等】

2023每日刷題&#xff08;三十七&#xff09; Leetcode—6.N字形變換 算法思想 參考k神的題解 實現代碼 class Solution { public:string convert(string s, int numRows) {if(numRows < 2) {return s;}vector<string> rows(numRows);int flag -1;int i 0;for(…

JMeter集結點的使用場景以及如何使用?

JMeter是一個開源的負載測試工具&#xff0c;它被廣泛用于測試應用程序、Web服務和網絡協議等的性能。在JMeter中&#xff0c;集結點&#xff08;JMeter Cluster&#xff09;是一種分布式測試環境&#xff0c;它允許多個JMeter實例同時工作來模擬高并發負載。 使用集結點的場景…

聚水潭連接API,集成無代碼開發,優化電商平臺運營

聚水潭連接API&#xff0c;實現電商平臺的高效運營 聚水潭作為一款SaaS ERP解決方案&#xff0c;通過其出色的產品和服務&#xff0c;迅速在市場上占據了一席之地。而其無代碼開發的特點&#xff0c;為電商系統和客服系統的連接與集成提供了便利。聚水潭開放平臺的優勢在于&am…

常見的電商模式

市面上5種常見的電商模式&#xff1a; B2B模式 B2B&#xff08;business to business&#xff09;,是指商家與商家建立的商業關系。如&#xff1a;阿里巴巴 B2C模式 B2C&#xff08;business to consumer&#xff09;,商對客模式&#xff0c;商業零售。直接面向消費者銷售產品…

2024年荊州中級工程師職稱申報時間是什么時候?

甘建二十年耕耘職稱。 2024年荊州中級工程師職稱開始準備了&#xff0c;關于荊門中級職稱具體申報時間&#xff0c;甘建二告訴你。 ?2024年荊州中級工程師職稱申報時間&#xff1a; 1.水平能力測試報名3月份 2.水平能力測試考試4月份3.職稱申報9月份&#xff0c;采取的是網上申…

ElementPlusError: [ElOnlyChild] no valid child node found

突然發現頁面報了一堆黃色的錯誤提示 查了下原來是這里導致的&#xff0c;只需要把v-if 挪到popover那層即可 解決

服務器安全防護導致使用多款行業頂尖軟件搭配使用,還是單獨一款解決呢?

如今&#xff0c;在全球各地&#xff0c;數以千計的公司、組織和個人都依賴于服務器來存儲和訪問重要數據&#xff0c;托管應用程序&#xff0c;以及提供服務。但是&#xff0c;這些服務器不斷面臨著來自網絡黑客的威脅&#xff0c;因此服務器的安全成為了當務之急。 在這種情…

win10底部任務欄無響應?試試這些方法!

win10的任務欄是一個關鍵的用戶界面元素&#xff0c;允許您輕松訪問應用程序和系統功能。然而&#xff0c;有時您可能會遇到win10底部任務欄無響應的問題&#xff0c;這會妨礙您的工作流程。本篇文章將介紹解決win 10底部任務欄無響應的問題的三種方法&#xff0c;每種方法都會…

git操作分支命令

# 列出所有本地分支 $ git branch# 列出所有遠程分支 $ git branch -r# 列出所有本地分支和遠程分支 $ git branch -a# 新建一個分支&#xff0c;但依然停留在當前分支 $ git branch [branch-name]# 新建一個分支&#xff0c;并切換到該分支 $ git checkout -b [branch]# 新建一…