算法工程師的「天地之間」
作者簡介
王喆老師目前是字節(jié)跳動的技術經理,Ads Ranking方向負責人。
畢業(yè)于清華大學計算機系,清華KEG實驗室 學術搜索引擎AMiner 早期貢獻者。
曾任Roku Tech Lead,推薦系統(tǒng)架構負責人,Hulu 高級研究員,品友互動 廣告效果算法組負責人。
主要研究方向為推薦系統(tǒng)、計算廣告,發(fā)表相關領域學術論文和專利20余項,曾擔任DLP-KDD聯(lián)合主席,KDD、CIKM等國際會議審稿人。
SparrowRecSys,SparkCTR等開源項目發(fā)起人和主要貢獻者,6k stars+。
著有《深度學習推薦系統(tǒng)》,《百面機器學習》等技術書籍,讀者6萬+。
正文
工作太忙,已經半年不寫文章啦,這周末得空寫一篇,也算是最近一段時間的工作總結。
四五年前開始寫專欄的時候,技術文章還不是很多,現在不管是各大頂會的搜廣推paper,還是知乎上的解讀文章,都如汗牛充棟。到了這個時候,死扣模型的細節(jié)反而不那么重要了。在整個行業(yè)的low hanging fruit都快被摘完的時候,再去糾結能不能通過加一個新提出的結構提升0.1%的AUC,去遍歷業(yè)界可搜尋到的所有新idea去提升0.1%的CTR,逐漸變成了一件非常boring,也非常容易讓人產生挫敗感的事情。
所以,越到這個時候,我們反而應該放下你手里的paper,放下你不知所措的心情,坐下來想一想,難道算法工程師們提升效果之路真的走到了一個死局里嗎?是不是哪里出了問題?

你是算法工程師,不是深度學習工程師
正面回答這個問題之前,我想談的是一個誤區(qū)。不少同行常常感嘆,深度學習的時代紅利挖盡,算法方向瓶頸盡顯。其實是默認了一個狀態(tài),算法工程師=深度學習工程師。這個等式成立嗎?當然不是。在遭遇廣告系統(tǒng)、推薦系統(tǒng)問題的時候,沒有一個人規(guī)定你只能用深度學習的方法去解決。真實的情況是,搜廣推領域的大量問題,深度學習都不是最好的解決辦法。當我們面對推薦系統(tǒng)的冷啟動、探索與利用,廣告系統(tǒng)的出價、預算分配等等問題的時候,沿著深度學習的路子去深挖,往往是會誤入歧途的。

只有逃開了這個誤區(qū),我們才可以談一談,作為一個算法工程師,如何去破局,如何從深度學習的限制中逃開,回到解決問題這條正道上來。像這篇文章略顯玄幻的題目一樣,也許是時候想一想在算法工程師的能力框架中,哪里是“天”,哪里是“地”,在這天地之間,我們可以做些什么。

算法工程師的天——系統(tǒng)架構
在寫《深度學習推薦系統(tǒng)》那本書的時候,我一直努力讓自己始終把推薦系統(tǒng)的框架印在腦海中,每寫一節(jié),都希望它能嵌回原來的系統(tǒng)架構中。任何脫離了系統(tǒng)單獨存在的東西,都不會是理想的狀態(tài)。我想一個算法工程師的天,應該就是這樣一個印在腦海中的系統(tǒng)架構。而任何一個成功的改進,都應該是與這個系統(tǒng)自洽的。
脫離了系統(tǒng)架構談算法模型的改進有時候會產生很滑稽的效果。很多年前我還在做垂直領域的廣告模型,有些廣告主的轉化事件非常難,于是轉化數量就非常稀少,一天可能就幾個。在這樣的場景下,因為當時業(yè)界轉深度學習是大勢所趨,所以很多同事就希望用深度學習的模型解決這個問題。但關鍵問題是深度學習模型恰恰不善于處理小樣本學習的問題。我們不能說就因為當時這個技術fancy,就認為它能解決一切效果問題。在這個問題框架下,深度學習顯然不是那個自洽的解決方案。
再舉一個例子,我工作的第二年負責的是廣告系統(tǒng)的pacing模塊,就是要去優(yōu)化一個廣告計劃的預算,讓它的投放速度盡量平滑,不要短時間內把預算都投完了。我設計了一個PID控制的算法去控制單個計劃的投放速度,控制效果是很好。但由于每一條廣告計劃都要獨立進行大量的流量價值判斷和自身剩余預算的判斷,我居然把系統(tǒng)打崩了,工程負責的同學強行下線了這個策略。這個教訓是什么?就是心中沒有全局,沒有算法和工程的整體架構,理不清各模塊之間的關系,你單點做的再好,也不利于整體目標的達成。
其他例子我估計你身邊也發(fā)生過不少,比如上了一個新模型,效果提升了0.1%,結果模型體積擴大了10倍,模型收入還cover不住資源的消耗。遇到一個問題就打補丁,還沒搞清楚全局的問題在哪就著急解決問題,到處加規(guī)則最后誰都不敢動代碼。解決問題本末倒置,精排的問題在粗排解決,粗排的問題在召回解決,從來不看看這幾個模塊能不能聯(lián)合優(yōu)化,從而各自為戰(zhàn)。如果你遇到過這幾個問題,那么毫無疑問,你的“天”不夠高。
三四年前,我們還經常吐槽算法工程師的面試是“面試造航母,工作擰螺絲”,現在隨著各家公司的系統(tǒng)復雜度都越來越高,對算法工程師的要求也確實水漲船高,作為一個合格的算法工程師,你還真得知道怎么造航母,才敢在一艘大船上擰螺絲。否則結果就是要么這艘船上到處都是螺絲釘,要么直接把船修沉了。


算法工程師的地——數據細節(jié)
如果說對系統(tǒng)架構的理解是算法工程師的天,那對數據細節(jié)的觀察就是我們的地。魔鬼藏在細節(jié)中,一切宏大的故事能夠講成,首要條件是有一個好的故事框架,其次就是對所有細節(jié)的把握。在推薦系統(tǒng),廣告系統(tǒng)中更是如此。

我經常在知乎上受到類似這樣的咨詢,說王老師,我們公司最近剛上了DIEN模型,但是效果不好,原因是什么呢?
這個問題本身就是非?;闹嚨摹_@就類似于一個高中學生問老師,老師,我最近上了你的物理補習課,但是成績還是不好,原因是什么呢?
任何一個模型的提出,都有它的動機,背景和適用的數據集。在一個模型那些上的了臺面的創(chuàng)新點背后,也會有無數的tricks在支撐著那個特性環(huán)境下的模型效果。我們往往淺嘗輒止地去適配一個模型,遭遇挫折之后就把鍋甩給這個模型,看似跟自己一點關系都沒有,其實不過是懶得進行哪怕一點主動思考罷了。
好幾年前我?guī)н^一位實習生,當時的任務是打通一個新的pipeline,收集一組新的特征加入模型。事情做的很快,一兩天時間就得出結論說,這個特征加進去了,沒效果,有沒有其他任務給他做。當我回頭把這個特征的數值分布打出來之后,看到幾個關鍵問題,一是特征覆蓋率有問題,大概只有20%,二是特征值的尺度有問題,outlier的位置偏離非常遠,三是特征值的分布極不均衡。這幾個問題發(fā)現不了,沒有做相應處理,就是把特征加進去了,這不是應付公事是什么呢?在“加特征”這樣一個小的不能再小的原子操作上,都不舍得把細節(jié)搞清楚,把數據拿出來看一看。難道還可以指望他在換模型,搭架構上有所建樹嗎?
如果說你對系統(tǒng)架構的理解決定了你工作的方向不會發(fā)生偏差,那么你對細節(jié)的把控能力就直接決定了你的工作是否會成功。
不可否認我們所有人都對“宏大敘事”有偏愛。但其實宏大敘事能夠成功,往往都是從最重要的一兩個點來突破的,而這一兩個點,必須有人從頭到尾,從始至終的關注細節(jié),否則就是一堆處處漏風的空中樓閣。

算法工程師的天地之間
系統(tǒng)架構是天,數據細節(jié)是地。在這天地之間,才是最愛被算法工程師們津津樂道的建模能力和技術能力。你從系統(tǒng)架構中找到了最合理的思考方向,從數據細節(jié)中發(fā)現了問題的真正之所在,剩下的事情,就是用你的技術能力,你的建模能力去解決它。其實,如果你真正能夠通過數據分析找到問題的所在,這一步反而是最簡單的了。這里面需要注意的是,不要再次把自己的視野局限在所謂的“深度模型架構迭代”上,它重要,但僅僅是搜廣推等互聯(lián)網核心系統(tǒng)中的一個環(huán)節(jié)。
對于一個以機器學習為核心的大系統(tǒng)來說,要從三個方向找到你解決問題的方案:
1.樣本與特征。你的特征是否干凈,有無噪聲,特征質量是否高,覆蓋率怎樣,樣本相關的數據流實時性如何,樣本是否有丟失等等問題。數據才是你系統(tǒng)效果的上限,模型只能決定接近這個上限的程度。
2.Label。對于Label的理解其實本質上就是你對問題的理解。到底什么才是你這個問題真正的label,如果沒有明確的正label,如何處理處于中間階段的label,要多目標還是多階段,還是獨立拆解成兩個問題。在海外隱私合規(guī)日益嚴格的情況下,拿不到label怎么辦?如何用一些替代信號當作label,如何在合規(guī)框架下拿到label。
3.模型。你對模型的理解是否還僅限于套用別人的框架?能否從你的業(yè)務特點來改造模型?哪些特征該交叉?哪些該做成wide,哪些該做成deep,哪些結構inference特別慢,如何優(yōu)化,模型的改造會不會造成工程上吃不消,不同模型之間如何配合等等。總之模型的改造記住一句話,一切不經思考純靠蒙,靠原封不動移植模型架構的嘗試都不會有太好的結果。
這些都是天地之間的內容,遠遠不限于模型的改進。在真實的搜廣推系統(tǒng)中,甚至不限于機器學習,還涉及到大量傳統(tǒng)算法,控制論,博弈論的知識,把眼光僅僅放在深度學習完全是作繭自縛的行為。
幾乎所有的算法工程師同行都是從學校的實驗室走出來,我們喜愛那些干凈的結論,清晰的創(chuàng)新點,但那不是真實的世界。真實的世界永遠是混亂和秩序并存的,我們要做的就是從這個混亂的世界中精準的找到那根解決問題的線頭,把它扯到秩序的這邊來。

寫在最后
既然談到了天地之間這么宏大的主題,我們的文章也不能沒有一個主題架構圖啊,最后給大家補上。

算法工程師的“天地之間”
最近國內外互聯(lián)網行業(yè)的形勢都不輕松,不如趁這個機會練練內功,行業(yè)再怎么變化,真正能夠主動思考,解決問題的同行,機會仍不會少,祝大家一切順利。
討論
你認為算法工程師的核心能力是什么?歡迎在評論區(qū)交流討論~
