1. 程式人生 > >普通程式設計師如何轉向人工智慧方向?

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

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

一. 目的

本文的目的是給出一個簡單的,平滑的,易於實現的學習方法,幫助 “普通” 程式設計師踏入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如何產生作用的有很清晰的認識,而這個效果,甚至是讀幾篇相關論文所沒有的;
  • 不推薦,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合稱計算機視覺領域的三大會,注意會議每年的主頁是變動的,因此搜尋需要加上年份;

8.自由學習

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

  • cs229 :Ng寫的講義很不錯,其中關於SVM的推導部分很清晰,想學習SVM推薦;
  • Neural Networks for Machine Learning:大牛的視角跟人就是不一樣,看看Hinton對神經網路是怎麼看的,往往會讓你有種原來如此的感悟。其實看這門課程也等同於讀論文,因為幾乎每節課的參考資料裡都有論文要你讀;
  • PRML:作為一門經典的機器學習書籍,是很有閱讀必要的,會讓你對機器學習擁有一個其他的觀察視角;

五. 總結

本文的目的是幫助對AI領域瞭解不深,但又想進入的同學踏入這個門。這裡只說踏入,是因為這個領域的專精實在非常困難,需要數年的積累與努力。在進行領域學習前,充分認識自己的特點,制定合適的學習方法是十分重要的。首先得對這個領域進行充分了解,培養興趣。在學習時,保持著循序漸進的學習方針,不要猛進的學習過難資源;結合著學習與實踐相輔的策略,不要只讀只看,實際動手才有成就感。學習某個資源時要有充分的目的,不是為了學開源專案而看程式碼,而是為了寫開源專案而看;不是為了發論文而寫論文,而是為了做事情而寫論文。

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

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

相關推薦

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

眼下,人工智慧已經成為越來越火的一個方向。「普通程式設計師,如何轉向人工智慧方向」是知乎上的一個問題。本文是我對此問題的一個回答的歸檔版。相比原回答有所內容增加。 一. 目的 本文的目的是給出一個簡單的,平滑的,易於實現的學習方法,幫助 “普通” 程式設計師踏入AI領域這個

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

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

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

眼下,人工智慧已經成為越來越火的一個方向。普通程式設計師,如何轉向人工智慧方向,是知乎上的一個問題。本文是我對此問題的一個回答的歸檔版。相比原回答有所內容增加。 一、目的 本文的目的是給出一個簡單的,平滑的,易於實現的學習方法,幫助 “普通” 程式設計師踏入AI領域這

普通程式設計師如何轉向AI方向

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

普通程式設計師想轉人工智慧?別想了!

我的上一篇博文 《程式設計師,你焦慮嗎?》發表以後,不少程式設計師朋友聯絡我說他們確實很焦慮,但是不知道怎麼辦。其中一大部分人都打算轉大資料、人工智慧。 我幹了六年.net,轉過java,又轉python進入了公司人工智慧部門。現在我在部門內做外圍開發工作。我以前也想轉人工智慧,現在不那麼想轉了,因為我的背景

跳槽季 | 普通程式設計師到底如何轉行人工智慧

作為一名軟體工程師,我們應該活到老學到老,時刻與不斷髮展的框架、標準和正規化保持同步。同時,還要能活學活用,在工作中使用最合適的工具,以提高工作效率。隨著機器學習在越來越多的應用程式中尋得了一席之地,越來越多的程式設計師加入 AI 領域,那麼,入行 AI 領域需要哪些技能呢?

普通程式設計師,如何轉型大資料相關方向

最近,身邊幾個程式設計師朋友都在自學Spark、Hadoop等相關知識,彷彿不緊跟時代步伐,就會被隨時甩出半條街的節奏;而開啟知乎,諸如“怎樣進行大資料的入門學習”“Java Web 程式設計師如何轉型大資料”之類的話題也屢受關注。 大資料之愛絕非偶然 1、技術日漸成

普通程式設計師將找不到工作?自動程式設計的人工智慧系統來了

按常人的理解,程式設計師由於是程式之父,應該是最晚被人工智慧淘汰的工種。但是,彭博和英特爾實驗室聲稱,他們根據遺傳演算法和圖靈完備語言,完成了第一個能夠自動程式設計的人工智慧系統“AI Programmer”,並聲稱理論上能夠完成任何程式設計任務,不受人類智慧和時間的侷限!這

人工智慧普通程式設計師想投身 AI 行業的機遇與挑戰

雷鋒網 AI 研習社按:據 LinkedIn 釋出的「全球 AI 領域人才報告」顯示,2011

普通程式設計師如何入門深度學習?

摘要: 作為一名軟體工程師,我們應該活到老學到老,時刻與不斷髮展的框架、標準和正規化保持同步。同時,還要能活學活用,在工作中使用最合適的工具,以提高工作效率。隨著機器學習在越來越多的應用程式中尋得了一席之地,越來越多的程式設計師加入AI領域,那麼,入行AI領域需要哪些技能呢?

闡述普通程式設計師到資深架構師的經歷

在微博平臺,有幸結識了一幫趣味相投資深碼農,離開以後很難再有這麼一個團隊來成長了……想想都是幸運,成天跟一群這麼優秀的人在一起,想變差都不容易。” 筆者。 我現在負責某某TV直播平臺整體基礎架構工作,是一個快 9年工齡的碼農。我在 2007年畢業,和很多同行一樣,也是從小公司起步,曾做過 ERP

普通程式設計師到身價過百億:追求長期價值的耐心,決定了你能走多遠

一提到程式設計師,很多人腦海裡馬上會出現這些標籤:格子襯衫、牛仔褲、程式碼、bug、木訥、不善言辭等等。但有一個詞似乎更能概括:改變世界。 程式改變世界,已經有幾十年了,但真正進入大眾的生活,應該是從2007年智慧手機的應用開始,越來越多的人開始關注技術和程式設計師。 在中國網際網路圈,我們

普通程式設計師怎麼理解日誌系統

 當我們在做系統開發時,日誌系統是繞不開的話題。作為日誌系統的最終使用者,我們會接觸不同的日誌系統,比如 log4j、 logback 和 slf4j 等等,還會接觸到日誌系統的各種概念,比如 Formatter、Appender 和 Priority 等。這些日誌系統有什麼區別,這些概念

前端成長01 高階程式設計師普通程式設計師有哪些區別?

原文地址:高階程式設計師和普通程式設計師有哪些區別? - 暗滅的回答 - 知乎 先不說高階。就只說初級程式設計師經常容易犯的錯誤,把這些錯誤改正了,你離中級就不遠了。 初級程式設計師經常犯的錯誤集錦 命名不規範 日誌不規範 拒絕寫介面和假資料 不寫單

死磕 Elasticsearch 方法論:普通程式設計師高效精進的 10 大狠招!(Elasticsearch教程式章)|MVP講堂

作者:阿里雲MVP 銘毅 下節連結: Elasticsearch學習,請先看這一篇! 開篇 人工智慧、大資料快速發展的今天,對於 TB 甚至 PB 級大資料的快速檢索已然成為剛需。Elasticsearch 作為開源領域的後起之秀,從2010年至今得到飛躍式的發展。 Elasticsearch 以其開

普通程式設計師,如何利用三年成為年薪五十萬架構師(文末福利)

不管是開發、測試、運維,每個技術人員心裡都有一個成為技術大牛的夢,畢竟“夢想總是要有的,萬一實現了呢”!正是對技術夢的追求,促使我們不斷地努力和提升自己。 誤區: 有人認為想成為技術大牛最簡單直接、快速有效的方式是“拜團隊技術大牛為師”,讓他們平時給你開小灶,給你分配一些有難度的任務。

一名普通程式設計師真實的各個面試心酸歷程——願世界沒有Java技術面

一位普通的程式設計師真實的各個面試心酸歷程: 王某某技術渣,渣到什麼程度呢,沒寫過專案,天天看paper(動漫),平常接觸最多語言是Matlab。 目前的Offer情況: 華為Hr面定比普通高一級(Hr說給你高一級不是因為你的技術,是因為你的人物模型), 招商銀行Fi

程式設計師的發展方向和薪水

如果你是一名初學者,對程式設計非常感興趣,想成為一名合格的程式設計師,那麼這篇文章就是為你寫的。 從初學者成長為一名合格的程式設計師需要一段時間的磨練,每個人付出的時間和做事的效率不同,我不好評判你需要多長時間才能學有所成。站在求職的角度,能開發出實用的軟體、網站、APP等才叫學有所成。

普通程式設計師該如何進階為全棧工程師?

如何成為一名全棧工程師(full stack developer)?網際網路最熱的話題之一。LinkedIn, Facebook上標榜自己是全棧工程師的人也越來越多,似乎正在成為IT行業的新潮流和新趨勢。Full Stack的概念早已不新鮮,廣大開發人員之間對”全棧”類話

《死磕 Elasticsearch 方法論》:普通程式設計師高效精進的 10 大狠招!(完整版)

人工智慧、大資料快速發展的今天,對於 TB 甚至 PB 級大資料的快速檢索已然成為剛需。Elasticsearch 作為開源領域的後起之秀,從2010年至今得到飛躍式的發展。 Elasticsearch 以其開源、分散式、RESTFul API 三大優勢,已經成