在人工智能領域,算法工程師在訓練神經網絡模型的過程中,完成網絡構建和準備好訓練數據后,往往需要對模型進行各種參數優(yōu)化,以獲得更好的模型效果。但調參其實并不簡單,背后往往是通宵達旦的參數調試與效果驗證,并需要做大量的實驗,不僅耗時也耗費大量算力。
這個時候,往往想嘗試自動超參搜索,但又開始擔心算力要求所帶來的額外訓練成本。
莫慌!百度全功能AI開發(fā)平臺BML帶著免費算力額度與自動超參搜索能力來了!
先來介紹百度最近全新升級的BML,何方神圣?
全功能AI開發(fā)平臺BML(Baidu Machine Learning) ,是為企業(yè)和個人開發(fā)者提供機器學習和深度學習一站式AI開發(fā)服務,并提供高性價比的算力資源,助力企業(yè)快速構建高精度AI應用。BML提供了從數據采集、數據清洗、數據標注、智能標注與多人標注、模型訓練生產到模型管理、云端及離線推理服務管理等AI開發(fā)過程的全生命周期管理功能。
BML內置百度超大規(guī)模預訓練模型,只需少量數據即可獲得高精度模型效果。目前,BML已經支持腳本調參、Notebook與自定義作業(yè)這三種開發(fā)建模方式,靈活匹配企業(yè)開發(fā)者的開發(fā)習慣。
在目前的腳本調參使用流程中,BML已經預設了模型超參數,但由于用戶數據集內容豐富多樣,預設的超參數很難在所有的數據集上得到很好的訓練效果。用戶可以自行調整超參數,但是手動調參十分耗費人力。為了減輕用戶在調參上的精力投入, BML的研發(fā)大佬們日夜奮戰(zhàn),為用戶上線了自動超參搜索的功能,幫助用戶自動搜索效果較優(yōu)的超參組合,省去調參的煩惱。
話不多說,進入本次正題,百度BML的自動超參搜索技術有哪些亮點?
提供多種搜索算法
所謂“超參”,有別于模型網絡結構內部各層的參數,是指需要人為調整,通過人為經驗設置來提高模型效果的參數,常見的超參包括學習率(learning_rate)、批樣本數量(batch_size)等。在超參搜索的過程中,由于模型復雜、計算成本很高,且每個超參數都有較大的取值范圍,導致搜索空間十分龐大,因此我們需要有“自動”超參搜索。
自動超參搜索相比于人工調參,主要是省去了人工觀察實驗結果并調整參數再試驗的過程,自動超參搜索把這個步驟用各種搜索算法來代替。
BML提供的搜索算法有:
1.隨機搜索
顧名思義是在參數變量的變化區(qū)間中隨機采樣參數組合成候選集,應用候選集進行訓練和效果對比。隨機搜索是普適的效率較高的搜索方法,通常作為基線標準,適用于對效率要求較高的情況,但不能保證一定能搜索到最佳的超參。
2.貝葉斯搜索
在搜索空間中隨機選取初始超參數點,然后根據已有超參對應的指標結果擬合概率模型,通過概率模型推測最佳超參點,接著再試驗得到這些超參點的結果。如此反復優(yōu)化,再有限試驗次數中搜索出合適的超參數?;谀P偷男蜇瀮?yōu)化方法(SMBO, Sequential Model-Based Optimization)是貝葉斯搜索的一種范式,包括兩個部分: 代理模型(surrogate model) 和 采集函數(acquisition function)。根據代理模型和采集函數的不同,貝葉斯搜索方法也有許多實現形式,其中TPE(Tree-structured Parzen Estimator)是一種全局探索能力較佳的方法,采用核密度估計方法(KDE, Kernel Density Estimation)生成代理模型,采用EI(Expected Improvement)作為其采集函數生成新采樣點。
3.進化算法
進化算法是一種基于種群概念的超參搜索策略,把超參配置視為一個種群,并行優(yōu)化多個種群并在種群內部進行優(yōu)勝劣汰的篩選,最終輸出最佳模型。這個過程(如下圖所示)是從遺傳算法獲得的靈感,種群的初始化采用隨機的方式生成,個體的優(yōu)勝劣汰具體指利用(exploit)和探索(explore)兩個步驟,不僅可能會從表現較好的個體中復制參數,它還能通過隨機擾動修正當前的值而探索新的超參數組合。
圖片來源:https://arxiv.org/pdf/1711.09846v1.pdf
百度創(chuàng)新提出了隨機微分方程無梯度優(yōu)化算法PSHE2,采用哈密爾頓動力系統(tǒng)搜索參數空間中“勢能”最低的點以替代隨機擾動,加速迭代收斂。超參搜索過程中想要求得最優(yōu)解就是要找到更新超參數組合的方法,即如何更新超參數,才能讓算法更快更好的收斂到最優(yōu)解。PSHE2算法根據超參數本身歷史的最優(yōu),在一定隨機擾動的情況下決定下一步的更新方向。過程如圖所示。
圖片來源:https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.5/docs/tutorial/autofinetune.md
自動超參搜索方法比較
上表歸納了一下這些搜索方法的優(yōu)缺點??傊W格搜索和隨機搜索實現上比較簡單,不利用先驗知識選擇下一組超參數,其中隨機搜索效率相對較高。貝葉斯搜索和進化算法需要用前一輪的信息進行迭代搜索,搜索效率明顯提升。
BML自動超參搜索的實現:系統(tǒng)架構
BML自動超參搜索功能基于百度自研自動超參搜索服務,服務運行過程如下圖所示,依靠百度智能云CCE算力,支持多自動搜索任務并發(fā)。為了提供一個“好用”的自動超參搜索服務,架構實現時在并發(fā)搜索效率提升和系統(tǒng)容錯方面著重進行了考慮。
一次超參搜索任務包含以下流程:
業(yè)務平臺把超參搜索任務的用戶配置信息提交到超參搜索服務,會創(chuàng)建一次搜索實驗(Experiment),并記錄到db中。
搜索服務把任務提交到Experiment controller, 由controller初始化創(chuàng)建Trial管理模塊,并負責Experiment生命周期的管理。
Trial是具體的訓練試驗,一個Experiment會產生多個Trial來探索不同超參數組合的最終效果。Tuner是超參生成的模塊,會根據選擇的超參搜索算法,推薦下一個Trial所使用的超參值。在Trial管理模塊中,Exp Manager會負責生成若干Trial, 向Tuner請求具體的試驗超參數,并向Trial Scheduler發(fā)送Trial任務信息。
Trial Scheduler會與底層資源交互實際啟動Trial。Trial Scheduler會管理所有Trial的生命周期。
每個Trial運行完成后,會向Exp Manager匯報指標等信息,用于匯報給tuner并記錄到db。
BML自動超參搜索主要有以下特性:
1、簡單易用:相比于同類產品的復雜配置,BML在為用戶提供必須的開放配置項的前提下,盡可能減少超參配置的繁瑣程度,凡是可以自動化的工作均不對用戶可見。
2、模型豐富:與腳本調參上提供的豐富的模型打通,可以直接配置化完成相應任務的搜索,甚至不用寫代碼!
3、容錯機制:自動超參搜索任務具有模型訓練次數多、任務整體運行時間長的特點,受顯存資源限制,有些搜索出的超參數無法成功運行。兼顧搜索效果和可用產出,增設模型訓練失敗次數閾值,把Experiment和Trial這樣多任務的復雜狀態(tài)管理分拆到各層模塊中,盡可能為用戶提供搜索出的可用結果。
4、支持早停與采樣:搜索框架內部支持自動早停,當達到設定的預期結果時即可自動停止;同時也支持在界面上手動提前停止,減少用戶的等待時間,避免不必要的算力消耗。支持用戶選擇大數據集時自動進行采樣,減少超參搜索訓練耗時,以盡快搜索出合適的超參為上。
5、高效分布式智能搜索:深度學習模型的訓練時間往往較長,對于大規(guī)模數據集或者復雜模型的搜索任務,單機串行的搜索方式幾乎不可用。我們注意到有的搜索算法中每次試驗是可以獨立進行訓練的(如網格搜索、隨機搜索),可以直接對所有試驗并行化;有的搜索算法雖然本質基于迭代,但每個迭代中的試驗運行仍然是相互獨立的,因此我們可以在迭代內部進行并行化搜索。BML內部實現了智能調度系統(tǒng),根據不同的算法類型,采用不同的并發(fā)策略,可以大幅度降低整體搜索時間。
上手實操:自動超參搜索使用攻略
首先點擊 https://ai.baidu.com/bml/app/project/script/list 創(chuàng)建一個腳本調參項目,如果已經有項目了,直接用就可以!目前支持超參搜索的項目類型有圖像分類(單標簽和多標簽)及物體檢測,創(chuàng)建對應類型的項目就可以了
在項目里新建任務,配置好任務的網絡、數據、腳本之后,就可以看到“配置超參數”的選項了。這里如果已經有超參搜索的結果,可以直接勾選“已有超參搜索結果”來使用,如果第一次使用還沒有,就直接選擇“自動超參搜索”。
目前BML支持了三種超參搜索算法,如圖,分別是貝葉斯搜索、隨機搜索和進化算法,可以根據自己需要選擇一種來搜索。具體配置項說明可以參考技術文檔。
3.1 貝葉斯搜索的參數說明
【初始點數量】代表貝葉斯搜索中,初始化時參數點的數量,該算法基于這些參數信息推測最優(yōu)點 ,填寫范圍1-20。
【最大并發(fā)量】貝葉斯搜索中,同時進行試驗的數量,并發(fā)量越大,搜索效率越高,填寫范圍1-20。不過這個并發(fā)量也會受限于頁面最下方選擇的GPU數量,實際并發(fā)量是二者的較小值。
【超參范圍設置】:可以是默認配置,也可以手動配置。默認的話百度的工程師們已經幫我們對不同網絡、GPU卡型設置了一個基本靠譜的搜索范圍,直接用就可以。當然也可以手動配置,可以自定義各個超參的范圍,可以看到物體檢測支持以下這些超參自定義搜索范圍:
【最大搜索次數】:是指最多組合出多少組超參并跑試驗,當然有可能會因為提前達到目標而停止,節(jié)約費用。
【數據采樣比例】:使用超參搜索時,會對原始數據集進行采樣后再訓練,加快搜索速度。當數據集并不大時,不推薦采樣喲,可能會影響最終效果,只有大數據量時才有使用采樣的必要。
【最高mAP/最高精確率】:是指大家期望模型效果可以達到的mAP(物體檢測)或準確率(圖像分類)的值,當試驗中達到這個值了搜索就會停止,避免后續(xù)浪費搜索時間。
3.2 隨機搜索參數說明
隨機搜索最簡單啦,就不需要再額外配置算法相關的參數了,其它公用的選項和貝葉斯搜索的含義是一樣的,參考貝葉斯搜索即可。
3.3 進化算法參數說明
進化算法是一種效果較好的算法,應用此算法時也需要進行較多的選項設置:
【迭代輪數】:進化算法運行中迭代的輪數,范圍5-50。
【擾動間隔】:進化算法每隔幾個epoch就會進行隨機擾動,利用隨機因素防止算法結果收斂于局部最優(yōu)解。
【擾動比例】:類似于染色體交叉的形式,迭代中一個種群內最好與最壞的個體依據擾動比例進行交叉。
【隨機初始化概率】:在擾動中,有一定概率對個體的超參數進行初始化。
【種群個體數量】:一個個體代表一種超參數設置,一個種群中包含多個個體。
其它選項和貝葉斯搜索的含義一致,也不重復了。進化算法的配置需要對算法的原理有一定的了解,如果對算法不明白的,就直接用百度給的默認值吧!
4.超參的選項設置完成了,最后選擇GPU卡類型和數量,以及最大搜索時間,就可以提交任務啦!這里默認的搜索時間是24小時,畢竟超參搜索會運行多次試驗,時間會比較長,需要耐心等待,當然如果選的GPU卡數越多,并發(fā)試驗數就越高,從提交任務到搜索完成的耗時就會變少,這是顯而易見的。
5.任務提交之后,過一會當任務進入“超參搜索中”的狀態(tài)時,就可以看到各個試驗的進度了,包括各個試驗的狀態(tài)、日志和準確率(mAP)
6.超參搜索訓練完成后,效果最優(yōu)的5次試驗可以看到詳細的評估結果,也能用于后續(xù)的效果校驗和發(fā)布。當然,如果在超參搜索時對數據進行了采樣,這時候可以重新發(fā)起一次訓練任務,用這次搜索出來效果滿意的超參數進行全量數據訓練,從而獲得完整數據的模型效果
效果才是硬道理:超參搜索效果提升高達20%+
我們對比了圖像分類、物體檢測、實例分割等任務在使用普通腳本調參和超參搜索的效果情況,以下是5個不同數據集在BML平臺上分別使用默認腳本調參參數、超參搜索使用進化算法、超參搜索使用貝葉斯搜索算法的效果對比。圖中左邊縱軸為模型的準確率,右邊縱軸為超參搜索算法在效果上提升的比例??梢钥吹皆诓煌瑪祿鲜褂贸瑓⑺阉骱笮Ч刑嵘?,在默認參數精度已經超過85%的情況下,使用超參搜索仍能提升約5%,在默認參數效果較差的情況下,超參搜索的提升效果更為明顯,可高達22%。
在常規(guī)操作下,可用的深度學習自動超參搜索由于需要集群計算資源,往往被認為只有大公司才能配置,普通開發(fā)者難以上手嘗試。通過使用百度全功能AI開發(fā)平臺BML,預算有限也有機會用上自動超參搜索,開發(fā)效率瞬間搭上火箭速度,擺脫人力“煉丹”的束縛。BML新用戶現在還提供100小時免費P4顯卡算力,羊毛在向你招手,快來薅一把!
BML官網:https://ai.baidu.com/bml/
(免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。 )