一碗酸梅湯 作品
第255章 調整超參數,以及防止過擬合
江寒在這個fcn網絡中,實現了一種新的訓練策略,也就是迷你批次訓練法。
簡單地說,就是每次在18萬個訓練數據中,隨機抽取若干條數據,組成一個小包,作為訓練的樣本。
然後,若干個小包組成一個完整的批次,訓練若干個批次後,訓練過程就宣告結束。
顯而易見,相較於一次訓練全部數據,這樣做既節省了資源,又能提高訓練速度。
這裡涉及到3個超參數:每個小包的數據條數n,每批次包含的小包數量m,以及訓練的總批次s。
神經網絡裡,每個神經元的偏置和權重,都是在訓練中獲得的,稱作參數。
而學習速率、隱藏層神經元的數量,隱藏層的層數,權重初始化方案的選擇、激活函數的選擇、損失函數的選擇……
這些都是超參數,必須在神經網絡訓練之前指定。
但由於缺乏理論指導,沒有人知道這些超參數,到底如何選取才是最合理的。
所以在實踐中,往往先根據經驗,暫時預設一個差不多的,然後在訓練的過程中,根據反饋結果,慢慢進行調整。
打造神經網絡的過程中,最困難的就是超參數的選擇,這往往意味著巨大的工作量。
每次調整超參數,都要重新訓練一次神經網絡,才能知道這次調整是否成功。
更麻煩的是,超參數之間並不是相互獨立的,經常會調整了某一個,就會影響到另一個。
極端情況下,就會像多米諾骨牌一樣,一個影響一個,最後導致全盤重來。
在原來的世界,機器學習算法工程師們經常為此撓破了頭皮。
所以他們又自嘲或者被戲稱為“調參狗”……
這個問題的解決,往往取決於網絡設計者的經驗。
一名合格的調參狗……咳,算法工程師,往往能憑經驗和直覺,大體確定超參數的取值範圍,然後根據實際情況逐步優化,直到取得近似最優解。
江寒當然算不上經驗豐富,但前世玩神經網絡的時候,也接觸過不少討論超參數選擇的文章。
以權重初始化舉例,就有不少可行的方案:初始化為0值、隨機初始化、xavier初始化、he方法等。
其中,xavier初始化又包含許多種做法。
比如將權重w的隨機初始化區間,設為正負sqrt(6/(n0+n1))之間。
其中,n0是上一層神經元的個數,n1是本層神經元的個數。
這是一個經驗公式,很多時候都很好用,江寒還記得這個公式。
其他超參數的選擇,激活函數的選擇、損失函數的選擇……也有諸多可用的方法、方案。
除了一些前世接觸過的方法,江寒自己也有過許多奇思妙想,琢磨出來不少亂七八糟的超參數選擇方案。
簡單地說,就是每次在18萬個訓練數據中,隨機抽取若干條數據,組成一個小包,作為訓練的樣本。
然後,若干個小包組成一個完整的批次,訓練若干個批次後,訓練過程就宣告結束。
顯而易見,相較於一次訓練全部數據,這樣做既節省了資源,又能提高訓練速度。
這裡涉及到3個超參數:每個小包的數據條數n,每批次包含的小包數量m,以及訓練的總批次s。
神經網絡裡,每個神經元的偏置和權重,都是在訓練中獲得的,稱作參數。
而學習速率、隱藏層神經元的數量,隱藏層的層數,權重初始化方案的選擇、激活函數的選擇、損失函數的選擇……
這些都是超參數,必須在神經網絡訓練之前指定。
但由於缺乏理論指導,沒有人知道這些超參數,到底如何選取才是最合理的。
所以在實踐中,往往先根據經驗,暫時預設一個差不多的,然後在訓練的過程中,根據反饋結果,慢慢進行調整。
打造神經網絡的過程中,最困難的就是超參數的選擇,這往往意味著巨大的工作量。
每次調整超參數,都要重新訓練一次神經網絡,才能知道這次調整是否成功。
更麻煩的是,超參數之間並不是相互獨立的,經常會調整了某一個,就會影響到另一個。
極端情況下,就會像多米諾骨牌一樣,一個影響一個,最後導致全盤重來。
在原來的世界,機器學習算法工程師們經常為此撓破了頭皮。
所以他們又自嘲或者被戲稱為“調參狗”……
這個問題的解決,往往取決於網絡設計者的經驗。
一名合格的調參狗……咳,算法工程師,往往能憑經驗和直覺,大體確定超參數的取值範圍,然後根據實際情況逐步優化,直到取得近似最優解。
江寒當然算不上經驗豐富,但前世玩神經網絡的時候,也接觸過不少討論超參數選擇的文章。
以權重初始化舉例,就有不少可行的方案:初始化為0值、隨機初始化、xavier初始化、he方法等。
其中,xavier初始化又包含許多種做法。
比如將權重w的隨機初始化區間,設為正負sqrt(6/(n0+n1))之間。
其中,n0是上一層神經元的個數,n1是本層神經元的個數。
這是一個經驗公式,很多時候都很好用,江寒還記得這個公式。
其他超參數的選擇,激活函數的選擇、損失函數的選擇……也有諸多可用的方法、方案。
除了一些前世接觸過的方法,江寒自己也有過許多奇思妙想,琢磨出來不少亂七八糟的超參數選擇方案。