1. 前言
本來這篇標題我想的是算法工程師的技能,但是我覺得要是加上機器學習在標題上,估計點的人會多一點,所以標題成這樣了,呵呵,而且被搜索引擎收錄的時候多了一個時下的熱門詞,估計曝光也會更多點。不過放心,文章沒有偏題,我們來說正經的。
今天就說說機器學習這個最近兩年計算機領域最火的話題,這不是一篇機器學習的技術文章,只是告訴大家機器學習里面的坑實在是太多,而且很多還沒入門或者剛剛入門的朋友們,其實在你們前面是個大坑,如果你勵志要在這條路上走下去的話,請做好心理準備。
2. 我們學習機器學習的目的
實話實說,目前大部分人上各種班來學習機器學習,學習大數據,歸根到底還是希望能找到一個好的工作,拿到更高的薪水,當然還有一部分原因是自己對這一方面比較感興趣,希望更深入的了解這個領域。
我個人覺得,第一個原因的因素更大。
3. 我們在談機器學習的時候在談什么
首先,我們看看一個機器學習的系統長成什么樣子
?
幾乎所有的機器學習系統都是由上述系統圖組成,不同的是監督型的系統訓練數據可能需要人工干預而非監督型的系統不需要人工干預,簡單來說就是給一批訓練數據給這個機器學習模型進行學習,得到一個預測模型,然后用這個預測模型對新的未知數據進行預測。
現在網絡上機器學習方面的文章,博客到處都是,市面上各種各樣的書籍也到處都是,而且目前在線教育最火的領域也是這個,各種各樣的機器學習的在線教育的班,學費還挺貴。
但是你發現沒有,所有這些談論的機器學習都是在談論模型,什么《深入理解XXX模型》,《可能是最好的理解XXX的文章》,《機器學習并不難,XXXX模型詳解》之類的文章和書遍地開花。各種介紹邏輯回歸,深度學習,神經網絡,SVM支持向量機,BP神經網絡,卷積神經網絡。..。.等等等等。
所以,我們在談論機器學習的時候,實際上是在談論機器學習的模型,也就是各種機器學習算法。而且大家都認為只要學會了模型和算法的理論,那就是機器學習的專家了。我相信大多數人都是這么認為的。
4. 小明成了機器學習“專家”
有個小朋友,是搞計算機的,叫小明,看了alphago虐李世石的視頻,雖然他完全不懂圍棋,但是他還是被震撼到了,決心要好好學習一下這個傳說中的機器學習。于是到處在網上找教程,找博客文章,找書籍,好好的學了半年,終于覺得自己入門了。每個機器學習的模型算法都能說出個所以然來了。
不知道大家有多少在這個階段?
但小明還想更進一步,于是開始研究各種模型的代碼和工具了,hadoop和spark那是標配了,又是各種找文章,各種找書,各種在線學習班,還好這些東西一大把一大把的,特別現在的在線學習班,要是沒有大數據處理班,沒有hadoop班,那就別開了。
一路下來,大半年又過去了,終于小明覺得自己學會了,理論也有了,大數據處理工具也會了,簡直無敵了!
又有多少人在這個階段?并以為自己已經會機器學習了。到這個階段,如果你學得好,那么你已經可以去開個學習班教別人機器學習了。但如果你以為這樣就可以去找個公司做算法工程師了,那么告訴你,圖樣圖森破,乃義五!
小明因為有較強的理論知識,能推導所有公式,又會hadoop,spark,再加上自己的表達能力強,很容易的秒了幾個面試官進了一個大公司,是在一個電商做搜索的算法工程師,月薪很高,終于可以一展拳腳了,老板交給他一個任務,用你那牛逼的知識把搜索的點擊率給我提升一個百分點吧。
如果你是小明,如果你剛從某個機器學習的學習班下來,你怎么弄?你是不是傻了?
5. 機器學習不僅僅是模型
產生這個問題的原因就是所有人都以為機器學習的模型就是機器學習本身,以為對那些個算法理解了就是機器學習的大牛了,但實際上完全不是這樣的。
模型是誰在玩呢?模型是科學家發明出來的, 是各個大公司的各個科學家,研究員發明出來的,這個發明出來是會出論文的,是他們用來虐我們的智商的,一般情況下,你發明不了模型吧(如果可以,可以不要往下看了,你可以走學術那條路)?你修改不了模型吧?
所以說,學會了模型,只是剛剛剛剛入門,甚至還算不上入門吧
那各個公司的那么多算法工程師在干嘛呢?我們以一個搜索排序的算法工程師為例,他們在做甚呢?他們在
觀察數據---》找特征---》設計算法---》算法驗證---》洗數據---》工程化---》上線看效果---》goto 觀察數據
而且一個成熟的系統中,一般模型已經大概確定了,如果效果不是特別不好不會換模型,比如一個公司的搜索排序系統用了機器學習的邏輯回歸模型,你要改成別的模型一般不太可能,那么只能做一些特征上的補充。
好,我們通過這個流程來看看一個機器學習的算法工程師到底還要什么能力。
5.1 觀察數據
小明每天就在工位上看數據,查數據,看表格,畫曲線,發現像銷量,收藏,點擊等等這種能想到的特征早就被用了,就這么耗了三個月,沒有任何進展,人都崩潰了,來了這么久,機器學習代碼毛都沒看到呢。
第四個月,他發現一點問題,他發現有些商品,評論什么的都挺好,感覺產品質量也不錯,但就是銷量上不去,所以老排后面,于是,他把這些評論都是五星,但是銷量比較差的商品濾出來了,想看看他們有什么共性。
觀察數據階段,你說要什么能力?呵呵,只能告訴你,需要數據敏感性,其實也就是告訴你需要全面的能力,需要經驗,需要產品經理的能力。
除了這些,你還需要能隨手編腳本代碼的能力,遇到有些數據需要初步處理,可能需要隨手編代碼處理,而且編的要快,因為這些代碼可能就用一兩次就不用了,所以需要比較強大的腳本語言能力,那么python至少要熟悉吧,shell要會吧。
5.2 找特征
數據觀察下來發現了問題,現在要找特征了,要找特征,也就是找什么因素導致銷量上不去的,首先,需要想象力,然后去驗證你的想象力。
小明的想象力爆棚,即便這樣,也搞了一個月才發現這些個商品有個共同特征,那就是圖片都比較爛,讓人一看就不想點。臥槽,要是能把圖片質量加入到排序因素里面的話,是不是有奇效呢?圖片質量作為特征,這之前可沒人做過,終于找到一個特征了。
所以在這一階段,畢竟大家的想象力都是有限的,更多的是經驗值,才能找到符合當前場景的特征。
5.3 設計算法
特征是找到了,但怎么把這個特征加到排序模型里面去呢?圖片好不好,有多好,這些機器怎么理解呢?如果不能把圖片質量變成一個數學上的向量,那永遠都無法加入到排序模型里面去。
這一階段是真正考驗算法工程師的地方了,那就是將特征向量化,小明觀察到越好看的圖像往往顏色變化更多,而質量差的圖片往往顏色沒什么變化,于是他想到一種辦法,先把圖像數據進行傅里葉變換,變成頻域的數據,根據傅里葉變換的性質,高頻部分的幅度高表示圖像的顏色變化很明顯,如果低頻部分高,表示顏色變化不明顯,這和觀察到的圖像信息基本能匹配上,這樣一副圖像的好壞,就可以用傅里葉變換后高頻部分的幅度表示了,然后在做一些歸一化的變化,就把圖像向量化了,向量化以后就可以加入到排序模型去了。
這一步,你可能會用到你學習的機器學習模型,但肯定只占了一小部分,大部分情況需要你根據當前場景自己建立一個數學模型,而不是機器學習模型,你說這一階段需要什么技能?雖然我這里舉的例子比較極端,但是數學抽象能力,數學建模能力和數學工具的熟練使用是必不可少的,并且同樣需要較強的編程能力,這已不是上一步的腳本能力,是實打實的計算機算法編程能力了。
5.4 算法驗證
算法是設計好了,還要設計一個算法的離線驗證方法來證明給你的老大看說我的算法是有效果的,不然哪那么多機會讓你到線上去試啊,這一步也是各種綜合能力的組合,關鍵是在這一步上,你要用一種通俗的語言從理論上說服你的老大,這是一種什么能力?強大的語言表達能力。
除了這個你還需要設計出一個上線以后的AB測試方案,能夠很好的測試出你的算法是否真的有效。
5.5 洗數據
特征找到了,算法也設計得差不多能體現特征了,體力活來了,那就是洗數據,這是算法工程師的必修課,數據不是你想要什么樣子他就長得什么樣子的,所以要把數據變成你想要的樣子,然后去掉無效的數據可是個體力活。
像上面這個例子,首先可能大家的圖片大小都不一樣,要變成一個尺寸才好進行變換,有些商品有多個圖片,可能需要找出質量最好的再處理等等等等。
這一階段首先也是要腳本語言處理能力,而且還需要掌握一些數據處理工具的使用,關鍵還要有足夠的耐性和信心,當然,必不可少的是優秀的編程能力。
5.6 工程化
好了,前面的坑你全跨過來了,到了這一步了,呵呵,算法設計完了,數據也準備好了,估計半年過去了,那趕快放到線上去吧,你以為拿著一堆腳本就能上線了啊,得考慮工程化了,如果把你的算法嵌入到原有系統中,如果保證你的算法的效率,別一跑跑一天,代碼的健壯性也要考慮啊,如果是在線算法,還得考慮性能,別把內存干沒了。
這一步,你才真正的用上了你上面學的機器學習的hadoop,spark工具,看了上面說的,要完成工程化這一步,得有什么能力不用我說了吧,這是一個標準的軟件開發工程師的必要技能,還是高級開發工程師哦。
5.7 上線看效果
所有的都做完了,前前后后10個月了,終于可以上線了,好了,真正的考驗來了,看看上線的效果唄,產品經理說,做個AB測試吧,結果呵呵了,點擊率降低了,小明啊!這10個月忙活下來點擊率還下降了???老板還不把你罵死,所以,你必須有強大的抗打擊能力。
呵呵,趕快下線吧,從頭看看哪里出了問題,又花了一個月修改了算法,重新上線,恩,這次不錯,點擊率提高了0.2個百分點,繼續努力吧,看看還有沒有什么可以挖掘的,于是,你就goto到了看數據的那一步。
別看這0.2,大的數據集合下,提高0.2已經是非常不錯的提高了,所以花這么多錢,養算法工程師,要是一年能出幾次0.2,那就是真值了。
6. 讓我們總結一下
上面這么多的過程,靠一個人全部完成確實有點困難,我說的有點夸張,中間有些步驟是有人配合的,觀察數據的時候有產品經理配合你,洗數據的時候有數據工程師配合你,工程化的時候有系統工程師配合你,但是作為機器學習的算法工程師,整個過程你都得能hold得住啊,所以即便是你一個人應該也要能完成整個流程才行。
這只是一個標準的算法工程師應該具備的能力,當然我這里是以搜索算法舉例的,其他的算法工程師也差不太多,總跑不過上面幾個過程,當然,你要是牛人,能根據場景修改這個機器學習的模型,甚至自己能想個模型,那就更厲害了。
好,我們把上面的重點標記的部分取出來匯總一下,讓我們看看一個算法工程師需要具備哪些技能
數據敏感性,觀察力
數學抽象能力,數學建模能力和數學工具的熟練使用的能力
能隨手編腳本代碼的能力,強大的計算機算法編程能力,高級開發工程師的素質
想象力,耐性和信心,較強的語言表達能力,抗打擊能力
然后,還有很關鍵的一點,你需要很聰明,當然,你如果能做到以上那么幾點,基本上也會很聰明了,如果真能做到這樣,反而那些機器學習的模型,理論和工具就顯得不那么重要了,因為那些也只是知識和工具,隨時都可以學嘛。
你說,這些是靠看幾篇博客,看幾本書,上幾次課就能具備的么??
當然,我們這里討論的是一般情況,如果你一心就是做研究的話,那么需要把上述技能熟練度再提高一個量級。
最后,正在學習機器學習,勵志做算法工程師的你,準備好踏這些坑了么??
-
工程師
+關注
關注
59文章
1569瀏覽量
68510 -
算法
+關注
關注
23文章
4608瀏覽量
92845
發布評論請先 登錄
相關推薦
評論