1. 程式人生 > 實用技巧 >從實習生到演算法專家我都經歷了什麼?

從實習生到演算法專家我都經歷了什麼?

寫在前面的話

大家好,我是DOTA,我是朱翔宇。

從“數字中國建設峰會”回到北京的這個週末,一個人來到公司,回想這幾年走過的路感慨良多。於是乎提起筆,寫一下我這幾年的經歷、感悟、收穫。給自己做一個階段性的總結,同時也記錄一下我是怎麼從“水暖建材行業子弟”重回“計算機行業”,又是怎麼由一個“資料演算法競賽小萌新”一步步成長,並取得一些成績的。

2015:迴歸 | 迴歸校園
2017:起始 | 開始於這個夏天
2018:入世 | 加入京東的第一年
2019:突破 | 突破自我 擁抱變化
2020:挑戰 | 當打之年 一往無前


2015:迴歸 | 迴歸校園


2015年對我來說是一個特殊的年份。

這一年,我父親去世了。

這一年,我放棄了父親留下的公司和水暖建材生意。
這一年,我在本科畢業兩年之後,選擇了重回學校。

正如《平凡之路》中朴樹唱的一樣,我曾經擁有著的一切,轉眼都飄散如煙。但人生本就如此,我們總歸會遇到一些自己不願面對的事情,這也正是成長的意義。

在北科大讀研期間,有著明確目標和想要什麼的我,從研一泡在圖書館到研二常駐實驗室,拋棄了所謂的生活與社交,並且最後畢業典禮我也沒去參加。在那時的我看來,我需要的是時間去彌補曾經的空白,需要的是提升我對領域的全面認知,需要的是用忙碌來讓自己少胡思亂想。整個過程看起來很極端,但是對空白狀態的我來說,卻是極其有效的。

同時,我遇到了一個好導師,在陽小龍教授那裡我學會了三件終身受益的事情。

(1)通過對文章一次次反覆的修改、批註、修改、在批註的過程中,我看到了自己邏輯上所存在的問題,並逐漸形成了對全域性和對細節的把控能力;

(2)相較於放養模式,從進入實驗室的那一刻,每週分享、總結、陳述的週會,養成了良好的自學和表達能力。在一種只有階段性目標,沒有細節控制的實驗室氛圍下,有了更多思考思辨的時間,也讓完成目標的方式有了無數種可能。“只定目標,不做計劃” 這一點也成了我沿用至今的前進方式;

(3)我曾經有個階段是負能力爆棚的人,對看不慣的人和事,時常有負能力的表達,但正如後來陽老師提醒我的那樣,一個連自己情緒都控制不了的人,又能在未來走多遠呢?

2017:起始 | 開始於這個夏天


2017年的夏天,偶然的機會我接觸到了資料競賽,本科階段參加大學生數學建模競賽的我,對這種新的資料競賽形式充滿了好奇,於是,在一種好奇與自信的情緒下,我參加了2017年的“中國高校計算機大賽——大資料挑戰賽”

在這裡插入圖片描述

賽題描述:滑鼠軌跡識別當前廣泛運用於多種人機驗證產品中,不僅便於使用者的理解記憶,而且極大增加了暴力破解難度。但攻擊者可通過黑產工具產生類人軌跡批量操作以繞過檢測,並在對抗過程中不斷升級其偽造資料以持續繞過同樣升級的檢測技術。我們期望用機器學習演算法來提高人機驗證中各種機器行為的檢出率,其中包括對抗過程中出現的新的攻擊手段的檢測。

資料層面,給出了滑鼠移動軌跡(x,y,t),目標座標(x,y)和類別標籤:1-正常軌跡,0-機器軌跡。通過建模預測某條軌跡屬於正常軌跡還是機器軌跡。

2017年的我,在演算法模型層面還是個小白,雖然經過兩年的積累有了不少基礎,但是在真正的實際問題面前,你會發現之前學習到的東西有多理想化。不過有一點我還是清楚的,特徵決定模型的上限,而演算法模型在無限的逼近這個上限。

因此,我開始自己的特徵工程之路,由原始資料(x,y,t)資料對x-y、x-t、y-t進行視覺化分析。同時我的特徵設計理念是:特徵描述“人”,而非用特徵描述“機器”,尋二者之異,以達泛化目的。突出XYT各自特徵細節及有效的利用組合特徵,特徵提取時分別將X、Y、T進行歸一化處理;同時,結合規則由橫向特徵(X),縱向特徵(Y),時間特徵(T)三個角度提取特徵。

模型層面只選擇了單模XGBoost模型,在沒有做交叉驗證的情況,拿到了決賽全國第6名的成績,可見在特徵構建和對問題的理解層面,做的還是可以的。如果你要問我為啥不做CV,不做融合呢?那我只能告訴你,因為我無知呀,那時的我還是個小白。

現在回憶起來,第一次參加資料競賽期間,還是有蠻多有記憶的小插曲的。比如換了好多次隊名,最後因為研究生宿舍三人都玩DOTA,所以用了這個ID;比如因為比賽期間文超的開源而噴過他,後來也算不打不相識的認識了他,並在一段時間裡通過交流學到了很多東西;比如認識了很多圈內選手都熟悉的 清華大學 劉強老師,也正是因為劉老師的鼓勵,沒有中途放棄比賽,並一路打到了決賽,兌現了跟劉老師之前的約定,去深圳拿到了清華百年紀念郵票。

在這裡插入圖片描述


2018:入世 | 加入京東的第一年


競賽不僅可以讓自己保持一種戰鬥狀態,還可以認識一波志同道合的朋友。從深圳回到北京之後,在本次比賽冠軍選手潘坤同學的“忽悠”之下,我來到了京東,開始了演算法實習生之路,並在畢業之後留在了這裡。

在這裡插入圖片描述

首先,我選擇的是團隊,一個純粹的工作氛圍在我的選擇裡排第一位。實習讓我對團隊的氛圍有了瞭解,同時接受了兩年社會毒打的我,自認為看人上還是挺準的,當然事實也驗證了我的判斷。其次,我選擇的是方向,“紮根資料,貼近業務”,是我對自己的定位,因為沒有資料的演算法就只是一堆公式,同時沒有業務背景的依託,演算法就只是自嗨。最後,我選擇的是相信自己,亂世出梟雄,我喜歡從0到1的過程。

1. 工作成長:金融場景下的推薦

這一年,我的主要工作是在金融場景下的推薦任務。之前沒有過推薦經驗,也沒人帶的經緯度演算法小隊開始了從資料收集、資料清洗、特徵加工、演算法建模的全流程探索。基於當時的演算法工程師的能力素質,現在回想還好當時沒人帶,不然可能早就完犢子了。“塞翁失馬,焉知非福”大概如此。

回過頭來,聊一下金融場景下的推薦問題。推薦在某種程度上可以簡化為使用者和物品之間的匹配問題,為合適的使用者匹配上合適的物品。但只做演算法模型,脫離業務背景的打法是毫無意義的。畢竟推薦是離業務很近的一門技術。

因此,在基金推薦這個任務中,經過和業務方等多次溝通,我們儘可能多的列出了可能會影響使用者申購行為的因素,並將其量化為演算法模型可以識別的特徵。同時確定建模目標,減少運營人工配置產品工作量。通過甄選給使用者推薦長中短期業績表現較優質的基金,讓使用者能夠切實賺到收益,嘗試將非權益類基金偏好型的使用者向權益類基金引導,以增加業務收入。

特徵上,除了使用者行為特徵、屬性特徵以為,增加市場熱度特徵維度,增加alpha值衡量使用者獲得超過市場平均回報的能力,增加beta值衡量使用者能獲得市場平均盈利的能力。

在召回階段,基金商品和零售商品不同的地方在於金融商品的量級要小的很多,相較於傳統的多路召回的方式,在基金推薦中,我們首先對使用者基金型別偏好進行預測。同時基於業務理解我們增加了一路“4433選基法”召回,該選基方法關注基金的長中短期業績表現,篩選標準十分嚴格。精選出來的基金在盈利能力、市場業績、抵抗風險等方面都有不俗的表現的基金。

在排序階段,在召回到的基金型別偏好的基礎上,對多種使用者型別進行分開建模,用LR+LightGBM進行排序。

最終在相較於之前的線上模型和並行PK的其他團隊,CTR層面提高了12%左右,GMV提高了70%左右。很幸運,自己的思考產生了實際的線上效果。

2. 突破瓶頸:亮劍深度學習

2018年,我開始了自己第一個用深度學習的資料演算法競賽,因為在工作中基於業務理解、特徵工程層面的方法優化要優於深度模型的投入成本,同時考慮到業務可解釋性和GPU建模環境問題,如何快速且有效的由業務建模成了工作中的主旋律。這也讓我產生了一種危機感,因此,在個人能力突破上,我選擇了NLP類深度學習競賽進行亮劍。

關於賽題:達觀資料提供了一批長文字資料和分類資訊,結合當下最先進的NLP和人工智慧技術,深入分析文字內在結構和語義資訊,構建文字分類模型,實現精準分類。

解決方案:對於這個文字分類任務,有個小的操作其實都可以達到很高的分數,即使模型不夠優秀。通過對於詞向量做一個增強,即利用word2vec與glove的差異性,構建一個魯棒性更高的詞語向量表徵。我們試試word2vec+glove+faxttext的組合,對於我來說,效果並不是很好,我覺得可能的原因是faxttext與word2vec的相似性很高,弱化了glove的向量表徵,同時,對於glove單獨的詞向量我也沒有嘗試過,大家也可以嘗試一下。對於模型的話,賽後我們開源了一個雙層的biGRUModel模型和rnnCapsuleModel。

最終,首次使用純深度學習模型構建的演算法解決方案取的了季軍的成績。通過這次比賽我和提莫(何從慶)也成了很好的朋友,同時,在他那裡也讓我在近幾年交流學習到了很多知識。

在這裡插入圖片描述


2019:突破 | 突破自我 擁抱變化


2019年是動盪的一年,這一年我經歷了兩次組織架構的調整,同時團隊裡除了我以外的其他同期入職的校招生也在這一年全部選擇了離開。雖然我也想過離開,但本著擁抱變化的心態,我還在繼續戰鬥。因為我當年入職之時,我就給自己設了一道牆,那就是,未來3年無論如何變化,無論經歷什麼,我都要守住3年期限。只有在不斷變化的環境中茁壯成長,才是最有力量的。

1. 工作成長:多目標任務的推薦

在變化中,2019年在工作上最大的收穫,是完成了多目標任務場景的推薦,同時也是在演算法建模層面,我覺得比較有意思的一個場景挑戰,以至於在問題最初期,我認為它是一個偽命題。當然這個過程中,我還做過返利商品推薦、眾籌商品推薦、資料探勘等工作,就不展開說了。

在這裡插入圖片描述

在這個多目標任務場景的推薦任務中,根據業務背景的特點,我用了Random Walk和Deep Walk,對核心指標進行了拆分,因為交叉轉化這個概念,在模型層面是沒法建模的,但我們換個思路,怎麼通過基於A指標的建模,使得B指標有所提升呢?我的解決方案是基於業務建模,通過細緻化的拆分使用者群體,單獨建模的方式對不同人群的特點採取分步建模。具體實現形式因為涉及到的業務場景太多,不方便介紹,但基本思想是“隨機遊走,分而治之”。

2. 突破瓶頸:技術沉澱

這一年我經歷了很多負能量的事情,但陽老師的教誨我還是深深的記得的。人之不如意之事,十有八九。但你依舊需要抬頭向前,有了之前深度學習的初次嘗試,我決定繼續邁向專家之路,畢竟取得一次好成績不代表什麼,可能是隻是運氣好而已。

第一次的深度學習嘗試之後,我做了很多思考,比如每一層都在抽取什麼要的特徵,又是怎麼發揮作用的,我還能通過什麼樣的方式抽取什麼樣的特徵表達。也正是基於這些思考,我領悟到了一套煉丹方法,並逐漸形成了自己的一本煉丹筆記。

2.1 Attention與Capsule初體驗

之後我參加了JDATA絕對語義識別挑戰大賽,預測廣告宣傳語是否違規。在這個比賽中,對Attention、Capsule也有深入的理解。
在這裡插入圖片描述
當序列越長時,RNN在捕捉序列長期依賴關係時就顯得越弱。而從分析attention函式我們可以發現,Attention是將進行序列的每一個元素與其他元素的對比,在這個過程中每一個元素間的距離都是1。因此,我們在BI-GRU和Bi-LSTM模型中引入attention機制,去靈活的捕捉全域性和區域性的聯絡。
在這裡插入圖片描述
Capsule是通過向量的方式來建模,它利用向量輸出代替標量輸出,捕捉空間結構資訊,最初由深度學習之父hinton提出應用在影象領域。由於NLP是通過詞的向量的方式構建的,所以Capsule方式在NLP領域有著得天獨厚的優勢,在這個比賽中,我們將Capsule方式由影象領域遷移到了NLP領域,並進行了應用與實踐。因為Capsule本質上是一種並行注意力模型,能把資訊提取的注意力集中到下一層更加活躍的Capsule,同時忽略掉那些不活躍的。所以,我們將RNN的輸出作為low-level Capsule,同時通過動態路由的方式構建高層語義表徵得到high-level Capsule,得到的空間特徵作為後續Dense層的輸入。

2.2 BERT初體驗

BERT作為橫掃NLP各項任務的一個大殺器,在本次比賽中我也做了相應的應用。
在這裡插入圖片描述

BERT與最近的其他語言表示模型不同,BERT旨在通過聯合調節所有層中的上下文來預先訓練深度雙向表示。因此,用12層Transformer捕捉全域性語義資訊,通過next perdiction 預測下句話,可以構建上下文的語境詞向量。預訓練的BERT表示可以通過一個額外的輸出層進行微調,適用於廣泛任務的最先進模型的構建。

在此次比賽的決賽答辯中,有些選手提出BERT模型在使用時,不如Bi-LSTM效果好,其原因大概有兩種,一是BERT模型的使用在訓練過程中未收斂;而是直接套用原始模型,而針對該實際問題進行相應的優化和引數調整。

2.3 技術文章沉澱

認識許多志同道合的小夥伴,這也正是我參加資料競賽的原因之一吧。2019年我和 阿水 成為了小夥伴,一個帥氣的小夥,富有激情,很有想法。在很多方面都是我學習的榜樣。同時工作兩年和學習上的積累,讓我開始對實戰進行總結,並慢慢了養成了技術文章沉澱的習慣。以上方案,如果有興趣的同學,可以看我之前的分享的詳細方案,連結如下:

DigSci科學資料探勘大賽-亞軍方案分享:https://zhuanlan.zhihu.com/p/88257675.

JDATA絕對語義識別挑戰大賽-季軍方案: https://zhuanlan.zhihu.com/p/86868102.

2020數字中國創新大賽-冠軍方案分享: https://zhuanlan.zhihu.com/p/147049432.

2020:挑戰 | 當打之年 一往無前


2020年,新冠改變了很多,也改變了很多工作和生活模式,也改變了我很多。一如既往,今年又經歷了一次組織架構的變動,不過幸運的是,無論是我離開的直屬團隊,還是我現在加入的直屬團隊,都是很nice的,只是因為個人職業規劃和部門職能的改變,我做出了自己的選擇。

1. 第一本書

2020年春節期間,一次機緣巧合巧合和Cookly他們一起完成國內第一本針對競賽實操的圖書:《阿里雲天池大賽賽題解析——機器學習篇》。第一次寫書,春節期間完成了初稿,幕後發生了一些小故事,不僅感嘆緣分的奇妙,一往無前,挺好。

為了讓更多人以更低的成本接觸到競賽,更快的參與競賽,天池團隊開發了提供免費算力的DSW平臺,與競賽頭部選手、機構合作分享了一系列可免費學習視訊課程,為了讓大家更方便的參與到資料競賽,天池團隊將7年內舉行的200多場競賽相關內容進行沉澱、優化,再優化,最終聯合電子工業出版社出版了國內第一本針對競賽實操的圖書:《阿里雲天池大賽賽題解析——機器學習篇》。

在這裡插入圖片描述

本書包含四大經典競賽案例,通過七個維度詳細解析每個賽題,讓你清晰知道這個賽題在說什麼,為什麼會有這個賽題,如何用現有技術解決這個問題以及如何去優化解決方案等內容,每個賽題案例都包含N大知識點,攬括機器學習全流程,學到的不只是技術,更是一種解決問題的思維方式。

從200多場競賽中篩選了最典型的四大競賽——工業蒸汽預測、天貓使用者重複購買預測、O2O優惠券預測和阿里雲安全惡意程式檢測,每個競賽都從賽題理解、資料探索、特徵工程、模型訓練、模型驗證、特徵優化、模型融合7個步驟展開講解、層層遞進,解析競賽內容和解決方案。

在這裡插入圖片描述
如果你想開始你的演算法學習和競賽之路,如果你想在競賽中取得更好的成績,如果你想知道普通選手和優秀選手的差距,如果你也想通過競賽拿到更好的offer···作為小白,這是一本很適合的競賽入門書,也是一本很好的演算法學習實踐圖書;作為大神,你可以通過本書實戰內容梳理自己的競賽知識點和技能圈,查漏補缺,更上一層樓。

2. 數字中國創新大賽

因為疫情原因,原本5月份舉行的 數字中國建設峰會 推遲到了10月份,讓本來3月就結束的一場智慧演算法比賽,在10月份數字中國創新大賽數字政府賽道總決賽的舞臺上進行了延續。

在這裡插入圖片描述
如果說這次比賽最大的收穫,那應該是和魚佬,傑少,林有夕,糖糖的組隊,工作後還繼續參加資料競賽,說的積極一點是讓自己保持一種戰鬥狀態和激情,說的實在一點呢,應該是我是一個很無趣的人,告別了dota遊戲之後,我大部分休息時間是宅著的,所以讓自己忙起來,彷彿是從研究生期間帶來的慣性。但資料競賽給我帶來最大的樂趣,應該是結識隊友,個人的人生經歷使然吧。

在這裡插入圖片描述

在本次數字中國創新大賽中,我們的方案共由四部分組成。首先是資料基石部分,由資料探索和特徵工程組成,對收集到的資料進行分析整理提取有效資訊;演算法核心部分是系統的智慧大腦,能夠提供多種演算法模型,如預測作業型別預測、預測相似度匹配、防碰撞預警等;工程骨架部分將演算法核心與視覺化平臺進行關聯,幫助實現演算法封裝和平臺搭建;視覺化平臺部分由資料驅動、演算法支撐,進行實時監管和智慧決策,輔助海事人員進行海洋建設和管理。

在這裡插入圖片描述

在智慧海圖雲系統的架構設計,我們在構思整個系統方案時,秉承快速建設、多次迭代、小步快跑的模式,強調資料的多渠道採集,同時注重形成以海事、漁業場景為核心的智慧化體系。系統架構分為四個部分,資料採集、資料儲存、資料模型和智慧應用。完備的系統架構由強大的技術支撐,系統完成前後端分離設計,保證程式碼和資料安全,視覺化部分使用GPU引擎完成前端百萬軌跡點秒級渲染。

3. 個人總結與感悟

(1)工作與學習並行,任何時候都不能丟掉提升自己的機會,人是懶惰的,如果你不甘於平庸,那你就得努力。

(2)工作習慣的養成,無論是讀研還是剛參加工作的時候,我就有記筆記的習慣,善於總結才能進步。分享一下我的部分工作筆記目錄。
在這裡插入圖片描述

(3)人生目標的設定,每三年一個大目標,每一年有個小目標。但是我從來不給自己制定具體計劃,因為計劃沒有變化快。當你有了目標的時候,你所有的選擇都會偏向你的目標。

(4)戰鬥意志——逢敵必亮劍。我最喜歡的一部戰爭題材電視劇的臺詞,逢敵必亮劍,狹路相逢勇者勝,倒在敵人的劍下不丟人。人生的不如意之事太多,不要玻璃心。

(5)擁抱變化。工作之後,你就會發現,變化時時刻刻的存在,學會擁抱變化併成長。

(6)志同道合的小夥伴。有夥伴的感覺真的很好。

4. 主要技術沉澱經歷

  • 科研論文、發明專利共20餘項
  • 《阿里雲天池大賽賽題分析——機器學習篇》
  • 數字中國創新大賽 數字政府賽道 演算法賽 冠軍
  • Microsoft DiggSci 科學資料探勘大賽 亞軍
  • ICDM Knowledge Graph Contest 亞軍
  • “達觀杯”文字智慧處理挑戰賽 季軍
  • 京東JDATA演算法大賽 絕對語義識別挑戰賽 季軍
  • “中國法研杯”司法人工智慧挑戰賽 三等獎
  • 數字中國創新大賽 數字政府賽道 銅獎
  • 其他資料競賽Top10 若干

5. 給畢業生的建議

感謝一路走來,leader們對我信任。作為一名技術面的面試官,截至目前我面試過的候選人應該有60多個了。給應屆畢業生一些我的建議吧。

如果你沒有專案的磨鍊,那你應該有著紮實的基本功,並且在基礎知識之上你應該有些自己的思考,大多數面試官是在發現你的優點,這也是由你簡歷入手去了解你的一個過程,初始分50分,每次回答與對問題的理解,為你加減分,所以紮紮實實,拿出你最好的一面,展示自己。

最後,好好刷LeetCode!LeetCode!LeetCode!

寫在最後的話

感謝一路走來所有幫助我的小夥伴們,感謝我這幾年我陸續遇到的貴人,陽老師、興東哥、光叔、磊哥、文文、芬姐、雪姨、雪姐,還有智慧不要臉群的小夥伴。感謝你們。

還有一起戰鬥過的坤、鴻麟、從慶、阿水、傑少、魚佬、有夕、雨琨,路還很長,未來可期。

最後,完成對畢業後這3年的總結,開啟下一個3-5年目標。未來見~


本文作者:京東數科 朱翔宇
文章來源:“煉丹筆記”微信公眾號(作者個人賬號)
更多技術乾貨歡迎關注“京東數科技術說”微信公眾號,我們只憑技術說話!


在這裡插入圖片描述