你走過最長的路,就是機器學習過程中的彎路
營長的一位轉型AI的朋友,最近對營長抱怨,“走過的最遠的路,就是機器學習過程中的彎路”,然後開始各種blablabla,從論文的坑,到模型的坑,再到培訓的坑...一路吐槽。
尤其是論文,他罵道:“最討厭的就是那種,高高在上、假裝清高、站著說話不腰疼、戳不到痛點的論文。比如那一堆只能在理論中刷存在感,實際落地中只能‘呵呵噠’的論文,根本就是浪費時間。”
的確,對於現在剛剛入行的機器學習新人來說,不怕吃苦,但最怕走彎路,最怕白白浪費時間。
那麼,總結起來,都有怎樣的彎路呢?來看幾位點贊量頗高的知乎答主的總結:
那些年,他們在機器學習中走過的彎路...
在知乎答主張馨宇(就職於百度地圖)看來,機器學習的彎路有以下四個:
最大的彎路就是自己xjb學xjb試,和加入一個真正能做出東西的團隊或跟隨真正的牛人一起學習相比,速度要慢十倍都不止。學是要學,但不要以為自己xjb學就夠了,差得遠呢。
第二大的彎路就是成天xjb看論文,以為這樣就能打通任督二脈,從來不復現論文或者嘗試自己做出一些東西,這都是〇。
第三大彎路淺嘗輒止,有些東西不往死裡懟屁都做不出來。
第四大彎路迷信複雜的東西和新技術,以為新東西懟上去肯定就效果爆棚。其實都是不存在的。個人主頁:https://www.zhihu.com/people/diegozhang/activities
還有一位知乎答主ycszen,在他看來,最大彎路,就是迷信論文,不去實驗。
DL\ML其實是一門實踐性的學科,只有通過實驗才能把握到其中的細節與真諦。雖說也是在寫程式,但是DL的程式基本上無法直觀地debug,所以非得自己去復現一下,實踐一下,用performance來說話,才知道有沒有出錯。
尤其是DL,研究發展到現在,論文和實際做的東西脫節已經是心照不宣的事了。正因為NN+GD的魯棒性,你xjb搞好像也能搞上去,所以寫論文很多純粹在編故事(好論文除外)
所以,我們最好不要一味相信論文所說,尤其是各種解釋(經典演算法,優秀論文除外)。NN就是個黑盒,誰也別說誰。而我們能做的,更重要的是,去實踐去復現,去去偽存真,去發現其中真正的本質所在。
專欄地址:https://www.zhihu.com/people/yu-chang-qian/columns
而知乎答主:YukiRain(CV/ML方向研究生在讀)則認為,非科班出身,剛轉型AI的程式設計師最大的彎路是:沒學好數學。
而對於數學基礎好,科班出生的AI程式設計師來說,則應注意以下幾個問題:
1.一開始沒人帶的時候,看論文喜歡看最新的,很大程度上忽視了很多比較老比較基礎的論文,嫌棄以前的方法performance不好什麼的......感覺我身邊一些人也走進過這個誤區......
2.永遠不要迷信某個特定的模型,不要因為random forest在某個任務上效果好,就以後遇到什麼任務都上random forest;也不要覺得深度學習就是萬能的,什麼都可以套神經網路解決;不要看到比賽裡面大家整天用xgboost就整人云亦云地複製。學各種演算法的時候,書上一般會告訴你這個演算法有balabala優點一堆,但是一般不會告訴你這個演算法也有balabala一堆缺點,我花了蠻長時間在這個坑裡,慢慢摸索各種不同模型的特性。
3. 不要迷信一些理論性很強的論文,我一開始的時候,經常看到一大堆公式就下意識會覺得這個模型可能效果不錯。事實上很多論文的理論推導和它的程式碼毫無關聯(參見已經徹底迴歸煉丹的WGAN GP),還有很多論文的推導需要很強的assumption支援(參見每年都會出現在頂會的一些給模型加riemannian geometry的論文),等等。
個人主頁:https://www.zhihu.com/people/yukio-2/activities
那麼面對這些彎路,又應該如何解決呢?
機器學習新人應該注意的5個問題
知乎使用者a88i99(微信公眾號:yiqixue_ai)對此提供了非常接地氣的論述。他曾是寫後臺的碼農,此後又做了兩三年資料探勘工作,最近一年多正在學深度學習、強化學習。以下為他對於如何少走彎路這個話題的經驗分享,也許能對你有幫助。(一起學AI專欄地址:https://zhuanlan.zhihu.com/yiqixue-ai)
首先,這個圈子裡有價值的工作無非就三塊
1. 發明牛逼的模型、演算法、理論
2. 底層系統搭建,如各種框架
3. 學懂1中大神的部分發明,再會使用2中大神搭建的框架,來解決實際業務中的問題,產生商業價值。大部分人屬於這裡吧!!!
對於1與2,我讀過理論物理博士,雖由於某種原因中途退學,也還是能說兩句。那就是走正統的教育路線,能出國的出國,畢業後能去好公司的去好公司。但這裡只強調一點:你跟的人是真正做事情的人,做的業務是真正有價值的業務,否則也是浪費青春。
我想大部分都是轉行過來的吧,你看機器學習/深度學習的關注人數快100萬了,科班出身能佔10%,我覺得都高估了。下面只針對這群人來簡單說下,莫怕,你們才是主流人群,就像三四線的使用者是快手/頭條的主流使用者一樣。
1. 不要求快,沒有捷徑。自己首先有個心理預期,數學好的入門也得一年半載的,數學需要補基礎的估計要1-2年。可以去上培訓班,交點錢,但也就跟機器學習混個臉熟。想入門還得花時間慢慢磨,真的沒捷徑,真的沒捷徑,真的沒捷徑!
2. 模型不求多,精通幾個常見的,把機器學習的套路摸透就可以了。比如LR,樸素貝葉斯,決策樹,基於SVD相關的簡單模型,如推薦系統等。
把機器學習的套路摸透什麼意思呢?比如LR為什麼用logloss,而不是平方損失?為什麼logloss 是凸函式,而平方的不是?優化演算法啥時候用一階mini-batch sgd,啥時候用二階方法,為什麼?這還只是說了損失函式與優化演算法,還有模型結構,模型的效果評估指標,如何利用欠擬合/過擬合來分析指導優化模型等等。
因為簡單的模型容易理解,有時數學上的證明也是可行的。這樣,以它們為例子更容易理解機器學習這套東西,建立自己的直覺,自己的直覺,自己的直覺,幾何的或物理的。
3. 選擇規模中等的公開資料集,實戰。一般有兩個目的,首先是驗證或糾正你前面學習的理解,其次是嘗試解決實際問題。實際應用中的流程大概是:
a) 根據業務選擇合適的線下與線上評估指標。
線下的指標可以輔助快速迭代,因為線上測試流程較長。線下指標缺點是過於片面。所以,一般利用線下指標來迭代,找到覺得不錯的特徵與模型,再搬到線上去測。
b) 快速構建基線模型與線上測試系統。
c) 除錯系統,迭代想法
對工程師來講,理解業務與線上系統真的很重要!因為你既沒能力發明牛逼的演算法模型,也沒本事寫框架,你若只會亂調包,那你的價值在哪裡呢?所以,不深刻理解業務而是去瞎換模型演算法,真得不合適,效果分分鐘打臉。
4. 結伴而行,儘量不要放棄。只是覺得沒有個討論具體技術問題的社群,知乎說的東西太泛了,不繫統。大家也不愛答具體的技術問題。
5. 這條專門送給碼農轉行過來的。
機器學習這套系統與傳統技術系統有個非常大的差別。搭建個web/app系統難度不大,且做的好與壞,短期內不好區分與評價。垃圾系統在使用者量不大的時候也能表現得不錯。只有在使用者量變得較大時,才會掉鏈子而遭打臉。 機器學習的系統不是這樣,它是分分鐘打臉。也就是我們常說的,這個系統不確定性較大,駕馭它的門檻略高。
掌握了以上幾個要點,那麼新人應該如何系統地學習機器學習呢?
新人該如何系統地學習機器學習?
以下來自阿薩姆(普華永道,資料科學家)的回答,他從巨集觀的角度,按照職業規劃、學習方法、實際應用三個方向,系統性地回答了“新人應如何學習機器學習”這個話題。
機器學習中有很多彎路,從巨集觀角度分享一些我的觀察。回答分為三個部分:a) 職業規劃。 b) 學習方法。c) 實際應用。
職業規劃篇
1. 一個好的老闆/老師遠勝於自學。機器學習還沒有達到批量化流水生產的階段,因此一個好的“老師傅”比自學效果好很多。不僅如此,老師傅們一般都有自己多年經驗總結出來的經驗,往往可以避免很多不必要彎路。但選擇老師傅應該注意是不是“掛羊頭賣狗肉”,尤其要提防跨專業但號稱多年的經驗的人,有很高的概率是在蹭熱點。這在選擇導師以及選擇工作分組時要尤其注意,畢竟已經是全民ML,all in AI的時代了...
2. 如果是轉行來機器學習,不要和科班的人比拼程式設計能力和數學,要取巧利用自己已經瞭解的領域知識做結合。換句話說,轉行做機器學習的最大的優勢是你曾經所熟悉的領域,如果能與機器學習有所結合,你比科班出身的機器學習工程師更有市場。
參看:未來 3~5 年內,哪個方向的機器學習人才最緊缺?
https://www.zhihu.com/question/63883507/answer/227019715
和 阿薩姆:轉行人士如何在人工智慧領域保持一定的競爭力?
https://www.zhihu.com/question/67036323/answer/248527279
3. 如果有機會讀一個相關學位(統計、計算機、應用數學等),去讀。現階段的就業市場還面臨有價無市的局面,一方面企業開出高薪吸引機器學習人才,一方面符合條件的人太少。一般來說,名校相關學位碩士以上學歷是大企業的基本要求,更高階的崗位還需要頂會和PhD。磨刀不誤砍柴工,如果有可能,讀一個碩士專案能很大程度的掃清路障,防止簡歷卡在人事手裡。
參看 阿薩姆:外行應屆畢業生找資料分析工作多難?
https://www.zhihu.com/question/57618120/answer/155396514
4. 調整心理預期,放寬搜尋域。國內的機器學習領域除了BAT這種大公司,厲害的中小型(創業)公司比如商湯科技以外,還有很多其他不錯的公司。很多同學都抱著非牛逼公司不去,但沒有考慮到僧多肉少的問題,這不成熟。電腦科學作為常年霸佔畢業生人數排行榜的專業,有再多科技公司都很難容納所有人,更何況現在是人人都想機器學習的時代。人生不是線性的,不是高考高分->名校->好工作->升職加薪->走上人生巔峰一定會發生。所以,你即使沒有進入谷歌實習也不代表你這輩子就完蛋了。想開一些,眼界再放的遠一些,人生沒那麼急。
5. 機器學習面試是有規律的,摸清楚面試內容有助於盲目準備。機器學習的面試和傳統的軟體工程師不同,不僅有基本的程式設計能力考查,還有對數學、模型、以及業務理解的考查。更多機器學習面試經驗分享可以參考:面試官如何判斷面試者的機器學習水平?
更多的討論可以參考:
現在的大資料、AI 這麼火,會不會像曾經的 Android 和 iOS 一樣,五年後也迴歸平淡?https://www.zhihu.com/question/67120248/answer/281427231
和 阿薩姆:工科生一年時間轉行 cs 是否有可能?
https://www.zhihu.com/question/66421918/answer/245974321
和 阿薩姆:機器學習門下,有哪些在工業界應用較多,前景較好的小方向?
https://www.zhihu.com/question/57072166/answer/280824223
學習篇
1. 不要把深度學習作為入門第一課,建議從經典機器學習開始入手。雖然很多人都是衝著深度學習來的,但把深度學習作為機器學習第一課不是個好主意。
原因如下:
深度學習的黑箱性更加明顯,很容易學得囫圇吞棗
深度學習的理論/模型架構/技巧還在一直變化當中,並未塵埃落定
深度學習實驗對硬體要求高,不太適合自學或者使用個人電腦進行學習
2. 不要過度收集材料,機器學習的資料有很大的時效性。機器學習的資料很多,動輒就有幾個G的材料可以下載或者觀看。而很多朋友都有“收集癖”,一下子購買十幾本書的人我也常常能夠看到。而機器學習的發展和變化速度很快。在入門期間,建議“小而精”的選擇資料,選擇近期出版的且口碑良好的書籍。這不僅可以節約重複學習的時間,也可以讀有品位的材料。
3. 選擇符合自己風格的材料,進行T字形閱讀。舉個簡單的例子,很多人認為PRML比ESL好讀,但如果個人對貝葉斯的理解有限,ESL更符合你的認知,翻閱起來也更得心應手。至於閱讀方式,建議以一本書為主深入理解,同時備著多本參考書,遇到問題時橫向搜尋閱讀。
4. 如果在讀,優先進實驗室,再去找實習,最後一條路是好好刷GPA。一般來說,大三的時候你應該已經有了基本的機器學習知識,儘管還比較淺。這個時候可以向老師/學長/學姐毛遂自薦進實驗室,即使是無償勞動和做基本的苦力活。進實驗室有兩個明顯的好處:
a. 對某個小方向會有比較深入的瞭解。一般實驗室做純理論的不大需要本科生,做機器視覺或者自然語言處理(NLP)等小方向的比較需要本科生,所以這是很好的深入瞭解一個方向的機會。
b. 補充了研究經歷也可以明白自己是否適合這個領域。如果運氣好的話,你也有可能成為論文的作者之一,甚至可以去開會(公款旅遊順道見一下業內大佬)。這對於繼續深造和去國外繼續學習都很有幫助,有科研經歷和論文是很大的籌碼,對於找工作來說也絕對有利無害。
5. 學好英語,至少打下閱讀和聽力的基礎。雖然人工智慧領域中國現在已經做得很不錯,但主流的書籍、期刊和會議,資料都是英文的。我們可以接受翻譯版,但最好的方法還是自己有能力直接閱讀。即使你將來不做機器學習,英文閱讀能力還是會有很大的幫助。
6. 不要試圖掌握所有的相關數學知識再開始學習。一般人如果想要把這些知識都補全再開始機器學習往往需要很長時間,容易半途而廢。而且這些知識是工具不是目的,我們的目標又不是成為運籌學大師。建議在機器學習的過程中哪裡不會補哪裡,這樣更有目的性且耗時更低。
參看 阿薩姆:如何看待「機器學習不需要數學,很多演算法封裝好了,調個包就行」這種說法?
https://www.zhihu.com/question/60064269/answer/172305599
網路或者線下培訓班是否值得上?我覺得需要一分為二的看待。機器學習培訓班有一定的幫助,但最大的幫助應該是看是否有可能推薦靠譜的工作。一個尷尬的局面是,大師級的從業者有更好的選項,一般不會做那種三個月包分配的商業培訓班。因此大量的機器學習講師資質往往良莠不齊,而且存在經歷造假的情況。如果選擇上培訓班,要有心理預期而且避免昂貴的天價培訓班。當然,培訓班有一定的價值,往往比自學的效果還是要好,但千萬不要孤注一擲傾其所有的押寶,往往會輸。
更多的討論可以參考:如何用3個月零基礎入門機器學習
https://zhuanlan.zhihu.com/p/29704017
和 阿薩姆:深度學習的教學和課程,與傳統 CS 的教學和課程有什麼區別
https://www.zhihu.com/question/63883727/answer/225499427
應用篇
1. 即使選擇做學術,也試著去工業界瞭解一下。在其他很多答案中我都提到過,其實工業界用的大部分技術並不酷炫,廣義線性模型(generalized linear models)如邏輯迴歸還是佔據了大壁江山。做一些實習和工業界活動有助於:
a). 打破幻想,瞭解工業界的主流模型。工業界用的大部分技術並不酷炫,你很少能看到深度強化學習那種AlphaGo一樣酷炫的模型。
b). 補上學術界忽視的內容,比如視覺化和資料清洗。工業界的最終目的是輸出商業價值,而獲得商業洞見的過程其實是非常痛苦的,比如第一步就是令人深惡痛絕的資料清洗。
c). 瞭解技術商業化中的取捨,培養大局觀。做技術的人往往一頭扎進技術裡面,而忽視了從全域性思考。更多的討論可以參考:阿薩姆:現在機器學習工業界和學術界的差別越來越大了嗎?儘早實習和踏實科研各有什麼利弊?
2. 機器學習雖然是一門技術,但良好的大局觀可以幫助你走的更遠。很多人以為機器學習是一門專精崗位,但在中小型企業,公司希望機器學習工程師可以獨挑大樑,完成從資料收集、清理、建模、調整、到部署上線,甚至維護和更新的一系列工作。因此在大部分中小型公司的機器學習工程師也做了全棧的工作,捎帶著把網站做了的也不是沒有...因此,不要抓著機器學習不放,適當瞭解不同的知識有時候也很有用。
可參考:阿薩姆:怎樣才算是一個合格的機器學習工程師 和 阿薩姆:機器學習與移動端會碰出怎樣的火花?
3. 在實際應用機器學習時,總結論文中或者書本里面不會提到的技巧,比如:a) 資料質量不高,資料質量不連續時,可以選擇拋棄一部分資料。 b) 如果有必要,需要把迴歸問題轉化為分類問題。 c. 特徵工程不是每個模型都必須的,表示學習的方法一般要避免過度的特徵工程等。d. 選擇交叉驗證的k值不是越大越好(「交叉驗證」到底如何選擇K值?)。更多實用小技巧可以參考我前一陣子的免費分享課。
4. 在機器學習的實際應用中,有很多“玄學”或者難以解釋的部分,對機器學習理念的抽象理解有助於避免困惑。
可參考:帶你瞭解機器學習(一): 機器學習中的“哲學”
https://zhuanlan.zhihu.com/p/27680090
和 帶你瞭解機器學習(二):機器學習中的穩定性
https://zhuanlan.zhihu.com/p/27787096
5. 調參不是最終目的,而是迫不得已的手段。避免過度調參主要還是依賴經驗選對方向,在小的區間正確的模型上調。如果選錯了模型方向,那是無論如何都調不出好效果的。
可以參考:阿薩姆:機器學習如何才能避免「只是調引數」?
https://www.zhihu.com/question/264528062/answer/282229458
寫在最後
機器學習的路不好走,而且往往都有鮮明的個人主義色彩,正是條條大路通羅馬。人大的周孝正教授說過:“一個問題不能證實,也不能證偽,那就要存疑。” 而機器學習就是這樣一門學科,我們必須抱著“批判”和“懷疑”的精神來學習,不管是看書、讀論文、還是聽老師傅的教誨都要有這樣的精神。
機器學習的路上沒有捷徑,想要避免走彎路就要摒棄急於求成的想法,因為捷徑往往才是最長的彎路。