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