IT 行業發展迅速,各種新名詞此起彼伏。身處這樣一個熱點行業,學習是必須的。不打算成為終身學習者的程式員,失業就在明天。 可是,怎麼學呢? 都已經畢業了,每天要上班,不能像以前讀書的時候,整天只是學習,學什麼都有老師教,坐在那兒聽就可以了。 自己從頭看書太辛苦了,網上的文章又太碎片化——是不是報一個 ...
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,還搞明白了,學了這些東西,能用來乾什麼,最終會把它用到什麼場景中去。
有了這些,就可以確定一個知識體系(至少是其中一個結構分明的分支)。併進一步確定,對這個體系中的內容需要瞭解到什麼深度。
有了體系和深度,進而可以列舉出所需要掌握的各個知識模塊。在此基礎上,劃分學習內容。然後根據需要學習的內容制定學習計劃。
很多人在制定學習計劃的時候,會從時間出發。但是如果沒有內容,光指定時間是沒有意義的。學習計劃的最初步應該是知道要學什麼。具體步驟可以這樣來走:
-
明確知識範疇和應用目的;
-
劃定知識體系並確定深度目標;
-
填充知識模塊;
-
列舉針對具體模塊的主要知識點。
可以借鑒做作文列提綱的辦法:在勾勒出輪廓之後,先把知識結構的骨幹勾勒出來,分為篇章,列出大標題,再在其中填註小標題(知識點)。
這裡很關鍵的一點是,計劃中最細粒度的“小標題”到底有多大。
個人意見:學習一個計劃中的最小單位,如果是不脫產,僅在業餘時間學習,掌握它的時間不應該超過一周;如果是全脫產學習,最好不要超過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. LDAC. 模型的構建和驗證
a. Binary-Classification vs Multi-Classification
b. Normalization & Regularization
c. Validation & Test
d. Cross Validation Methods
e. Precesion, Recall, F1Score f. ROC, AUCD. 數據處理和向量模型空間的構建
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. word2vecF. 實踐
如上只是第一個版本,可以先依據它制定一個為期兩到三個月的學習計劃。在執行過程中,根據新的認識和具體需要可隨時調整提綱和計劃。
選擇培訓課程
本文的主題就是如何選擇技術培訓,居然前面廢了那麼多話才說到選擇培訓課程,是不是已經有朋友等不及了?
選課容易選對難
或者有的朋友覺得,選培訓課有什麼難的?現在互聯網信息這麼發達,就把培訓課當餐館電影院一樣選又有什麼不好?
大眾點評里有好多培訓機構培訓班呢,上去看看評價,看看星級,還有優惠券拿,直接選一個不就行啦。何必還要自己定製什麼學習計劃,多此一舉。
此處筆者想說的是:選擇培訓課程容易,選擇有效的培訓課程可就難了。
如果選擇了錯的培訓課程,浪費錢還是小事,浪費自己的時間才可惜。
尤其是像 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涉及到的數學特別多。很多數學問題,之所以讓人頭大,其實並不是真的有多難,而是符號系統比較複雜,運算繁複,或者運算所表達的物理意義多樣。
很多時候造成困擾是因為想不起來這裡用到什麼定理,哪個公式,或者這樣操作表達的含義是什麼了。
如果把常用的細小知識點都記錄下來,按主題整理在一起,做成速查手冊(小字典),需要用的時候迅速查找一下對應點,效果往往意想不到地好。能讓我們的學習“機器學習”之路順暢不少。
源碼免費下載地址:http://www.jinhusns.com/Products/Download