最近離職在家,終於有時間寫一些反思性質的文章,首先是對大數據和機器學習

的反思。名為反思,其實是對最近遇到的各種事情的一個集中吐槽。畢竟我是吐槽星人,遇到這麼多奇葩的事情再不吐槽腦殼就要爆炸了。

市面上來看,大數據和機器學習實在是太火爆了。鋪天蓋地的標題黨新聞,以及打開CSDN能看見各種培訓班的廣告:

我得吐槽一下,我還經常能接到看了我的博客或者簡歷,讓我去做機器學習講師的,我內心是非常擔憂的,像我這樣水平的去做講師了,拿著誤人子弟的錢,教出來的學生能好到哪裡去?(況且還沒有教師資格證

!)

大數據和機器學習這麼火:

  • 它們究竟是什麼?
  • 市面上都是什麼樣的人?
  • 企業需要什麼樣的人?

第一,讓我們來反思一下大數據:

大數據興起的時候,我在上高中,那個時候訂閱了《程序員》雜誌,每期只說兩件事,一個是雲計算,一個是大數據。

可以說,目前市面上做大數據的人越來越多了,我之前面試了好多個,大致有這幾種類型的:

  1. 對大數據感興趣
  2. 希望通過轉向大數據方向增加工資
  3. 已經轉向大數據方向,希望換個環境

那我們先反思一下大數據是做什麼的,然後再討論它的價值,大數據的定義可以參考這個:大數據 - MBA智庫百科,但是這裡面儘是一些沒有卵用的廢話,例如:

具體來說,大數據具有4個基本特徵:

  一是數據體量巨大。百度資料表明,其新首頁導航每天需要提供的數據超過1.5PB(1PB=1024TB),這些數據如果列印出來將超過5千億張A4紙。有資料證實,到目前為止,人類生產的所有印刷材料的數據量僅為200PB。  二是數據類型多樣。現在的數據類型不僅是文本形式,更多的是圖片、視頻、音頻、地理位置信息等多類型的數據,個性化數據占絕對多數。  三是處理速度快。數據處理遵循「1秒定律」,可從各種類型的數據中快速獲得高價值的信息。  四是價值密度低。以視頻為例,一小時的視頻,在不間斷的監控過程中,可能有用的數據僅僅只有一兩秒。

那我問,很多報表是隔日計算的,難道就不是大數據了嗎?有些數據比較單調,但是體積很大,那麼就不能算大數據了嗎?

所以看這些文章學大數據的理論基本就掉溝里去了。

在我看來,所謂「大數據系統」解決的最基本的問題是海量數據的存儲與處理(實時與離線),我這篇文章描述了一些較為關鍵的細節:

清雨影:海量資料庫建設反思?

zhuanlan.zhihu.com圖標

在我面試(以及我的朋友面試)的過程中,總能發現一些奇葩(當然,有些不是候選人的問題):

有的方案使用MySQL存儲原始數據,每晚讓Spark集群(10節點)讀取MySQL的數據進行計算,日增量數據50G……這個不是我面試的,我開始相當懷疑這個所謂的MySQL是披著MySQL外衣的某個其他資料庫比如TiDB或者MyCat之類的,但是後來告訴我只有一台機器,粉碎了我的幻想。

(你有空搭建Spark集群先搭個TiDB或者HBase之類的存數據啊喂)

有的人說自己精通/熟練掌握,但是僅僅是搭建過某系統,而且都不記得做過哪些配置(就連大概都不記得),和我說自己的筆記本庫里有搭建的文檔。這樣的人不止一個。

是事實上,這些配置是相當重要的東西,很多時候,對配置文件的理解深度可以看出對系統理解的深度。

例如,我在問Kafka的時候,如果候選人對linger.ms(最大延遲時間),以及批量發送大小比較熟悉,那麼他應該解決過Kafka的吞吐和實時性平衡的問題。

再比如,如果他知道日誌刪除的策略除了時間還有最大數據大小,那麼他應該解決過數據量過大造成的磁碟寫滿的問題。

我記得在參加一次Kafka Meetup的時候,一個 PMC 說,Kafka有兩百多項監控項,每一項基本都是一次生產事故,然後大家覺得應該加一個監控項避免此事——於是就有了這麼多監控項。我自認為任何人都不太可能全部知曉這些配置與監控項,但是通過這個問題(說說你熟悉的配置/監控項)的確有利於測出受試者的使用深度。

再說說HBase,一道經典的題目:一條數據被讀取(get by rowkey)/寫入(put) HBase的時候,發生了什麼,越詳細越好。

最早是我遇到這個面試題的,我當時答不出太多,因為我主要是做演算法開發的,並不關心數據的來源,直到後來需要獨立維護部署HBase的時候,才慢慢深度理解HBase的大致工作原理。(但是悲劇的是,我的職業方向也逐漸從演算法歪向了大數據。)

既然說到這裡,那麼我們就說一下企業需要什麼樣的人:

對於一般的企業來說,需要熟練掌握大數據組件的運維,部署以及具有開發處理大量數據的商用系統的能力的人,看企業的大小,有可能需要某一方面的專才,也可能需要通才。

還有一種企業,需要開發大數據組件的能力,對於這樣的人,理論上有著更高的要求,需要更深入的理解大數據的組件,以及許多分散式系統的知識,這樣的人才和企業都不多。

市面上的人其實大多按照博客部署了一下,然後按照常式調用Client讀寫了些數據,就說自己掌握了,這樣的人其實還不能滿足企業的用人需求,上面說過了。

還有一些人特別深入,例如對HBase中HFile的讀寫,Compact,Region的分裂機制之類的非常熟悉。但是很遺憾,這樣的人才適合去開發大數據組件的企業,比如一些雲服務提供商,或者是Kylin,PingCap, Cloudera 這樣的公司,而這樣的企業很難找啊。

再說說機器學習吧!

我從本科開始接觸這個東西,最早這玩意在我眼裡就是個函數擬合工具,省的自己各種構造。彼時最火的演算法是SVM,彷彿是皇冠上的明珠,NN早就被丟到垃圾桶了,還有試圖挽救NN於垃圾桶的另外兩個難兄難弟:稀疏自編碼機和受限玻爾茲曼機。但是隨著深度學習的崛起,和計算量的快速增長(這才是重點),機器學習以實驗科學的形式快速發展,迅速構造了一套複雜的理論。中間也有過許多嘗試用數學的方式Hacking的,但是大多不甚讓人滿意。

在後來的工作中,我前兩份工作都是數據分析師(第二份後來跑偏了,離職的時候已經成了大數據主管)。

在我看來,除了計算廣告,其餘沒有深度應用和依賴機器學習的領域。

  • 你說貸款審核能不能用ML?
  • 你說工廠生產檢測能不能用機器學習?
  • 你說保險定價能不能用機器學習?
  • ……

當然可以,但是不用也過得很好,隔壁王老闆,靠著招了一大堆客服小妹又賺了一大筆,準備擴充辦公室,而你還在和臟數據死磕。這就是目前機器學習的尷尬現狀。

機器學習並沒有被普遍認知,而是作為一個佛像被供在神壇上,許多企業規劃做人工智慧不是為了提高生產力,而是為了騙錢。

這話說的已經非常赤裸裸,因為我知道的這樣的企業就有好幾家,我就不掛出來了。我說一下大致特徵:

企業Q以前是做A領域的,A是一個傳統領域,這個時候引入機器學習(人工智慧),吹得天花亂墜,但是仔細一分析:

  1. 機器學習和A領域沒有半毛錢關係,完全就是為賦新詞強說愁,或者:
  2. A領域和機器學習有關係,但是主要集中在高檔產品上,你生產的產品定位和機器學習沒有半毛錢關係。

或者企業開始的時候就是沖著機器學習去的,但是不知道要解決什麼問題,不知道客戶是誰,不知道對手是誰,做出了一些DEMO,準備騙騙政府的投資補貼。

符合這些條件之一的企業基本上最後都要涼涼。

在機器學習大紅大紫的今天,這些企業就宛如一個黑色幽默。無論什麼時代,什麼國家,都有投機者,但是今天的中國,機器學習的投機者——他們自稱人工智慧——特別多。我們說人工智慧的泡沫就是指的他們,哪一天投資人的知識水平跟上了,知道什麼時候需要機器學習,怎麼做,能有什麼產出的時候,大家腦子清爽的時候,泡沫就破掉了。

再說說機器學習工程師需要的能力,主要是工程能力和演算法能力,同樣視公司大小會需要專才或者通才。

作為一個機器學習求職者,我得吐槽一下,我不止一次遇到讓我手推Logistic的面試了,我自己是Logistic回歸的深度用戶,但是我依然會忘記一些推導的細節,這說明啥啊——說明用不上啊!但是我當年也認為這是一個好面試問題,其實是從學校出來的不夠久,稚氣未脫。

早兩年面試的時候,還有筆試題問你Pandas如何判null(以及好多類似的題目),我這種IDE智能提示的深度用戶只能和你說886了。 我來這裡不是做人肉文檔的。

我作為面試官的時候,一般會根據簡歷上寫的熟悉的數學領域問一下數學基礎,隨後我會問機器學習模型,以及在應用這些模型的時候遇到的問題,這種時候就很容易判斷項目經驗。常見的問題比如:

  • 遇到過數據不平衡嗎?怎麼解決的?
  • 用過X模型的話,解釋一下業務,以及為什麼選擇這個模型?
  • 建立模型的時候,正則化用過L1還是L2或者其它?為什麼用它?
  • 說說你最近做過的數據清洗?

我現在逐漸意識到,比起理論,工程的能力更加重要,而工程能力,來源於實踐。

啰嗦了這麼多,其實是為我自己啰嗦,因為最近聽到的關於大數據和機器學習的一些輕浮的言論實在太多了,心中有些東西不吐不快。於是寫了這麼一篇看上去是反思,其實是吐槽的文章。


推薦閱讀:
相关文章