年終總結 & 算法數據的思考

jopen 9年前發布 | 47K 次閱讀 算法

從前東家離職已經一個多月的時間了,在這一個月,前前后后也和幾家公司做了技術交流,自己也第一次靜下來這么久來思考總結。今年是我畢業的第五年,也正巧趕上年底,就把這些湊到一起寫個小總結吧,也沒有什么主題,沒有主次,純粹記錄,想到哪兒寫到哪兒。

  1. 推薦系統

    在 最近的三四年時間里,我的主要工作就是搭建推薦系統,這幾年來不說看了上千篇論文也有數百篇了,這種專注讓我自認為在推薦系統領域至少處在一個業界相對領 先的水準,但是也恰恰是這段經歷讓我被打上了深深的標簽:他是一個“推薦系統專家”。既然這樣,那我就先來說說推薦系統吧。

    推薦系統是一 個太龐大的詞,我們不妨先退一步說推薦算法本身,其實推薦算法本身是一個綜合性的問題,他說淺他可以做的很淺,說深也可以把他做到很深。你可以簡單地用最 基本的Content-based,再復雜點可以Collaborative Filtering,如果你想做的深入一些,基于SVD/LDA等的降維算法,基于SVD++等的評分預測算法,基于Learning To Rank的排序算法,甚至你再轉換問題,把推薦問題再轉換成分類問題,或者采用以上算法前先用各種聚類算法做數據的預處理,你可以折騰出很多很多的花樣。 所以做推薦領域的工程師是個很“痛苦”的事兒,因為只要機器學習領域有任何的突破性進展,你都需要去做跟蹤,NLP領域出了Word2Vec,出了 GloVe,其他領域的算法工程師可以說我對NLP不感興趣,但是你必須跟蹤,因為他可以輔助你去做文本內容類的推薦算法;Deep Learning可以讓圖像識別領域做更棒的特征工程,你也馬上要去跟蹤學習,因為在做圖片推薦時終于有一種方式也許能解決元信息問 題;RecSys2013的best paper通過調整節點順序從而優化矩陣分塊策略,極大改善了矩陣分解算法的效率,你就要去跟蹤來更新自己的舊有離線算法;微軟亞研搞出了一個Light

LDA允許在低網絡流量下去做LDA的多機并行,你就要興沖沖地跑過去讀他們啰啰嗦嗦的幾十頁的paper,因為終于不用忍受LDA低劣的性能了,而這些 追蹤往往是無窮無盡的。但是如果你一旦停止了更新知識庫,就會學術界遠遠甩在身后,做一個“協同過濾”工程師。

但是算法的一切調整只有寄 托于產品才能發揮出其最大的威力,但是如何根據產品去選擇和調整算法是我認識大多數的算法工程師所非常薄弱的一點。舉個實際的例子,我們都知道在所有的比 賽中,多種算法的混合是最重要的環節,經常就會有人問我,說哪種混合策略是最好的,但是其實這是嚴重依賴于產品本身的。例如Tinder,他們的產品形態 是每次只出現一個人,讓你點擊喜歡還是不喜歡,那么這種情況你必須需要一個算法的分類器來為每個用戶選擇一個合適的推薦算法,并且根據用戶的反饋來實時調 整分類器,因為如果用戶連續Unlike了幾個用戶,他可能就流失掉了。但是對于LinkedIn的用戶推薦列表中,你很適合用若干算法混合的算法,因為 這樣可以保證至少讓整個列表中至少有X個所感興趣的用戶,而往往同一個推薦算法的Items是趨同的。再對于展示在首頁的推薦入口區域,可以優先選擇若干 推薦算法的交集策略,這樣可以用少量的高質量Item最大化的滿足用戶的心理底線,從而吸引用戶點擊。所以認清產品的形態和交互形式,依據產品去訂制算法 是成為優秀算法工程師,而非算法研究員的重要一點。

一個優秀的推薦算法,一個優秀的推薦系統的確可以為企業創造很多價值,曾經和某知名電 商網站的數據總監交流,他們的推薦系統實實在在地把銷售額增加了15%,但是過于神話迷戀推薦算法和過于看扁推薦算法都是一種偏激的行為。作為推薦算法工 程師更應該清楚推薦算法本身的瓶頸,或者可以估計到該算法為企業帶來的實際價值,從而來決定是否應該繼續優化該推薦算法。何時始,何時止,是任何一個推薦 算法工程師都必須要面對和決定的問題,但是聊這個話題必須要牽扯到推薦系統的兩個重要部分:產品和數據。

一時想不起更好的例子來了,就說 淘寶吧,以淘寶的搜索推薦為例。首先,我相信淘寶從整體來講是不需要推薦算法的,因為淘寶是以爆款商品為主打的,構成了淘寶盈利的大部分,而我相信以淘寶 的KPI和運營文化,必然會以CTR為主要的KPI,所以在這個程度上,淘寶的運營必然不停地推薦爆款商品而不可能冒著風險讓這部分來做個性化。這就是產 品不適合做推薦的典型例子。 另一方面,由于爆款商品的推薦所以讓長尾的產品沒辦法積累到足夠的點擊數據,這使得數據的缺失和偏移變得異常嚴重,推薦算法更是無從發揮威力。(沒在淘寶 工作過,所以純屬局外人猜測,另外我相信電商網站大多如此)

那么你從這一個例子就否定掉推薦系統的作用?這個我覺得有一個例子非常容易反應情況:現在地上每隔1米就有100塊錢,在遙遠的10000米外可能會有500W,你到底是選擇一直低頭撿100塊錢,還是跑向遙遠的10000米去找那500W的問題。

  1. 深度學習

    深度學習近兩年可謂是機器學習領域最熱的詞了,大有飛入尋常百姓家的意思,現在你去參加一個數據的活動,你要是說你不會深度學習,估計會被當做神經病一樣看待。但是實際上,深度學習到底有多大的價值呢?這是需要理性看待的問題。

    我 們先說什么是深度學習。其實從整體上來講,Deep Learning就是曾經的多層神經網絡,整體的思想認為每一個層次都可以被作為一個獨立的特征抽象存在,所以最廣泛地被用作特征工程上,而GPU的存在 更是解決了幾十年前的ANN的訓練效率問題。那么簡單來說,Deep Learning可以對抽取出的特征進行非線性組合形成更有效的特征表示。確實,從這一點來說,Deep Learning確實從理論上很好的解決了機器學習領域很麻煩的“特征抽取”問題,但是在實際的工業界,“特征工程”到底有多復雜?我們看看Deep Learning表現最好的IR領域吧,曾經是怎么做的呢?據了解微軟有個小Team專門做的事兒就是從圖片上找各種各樣的特征,因為算法本身其實已經被 鎖死在Random Forest上了,往往特征的微調就能帶來算法效果的極大提升,那么Deep Learning的出現當然可以很好地取代這項工作(實際效果確實無法得知),那么總結下Deep Learning的好處:從海量的特征中通過特征工程抽取出有效的特征組合。

    但是刨除掉語音和圖像領域,轉向離我們更近的工作,無論是推 薦系統還是數據挖掘,特征是怎么出來的呢?對于一個電影,對于一個用戶,滿打滿算一共就那么多特征,這個時候Deep Learning根本無從發揮。那么再退一步說,就算把User對于Item的標定作為Item的特征,由于在實際中大部分的缺失值存在,那么如果你希望 用Deep Learning來對該矩陣做特征重組,第一件事情就是如何填充缺失值,而這恰恰是比特征工程更困難的事情。

    至少從我目前的眼界來看,我還沒有找出幾家真正需要用Deep Learning來為企業創造價值的公司。

  2. 大數據的反思

    每 一家公司都在說自己是大數據,要利用大數據,更是出現了“大數據工程師”這個職位,但是在我看來,對于算法工程師而言,該做的不是迷信大數據,而是把大數 據給提取成小數據,利用小數據為企業創造價值。大數據標志著需要更大規模的集群,更大規模的計算能力,更長的生產周期,而這些都是企業的“成本”,對于大 部分公司,基本面臨的都是兩個問題,如何拿到數據和如何利用數據,而不是如何“最好”地利用數據。

    大數據其實意味著大樣本量,那么大樣本 量帶來的是高置信度以及廣覆蓋度。例如從FM來說,大數據量意味著更全面地了解一個用戶的聽歌品位,從金融互聯網的信用風險評估來說,大數據量意味著不僅 僅從消費記錄而包含了社交網絡信息去對用戶做更全面的評價,從用戶畫像來說意味著建立全面的興趣圖譜和知識圖譜,這些都是大數據帶給我們的實際意義。說得 學術一些,我們不妨認為大數據是頻率學派對于貝葉斯學派一次強有力的逆襲。那么既然說到這個份上了,我們不妨思考一下,我們是不是有希望在回歸貝葉斯學 派,利用先驗信息+小數據完成對大數據的反擊呢?

    另外,既然我們已經說到了大數據的廣覆蓋度,就針對這個再額外說一下吧。誠然,大數據能 夠全面地覆蓋到所有信息,但是從實際的工業界來看,考慮到實際的計算能力以及效果,大多數公司都會對大數據做“去噪”,那么在去噪的過程中去除的不僅僅是 噪音,也包括“異常點”,而這些“異常點”,恰恰把大數據的廣覆蓋度給降低了,于是利用大數據反而比小數據更容易產生趨同的現象。尤其對于推薦系統來說, 這些“異常點”的觀察其實才是“個性化”的極致。

  3. 技術選型

    既然都說到這里了,就順著說到技術選型。之前和某公司聊過,他們說,你對技術選型怎么看,這里我就把當時說過的話重新整理一下吧。我認為初創公司技術選型分做兩個層面看:

    A. 對于大部分互聯網初創公司,一般是根據初創成員擅長的領域去選擇語言,選擇無外乎兩種,要么選擇開發效率高并且入門簡單的語言框架,例如Python , 例如Rails。要么選擇市場覆蓋量大,容易招人,并且有著非常成熟解決方案的語言,例如Java。
    B. 對于小部分用Clojure的初創公司(我真心不愿意去黑),必須滿足一點,公司就是小團隊作戰,不需要擴張,用這種語言的好處就是連這種語言都會或者都愿意去學,會省掉很多面試的成本,但是招人的成本也增加了不少。(我真的是勉強為這種公司找個理由)

    對于成熟公司的技術轉型,也是分成幾點來看:

    A.

性能問題:說實話我極少遇到一個公司語言成為了性能瓶頸,我目前好像知道的也就是推ter把一些核心架構從Rails變成了Java,實際原因是不 是因為性能我也不知道。但是其實一定避免說上來性能問題先怪語言,據說騰訊某些工程師就特別愿意干這樣的事兒,把C++當圣經,鄙視一切其他語言……但是 如果真的是撐不住了,那么就換吧。

B. 社區問題 & 開發效率問題 & 招人成本問題:在10年左右的時候,大批的公司把.NET平臺換成Java平臺,最核心的原因除了Windows的價格問題外,還包括遇到了問題解決不 了,因為大公司都是用Java/C++的,所以至少出了性能問題我還能去定點挖人,用.NET出了問題都不知道去哪兒找人。 另外就是比如C++開發起來確實慢,而且非常容易系統崩潰,這個時候逐漸地去做技術轉型到其他語言也是有道理的,只是要掌握節奏的問題。最后就是那些剛開 始作死用一些小眾語言(比如Clojure)的公司,隨著大規模招人就需要做技術轉型了。在這一點上,最主要的就是避免為了轉型,為了秀技術,為了跟風而 轉型,我相信新技術也一定有新技術的好,一定解決了某一方面的問題,但是轉型有著轉型的代價,人力成本,系統穩定性,量產招人的困難程度,這些都可以換算 成“成本”,那么在做這種轉型時一定要把這筆賬算清,再決定轉還是不轉。

C. 管理問題。一個網站,一個服務,我們不分MVC,純粹去用PHP往模板里面寫代碼,其實也能做出來,開發成本稍微高點唄,但是代碼容易看懂啊。這個例子有 些極端,我想表達的是,用再爛的技術都能做出一個可用的東西。但是問題是,在現在的時代,程序員真他媽難找啊!當薪資幾乎相同的情況下,也只能靠技術來吸 引人和留人。也就是說至少要讓員工覺得他們能學到新東西,外人來面試的時候我也要有能吹牛逼的資本,這時怎么辦?我一般會選擇在一些邊緣系統上去做技術嘗 試,例如我會傾向于用其他語言(例如Go, Swift)搭建外圍系統或實驗室項目。這也是我對某些流失情況嚴重的團隊最大的建議。

  1. 算法,產品和企業價值

    這一點又回到了曾經老生常談的問題,算法工程師對于企業的價值是什么,為了討論的方便,我們還是把算法工程師換成數據工程師吧。

    A.

任何系統不要脫離產品而存在。先吐個槽,之前在某個公司面試,某個公司上來就問我,你覺得我們的用戶畫像應該怎么做?這個問題是非常業余的(這個問題就像 是有人問我我們網站有性能問題,你說咋辦;好吧,這個問題也是這個公司問我的),任何數據系統都是強產品關聯的,這也是太多公司去做數據系統的誤區,在這 里我還是用戶畫像為例。 用戶畫像到底是什么,其實說簡單了他就是一個用戶寬表,如果偏要我說需要注意的,就是在選擇數據庫的時候一定要選擇列容易擴充的數據庫。如果要說具體需要 哪些字段,我還真的沒法說,我只能把他歸類成用戶元屬性數據,行為統計數據,潛在挖掘數據,至此而已。因為數據系統從來不是一個事先規劃好的系統,而是需 要隨著業務增長來逐漸填充的系統,這也是數據平臺難做的原因。 所以我真心無法理解有一些不太大的公司成立了一個部門,這個部門專門做用戶畫像(例如PPTV)。

B. 數據工程師不僅僅是處理數據而是理解數據。我遇到的數據工程師大抵分成兩類,一類是數據開發工程師,例如Hadoop工程師,數據倉庫工程師;一類是學術 化的工程師,深鉆模型,這種工程師其實還是更適合研究院;當然,這兩種工程師都各有優缺點,但是我更覺得對于大部分企業來說更需要一個理解數據而非處理數 據的工程師,核心價值更應該在于深入去理解產品業務,數據處理,數據建模,做數據分析和挖掘,接下來對于產品的發展做數據化的驅動,并且知道何時應該繼續 對模型進行優化,何時應該適可而止。
        
C. 沿著上一點繼續說,Growth Hacker & Data Scientist。一個優秀的算法/數據工程師應該具備Growth Hacker 和 Data Scientist的能力,其實這兩點也恰恰標志著不僅僅是數據,而是一個產品的最重要兩點:增長和留存。作為Growth Hacker,你應該為企業找到潛在的機會點,幫助產品增長;另一方面,你也應該作為Data Scientist,發現現有數據的問題,幫助產品優化體驗,提升留存,而推薦系統往往是屬于這一部分的子集。

D. 避免成為成本部門。這是我后期去帶一個事業部的時候才有著的最深體會。對于任何一個部門來講,最痛苦的莫過于自己成為了公司的成本部門,所以為什么小公司 的實驗室部門根本搞不下去,所以為什么數據部門都希望自己有個數據產品,所以為什么技術部門都不希望自己僅僅是一個支撐部門。那么無論是對于技術團隊,還 是數據團隊,作為部門的負責人,永遠需要想的都應該是,我們為企業到底創造了什么實際的價值,而這個價值是不是當前公司所最緊缺的。例如公司現在最缺的是 增長,你整個部門偏偏要拼死命做留存;公司最需要的是產品快速迭代,你偏偏要去搞底層性能優化。這些很勢利,卻是決定著部門榮辱興衰的最重要一點,無論是 什么部門,去幫忙解決公司最痛的那個點才是最重要的。



  1. 數據和直覺

    有一次我和別人聊了很多,他說所以做產品經理必須要數據決策對不對?我覺得這個事兒也對也不對。

    數 據驅動是什么?數據驅動是從已有的數據中去發現規律對產品進行優化,但是數據做不到的是從未知中挖掘機會點,而這往往是一個優秀產品經理的直覺。我經常和 人舉的一個例子是,要是數據驅動,也許今天應該也出現不了微信。很多時候優秀的創意就是來源于一個直覺,而不是循規蹈矩的分析推導,因為這樣往往會陷入我 在上文提到的大數據的窘境。所以不要無視數據,更不要神化數據,該相信直覺的時候還是相信直覺。其實有時候做算法也是一樣,你不可能把上千種算法都A-B Test一次,有時候別人問我為什么,我能說的也就是直覺,作為算法工程師的直覺,“用另外一種算法效果不會更好的”。

    更何況產品經理的溝通,協調,跟蹤能力同樣是不可或缺的一部分,也是大部分工程師所缺乏的自身特質。


  2. 數據工程師的窘境

    這一點我不知道該從何寫起,其實算是數據工程師職業生涯上面臨的最大尷尬吧。

    現 在所有公司都在談數據驅動,可是說實話我目前還真的沒看到有真正數據驅動的公司,為什么呢?很關鍵的就是,說驅動你得驅動得起來才行啊。對于大部分公司, 數據部門只是作為一個獨立的支撐部門存在,我讓你干嘛你就干嘛就行了,今天幫我跑個數據,明天幫我上個模型,產品是我的,你別和我指手畫腳。再一些公司 呢,數據部門,不對,不能叫做部門,“數據組”只是產品的一個附屬部門,部門的老大都是產品總監,你就更沒資本去驅動你的Boss了。 其實歸根結底,還是中國人不相信這些東西,老板自己都不相信或者不重視,各位想一下大部分中小公司對于CTO和技術總監的要求就知道了:幫我把性能問題給 解決了,而這些卻恰恰應該是一個系統架構師的定位。這里必須要再丟一下caoz的文章:《CTO這點事 - caoz的夢囈》

    那么數據工程師發展到最后職業生涯到底進展到哪兒呢?我也不知道,也許我們都只能期望國內數據行業的進一步成熟和被認可了。而這些就是我以前老大講的,在數據的工程領域,我們都是先行者,沒有人可以告訴我們怎么走,這些都是需要我們自己去探索和闖蕩的路。

  3. 企業價值 & 市值

    我一直有個理論,一個大的市場,一定能夠容納下兩家上市公司。例如我們認為分類信息是個大領域,那么58上市了,我相信趕集一定能上,而且如果“58” 30億的市值,我相信趕集應該會在20億上下浮動。這個其實極大地關系到了如何選擇一個公司。

    其 實現在就這么多行業了,社交網絡已經日漸沒落,騰訊和陌陌已經切去了聊天IM的大部分市場,所以現在一家再做細分領域的聊天社交,包括匿名社交我相信都只 是騙騙投資人的錢罷了。視頻行業大勢已定,幾乎沒什么太大空間了。唯一一個老牌并且有想象空間的就是音樂,問題還是在于版權和付費意識決定了音樂行業的變 現一直是大問題,所以倒是仍然值得再去拼一次。

    那么剩下的就是大家都熱炒無數次的。
    電商: 電商一定還會有市場,只是新應用的用戶獲取成本太高,如何選擇品類,如何實現用戶的自傳播從而實現盈利成為了最關鍵的問題。
    O2O:

一個又一個細分市場,因為線下太大,沒有任何一家有資本和能力全部囊括。但是稍微熟悉O2O行業的都知道,O2O的最大關鍵還是在于Offline的服務 品質,線上只是線下的一個宣傳手段罷了,就像曾經在QQ上也能訂餐,現在只是發展出一個APP然后服務規模擴大化精細化了而已,既然只是一個渠道,那么 Online的部分在O2O行業所能得到的重視程度自然也就有限(個人意見,不喜可噴)。
互聯網金融:金融互聯網是個千萬億的市場,一旦成功注 定是秒殺互聯網行業的,可是正是因為這種高市值也伴隨著高風險,一個不小心現金流就如同那些P2P公司一樣卷鋪蓋跑路了。另外問題一樣,互聯網金融,核心 還是金融,互聯網只是渠道,那么核心競爭力還是取決于如何利用數據來推動金融業務的發展,例如現在P2P里的信用風險評估,其實就是金融業的最基本概念罷 了,現在拿出來用互聯網再炒一遍。
在線教育:不懂.....只是直覺覺得不看好,因為覺得反人性的,太嚴肅的東西在互聯網上都玩不轉
硬件:離我太遠,我只是覺得現在的智能硬件還處于太初級的階段,大多是傳統硬件加個Wifi而已,有待繼續發展。

其 實對于大多數人來講,技術永遠都不是瓶頸,難的都是如何選擇一個公司和行業,從短期來講選公司,在過去我們都可以靠融資多少,風投機構是否靠譜來判斷一個 公司,但是在資本大熱的今天變得越來越不可行了,那么這個時候只能依靠自己的判斷。例如拉勾,B輪2500萬美元,那么也就是說預計B輪估值3億左右,那 么就看看吧,51job和智聯都在10個億左右的市值,而拉勾做的太深領域無法自拔,只能是他們的一個金字塔頂,于是你可以去推算一下他的想象空間。
長 期來講選行業,那么未來幾年內大熱的行業也就這么多,選行業看看前車之鑒例如旅游,看看途牛的估值也知道這個行業的互聯網發展了;再接下來我覺得重要的還 是在于在這個行業中到底能扮演什么樣的角色,是否能解決核心問題,例如硬件的核心問題從眼前來看是供應鏈和生產工藝,那么做數據去盲目進入只會淪為邊緣角 色,如此類推。


來自:http://www.douban.com/note/472267231/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!