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