入門 ai,如何選擇好的材料

引子

IT 行業發展迅速,各種新名詞此起彼伏。身處這樣一個熱點行業,

學習是必須的。不打算成為終身學習者的程序員,失業就在明天。

可是,怎麼學呢?

都已經畢業了,每天要上班,不能像以前讀書的時候,整天只是學習,學什麼都有老師教,坐在那兒聽就可以了。

自己從頭看書太辛苦了,網上的文章又太碎片化——是不是報一個培訓班,交點錢聽人講更容易學會? 培訓班有那麼多,這個是證書,那個是優惠,再一個給提供工作機會,到底選哪個好呢?

今天我們就來說說這件事。

NOTE:我們此處說得培訓班指需要較長時間(一般以月為計)的付費培訓。線上線下都包括,但一定能夠和培訓教師直接交流,有答疑過程。

自學的困境

如今,網絡資源那麼發達,IT類技術都不難找到各式各樣免費或費用很低的書籍、資料、課件、講座、代碼。從理論到實踐都有講解。

如果想要自學,是完全有條件的,那為什麼還要去上培訓班呢?原因大概有一下這些:

直接原因:精力分散,不夠專注,書讀不下去,代碼看不下去。 • 深層原因:驅動力不足以讓自己專注。 •根本原因:沒有足夠渴望的目標,無法調動自身能量形成驅動力。

其實歸根到底,學不下去是因為不知道學習是為什麼,學了到底有什麼用。漫無目的的學習註定是浪費時間。

有效學習三要點:目標明確,系統性強,足夠深入。三者缺一不可。

明確學習目標

好在讀本文的同學,已經共同擁有了一個優勢:目標明確。

我們學習的目的是為了入行AI!

在明確目標的指引下,比較容易找到什麼“有用”

——雖然有點功利,但不得不承認,“有用”與否是大多數人產生驅動力的重要所在。

我們可以以“在AI領域找到技術崗位工作”為基準,進行學習。避免東一下,西一下的“亂學”。

什麼樣的目標才算明確

但是要注意,這個目標如果僅僅停留在:“我要做AI”,是不能稱之為一個目標的。真正的目標必須具有可實施性,並最終體現為實施計劃。

想要入行AI,先搞清楚幾件事:

  • 目前真正落地的AI領域都有哪些?
  • 每個領域有什麼樣的代表企業?
  • 這些企業中,都有什麼樣的技術崗位?
  • 每種崗位哦需要什麼入門條件?

至少要能夠定位到你的目標崗位,明確了這個/類崗位的技術要求,才有可能確定需要學習的內容有哪些,從而選擇到正確的培訓課程。

如何劃定明確的目標

但是怎麼能知道這些呢?筆者個人推薦如下調研步驟:

Step 1. 先確定一個領域(圖像、語音、NLP等等)

可能你本來就有特別感興趣的領域;或者你對某一種技術,比如人臉識別,特別興趣,那麼可以直接由此入手。

如果你本來對AI瞭解不多,只是想做當前市場上最熱門的領域,那也比較好辦。多爬一些招聘網站、職場社交媒體的招聘信息,做一下數據分析,看看哪些領域招的人最多,薪水最高。

Step 2. 瞭解本領域當前的科研狀況

最簡單的方法:找十篇本領域核心期刊或會議的論文,讀一遍。

用Google找論文還是比較讚的,而且相關度排序綜合了論文的成果貢獻,作者的學術地位和新穎度。

如果方便用Google,直接輸入領域相關keyword,取前3-5篇拿來讀。讀後再根據閱讀中遇到的問題、產生的興趣回溯尋找其引用文獻,或者重新搜索。

真的能認真讀進去10篇比較新的論文,哪怕是普通博士生髮表的,也能讓你對一個學術領域有最基本的理解了。

Step 3. 瞭解本領域理論的落地技術以及相關企業

AI作為一個新興方向,很多領域還處在研究階段,真正能夠應用到現實產品中的領域相當有限。

有代表性不過就是:語音識別/合成,圖片/人臉識別,和NLP的一些分散應用。

當然並不是說尚未投入使用的技術就不值得去了解或者投身,比如現今熱點中的熱點——自動駕駛——尚處於研究性質遠超實用的探索階段,雖然很多公司都在做,但其實並沒有實際的投入真實世界使用。

此處只是說,落地技術的範圍並不算太廣,瞭解起來投入也有限。

有了目標技術再找企業就相對容易多了。雖然大公司掌控了當前AI領域的絕大多數人才和資源,但是也有越來越多的小企業在具體技術點上發力。

普遍來說,進大公司是為了公司,而進小公司則是為了跟人。而AI行業又是一個強學術背景的行業,一個公司也好,團隊也罷,如果連一個有一些最起碼學術建樹的博士都沒有,那能走多遠真的不好說。

從這一點來看,step 2的調研過程也可以應用到此處。如果有感興趣的小公司,尤其是剛剛創業不久的startup,不妨先評估一下技術合夥人的學術水平。

Step 4. 瞭解具體崗位的招聘需求

這裡的具體崗位,到並不一定指XXX公司的XXXX崗位,而是指同一類型公司同一技術角色的相對普遍要求。

AI行業的技術崗位,按角色可以簡單地分為三類:

角色1:科學家——研究理論,開發/改進算法; 角色2:工程師——結合業務,訓練模型; 角色3:工程輔助——選擇、清洗、標註數據等。

從目前實踐來看,一個團隊中,如果工程輔助不是外包給第三方的話,工程師本身也要肩負工程輔助的責任。或者雖然內部有分工,但工程師和工程輔助都屬於一個團隊,在職銜上也沒有明顯區別。

一般來說,如果不是科班出身,沒有在學校讀到相關專業博士畢業,在入行的時候就不必指望AI科學家了。對於一般人而言,需要確定的是角色2和3 而已。

當你選定了公司之後,注意先看看同等類型公司,至少有代表性的那些,角色2和3是分開的還是合併在一起的。這一點,通過招聘啟事的職位描述就應該可以找到。

從描述來看,角色2和角色3是不同成員來分擔時,2顯然比3 cool多了。但正因為如此,兩者的能力要求必然也有區別。

領域、企業和角色共同定義了崗位之後,再根據崗位需求來反推需要學習的內容,就是有的放矢了。

容易被誤導的”捷徑 “

雖然推薦上述路徑,但是筆者確實知道,很多人喜歡走“捷徑“——去招聘網站用AI、人工智能等關鍵詞搜索一堆職位,看看那些職位要求的工具和語言是什麼,直接去學就好了。相當於從step1直接跳到了最後。

反正現在大多數職位都要求Python,Tensorflow,直接報個班學學怎麼用Python調用現成的算法,或者怎麼用tensorflow處理數據不就好了?何必那麼麻煩,還要看什麼論文,學什麼理論。

這種想法,屬於典型的被“捷徑“誤導。在AI行業從事技術工作,哪怕是做角色3的工程輔助工作,如果想要做得長久,有所發展,理論學習是必不可少的。

要詳細解釋這一點,完全可以單獨開個chat了。此處且舉個直觀的例子:

工具就像是武器,學會使用一種工具只是學會了使用這種武器的最基本的招式和套路。而理論學習則是學習策略,決定了未來在真實對戰中,遇到對手攻擊時,你選取哪些招式套路,如何組合起來去迎敵。

不排除現在有些公司跟風慕名,想做AI,自己沒有人才,就直接招聘,要求會用XX工具就可以了。只學會用工具做一些基本操作,也許就可以應聘這樣的職位。但是這樣的職位能長久嗎?能解決真正的問題,產生價值嗎?做這樣的工作,能有長進提高個人價值嗎?

為了個人長遠的職業發展,我們還是紮實打牢基礎。

制定學習計劃

有了明確的目標,也就有了明確的範疇(scope)。同時,經過上節step2-4,還搞明白了,學了這些東西,能用來幹什麼,最終會把它用到什麼場景中去。

有了這些,就可以確定一個知識體系(至少是其中一個結構分明的分支)。並進一步確定,對這個體系中的內容需要了解到什麼深度。

有了體系和深度,進而可以列舉出所需要掌握的各個知識模塊。在此基礎上,劃分學習內容。然後根據需要學習的內容制定學習計劃。

很多人在制定學習計劃的時候,會從時間出發。但是如果沒有內容,光指定時間是沒有意義的。學習計劃的最初步應該是知道要學什麼。具體步驟可以這樣來走:

  1. 明確知識範疇和應用目的;
  2. 劃定知識體系並確定深度目標;
  3. 填充知識模塊;
  4. 列舉針對具體模塊的主要知識點。

可以借鑑做作文列提綱的辦法:在勾勒出輪廓之後,先把知識結構的骨幹勾勒出來,分為篇章,列出大標題,再在其中填注小標題(知識點)。

這裡很關鍵的一點是,計劃中最細粒度的“小標題”到底有多大。

個人意見:學習一個計劃中的最小單位,如果是不脫產,僅在業餘時間學習,掌握它的時間不應該超過一週;如果是全脫產學習,最好不要超過2天。

我們下面用一個例子來說明一下具體從目標到學習計劃的制定過程。

【舉例說明】

從需求出發:筆者要學習基於機器學習的自然語言處理,具體的應用是開發聊天機器人的語言理解模塊。

進行調研:通過 i) 向有類似經驗的同事請教; ii) 到網上搜索綜述性文章和NLP領域論文;iii) 查找實踐類的文章、類似開源項目……等一系列手段,筆者瞭解到,最起碼有兩件事情必須要做:意圖分類和實體提取。

目前,要做這兩件事情,有基於規則和基於機器學習/深度學習模型兩類方法。

基於規則雖然直接、初始代價小,但是可擴展性差,所有規則都需要人工添加。

而基於模型的方法有較強的可擴展性,而且隨著聊天機器人用戶和語料的增多,還可以通過反饋持續增強模型。在聊天機器人中應用機器學習/深度學習不僅符合產品發展的需求,也是當前業界的發展方向。

機器學習和深度學習的區別在於:前者適合相對數據量、運算資源較小,而開發者對業務理解較深的場景;後者則更加“自動化”,但對於數據量和運算量需求巨大,尤其是對人工標註的數據要求很高,先期投入太大。

筆者決定在工作用應用機器學習模型,因此就要先從機器學習學起。

目標確定:根據調研,確定了目標為機器學習。

接下來第一步就是了解“機器學習”的學科框架。

很多學校計算機專業的都開設機器學習課程,找到相應的教學大綱和課本並不難。通過高等院校的教學大綱和課本目錄來了解一個學科體系,普遍而言是最靠譜的方法。

機器學習有一點特殊的地方——有一位大牛,Andrew Ng,在幾年前就發佈了一份免費網上課程叫做“機器學習”。因其經典和學術上的嚴謹,也可以用來作為了解機器學習體系的一個來源。

但是一般情況下,不建議在最開始的時候就直接把公開課、培訓課程作為學習體系架構的依據。

構建體系:通過對比多本機器學習著作,不難發現,機器學習理論是以一個個模型為主要內容的。

之前工作中要用到的意圖識別和實體提取,正好對應分類和seq2seq預測模型。而為了獲取意圖,可能還需要對原始語料做文本聚類。

因此我們構建的體系可以以模型為主要節點。

填注內容: 確定了主幹節點,下一步就是填注課程的“血肉”。

歸根到底,模型是用來解決問題的。比如chat bot語言理解所用到的分類,序列預測,聚類等,都是典型的機器學習問題,每一個問題都對應多個模型。每一個模型都有其適用的具體情形。

模型的獲得包括算法和數據兩個方面。需要一個訓練過程,訓練過程一般迭代進行,期間要做多次驗證,根據驗證結果調優,最終通過測試來檢驗模型質量。

再通過進一步查詢資料得知,要了解這些模型的運行原理,就得讀公式,那麼就需要求導、求微分、求積分、矩陣運算、概率統計等方面的知識。

還有就是,所有模型處理的都是數值,我們要把現實當中的文本等人類可讀信息都轉化成向量。這就需要掌握將文本轉化為向量空間模型的能力,和數據清洗整理的能力。這些能力又都是以編碼能力為支撐的。

制定提綱:由此,我們學習計劃體系就已經有了眉目。

我們需要學習(複習)下列這些知識:

1)高數、線代和概率論的知識; 2)選擇一批在實踐中應用較多的典型模型,學習其原理、數學推導過程和訓練模型的算法; 3)模型的訓練、驗證、測試過程和評判模型的指標; 4)將人類可讀信息轉化為數值的方法; 5)訓練、測試模型的工具、框架和編程語言。

學習計劃成型:有了上面這些,再結合資料和自己當前需求,確定必學範疇內的模型類型,就可以構建詳細計劃了。

“機器學習”學習內容提綱:

A. 數學

a. 數學分析:求導、微分、積分

b. 線性代數:向量基本運算,矩陣基本運算,矩陣分解,多種矩陣的性質

c. 概率統計:古典概率模型,貝葉斯公式,常見概率分佈及其公式和特點

B. 模型原理及公式

a. Linear Regression(最小二乘法)

b. Logestic Regression(極大似然估計)

c. Naive Bayes

d. Decision Tree(ID3, C4.5)

e. SVM

f. CRF

g. KMeans

h. Spectral Clustering

i. LDA

C. 模型的構建和驗證

a. Binary-Classification vs Multi-Classification

b. Normalization & Regularization

c. Validation & Test

d. Cross Validation Methods

e. Precesion, Recall, F1Score f. ROC, AUC

D. 數據處理和向量模型空間的構建

a. 文本標註

b. Bagging & Boosting

c. 中文分詞方法及原理

d. n-gram模型原理

e. bi-gram文本特徵提取

f. 計算文檔tf-idf 及其信息熵

E. 工具及語言

a. Python,Java,C#類比及對比

b. Python 庫,Java 庫,C# 庫

c. 分詞工具(jieba分詞)和詞庫

d. word2vec

F. 實踐

如上只是第一個版本,可以先依據它制定一個為期兩到三個月的學習計劃。在執行過程中,根據新的認識和具體需要可隨時調整提綱和計劃。

選擇培訓課程

本文的主題就是如何選擇技術培訓,居然前面廢了那麼多話才說到選擇培訓課程,是不是已經有朋友等不及了?

選課容易選對難

或者有的朋友覺得,選培訓課有什麼難的?現在互聯網信息這麼發達,就把培訓課當餐館電影院一樣選又有什麼不好?大眾點評裡有好多培訓機構培訓班呢,上去看看評價,看看星級,還有優惠券拿,直接選一個不就行啦。何必還要自己定製什麼學習計劃,多此一舉。

此處筆者想說的是:選擇培訓課程容易,選擇有效的培訓課程可就難了。

如果選擇了錯的培訓課程,浪費錢還是小事,浪費自己的時間才可惜。

尤其是像AI這種熱點、風口,如果因為總也學不進去東西,錯過了發展最迅速階段的黃金入門期,可能錯過的是大好的職場機遇!

培訓的用處

AI行業的知識、技術,包括各種工程實踐,best practice,都是純粹的書面知識。

不像樂器、舞蹈之類,文字不足以描述,需要老師面對面指導和反覆多角度演示才能掌握到位的技能;書面知識,肯定是可以自學的。

對於這樣的知識,培訓課程的作用何在?

上培訓課的原因很簡單:為了省事——自己學太累了,不如聽老師講。用耳朵聽,比用眼睛看書輕鬆,而且老師講得,總比書上寫的豐富細緻吧。

用自己的金錢和時間換取他人的知識和經驗當然沒問題,甚至可能是高效的辦法。但如果覺得,只要自己花了錢,就可以坐在那裡,等著老師把知識塞到自己腦子裡,可就大錯特錯了。

學習的過程,必須學習者主動吸收理解,才能達到掌握知識的目的。

而培訓課程的作用,無外乎兩點:

I. 講解細緻

相對於力求清晰、簡潔、邏輯性強,具有“攻擊性”的書面資料,合格的課堂講解應該是豐富、細膩、包容性強,具有“防守性”的。

特別是和數學相關的內容,那些公式推導過程,往往一步千里,如果有人能夠給每一個前進步驟一個解釋,理解起來會比自己看輕鬆好多。

II. 和教師直接交流,獲得即時反饋(答疑)

學習複雜的東西時,常有這樣的體驗:

  • 前面一大段都會,就是絆在一個點、一句話上,這一點東西不明白,後面的全都不懂。
  • 自己的理解明明是這樣的,可是習題答案卻是那樣的,是自己學錯了,還是習題答案印錯了?
  • 這種情況應該這樣,那麼那種情況呢,也這樣還是另有不同解法?
  • ……

學習的過程中,疑問是難免的,如果疑問解決不了,則學習很難繼續下去。

無論文字還是影音資料,都是隻有傳達過程,沒有針對每個讀者個人的答疑解惑。培訓課程恰恰可以彌補這個不足。

讓培訓有效

可能有些同學上培訓班的目的之一是直接獲得系統性知識的傳達,因此,也就覺得不必做之前說的,自己構建知識體系,定製學習計劃的事情了。

自己就算定了個計劃,也不太可能找到完全一致的培訓班。隨便報個班,老師自然有教學大綱,聽著就是了,為什麼要自己費力氣?

此處需要提示這些同學一點:如果你自己都不知道想要學習什麼東西,又怎麼能夠正確判斷一門培訓課程的質量呢?

畢竟,培訓(不止是培訓,其實所有教學都是如此)要有效,一定是教師和學生雙方配合的結果。

教學雙方能夠配合好至少有三個前提:

1)教的人有足夠的個人積累和授課技巧用以傳達知識; 2)學的人主動吸收傳授內容並同步思考、理解; 3)教的人教的內容與學的人想學的內容相匹配,且張力適度。

學生在一無所知的情況下,看廣告報個班,對於學習本身缺乏動力和認識,自己都不知道想從課程中獲得什麼;或者教的內容與學生的背景相差太遠,學生一句都聽不懂——這種情況下,即使有幸碰到了好的老師和課程,能吸收的恐怕也非常有限。

通過制定學習計劃,學生不僅能夠明確自己的需求,具體到每一節課想學什麼,而且能夠了解到這些授課內容之間的聯繫和優先級排序。

拿著自己的學習計劃去找培訓,能在大概率上保證培訓課程的有效性。因為:

1)制定計劃的過程,是一個帶著問題探索的過程,而“帶著問題”很容易產生驅動力。

當自己有疑問要解答的時候,就會有探索、學習下去興趣和好奇,不至於看見那些東西就想睡覺。

2)對照自己制定的學習計劃尋找滿足內容需求的課程,有助於獨立判斷培訓課程和培訓教師的“斤兩”。

3)制定計劃也是一個瞭解自己的過程。

知道自己現在缺什麼,缺到何種程度。同時對照培訓課程大綱和介紹,也可以辨識自己目前知識背景和培訓課程深度是否匹配。

對於課程深度的瞭解,還可以藉助事先諮詢授課教師或者培訓學校來完成,對自己的瞭解則無人可以替代。

搜尋有效培訓的途徑

現在我們已經有了一份自己定製的詳細學習計劃,而且也明白了按圖索驥的重要性。下一步就要尋找具體的培訓課程了。

對找尋過程,筆者的建議是:先從免費資源開始

1)首先,AI領域有少量非常經典的現在培訓課程,是完全免費的,而且非常容易找到。

如果你和前面例子一樣,已經選定了機器學習作為學習目標,Andrew Ng的Machine Learning是一定要從頭到尾學一遍的。每節課後的習題都比較簡單,要逼著自己做完。

2)其次,通過書籍、文章、論壇、微信/QQ群、免費講座和分享等渠道,去搜集大家的學習經驗和各種培訓班的信息。

和有同樣目標的人交流,經常能在不經意間得到優質推薦。

3)然後,在儘量廣泛地收集了大量培訓信息後,對照課程大綱和自己的學習計劃進行選擇。

教師聲譽、培訓機構聲譽、網友評價等可以作為參考和背書,但核心是課程大綱與個人計劃的匹配度

4)再次,按優先級裁剪個人計劃。

當然,想找到和最初版本計劃100%匹配的培訓課程基本是不可能的(除非的你的計劃就是照著某個培訓課抄的)。

這就不能不涉及到對於個人學習計劃的裁剪。裁剪的原則應該是:確保核心知識和大體結構,在細節上做出妥協

比方說,你自我判斷數學是必須要補習的部分,那麼就不要找完全一點數學基礎都不講,上來就是模型的培訓課。你確定了要學每個模型的數學推導過程,就不要找只是描述原理,把絕大多數時間都放在代碼實踐上的課程。

但是如果大致結構和計劃一致,只是有部分細節(例如模型類型)和你自己最初計劃不同,則可以再進一步考慮。

比如你希望學習CRF,某個課程不講,但講HMM。這兩者都是seq2seq模型,不過一個判別模型,另一個是生成模型,有很多共性的地方。如果其他方面都合適,不必為了這一個模型放棄一門課。

【親歷】筆者本人在機器學習方面的收費培訓只上過一門,就是按照上述方法一步步完成的。結果感覺相當不錯。

不僅內容大多是筆者想聽的,而且老師的風格與筆者頗為合拍——做計劃做得類似的人,想必有不少共同的特質,交流起來也比較順暢。這就是自己定製學習計劃更深層次的好處。

為了避免軟文之嫌,這個課程具體為何在此就不說了。不過,對別人合適的課程未必對自己合適。這門課我曾經推薦給幾位有興趣的朋友,有人真的買了課,但是卻聽不下去,浪費了錢。原因就是教學不相匹配。

本文的目的,並不是推薦具體的課程或者講師,而是希望大家掌握去尋找適合自己的有效培訓課程的方法。

有效學習的幾點提示

分享幾個筆者認為行之有效的日常學習Tips。

關聯

把新學到的東西和日常的工作、生活聯繫起來,進行思考。比如:將理論代入現實,不同領域間事物的類比,相似內容的對比等。

以身邊的實例來檢測理論。不僅能夠加深理論知識的理解,而且有助於改進日常事物的處理方法。

記錄

準備一個筆記本,紙的或者電子的。有什麼發現、感想、疑問、經驗等等,全都記下來。

如果是對某個話題、題目有比較完整的想法,最好能夠及時整理成文,至少記錄下要點。

隔一段時間後把筆記整理一下,把分散的點滴整理成塊,一點點填充自己的“思維地圖”。

分享

知識技能這種東西,學了,就得“得瑟”——把學習到的新知識、理論、方法,分享給更多的人。如此一來,倒逼自己整理體系、記憶要點,堪稱與人方便自己方便的最佳實例。

把自己的感想、體會、經驗分享出來也是同理,還多出了鍛鍊自己邏輯思維能力和歸納總結能力。一舉多得,何樂而不為?

定製知識速查手冊

這一點算是針對AI方面學習的專門建議吧。

AI涉及到的數學特別多。很多數學問題,之所以讓人頭大,其實並不是真的有多難,而是符號系統比較複雜,運算繁複,或者運算所表達的物理意義多樣。

很多時候造成困擾是因為想不起來這裡用到什麼定理,哪個公式,或者這樣操作表達的含義是什麼了。

如果把常用的細小知識點都記錄下來,按主題整理在一起,做成速查手冊(小字典),需要用的時候迅速查找一下對應點,效果往往意想不到地好。能讓我們的學習“機器學習”之路順暢不少。

最後,大家有什麼問題,都可以留言提問的。


分享到:


相關文章: