1. 程式人生 > >超引數、驗證集和K-折交叉驗證

超引數、驗證集和K-折交叉驗證

- 本文首發自公眾號:[RAIS](https://ai.renyuzhuo.cn/img/wechat_ercode.png) ## ​前言 本系列文章為 《Deep Learning》 讀書筆記,可以參看原書一起閱讀,效果更佳。 ## 超引數 - 引數:網路模型在訓練過程中不斷學習自動調節的變數,比如網路的權重和偏差; - 超引數:控制模型、演算法的引數,是架構層面的引數,一般不是通過演算法學習出來的,比如學習率、迭代次數、啟用函式和層數等。 與超引數對比的概念是引數,我們平時訓練網路所說的調參,指的是調節 **超引數**。超引數的確定方法一般是憑藉經驗,或者類似問題的引數遷移。 問題來了,為啥超引數不通過學習確定?這是因為這個引數不那麼好優化,並且稍不留神通過學習方法去優化就可能導致過擬合。你可能認為模擬人的調參過程,進行超引數的調節不就好了,當然這是可以的,超引數也不是完全不可以用程式優化的,但是現有的理論還不成熟,還沒有理論去有效的指導實踐,這還是一個新興領域,因此還有許多工作要做,很多情況下是憑經驗,憑直覺進行優化的,演算法表現並不好。 我們知道,更高次的多項式和權重衰減引數設定 λ=0 總是能更好的擬合,會過擬合,對於這個問題,我們會考慮用驗證集的方法,驗證集在我們前文[《人工智慧二分類問題》](http://mp.weixin.qq.com/s?__biz=MzI1MzQzMDE0NQ==&mid=2247483867&idx=1&sn=b464f72d3f369233b919a0041a952063&chksm=e9d5d135dea25823f232fd5419a553eb0b17ce2faeb80f121ea27510cc4ba8ffd79f15f2b7f5&scene=21#wechat_redirect)中提到過。 ## 驗證集 驗證集是用來訓練超引數的,是用來給網路提供反饋的。我們用訓練集去訓練一個網路模型,訓練出的引數固定下來,然後將驗證集的資料應用到這個模型上,會得到偏差,我們根據這個偏差,調整超引數,然後重新去訓練網路,重複迭代一定的次數,會調節出一個超引數還不錯的網路,基於這個超引數訓練出的模型,可以最終到測試集合上驗證,最終確定在測試集上表現如何。下面舉個例子: ![訓練和驗證損失](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8yMDIzNTY5LWU4OTZmN2YxM2ExNGY4ZGQ?x-oss-process=image/format,png) 這是之前在[《人工智慧二分類問題》](http://mp.weixin.qq.com/s?__biz=MzI1MzQzMDE0NQ==&mid=2247483867&idx=1&sn=b464f72d3f369233b919a0041a952063&chksm=e9d5d135dea25823f232fd5419a553eb0b17ce2faeb80f121ea27510cc4ba8ffd79f15f2b7f5&scene=21#wechat_redirect)中的一張圖,我們看到驗證損失在迭代 4 次之後大幅上升,這就是由於我們訓練次數迭代過多導致的,迭代次數這個超引數設定的不合理,因此我們更改迭代次數為 4 次。這就是根據驗證集調節超引數的一個例子。 資料量小,訓練集:驗證集:測試集=6:2:2,資料量足夠大,訓練集:驗證集:測試集=98:1:1。這算是一個經驗值吧。 ## K-折交叉驗證 我們在之前的 [《預測房價》](http://mp.weixin.qq.com/s?__biz=MzI1MzQzMDE0NQ==&mid=2247483888&idx=1&sn=edd87db473abc2622a9fd5dff7a9744e&chksm=e9d5d11edea25808b69581d7dd981e50410a0e054c2a6f3a33fb819605f522c36eb4ca439eb9&scene=21#wechat_redirect) 問題中有提到過交叉驗證這個方法,這個方法用於解決的問題就是資料量太小的問題,而導致的對網路測試誤差估計不準的問題,**K-折交叉驗證** 是其中最常見的。 ![K-折交叉驗證](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8yMDIzNTY5LTA5MmYzMWJlNmNjYmEyODI?x-oss-process=image/format,png) 從上圖中,我們可以清楚的看到K-折交叉驗證的方法具體是怎麼做的。由於資料量不夠大,因此我們把資料分為 K 份,迴圈 K 次,每次分別選取其中的一份作為測試集,這樣根據我們訓練出的網路,我們可以分別求出每一次的測試誤差,用這 K 個測試誤差求其平均值,我們就估計其為這個網路的測試誤差。 ## 總結 我們本篇文章介紹了引數和超引數的區別,調參指的是調節超引數,並且介紹了在資料量較小的情況下如何如何去估計測試誤差。 ![RAIS](https://upload-images.jianshu.io/upload_images/2023569-cc40fe10d568aa89?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) - 本文首發自公眾號:[RAIS](https://ai.renyuzhuo.cn/img/wechat_erco