效果調優應該是算法工程師最基礎的工作了我們需要對當前的現狀有一定了解后,提出有效的效果優化方案,為指標服務,最終達到指標提升的目標。但是,效果調優并不是一個容易的事,為了讓大家能更快找到有效的解決方案,完成優化任務,這里給大家介紹一下我的流程和思路。
算法效果調優的流程
在開始之前,先和大家說清為什么要有這個流程。所謂流程,在明確的情況下,能讓大家更簡單直接地執行,執行過程中,更不容易遺漏關鍵點,流暢地流程能讓我們更快更有目的性地做事,所以有這個流程還是很重要的。效果調優主要是下面幾個流程,我詳細介紹下。
明確目標和現狀
一個模型也好,一個算法模塊也好,他都有自己的功能,他執行的怎么樣,有哪些問題,距離預期差多遠,這都是我們要在最開始明確的,一般情況很簡單,就是看指標,例如準確率和召回率,復雜的,還有一些業務角度的指標,我們必須明確,在開始執行,為了方便大家觀測,這里列舉出需要在這步里回答的問題,供大家參考,能回答這些問題,那可以開始進行下一步。
這個模塊的主要功能是什么,預期的指標是多少,計算和抽樣邏輯是否具有合理性(一定要注意,有些時候出現的問題就在抽樣和指標上,這個錯了,后面的優化無從談起)。
當前模塊的指標是多少,距離目標還差多少。
具體使用的技術方案是什么,這里有沒有做什么權衡和妥協,這些妥協有沒有解開的可能。
上面的問題,如果能夠很清楚地回答,說明你對這個問題、模塊等都非常明確,在這個前提下去做效果調優,才是有效的。
分析和定位問題
很多新人很容易跳過這個步驟,但這往往是最重要,而且是最考驗算法工程師功力的部分。
分析和定位的過程,核心目標是關注這幾個問題:
確定當前方案的問題點在哪里,哪些位置或者哪些case沒有解決好。
看集中性和case分布,哪些是重點問題,需要優先考慮哪些問題。
評估問題的難度和解決率,從而了解預期的收益。
這里的分析,我喜歡把它分為兩個視角,一個是宏觀,另一個是微觀。前者更關注整體數據上的問題,通過多個角度的統計,來發現目前數據和模型的問題,例如在多分類場景,統計各個類目的準確率、召回率甚至各個類目的數據占比,找出類目短板,對類目短板進行針對性提升是可以很大程度上提升總體指標的;后者,則是進行case分析,找出bad case的一些共性,并對共性問題進行針對性解決,當然這里也會考驗到不同角度的bad case抽取,這個可以結合前面宏觀的分析結論來抽樣處理。
解決方案的制定
有了前面信息的支撐,我們是可以開始進行效果調優了,然而,用什么方法來解決,也是一個問題,如何去找最合適的方法來解決我們上面分析出的問題。
首先,我們要知道,有哪些可行的解決方案。如果是只會換模型,調參數,那招數屬實有點少,如果是這種情況,我們就應該去調研,多去看看業界和科研界的主要方案(平時,也需要),另一方面,我們也看看簡單地,從樣本、模型、規則上是否有快速的解決方案,增加手里能打的牌,才有可能有好牌,只有儲備的夠多,才更容易從中找出好東西來解決問題。
第二步,就是方案的選擇,要從眾多方案中,找出最優的方案,這里大家需要考慮這幾個問題:
方案對問題的解決程度是否可以明確,看能解決當前多少的問題。
方案的上下限在哪,除了解決問題本身外,還有沒有別的問題可以解決,或者帶來哪些傷害,換言之,方案的優缺點是什么,這點要明確。
方案需要投入多少的時間、人力、機器、數據等資源。
這些問題大家平時多少都會考慮到,但是并不一定全,尤其是后者,玩NLP的多少都會手癢試試BERT,包括我在內,但是理性思考后其實很可能不會當做一個優先級較高的方案了,尤其是問題都很明確的情況下。
調優的難點問題
說到調優,其實難度比較大的,是這么幾個位置。
首先,是問題的定位難,我們往往很容易通過直觀的指標知道我們的方案是有問題,有一定空間的,但是,具體突破口在哪里,這個會很困難。這里給大家幾個建議吧:
多看case,好的壞的,都多看看,理解業務里面常見的用例,只有理解,才能更多地發現問題。
當然,我們也可以多看看很多文章,論文的、技術分享的等等,很多文章都會去聊他們面臨的問題以解決方案,這些問題其實給我們提供思路,例如“我們會不會也遇到和他們一樣的問題”。
然后,是解決方案的儲備問題。方案分兩種,一種是針對性方案,根據明顯的問題我們可以想到一些快速的解決方案,這個往往取決于我們對業務的理解能力和方法的熟悉程度。第二種,是一些長期的,依賴儲備的方案,很多業界的方法會給我們很多思路,這些思路的內化能讓我們很快從中找到解決方案。無論是前者還是后者,其實都很依賴我們的平時積累,這個積累不僅在于量,還在于質,也就是深度,對方案理解的越清楚,越能看清本質,我們用起來其實會更加得心應手。
第三點,是技術方案的權衡。權衡是根據我們需要面臨的技術環境的,例如數據、機器、時間、人力等,有的方案可能可以很好的解決問題,但是會花費很多成本,例如NLPer最喜歡的預訓練模型,他是很依賴機器的,后續即使效果真的會有提升,也要考慮到性能和機器的問題最終可能上不了線就功虧一簣了。這個其實挺吃經驗,權衡這個能力是需要經過項目的歷練,逐步形成的,坑才多了才能把坑繞過,這點需要大家在進行項目的過程中多思考多總結。
調優能力
上面聊了很多有關調優流程的東西,但是,調優本身的能力要求還是比較高的,這里我整理了一些有關調優能力的能力項和成長的階段,看看對大家有沒有什么幫助,當然,我自己的能力也沒到很高的水平,持續學習和成長吧。
首先是執行力,在問題都給清楚了,解決方案也明確了,這個時候能編碼實現,這個應該是最基本的能力了。
第二層就是獨立完成的能力。
首先,能通過多種分析手段,診斷出現有方案的問題。
第二,就是解決方案的提出。這里背后,比較重要的事解決方案和技術的儲備。這點是需要長期積累的,一方面是對數據、場景的熟悉,另一方面是對業界和科研界的技術的了解,如果儲備不夠,很多問題絕對是解決不了的。
第三層,其實除了獨立完成以外,能有整個項目的視野。
現狀的理解和未來的規劃,能帶著規劃去設計解決方案。
能夠跳出問題,結合業務等因素來解決問題和甚至到框架和系統的設計。
審核編輯:劉清
-
算法
+關注
關注
23文章
4607瀏覽量
92840
原文標題:談談效果調優的流程和能力
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論