1. 程式人生 > >搞機器學習要哪些技能

搞機器學習要哪些技能

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得住啊,所以即便是你一個人應該也要能完成整個流程才行。

這只是一個標準的演算法工程師應該具備的能力,當然我這裡是以搜尋演算法舉例的,其他的演算法工程師也差不太多,總跑不過上面幾個過程,當然,你要是牛人,能根據場景修改這個機器學習的模型,甚至自己能想個模型,那就更厲害了。

好,我們把上面的重點標記的部分取出來彙總一下,讓我們看看一個演算法工程師需要具備哪些技能

  • 資料敏感性,觀察力

  • 數學抽象能力,數學建模能力和數學工具的熟練使用的能力

  • 能隨手編指令碼程式碼的能力,強大的計算機演算法程式設計能力,高階開發工程師的素質

  • 想象力,耐性和信心,較強的語言表達能力,抗打擊能力

然後,還有很關鍵的一點,你需要很聰明,當然,你如果能做到以上那麼幾點,基本上也會很聰明了,如果真能做到這樣,反而那些機器學習的模型,理論和工具就顯得不那麼重要了,因為那些也只是知識和工具,隨時都可以學嘛。

你說,這些是靠看幾篇部落格,看幾本書,上幾次課就能具備的麼??

當然,我們這裡討論的是一般情況,如果你一心就是做研究的話,那麼需要把上述技能熟練度再提高一個量級。

最後,正在學習機器學習,勵志做演算法工程師的你,準備好踏這些坑了麼??

相關推薦

機器學習哪些技能

1. 前言 本來這篇標題我想的是演算法工程師的技能,但是我覺得要是加上機器學習在標題上,估計點的人會多一點,所以標題成這樣了,呵呵,而且被搜尋引擎收錄的時候多了一個時下的熱門詞,估計曝光也會更多點。不過放心,文章沒有偏題,我們來說正經的。 今天就說說機器學習這個最近兩年計算

機器學習沒前途”

作者簡介:唐巧,資深 iOS 開發者。曾在網易參與過網易郵箱、網易微博以及有道雲筆記的開發。目前在猿題庫創業,是小猿搜題的產品技術負責人。本文經授權轉自作者同名公眾號。 最近又到了一年一度網際網路公司校園招聘的季節,我一次又一次地見到應屆生在

到底什麼是“機器學習”?機器學習哪些基本概念?(簡單易懂)

由現實世界引出“機器學習” 看到烏雲密佈,自己推測出要下雨 通過一個蘋果的表面和大小,來判斷這個蘋果是否好吃 我們通過經驗來進行判斷,這是因為我們積累了許多有用的經驗,通過對有用經驗的分析,就能對遇到的情況做出相應的對策。 計算機中,經驗就是“資料”,判斷模型就是“演算法”,機器學習

學好機器學習需要哪些數學知識?

很多同學談數學色變,但數學是機器學習繞不開的基礎知識。今天我們來談談這個話題:學好機器學習究竟需要哪些數學知識?先看知乎上的回答:大部分讀者看到這樣的答案之後內心是淒涼的。實變函式,拓撲學,泛函分析,除了數學系之外,很少有其他專業會學這些課程。真的需要學習這些令人不寒而慄的課

第一章(1.1) 機器學習演算法工程師技能

一、機器學習演算法工程師需要掌握的技能 機器學習演算法工程師需要掌握的技能包括 (1)基礎資料結構與演算法 樹與相關演算法 圖與相關演算法 雜湊表與相關演算法 矩陣與相關演算法 (2)概率和統計基礎 (3)機器學習理論 3.1 無監督學習

機器學習註意的事情(一)

問題 內容 沒有 一模一樣 jpg 重要 解決 容易 bsp 大家都知道,機器學習在人工智能中是一個非常重要的內容,我們在進行學習人工智能之前要對機器學習有一定的了解,而機器學習中最重要的就是那些算法了,只有我們掌握了那些算法我們才能夠更好地掌握和熟料機器學習的內容。對於

機器學習註意的事情(五)

src 假設 理解 示例 註意 減少 技術分享 我們 特定 在上一篇文章中我們給大家介紹了機器學習需要註意的相關事項,這些內容都是我們在學習機器學習時必須註意的內容,今天我們會繼續為大家介紹更多有關機器學習需要註意的內容,希望這篇文章能夠更好地幫助大家理解機器學習。 我們

懂大資料需要學習哪些知識呢?

  首先要掌握的就是Java語言和Linux作業系統,這兩個是大資料的基礎。學習順序的話不分前後的。 (1)Java:Java也有很多方向。JavaSE,JavaEE還有JavaME,大資料的話只需要學習Java標準版的JavaSE就可以了,像Servlet、JSP、Tomcat

機器學習演算法工程師需要掌握的技能踩的坑

1. 前言 本來這篇標題我想的是演算法工程師的技能,但是我覺得要是加上機器學習在標題上,估計點的人會多一點,所以標題成這樣了,呵呵,而且被搜尋引擎收錄的時候多了一個時下的熱門詞,估計曝光也會更多點。不過放心,文章沒有偏題,我們來說正經的。 今天就說說機器學習這個最近兩年計算

機器學習相關工作,需要哪些技能 ?(附資源連結)

來源:Python開發者(PythonCoder)原文連結:http://blog.jobbol

成為Linux運維都需要學習哪些技能

今天小編要跟大家分享的文章是官網想要成為Linux運維都需要學習哪些技能。 首先,想告訴大家,在Unix/Linux下,最有效率技

機器學習特征表達——日期與時間特征做離散處理(數字到分類的映射),稀疏類分組(相似特征歸檔),創建虛擬變量(提取新特征) 本質就是麽多變少,或少變多

通過 time 理想 ast 可能 ear 創建 eat 根據 特征表達 接下來要談到的特征工程類型雖然簡單卻影響巨大。我們將其稱為特征表達。 你的數據並不一定總是理想格式。你需要考慮是否有必要通過另一種形式進行特征表達以獲取有用信息。 日期與時間特征: 我們假設你擁有p

普通碼農入門機器學習,必須掌握這些數據技能

散點 掃描 如果 商品 它的 朋友 良好的 target 萬能 其實,機器學習一直在解決著各種重要的問題。比如說90年代中期,人們已經開始用神經網絡來掃描信用卡交易記錄,從中找到欺詐行為;90年代末,Google把這項技術用到了網絡搜索上。 但在那個時候,機器學習還和普通

特征選取2-機器學習中,有哪些特征選擇的工程方法?

fit fun actual 原理 歸一化 jpg arr 差異 highlight https://www.zhihu.com/question/28641663 作者:城東鏈接:https://www.zhihu.com/question/28641663/answer

機器學習不“短路”?你需要這些套路!

函數 http 數據集 .com 分類 ibm 目標 -s 閱讀 你知道麽?機器學習的算法雖然在不斷發展演變,但萬變不離其宗,在大部分情況下,所有這些算法都可以劃分為 3 類:監督學習、無監督學習和強化學習。 監督學習,可以提供反饋來表明預測正確與否,適用於學習一個已經分類

這個機器學習論文大眾評審網站,讓每篇arXiv論文都得到討論

圓栗子 發自 凹非寺 量子位 出品 | 公眾號 QbitAI 研究機器學習的人類們,通常喜歡把研究成果發上ArXiv。 不過,ArXiv上面沒有討論板,公開討論場所多集中在Reddit和推特上。而社交平臺又無法提供純粹的學術環境,討論過程中很容易歪樓。 現在,紐約

掌握Spark機器學習庫 大資料開發技能更進一步

掌握Spark機器學習庫 大資料開發技能更進一步 第1章 初識機器學習 在本章中將帶領大家概要了解什麼是機器學習、機器學習在當前有哪些典型應用、機器學習的核心思想、常用的框架有哪些,該如何進行選型等相關問題。 1-1 導學 1-2 機器學習概述 1-

掌握哪些機器學習工具更受企業青睞?

參加 2018 AI開發者大會,請點選 ↑↑↑ 想成為一名優秀的開發工程師不是一件簡單的事情,除了掌握工程師的通用技能以外,還需要掌握機器學習的各種演算法,更需要掌握從開發到除錯到優化等一系列能力,這些能力中的每一項掌握起來都需要足夠的努力和經驗。近兩年來,深度

比較好的Python機器學習庫有哪些

Python是一種面向物件的解釋型計算機程式設計語言,具有豐富和強大的庫,再加上其簡單、易學、速度快、開源免費、可移植性、可擴充套件性以及面向物件的特點,Python成為2017年最受歡迎的最受歡迎的程式語言! 人工智慧是當前最熱門話題之一,機器學習技術是人工智慧實現必備技能,Python程式語

學習web前端開發需要掌握哪些技能

一.首先告訴大家前端工程師主要做什麼? Web 前端開發是從網頁製作演變而來的,網際網路的演變程序,網站的前端也由此發生了翻天覆地的變化。網頁不再只是承載單一的文字和圖片,各種富媒體讓網頁的內容更加生動,網頁上軟體化的互動形式為使用者提供了更好的使用體驗,這些都是基於前端技術實現的。無論