如題,其實這個問題最好是一個反問句才能更好地表達我這段時間的學習體會:難道機器學習有技術含量嗎?

正如俗語所云,對一個事物越了解,越感覺到難;反之,作為一個入門級選手,我目前的感覺就是機器學習這些東西很low。

那作為入門選手,我為什麼這麼認為呢?這東西就像生物科學一樣(誤,我對生物學科的研究也不太了解,算是想當然吧),實驗基本靠猜,說白了是個體力活,不需要什麼數學、計算機的知識,只需你看看文檔,傻瓜式學習,背熟幾個模型的優劣之類的,就可以開搞了,搞不搞得出全憑運氣——「嗯,換這個loss函數可能好」「啊,不行,那用SVM可能更好」……

所以,我認為這個東西沒有什麼技術含量,所謂的「難」也正是因為沒有章法,不靠技術。

應該說,目前的機器學習的研究者們在研究什麼?他們研究的內容是演算法的改進、某種理論分析,還是在一天到晚坐在電腦前猜測並實驗這個模型行不行。


問題的來源

我目前還在大學,電子方向,發現專業里好多研究生導師都在拚命往機器學習方向靠攏(反倒是計算機學院的對這個沒有多大熱度),我了解了兩個研究生所做的內容,我覺得研究生幾年不值得花在做這個上……所以才會有這個問題。

強調自己不是計算機、數學等相關專業,是隱約感到自己專業的研究生可能更注重於應用層面而不是背後的演算法研究(做底層的演算法和研究當然是很牛的),這樣研究生幾年下來,能夠學到本領嗎?那些研究生的學習是那種充滿創造性的研究嗎?希望一些類似處境的同學或者了解研究生以及他們畢業後的情況的大佬介紹一下情況和感受吧


怎麼說呢,我之前和lz一樣,覺得演算法就是無腦用model,眼緣調參+feature engineer,在學校快樂摸魚加嘲諷。

結果後來打了個比賽,發現不同的model如何調參很難,如何使用更新的工具更難(RL,GAN),或者不同的信息如何融合,新的特徵如何添加,這些都是需要對任務和數據集足夠了解才能做到的。最後用上複雜的model和有效的參數還是超級暢快的

當然啦,看了上文的描述,感覺lz智商肯定不低,但是如果我上面說的這些快樂lz覺得無感的話,那就說明不太適合這個領域嘍


難!難!難!

簡單地了解一個演算法很簡單。但是了解一個演算法為什麼能稱之為一個演算法,或者簡單點說,為什麼能學習,則很難!

舉個例子,比如說knn,你覺得沒什麼技術含量啊!很簡單啊!但是基本上所有了解ml原理:可學習性、收斂性以及樣本複雜的的人都知道,想要說明白為什麼knn可以成功滴學習很難,需要幾張紙的證明。(這就是統計學家往往要乾的事情,寫一些實踐人士認為毫無用處的事情。)這樣的收斂性包括:是否隨著樣本的增加,train loss和validation loss都會越來越小(理論證明),需要多少的樣本才能讓k已知的knn演算法一定會達到好的效果,k與loss之間的關係,以及其他非常實用的部分。(不像計算機學者:做實驗!做模擬!理論多困難啊!證明不做!做實驗不就知道幾個參數和loss之間的關係了嘛!484傻啊!...雖然可能他們連train和validation的loss都分不清...)

Plus,演算法收斂性的定義,以及knn以及其他一些演算法的收斂性你可以從這個裡面管中窺豹:https://www.cs.huji.ac.il/~shais/Lectures2014/lecture5.pdf


傳統的機器學習還是很有技術含量的;

現在Deep Learning, 視覺那一塊堆架構的確實沒啥含量。沒含量到了什麼程度呢,到了Google AutoML組可以自動生成的地步。。


題目描述的意思是不是「用已有的方法解決問題,技術含量不大」?

本科生水平應該是:能學會已有知識,解決一個小問題。 題主水平應該更高,所以覺得簡單。

隨便來倆科研問題,「如何提升CNN的效率而不喪失性能?」、「如何增加模型的學習能力?」

再來倆工程問題,「圖片分類很成熟,那電商上千萬種商品,如何讓商品圖片分類 快、准且省電?」、「語音識別很成熟,如何實現會議現場的精準實時傳譯?」

機器學習在理論、工程上都有大量問題需要解決,歡迎題主繼續深入研究。


機器學習在應用層面的技術含量當然不在於調用別人已經封裝好的東西再隨便調調參,改改模型結構,效果漲一兩個點,這基本是最沒意思的事情了,在業界我們通常用它來休息。我老大曾對組裡一個人說過「你這個雙月在調模型,那不正是做做分析想想整個策略-產品還有什麼不足的好時間」。

它在應用層面的技術含量更多的是工程問題:

- 如果數據量上去了,還能保持同樣的計算和響應速度嗎?可以相信我,樣本和特徵擴大十倍百倍,原來不是問題的都會變成問題。

- 能保證模型學習效果嗎,具體來說在模型出了問題時是否有兜底方案,是否能通過對於原理的了解及時監控到出問題的部分?

- 我手頭的這個問題是不是一個可以建立合適的機器學習工程管道的問題,還是本質上就必須靠人工來解決?

- 怎麼寫出優美的代碼使得業務和模型具有可擴展性?

- 模型那麼多,研究那麼多,api那麼多,怎麼才好快速閱讀,篩選出對手頭的場景有用的新成果拿來試試?

同樣的,(我理解的)題主可能期待或者理解的技術含量也不在如何應用機器學習層面,而在機器學習模型本身的層面,因為我注意到題主提了幾個猜測的機器學習研究方向。 研究者們要做的事情是很多的,比如

- 對於解決問題,有沒有什麼新穎的想法和洞見?這點極為重要,新穎的想法本身就是一種貢獻,就算目前看起來還用不上或者作用不大。舉例:比如大家都在邏輯回歸的時候提出函數逼近思想下的產物GBDT,比如提供BP通用計算框架的神經網路儘管沉寂20年但如今迎來爆髮式增長。這些都是事後看來很簡單但其實非常有思想洞見的經典研究。現在也有很多並不火爆但有人默默堅持和耕耘的方向。你覺得「不受外力的物體會保持靜止或做勻速直線運動」簡單嗎?

- 對於已經有的想法,在各種場景下的表現怎麼樣,有沒有理論上的理解或者性質來幫助人們有規律地認識這種表現?「統計機器學習」(註:和傳統統計研究的方向和框架還是有較大區別; 普通機器學習材料 or 博客也較少見到這一方向) 就是這一方向的佼佼者。

- 為了實現新穎的想法,每一單獨步驟有沒有優化的空間?舉一些題主應該會知道的經典例子:理論上如最優化問題、隨機矩陣問題,實踐上如Lightgbm、神經網路的權值共享、word2vec的霍夫曼樹等。順便說一下,這些優化本身就是新穎的思想,只不過解決的問題相對來說不是一個整體問題而是一個局部問題。另外由於機器學習的研究重心有一大部分在業界,所以工程問題的研究確實不少,trick的解決方案也不少,看上去沒那麼理論; 有一部分也算是在解決通用的應用層面問題吧,比如模型速度優化好了對於使用模型的真-應用層面就可以少關心點這個問題,直接享受到好處。

再有,由於機器學習或者說人工智慧本身是一個過熱的熱點,許多研究方向都想來蹭蹭熱點,用方法解決自身領域的問題,發論文相對容易嘛。有的研究也頗具啟發性,但我看過的更多研究還是在水論文...我甚至還見過各種在人文社科歷史領域不扎紮實實積累數據、深入理論、文獻考證與調查,就想用機器學習蹭熱點的事...這點題主完全可以不被蠱惑,可以結合自身的領域知識看看你見到的現象到底是在水還是對解決問題提供啟發真有幫助。如果是水,等熱潮褪去,他們自然就不搞了。

最後,如果題主覺得自己的整體能力超過常人,那你不妨認識到,大部分普通人就是在熟練地做著技術含金量並不那麼高但機器又暫時搞不定的工作,這在每個時代都是一樣的,能力所限嘛(比如我自己哈哈哈)。不然碼農這個詞是怎麼來的呢?


恩,所以你能寫出一段能戰勝圍棋一段選手的機器學習代碼嗎?


推薦閱讀:
相关文章