天天看點

ML&DEV[18] | 入職一周年:夯實基礎,持續深入

【ML&DEV】

ML表示機器學習,DEV表示開發,本專欄旨在為大家分享作為算法工程師的工作,機器學習生态下的有關模型方法和技術,從資料生産到模型部署維護監控全流程,預備知識、理論、技術、經驗等都會涉及,敬請期待!

往期回顧:

  • ML&DEV[13] | 快速從無到有模組化完成思路
  • ML&DEV[14] | 淺談解決問題的能力
  • ML&DEV[15] | pyspark雜記
  • ML&DEV[16] | 算法工程師内功修煉
  • ML&DEV[17] | 算法工程師的技術深度

入職一周年,也是自己全職進入職場的第一年。慶祝一下哈哈。

其實之前我是聊過一次來着,職場一周年哈哈:ML&DEV[8] | 算法在崗一年的經驗總結。之前那篇主要篇算法的了解吧,這篇講講自己工作上的思考和感受。

這篇文章主要是聊聊我的感受和思考的,技術的東西聊的不多,而更多是聊一些自己的思路和成長吧,當然看着可能像是我自己在說教,就當我做一個總結和思考吧。

懶人目錄:

  • 職場人:
    • 主動性。
    • 做正确的事與結果導向。
    • 追求極緻。
    • 溝通,溝通,溝通。
    • 時間管理。
  • 技術人:
    • 基礎與深度。
    • 積累與沉澱。
    • 技巧和技術。
    • 工程和算法。
  • 人:
    • 工作與生活。
    • 娛樂。
    • 有關加班。
  • 未來計劃
  • 幾個提問和回答。

職場人

初入職場,還是要學會适應這個環境,在各位前輩的幫助下,我還是領悟到了很多東西。

主動性

主動應該是我自己本身的一個特點,自己也一直在嘗試保持,需要溝通的主動溝通,需要做的事情要主動推進,在有餘力的情況下能主動要活,這就是我了解的主動吧。這個主動其實也不見得是邀功、作秀,其實是為了處理事情采取的主動行動,需要誰支援提前說,需要做什麼或者合作就積極去促成,這個說這有些玄學,但是其實挺有用的。

回頭說說研究所學生階段,這種主動能讓自己收獲很多,自己主動去了解自己需要的論文,自己看自己學,自己動手,而不是要等着别人來給你配置設定任務,而且你不和别人說你的情況,别人給你配置設定的任務能合理嗎,是以盡可能讓自己去把控這件事情,了解事情全貌,主動推進。

做正确的事與結果導向

這點最初在美團學到,後面在工作中逐漸了解。做正确的事與之對應的是正确地做事。我們都在做事,但是我們需要保證的是目标是正确地,無論是講做事的管理學,還是偏思考的哲學,還是各種實驗科學等等,都講求目标導向,需要确認目标然後再來制定方案解決問題,目标的正确性直接影響更加全局的結果,隻要方向正确,快慢總會到重點。是以在做事情之前,要了解目的,确認目标正确,明确目标,這樣做事才能看得到成果。

做正确的事告訴我們把目标确認好比做事本身要更加重要,而結果導向的是要求我們,在目标确認之後,所有行動要以訂立的目标為中心,道理都懂,但是做起事情來很容易就忘記,代碼寫着寫着不知道自己寫的啥,片面的追求高端、前沿而忘了現在的目标是實作功能需求,論文看着看着不知道自己為什麼看論文,隻知道可能緩解一下焦慮,一句一句翻譯最後什麼資訊都沒有擷取,非常可怕吧,我們要的是時刻記得自己的目标,不忘初心,其實就是這個意思。

追求極緻

這個也是OPPO的價值觀之一,不淺嘗辄止,要把一件事情做得盡可能好,時間精力有餘的時候多想想試試一件事情能不能做得更好,80%的F1能不能提升到82%、85%,10ms的性能能不能下降到5ms,做這些思考,一方面這件事你會做的越來越好,另一方面自己的水準也會在提升,多赢的結果一定會有,這個也呼應了我前面說的主動性,嘗試主動地把這件事做的更好,那麼你自己就會更好。

溝通,溝通,溝通

程式員是要寫代碼,但不代表就不用了動嘴,一個系統那麼大肯定需要多端合作,還有産品,哪怕同職能也有同僚,上下級等等,我們需要溝通,甚至是需要主動溝通,要大膽的動嘴,讓他們了解你的情況,也要去了解他們的情況,某個功能好不好做,進度怎麼樣,借助這些資訊能更好地安排自己的工作,也能讓整個團隊做事能合作的更加緊密。我自己的話,如果自己可控,還會安排特定時間專門拿來溝通,其他時間就能更好地專注于其他事情。

時間管理

額我不是時間管理大師,但是終究要了解一些時間管理。我開始思考時間管理的初衷是因為寫代碼涉及算法之類的工作需要獨立深度的思考,是以需要一大塊獨立思考的時間,是以要安排各種工作能讓自己有這麼一塊時間,什麼時候開會,什麼時候寫代碼,什麼時候寫PPT(23333),還要騰點時間看看論文之類的。

一般,我是會有自己的周報和每天的計劃與總結,是寫給自己看的,下周該做什麼,然後拆解每天該做什麼,然後一步一步執行就行,非常有計劃地按部就班的,人也不慌,做起來也得心應手。

技術人

雖然工作中很多時候要處理事務上的東西,但是時刻不能忘記自己是一個技術人員,本職工作還是解決技術上的問題,寫代碼也好,算法實驗也好,這目前還是我們的本職工作,也是我們賴以生存的核心競争力,我們要守好我們自己建立起來的壁壘。

基礎和深度

作為一名校招生,我們可能有比較好的校園知識,進來以後要開始深耕自己的技能樹了。基礎上,業務很忙,不要停留在調包,多看源碼,掌握你所在做領域的各種基本操作,從初版到中期疊代帶最終版本,都要熟悉。深度上除了基操,多看論文,跟着前沿走,同時嘗試把這些方法落地,至少自己弄個toy data玩一玩,加深了解。

總之,持續提升自己的核心技術,這個非常重要。

技術沉澱

做過的事要複盤,寫過的代碼要整理,做一件事的時候多想想這些東西能不能被抽象城經驗,成為通用的東西,這就是沉澱,這些就是自己的獨門秘籍,某個人物做完以後,自己整理代碼形成自己的pipline,同時知道一些trick能讓自己做這件事更加熟練,自己在内部吹的一個事情是對于特定問題,經過優化,開發一個能上線的模型,時間從一個月下降到了一周,這個效率杠杠的,真的有啥實質上很高端的東西嗎,沒有,就是自己設計整理優化了。

技巧和技術

這是我近期感受最深的一個,也是我近期想的最多,近期其實寫了一些有關技術深度的文章,來源于一些前輩對我的建議吧。首先什麼是深度,深度來源于對一個問題具有比較深入的了解,知道這個問題的全貌,可能有那些坑,怎麼解決。然後聊技巧,技巧是一些平時我們使用的小trick,小trick本身其實不能代表什麼深度,隻是解決問題的技巧而已,而技術,更多的是紮實的技術,穩定、高效、精準解決問題,trick可以有,但是隻有trick就不行。

  • ML&DEV[16] | 算法工程師内功修煉
  • ML&DEV[17] | 算法工程師的技術深度

工程與算法

從剛開始當算法工程師起,我就發現,算法工程師,首先是工程師,然後才是算法,需要有基本的工程素養,不僅是代碼要會寫,還要知道複雜度,知道怎麼高效處理資料,怎麼評估性能,這些都是非常重要,隻有會這些,我們設計的算法才有用武之地。總之,我們在專注于算法的提升的同時,需要注意我們的工程不被拉下。

這章主要講的是我自己怎麼平衡自己的工作和生活的。

工作與生活

很多人可能會覺得我是對技術比較癡迷的,有一說一,是,當然我也會有一些自己的愛好,例如打打遊戲、看看電影啥的,而有關算法這塊,其實也是自己的愛好吧,是以自己覺得花時間在這裡不算難受,按照自己的計劃去看這些東西挺好的,其實這個就和釣魚、打球之類的興趣一樣。但是,還是時刻要提醒自己記得休息,保養好身體,雖然我還是比較胖,但我其實還是有健身的哈哈哈。

娛樂

其實我心态在一些人看來可能挺幼稚的,我會喜歡樂高(最近入了一台塞納),喜歡手辦(最近入了個燒燒果實),英雄聯盟、塞爾達之類的哈哈哈,另外我也健身,但是我自己其實不是很管得住嘴(不暴飲暴食但是也不強行管),是以還是比較胖的哈哈哈。

加班

em...,粵語有句俗語:吃得鹹魚抵得渴,這一行工資高是衆所周知的,多幹點總是合理的吧,當然給不夠還幹那是另一回事吧。另外,對于目前的我自己來說,但凡幹活即是在成長,我還是挺願意幹的,是以繼續整呗。

未來計劃

标題就是自己未來進步方向,自己原本在“完成任務”這件事情上修煉了很多,而忘記了技術本身,這個多少還是有些問題,在完成任務的基礎上要讓自己的技術深度進一步提升,内化成自己的内容,這樣自己才能走得更遠,怎麼做,肯定就是把自己的學習面聚焦一些,多了解多思考一個問題,這樣深度慢慢就有了。

答疑時間

問我問題的人很多,我選一些來吧。

Q1:算法工程師一般一天的工作時長是什麼樣的,典型的996嗎,加班情況咋樣,有空健身嗎,身體狀況還行,除了工作還有空閑時間發展興趣愛好嗎。

A1:額,這麼說網上傳聞很多,但是不是所有的事都非黑即白的,不是所有人都996,至少我不是6,995吧。至于這個加班,現在概念模糊了,你說9點下班算加班那就算加班吧,不算那就不算吧。健身有,我一周兩次,全在周末,身體挺好的(說得好像大家回家就9點睡覺,很健康似的?),興趣愛好有啊,塞爾達一周有5個小時,另外我還有時間寫文章,寫一篇文章至少要3個小時吧,帶着代碼公式的那就5個小時起步了。

Q2:入職前建議。

A2:保證畢業,及時行樂,工作以後玩的機會就少了。能提前了解自己的崗位,那就提前學點東西吧。有興趣可以參加一下比賽,或者自己找一個方向,開始多做一些嘗試。

Q3:目前搞query parse,感覺就是nlp任務,目前都是機器學習,資料量也不是很龐大,别人天天聊一些spark,Scala什麼的,我這邊都還沒用到,深度的方法更沒有用到,風險太大。但是推薦都用上深度的方法了。是以,我想問剛入門搜尋算法工程師,該有什麼規劃?需要掌握哪些技巧?是先沉澱一下去了解業務,還是更趨向于模型,甚至嘗試把深度用到搜尋領域中呢?

A3:首先,我說了多少次了T T,深度學習不是目标而是方法,解決一個問題有很多方法,不要為了深度學習而去用深度學習,這是指導思想的問題。

搜尋裡面,在query了解這塊,絕大部分都是和NLP打交道的,這個沒毛病,至于用機器學習這個問題額,有啥問題嗎?會用的話挺好的啊,如果還有更好的方法歡迎提出,對效果有提升的歡迎去嘗試,這個都還行,要是沒有,那就老老實實用現有的方法,解決問題是第一要素,這個和科研是不一樣的,科研要求标新立異,追求創新,但是工作,要求的是完成任務。

推薦之是以可直接使用深度,我的了解是對于“正确”這個事情的要求不是很高,推薦什麼東西,怎麼推薦,使用者喜歡什麼,是不完全确定的,使用者自己都不知道,是以可以猜,使用者的容忍度會比較高,差體驗不會那麼明顯,但是搜尋,使用者是有強烈的搜尋預期才會去搜尋的,是以對準确性要求非常高,一旦出了無關的會非常惡心,這就導緻了推薦那套不能完全照搬到搜尋來,除非,你的深度學習做的非常非常非常好。

有關規劃,一方面建議是了解整個搜尋系統中涉及的算法問題,知道一些基本操作,另一方面,針對一兩個小項進行深挖,例如意圖(文本分類)、實體抽取(命名實體識别),了解他的基本操作,常用的優化提升方法(包括但不限于深度學習,我也希望能認真讀我的文章的各位不要把優化都想成改進深度學習模型,手裡隻有深度學習一把武器)

spark、scala之類的,個人建議還是看看spark,大規模的資料挖掘和處理還是需要的,盡量不要等到要用再學。

搜尋産品初期還是詞典之類的為主。其實這個大部分系統和項目都是這樣的,包括我們“熟知”的推薦,要深度學習,在推薦系統初期我們哪來的使用者行為來做深度,自己仔細想想是不是。

Q4:每天就寫寫規則sql,沒有模型,全是政策。還是比較老的,可能新人業務還沒了解好也提不出好的想法。目前想的就是把手頭上先完成。比較好奇的是平常用不上的算法自己平常也要多看論文積累麼,是多從論文吸收一些idea麼,[捂臉]感覺看論文原文比較少。叉燒哥這一年提升最快的是啥,是不是剛入職接觸一些看似的坑也屬實正常?hah 發現我也沒具體的問題,就瞎問一下。

A4:先這麼想,真給自己一個模型任務,自己能不能做好,不知道你是不是,但可以反思一下自己是不是眼高手低了,如果可以,可以主動和上司說,什麼場景,什麼問題,可以用什麼方法解決,預期收益和風險是那些,如果能闡述清楚并說服你的上司,就是幹。如果不行,就老老實實寫sql、寫規則,但不局限在這裡,而應該主動,借助這些東西了解業務,了解現狀,了解某些問題應該怎麼解決,了解一個項目怎麼上線。我們需要知道的一點是,哪怕一個項目組很大,很多人,但也沒有那麼多模型任務來做的,要優化整體系統的效果,有很多事情可以做,能發現到優化點,腦子裡有方案就盡管去做,沒必要看不起sql、規則之類的,任何模型其實都可以用簡單的規則代替,但是不是所有的規則不是都可以用模型代替,(别洩露了自己隻會模型不會别的的真相)。

另外,在做什麼事和自己的成長學習不應該太過綁定,特定相關問題的方法、模型都要去了解,去嘗試,平時要注意自己的學習提升。

ML&DEV[18] | 入職一周年:夯實基礎,持續深入