一名普通程式設計師該如何轉人工智慧方向?

2020-11-28 開源中國

眼下,人工智慧已經成為越來越火的一個方向。普通程式設計師,如何轉向人工智慧方向,是知乎上的一個問題。本文是對此問題的一個回答的歸檔版。相比原回答有所內容增加。

  一. 目的

  本文的目的是給出一個簡單的,平滑的,易於實現的學習方法,幫助 「普通」 程式設計師踏入AI領域這個門。這裡,我對普通程式設計師的定義是:擁有大學本科知識;平時工作較忙;自己能獲取的數據有限。因此,本文更像是一篇 「from the scratch」 的AI入門教程。

  二. AI領域簡介

  AI,也就是人工智慧,並不僅僅包括機器學習。曾經,符號與邏輯被認為是人工智慧實現的關鍵,而如今則是基於統計的機器學習佔據了主導地位。最近火熱的深度學習正是機器學習中的一個子項。目前可以說,學習AI主要的是學習機器學習。

  但是,人工智慧並不等同於機器學習,這點在進入這個領域時一定要認識清楚。關於AI領域的發展歷史介紹推薦看周老師寫的《機器學習簡介》。下面一個問題是:AI的門好跨麼?其實很不好跨。我們以機器學習為例。

  在學習過程中,你會面對大量複雜的公式,在實際項目中會面對數據的缺乏,以及艱辛的調參等。如果僅僅是因為覺得這個方向未來會「火」的話,那麼這些困難會容易讓人放棄。考慮到普通程式設計師的特點,而要學習如此困難的學科,是否就是沒有門路的?答案是否定的。只要制定合適的學習方法即可。

  三. 學習方法

  學習方法的設定簡單說就是回答以下幾個問題:我要學的是什麼?我怎樣學習?我如何去學習?這三個問題概括說就是:學習目標,學習方針與學習計劃。學習目標比較清楚,就是踏入AI領域這個門。這個目標不大,因此實現起來也較為容易。「過大的目標時就是為了你日後放棄它時找到了足夠的理由」。

  學習方針可以總結為 「興趣為先,踐學結合」。簡單說就是先培養興趣,然後學習中把實踐穿插進來,螺旋式提高。這種方式學習效果好,而且不容易讓人放棄。有了學習方針以後,就可以制定學習計劃,也稱為學習路線。下面就是學習路線的介紹。

  四. 學習路線

  我推薦的學習路線是這樣的,如下圖:

  

  圖1 AI領域學習路線圖

  這個學習路線是這樣設計的:首先了解這個領域,建立起全面的視野,培養起充足的興趣,然後開始學習機器學習的基礎,這裡選擇一門由淺入深的課程來學習,課程最好有足夠的實驗能夠進行實戰。基礎打下後,對機器學習已經有了充足的了解,可以用機器學習來解決一個實際的問題。

  這時還是可以把機器學習方法當作一個黑盒子來處理的。實戰經驗積累以後,可以考慮繼續進行學習。這時候有兩個選擇,深度學習或者繼續機器學習。深度學習是目前最火熱的機器學習方向,其中一些方法已經跟傳統的機器學習不太一樣,因此可以單獨學習。除了深度學習以外,機器學習還包括統計學習,集成學習等實用方法。

  如果條件足夠,可以同時學習兩者,一些規律對兩者是共通的。學習完後,你已經具備了較強的知識儲備,可以進入較難的實戰。這時候有兩個選擇,工業界的可以選擇看開源項目,以改代碼為目的來讀代碼;學術界的可以看特定領域的論文,為解決問題而想發論文。

  無論哪者,都需要知識過硬,以及較強的編碼能力,因此很能考察和鍛鍊水平。經過這個階段以後,可以說是踏入AI領域的門了。「師傅領進門,修行在個人」。之後的路就要自己走了。

  下面是關於每個階段的具體介紹:

  0.領域了解

  在學習任何一門知識之前,首先第一步就是了解這個知識是什麼?它能做什麼事?它的價值在什麼地方?如果不理解這些的話,那麼學習本身就是一個沒有方向的舟,不知道駛向何處,也極易有沉船的風險。了解這些問題後,你才能培養出興趣,興趣是最好的引路人,學習的動力與持久力才能讓你應付接下來的若干個階段。關於機器學習是什麼,能做什麼,它與深度學習以及人工智慧的關係,可以看我寫的博客 從機器學習談起:

  1.知識準備

  如果你離校過久,或者覺得基礎不牢,最好事先做一下準備複習工作。「工欲善其事,必先利其器」。以下的準備工作不多,但足以應付後面階段的學習。

  數學:複習以下基本知識。線性代數:矩陣乘法;高數:求導;概率論:條件與後驗概率。其他的一些知識可以在後面的學習的過程中按需再補;

  英文:常備一個在線英文詞典,例如愛詞霸,能夠不吃力的看一些英文的資料網頁;

  FQ:可以隨時隨地上Google,這是一個很重要的工具。不是說百度查的不能看,而是很多情況下Google搜出來的資料比百度搜的幾十頁的資料還管用,尤其是在查英文關鍵字時。節省時間可是很重要的學習效率提升;

  2.機器學習

  機器學習的第一門課程首推Andrew Ng的機器學習。這門課程有以下特點:難度適中,同時有足夠的實戰例子,非常適合第一次學習的人。cs229 這門課程我這裡不推薦,為什麼,原因有以下:

  時間:cs229 的時間太早,一些知識已經跟不上當今的發展,目前最為火熱的神經網絡一筆帶過。而Cousera上神經網絡可是用了兩個課時去講的!而且非常詳細;

  教學:Ng在cs229 時候的教學稍顯青澀,可能是面對網絡教學的原因。有很多問題其實他都沒有講清楚,而且下面的人的提問其實也很煩躁,你往往不關心那些人的問題。這點在Coursera上就明顯得到了改善,你會發現Ng的教學水平大幅度改善了,他會對你循循善誘,推心置腹,由淺入深的教學,在碰到你不明白的單詞術語時也會叫你不要擔心,更重要的,推導與圖表不要太完善,非常細緻清晰,這點真是強力推薦;

  字幕:cs229 的字幕質量比Coursera上的差了一截。Coursera上中文字幕翻譯經過了多人把關,質量很有保證;

  作業:cs229 沒有作業,雖然你可以做一些,但不會有人看。這點遠不如Coursera上每周有deadline的那種作業,而且每期作業提交上去都有打分。更重要的是,每期作業都有實際的例子,讓你手把手練習,而且能看到自己的成果,成就感滿滿!

  3.實踐做項目

  學習完了基礎課程,你對機器學習就有了初步了解。現在使用它們是沒有問題的,你可以把機器學習算法當作黑盒子,放進去數據,就會有結果。在實戰中你更需要去關心如何獲取數據,以及怎麼調參等。如果有時間,自己動手做一個簡單的實踐項目是最好的。

  這裡需要選擇一個應用方向,是圖像(計算機視覺),音頻(語音識別),還是文本(自然語言處理)。這裡推薦選擇圖像領域,這裡面的開源項目較多,入門也較簡單,可以使用OpenCV做開發,裡面已經實現好了神經網絡,SVM等機器學習算法。項目做好後,可以開源到到 Github 上面,然後不斷完善它。實戰項目做完後,你可以繼續進一步深入學習,這時候有兩個選擇,深度學習和繼續機器學習;

  4.深度學習

  深度學習:深度學習是目前最火熱的研究方向。有以下特點:知識更新快,較為零碎,沒有系統講解的書。因此學習的資源也相對零散,下面是一些資源介紹。其中不推薦的部分並不代表不好,而是在這個初學階段不合適:

  推薦,UFLDL: 非常好的DL基礎教程,也是Andrew Ng寫的。有很詳盡的推導,有翻譯,且翻譯質量很高;推薦,Deep learning (paper):2015年Nature上的論文,由三位深度學習界的大牛所寫,讀完全篇論文,給人高屋建瓴,一覽眾山小的感覺,強烈推薦。如果只能讀一篇論文了解深度學習,我推薦此篇。這篇論文有同名的中文翻譯;推薦,Neural networks and deep learning:這本書的作者非常擅長以淺顯的語言表達深刻的道理,雖然沒有翻譯,但是閱讀並不困難;推薦,Recurrent Neural Networks: 結合一個實際案例告訴你RNN是什麼,整篇教程學完以後,會讓你對RNN如何產生作用的有很清晰的認識,而這個效果,甚至是讀幾篇相關論文所沒有的;

  不推薦,Neural Networks for Machine Learning – University of Toronto | Coursera:深度學習創始人教的課,最大的問題是太難,而且老先生的吐字有時不是很標準;不推薦,Deep Learning (book):同樣也是由深度學習大牛所寫的書,但感覺就像是第二作者,也就是他的學生所寫的。很多內容都講了,但是感覺也沒講出什麼內容來,只是告訴你來自那篇論文,這樣的話可能直接閱讀論文更合適。不推薦,cs231n:李菲菲的課程,很有名,專門講CNN。但是這門課程有一個最大的問題,就是沒有字幕,雖然有youtube的自動翻譯字幕,但有還不如沒有。

  5.繼續機器學習

  深度學習未必就是未來的一定主流,至少一些大牛是這麼認為的。傳統的機器學習有如下特點,知識系統化,有相對經典的書。其中統計學習(代表SVM)與集成學習(代表adaboost)是在實踐中使用非常多的技術。下面是相關資源:

  推薦,機器學習(周志華):如果是在以前,機器學習方面的經典教材首推PRML,但現在周老師的書出來以後,就不再是這樣了。首先推薦讀周老師的書。這本書有一個特點,那就是再難的道理也能用淺顯精煉的語言表達出來。正如周老師的名言:「體現你水平的地方是把難的東西講容易了,而不是把容易的東西講難,想把一個東西講難實在太簡單」;

  不推薦,Pattern Recognition And Machine Learning:當前階段不推薦。PRML是以貝葉斯的觀點看待很多機器學習方法,這也是它的一大特色。但對於初學者來說,這種觀點其實並無必要。而且此書沒有中文翻譯,當前階段硬啃很容易放棄;

  6.開源項目

  當知識儲備較為充足時,學習可以再次轉入實踐階段。這時候的實踐仍然可以分兩步走,學習經典的開源項目或者發表高質量的論文。開源項目的學習應該以儘量以優化為目的,單純為讀代碼而學習效果往往不太好。好的開源項目都可以在Github 裡搜索。這裡以深度學習為例。深度學習的開源優秀庫有很多,例如torch,theano等等,這裡列舉其中的兩個:

  推薦,DeepLearnToolbox:較早的一個深度學習庫,用matlab語言撰寫,較為適合從剛學習的課程轉入學習。遺憾的是作者不再維護它了;

  推薦,tensorflow:Google的開源庫,時至今日,已經有40000多個star,非常驚人,支持行動裝置;

  7.會議論文

  較好的課程都會推薦你一些論文。一些著名的技術與方法往往誕生於一些重要的會議。因此,看往年的會議論文是深入學習的方法。在這時,一些論文中的內容會驅使你學習數學中你不擅長的部分。有時候你會覺得數學知識儲備不夠,因此往往需要學習一些輔助課程。

  當你看完足夠的論文以後,在這個階段,如果是在校學生,可以選擇某個課題,以發論文為目的來學習研究。一般來說,論文是工作的產物。有時候一篇基於實驗的論文往往需要你寫代碼或者基於開源項目。因此開源項目的學習與會議論文的工作兩者之間是有相關的。

  兩者可以同時進行學習。關於在哪裡看論文,可以看一下CCF推薦排名,了解一下這個領域裡有哪些優秀的會議。

  下面介紹兩個圖像與機器學習領域的著名頂級會議:

  CVPR:與另兩個會議ICCV和ECCV合稱計算機視覺領域的三大會,注意會議每年的主頁是變動的,因此搜索需要加上年份;

  Conference on Neural Information Processing Systems:簡稱NIPS,許多重要的工作發表在這上面,例如關於CNN的一篇重要論文就是發表在上面;

  8.自由學習

  到這裡了,可以說是進入這個門了。下面可以依據興趣來自由學習。前階段不推薦的學習資源也可隨意學習,下面是點評:

  cs229:Ng寫的講義很不錯,其中關於SVM的推導部分很清晰,想學習SVM推薦;

  Neural Networks for Machine Learning:大牛的視角跟人就是不一樣,看看Hinton對神經網絡是怎麼看的,往往會讓你有種原來如此的感悟。其實看這門課程也等同於讀論文,因為幾乎每節課的參考資料裡都有論文要你讀;

  CS231n: Convolutional Neural Networks for Visual Recognition:最新的知識,還有詳細的作業。國內應該有團隊對字幕進行了翻譯,可以找找;

  PRML:作為一門經典的機器學習書籍,是很有閱讀必要的,會讓你對機器學習擁有一個其他的觀察視角;

  五. 總結

  本文的目的是幫助對AI領域了解不深,但又想進入的同學踏入這個門。這裡只說踏入,是因為這個領域的專精實在非常困難,需要數年的積累與努力。在進行領域學習前,充分認識自己的特點,制定合適的學習方法是十分重要的。

  首先得對這個領域進行充分了解,培養興趣。在學習時,保持著循序漸進的學習方針,不要猛進的學習過難資源;結合著學習與實踐相輔的策略,不要只讀只看,實際動手才有成就感。學習某個資源時要有充分的目的,不是為了學開源項目而看代碼,而是為了寫開源項目而看;不是為了發論文而寫論文,而是為了做事情而寫論文。

  如果一個學習資源對你過難,並不代表一定是你的問題,可能是學習資源的演講或撰寫人的問題。能把難的問題講簡單的人才是真正有水平的人。所以,一定要學習優質資源,而不是不分青紅皂白的學習。最後,牢記以興趣來學習。學習的時間很長,過程也很艱難,而只有興趣才是讓你持之以恆,攻克難關的最佳助力。

  謹以此文與在學海中乘舟的諸位共勉。我就是一名普通程式設計師,剛剛轉入AI領域,還有很多不足。希望此文可以幫助到大家。

  End.

稿源:36大數據

相關焦點

  • 本科機械專業考研如何往人工智慧方向發展
    首先,機械專業考研完全可以向人工智慧方向發展,而且在當前傳統製造業結構性升級的推動下,未來機械領域與人工智慧的結合會越來越緊密。對於機械專業的本科生來說,如果想往人工智慧方向發展,有以下幾個選擇:第一:立足本專業結合人工智慧技術。目前機械專業的研究生教育階段也有不少方向是結合人工智慧技術的,比如數控方向、工業機器人方向、智能裝備方向等等,這些方向與人工智慧有緊密的聯繫,是完全可以選擇的。
  • 程式設計師是做什麼的?未來計算機變得智能,就不需要程式設計師了嗎?
    很多人認為計算機變得如此智能,所以在不久的未來將不再需要程式設計師。另外一些人認為程式設計師是天才,他們在電腦前能不斷地解決複雜的數學難題。(不過,我有點關心如果這成為現實後,計算機還需要人類程式設計師嗎?) 現代計算機具有完全邏輯性、直接性和順從性。如果你知道它應該做什麼並且知道如何命令它,那麼和計算機一起工作是快樂的。唯一的問題是,計算機只會做你告訴它去做的。因此,你應該有清晰的思路並且在見你的上司或客戶時保證計算機不出岔子。
  • 高級程式設計師是如何從初級程式設計師演變的?工作經驗不再是唯一途徑!
    區分高級和初級程式設計師的標準是工作年限嗎?程式設計師最重要的工作就是寫代碼嗎? 高級程式設計師是一名犯過其領域內所有可能犯到的錯誤的專家。 一旦你不再是初級程式設計師,什麼時候會成為高級程式設計師呢? 多年的工作經驗會自動讓你成為高級程式設計師嗎?未必。 以我自身為例。當我還是一名年輕的初級程式設計師時,我以為自己什麼都懂。我傲慢自大,獨來獨往。我認為自己是「代碼之神」。
  • 是什麼成就了一名「高級」程式設計師?
    除多年編程經驗之外,還有什麼能區分一個程式設計師是「老手」還是「新手」?編程技巧當然是一部分,但它絕非是全部。聰明的程式設計師可能比他們的同行擁有更出眾的編程技巧,但那不足以說明他們就是「老手」。同樣,僅僅因為擁有10年編程經驗也並不意味著他們就是高手。在工作崗位上,擁有多年編程經驗也不能說明問題。即便沒被炒魷魚,那也不能提升你的價值。
  • 中國移動10086怎麼轉人工服務 如何讓10086轉人工服務
    中國移動如何轉人工服務 中國移動如何轉人工中國移動很多人都打過人工客服,實際上現在打電話的次數越來越少了。有時候需要找中國移動10086人工客服需要等待接入。本經驗告訴你如何通過中國移動網上app來查找人工客服,通過在線交流的方式也可以解決問題中國移動怎麼轉人工客服有時候需要操作中國移動的業務,怎麼轉人工服務呢,打開中國移動網上營業廳app,找到右上角「在線客服」
  • 普通程式設計師與高級程式設計師有什麼差別?你知道嗎?
    程式設計師的基本能力是:Tasking和學習能力。當好程式設計師的能力是:用更好的方法來實現功能。0.文檔能力「文檔是第一生產力」,這一點在程式設計師的世界是毫無異議的。俗話說:「不會寫文檔的程式設計師不是一個好程式設計師」。
  • 大數據專業的同學,如果要往人工智慧方向發展,該怎麼選課
    首先,如果未來要往人工智慧方向發展,那麼統計分析和機器學習是必須要選擇的,原因有兩點,其一是機器學習是人工智慧的六大研究方向之一,而且機器學習本身與計算機視覺、自然語言處理等方向也有比較緊密的聯繫,所以機器學習也被認為是打開人工智慧大門的鑰匙。
  • 阿里傳奇程式設計師,只會寫代碼,卻從一名員工做到了合伙人
    而在阿里巴巴,也有一位和多隆一樣憨厚忠實的程式設計師工程師,他就是蔡景現,現在是阿里巴巴的合伙人之一,今天就來說說他的故事。阿里傳奇程式設計師,只會寫代碼,卻從一名員工做到了合伙人。1967年,蔡景現出生於浙江省蒼南縣一個貧困的農村家庭。小時候他學習一般,性格也比較內向,但在蔡景現平凡普通的校園成長經歷中,一本basic的程式語言書改變了他的生命歷程。
  • 阿里小蜜怎麼轉人工 淘寶阿里小蜜人工客服在哪裡
    阿里小蜜怎麼轉人工?手機淘寶上具備「我的小蜜」功能,但有用戶不會轉到人工,那麼淘寶阿里小蜜人工客服在哪裡呢?下文小樂哥給大家介紹一下! 阿里小蜜怎麼轉人工?   什麼事阿里小蜜呢?阿里小蜜這是阿里巴巴放置在淘寶和天貓裡面在線智能客服。
  • 被嫌棄的35歲程式設計師
    在我從業的十幾年裡,我儘量使自己朝著一個能夠有積累的方向走」,Juicedata 創始人 &CEO 劉洪清十分篤定。235 歲不轉管理「混吃等死」?「主要還是改不了程式設計師那套習慣,很多事願意親力親為,參與細節,對別人不放心,我自己做最放心。一開始感覺在向務虛的方向走,感覺寫的代碼少了就和技術脫鉤了,時常感到焦慮」。經過 2 年多磨合,柳疏桐已經是一個成熟的技術 Leader 了。
  • 如何度過程式設計師的菜鳥階段?
    近些年,IT行業薪酬水平穩居榜首,70%的程式設計師薪酬在十萬以上。那麼想要進入IT行業成為一名程式設計師該怎麼度過自己的菜鳥階段呢?不要盲目跟風的一味追求新設備別看程式設計師看起來清心寡欲,其實對新設備的追求不亞於女孩子們對包包的熱衷。我真的見過那些為了買新Apple喝西北風的程式設計師,如果你剛入職,設備更新換代的速度,比你漲工資快多了。如果被偷或者更換的時候不注意,很可能被人盜取隱私。不如拿這些錢去提升自己,你想要的總有一天都會得到。
  • 做一名程式設計師一般都需要什麼學歷?就業前景怎麼樣?
    編程的就業前景到底如何?國內軟體經過十幾年的發展,不能說是產業已經非常成熟了,起碼軟體行業已經有了長足的發展,最簡單來講三線城市在以前找個軟體開發人員基本上算是稀有物種,現在已經陸陸續續地有小的軟體公司開始出來了,特別是各地的智慧城市和智慧校園的帶動,以前很多一線城市的程式設計師喊著回到老家找不到合適的工作慢慢都會有所改觀。
  • 天貓客服怎麼轉人工?
    我們在天貓如果遇到了什麼問題,天貓是有多種渠道可供我們來進行溝通的,但是我們有個習慣就是,一對一的服務,或者說是人工服務,給我們的感覺更加踏實,那麼天貓客服怎麼轉人工呢?第一步,輸入帳戶和密碼登錄天貓,然後把頁面拉到底部,點擊聯繫我們進入。
  • 四大核心優勢玩轉智能視頻生產 百度大腦圖文轉視頻帶來無限可能
    1月13日,百度AI官方視頻號發布了一條特殊的視頻——《百度研究院2021年十大科技趨勢預測》,該視頻完全由AI自動剪輯生成,製作者只需一鍵輸入新聞連結即可生成視頻。其中,起到關鍵支撐的是百度大腦圖文轉視頻技術(VidPress)。
  • 程式設計師如何快速的學習並使用API
    對於應用級程式設計師來說,每天都要跟各種API打交道,不同的API完成不同的功能,但是簡單的總結一下,這些API其實只完成一件事,這一件事就是資源管理。所以了解API實際上就是了解各種資源,以及如何調用這些資源來完成一個具體的業務邏輯處理過程。
  • 解讀| 中國人工智慧國家政策及解讀(一)
    1、智能製造開啟人工智慧道路 2015年5月,《中國製造2025》中首次提及智能製造,提出加快推動新一代信息技術與製造技術融合發展,把智能製造作為兩化深度融合的主攻方向,著力發展智能裝備和智能產品,推動生產過程智能化
  • 一款讓程式設計師編程更智能的開發工具Kite
    對於程式設計師而言有一項剛需,就是花費時間搜索網際網路的相關開發文檔和代碼示例。  Kite正是為了解決這樣需求而誕生的,對於許多從事Python的程式設計師而言,Kite極受青睞。所以Kite的工程師正在尋求添加對C#,Java和Javascript等語言的支持來擴大用戶群。  那麼,Kite如何幫助程式設計師變得更有高效?
  • 大專程式設計師是否有必要提升到本科學歷
    如果自身的學習能力能夠支撐自己獲得更高的學歷水平,同時在時間和精力上也允許,那麼程式設計師應該重視學歷的提升。從當前很多大型科技公司的人才招聘情況來看,本科人才和研究生人才是招聘的重點,在IT行業進行結構升級的過程中,高端人才的需求量會持續增加。
  • 好與壞的程式設計師:如何客觀評價程式設計師的水平?
    1有感於知乎上的一篇關於程式設計師的討論這發生在幾千年前的對話是不是靠譜我們不知道,但是拿這話來套程式設計師的生態圈,真就是一套一個準。2微軟某個大牛軟體下面兩個不同的組裡各有一個大牛程式設計師,為了不失一般性,我們叫張三和李四吧。張三的特點頗有點大哥的風範,偶爾也充當一下二哥。寫的程序嚴謹,測試也很嚴謹,幾乎不犯錯。組裡其他同事有錯的,也在出大事之前默默的修掉了。
  • 如何選專業選課題?姚期智院士:首先成為一名科學家
    如何選擇自己的專業方向?人工智慧學科如何交叉?在報告中,他闡述了人工智慧的科學基礎,介紹作為神經網絡研究新視角的神經拓撲結構、隱私保護學習以及可控的超級人工智慧三個新方向。姚期智院士指出,基礎研究對於人工智慧的發展至關重要,當今人工智慧一些非常亮眼的成果,正是許多年基礎研究的累積而成。為了確保未來人工智慧有可持續的巨大進步,今天我們更應該在人工智慧的基礎研究方面付出更多努力。