今天文章比較輕鬆,不涉及技術,前天搶了兩張張學友的演唱會門票,很開森~~~在SF這充滿90後的地盤暴露年齡了。。。python
原本這篇標題我想的是算法工程師的技能
,可是我以爲要是加上機器學習
在標題上,估計點的人會多一點,因此標題成這樣了,呵呵,並且被搜索引擎收錄的時候多了一個時下的熱門詞,估計曝光也會更多點。不過放心,文章沒有偏題,咱們來講正經的。面試
今天就說說機器學習
這個最近兩年計算機領域最火的話題,這不是一篇機器學習的技術文章,只是告訴你們機器學習
裏面的坑實在是太多,並且不少還沒入門或者剛剛入門的朋友們,其實在大家前面是個大坑,若是你勵志要在這條路上走下去的話,請作好心理準備。算法
實話實說,目前大部分人上各類班來學習機器學習,學習大數據,歸根到底仍是但願能找到一個好的工做,拿到更高的薪水,固然還有一部分緣由是本身對這一方面比較感興趣,但願更深刻的瞭解這個領域。shell
我我的以爲,第一個緣由的因素更大。編程
首先,咱們看看一個機器學習的系統長成什麼樣子

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