<cite id="txdbx"><strike id="txdbx"><listing id="txdbx"></listing></strike></cite>
<var id="txdbx"><strike id="txdbx"></strike></var>
<cite id="txdbx"><video id="txdbx"><thead id="txdbx"></thead></video></cite>
<thead id="txdbx"><video id="txdbx"><thead id="txdbx"></thead></video></thead>
<ins id="txdbx"><video id="txdbx"></video></ins>
<var id="txdbx"></var>
<var id="txdbx"><span id="txdbx"><menuitem id="txdbx"></menuitem></span></var><cite id="txdbx"><video id="txdbx"><thead id="txdbx"></thead></video></cite>
<var id="txdbx"></var>
<var id="txdbx"></var><menuitem id="txdbx"></menuitem>
<menuitem id="txdbx"><video id="txdbx"><thead id="txdbx"></thead></video></menuitem><cite id="txdbx"></cite>
<var id="txdbx"></var>
<cite id="txdbx"><span id="txdbx"><thead id="txdbx"></thead></span></cite>
<i id="txdbx"><noframes id="txdbx">
<var id="txdbx"></var>
<cite id="txdbx"></cite>
<var id="txdbx"><strike id="txdbx"></strike></var>
<var id="txdbx"><strike id="txdbx"></strike></var>
<var id="txdbx"><video id="txdbx"><thead id="txdbx"></thead></video></var>
<cite id="txdbx"><video id="txdbx"></video></cite>
工業電器網
當前位置:首頁> 參數搜索

參數搜索

日期:2023-04-24 09:41:50

最近遇到了搜索超參數規模過大的問題,需要一些自動調參的方法,下面是一些調研。這個文檔的主要參考資料來自網絡,我只是想用這個工具,并沒有深入的去研究細節。但是超參數搜索在深度神經網絡里面很重要,很多云服務廠商,包括華為云的MODELARTS等等,都提供了相應的服務,因此應該還是比較完整的一個調研。超參數是開始訓練之前,用預先確定的值來手動設置的所有訓練變量。這里的超參數要區別于訓練過程中產生的參數,這些確實也是參數,但是并不需要我們手動設置。下面是一個深度神經網絡的例子,圖中,學習率、DROPOUT比例以及BATCH大小就是超參數,但是每層神經網絡的參數,雖然也很重要,但是我們并不很關心,也不需要我們手動去設置,因此就不是超參數。訓練過神經網絡的都知道,調參是一門玄學,是需要不斷設計優化并且有一定的理論支持的。之所以會這樣,我認為主要是因為我們梯度下降法,雖然最后或許能收斂到某個極小點,但是是否能到達,會不會走過了,能不能到某一個固定的極小值點,其實都是不確定的。這些都依賴于參數的選擇,目前還沒有很好的解決方法。例如下圖就給了兩個不同的路徑,不斷優化之后函數確實收斂了,但是得到的結果是截然不同的。而超參數搜索就是一個找到最優超參數的過程,這是很多機器學習從業者的追求,但是也面臨著很多困難。目前有一些搜索方法,大致可以總結為以下幾個:具體來講,BABYSITTING的方法就是手動的設置一個參數,然后根據一些經驗來判斷這些參數的好壞,然后在時間還足夠的情況下不斷地去優化改進。上面是一個經典的機器學習的流程圖,如果我們也是基于機器學習的方法去調參的話,我們每次就都需要將這一流程重新都一遍,并根據經驗去判斷。一般來說這一方法還是挺好用的,因為在不同的任務上總有一定的經驗知識。特別是學生在初學的時候,這個過程也很有利于學生對算法的理解(和摸魚),但是顯然這不是很好的方法,也很不自動化。好,現在我們要開始自動搜索了。之前BABYSITTING方法,我們其實是心里面有一個可行的參數范圍,然后根據一些經驗不斷地去嘗試更好的方法。那么一個最直接的自動搜索方法就是,我直接把我心里面的可行的參數范圍都搜一遍就可以了。這就是GRIDSEARCH。這其實就是一個遍歷的思路,之所以叫GRIDSEARCH,可以看下圖。例如我們現在要對學習率和DROPOUT的比例進行遍歷,那應該是兩層循環。這意味著我們需要將兩個參數可能出現的值的各種組合都試一遍,那不就構成了一個GRID嗎。這個方法有多個好處。首先,我們將所有可能的情況都試了一遍,那么其實我們可以說,我們找到了最優解了;其次,在不考慮計算資源限制的情況下,這些參數調試的計算其實是可以并行進行的,這意味著我們可以用空間換時間。如果做一次實驗需要的時間是1MS,那么這并不重要;但是現在的大規模神經網絡訓練動輒好幾天甚至一周,那么這就很重要了。計算機科學里面有一些很有趣的現象,有的時候我們精心設計的方案還沒有我們隨機搜一個效果好,例如這個隨機搜索。我們考慮下面左圖的網格搜索,看上去每種情況都已經考慮到了,但是其實并不然。網格搜索其實也只是搜索了這么一個子空間的一小部分,準確的說是那幾個點。我們認為當網格足夠密集的時候,可以認為遍歷了整個子空間,但是網絡越密集,搜索代價越大,在同樣的搜索成本下,我們只能搜有限的幾個點,這個時候效率就顯得比較重要了。圖中,同樣是搜9個點,網格搜索的情況下,重要的參數其實只取了三個不同的值,這其實效率并不高,因為有的時候網絡的效果只和這個參數有關,所以只相當于做了三次實驗。而如果隨機搜索的話,那么可以看出,我隨機得到的點,重要的參數取到了9個不同的值,顯然效果更高。但是這些搜索方法其實還是存在組合爆炸的問題,規模一大,就很難COVER住所有的結果了,這個時候,優化的方法就顯得比較重要了。目前公認的效果比較好的優化方法是貝葉斯優化,此外,基于進化算法的優化也較為常見。優化的方法的思路是這樣的。假設我們現在有一個函數$F:X\TOR$,我們需要在$X\SUBSETEQX$內找到$$X^*=\ARG\MIN_{X\INX}F(X)$$其中,$X$為超參數,$X$為問題的定義域。顯然,當凸的時候,我們可以使用凸優化的方法來解決這一問題,但是,現在我們面臨的問題往往是EXPENSIVEBLACK-BOXFUNCTION,這就遇到了困難。SEQUENTIALMODEL-BASEDOPTIMIZATION(SMBO)是貝葉斯優化的最簡形式,其算法思路如下:簡單來講,就是采用一個模型在現有的數據點上不斷地去逼近,每次選到的最好結果都加入現有的數據點中再進行擬合。貝葉斯優化往往采用高斯模型去擬合,當然也有一些變種,在此不進行展開。大致示意圖如下所示,本來是用一個高斯模型去擬合,每加一個點,不確定性就增大一些。假設我可以做無窮多次實驗,那么我這個擬合就可以很準確。如果我只能做幾次實驗,那么我的結果也不會很準確。這里就存在一個取舍問題了。進化算法是一類仿生算法,借鑒了生物進化過程中的一些特性,是一種比較魯棒的優化算法,包含很多類別,例如遺傳算法、粒子群算法等等,大致思路都差不多。例如遺傳算法,就是模擬了遺傳這一過程。下圖展示了這一模擬。首先我們會初始化一些基因,然后會選擇表現比較好的基因作為父方和母方,進行遺傳操作。基因的遺傳操作包括交叉與變異,交叉保證了基因的遺傳,變異保證了新的基因的出現,因此都是有必要的。然后我們再對產生的新的基因進行評估,重復這一過程,直到收斂。經歷這一過程,我們便可以較為快速地對參數進行優化。但是顯然,這一優化的結果并不保證是最優的。這篇文章對現有的超參數優化的方法進行了一些簡單的調研。由于NAS專注于神經網絡架構的搜索,本文旨在解決超參數搜索的問題,不局限于神經網絡,因此并沒有提到。現有的超參數優化方法其實都還比較初級,還沒有一個很好的方法去搜索超參數,各個方法都有自己的優勢與劣勢。即使是最簡單的BABYSITTING方法,也有可以帶入專家經驗的優勢在里面。因此在實際使用過程中,我們還是需要按照自己的需要靈活。

久久久久久精品国产三级