普通程序员,几个月如何成功转型AI?
動輒50萬的畢業生年薪,動輒100萬起步價的海歸AI高級人才,普通員到底應不應該轉型AI工程師,普通程序員到底應該如何轉型AI工程師?
?
以下,精選了三個特別典型的普通程序員成功轉型AI的案例,也是知乎上點贊量相當高的案例:
?
第一案例為普通程序員,經過六個月從接觸機器學習到頗有心得的切身體會。
?
第二個案例為只懂 ACM 競賽相關算法的普通程序員,誤打誤撞接觸到了數據挖掘,之后開始系統地了解機器學習相關的知識,如今已經基本走上了數據科學家之路的經驗分享。
?
第三個案例為其他行業的普通程序員,具有計算機專業的人所沒有的專業知識和行業大數據,他們只是想把深度學習和神經網絡當作工具,知道它們能做什么,如何去做。這類程序員經過4個月的轉型學習,他們的經驗和體會。
?
你是屬于哪類程序員呢?他們的經驗你又是否能用上呢?
?
本文的案例來自知乎,已向相關作者申請轉載來源。
?
?
案例一
?
作者 | 子實(某科研院程序員)
?
?
本人碼農,從六月開始正式接觸機器學習(其實五年前的本科畢設就是在生物信息領域應用神經網絡的項目,但是非常淺薄),深吸一口氣,先要聲明“人之患在好為人師”,我用的步驟只是適合我,下面的內容僅供參考。
?
第一步:復習線性代數。(學渣的線代忘了好多-_-||)
?
懶得看書就直接用了著名的——麻省理工公開課:線性代數,深入淺出效果拔群,以后會用到的SVD、希爾伯特空間等都有介紹 -?http://open.163.com/special/opencourse/daishu.html
?
廣告:邊看邊總結了一套筆記?GitHub - zlotus/notes-linear-algebra: 線性代數筆記 -?https://github.com/zlotus/notes-linear-algebra
?
第二步:入門機器學習算法。
?
還是因為比較懶,也就直接用了著名的——斯坦福大學公開課 :機器學習課程(http://open.163.com/special/opencourse/machinelearning.html),吳恩達教授的老版cs229的視頻,講的非常細(算法的目標->數學推演->偽代碼)。這套教程唯一的缺點在于沒有介紹最近大火的神經網絡,但其實這也算是優點,讓我明白了算法都有各自的應用領域,并不是所有問題都需要用神經網絡來解決。
?
多說一點,這個課程里詳細介紹的內容有:一般線性模型、高斯系列模型、SVM理論及實現、聚類算法以及EM算法的各種相關應用、PCA/ICA、學習理論、馬爾可夫系列模型。課堂筆記在:CS 229: Machine Learning (Course handouts) -http://cs229.stanford.edu/syllabus.html,同樣非常詳細。
?
廣告:邊看邊總結了一套筆記?GitHub - zlotus/notes-LSJU-machine-learning: 機器學習筆記 -?https://github.com/zlotus/notes-LSJU-machine-learning
?
第三步:嘗試用代碼實現算法。
?
依然因為比較懶,繼續直接使用了著名的——機器學習 | Coursera(https://www.coursera.org/learn/machine-learning),還是吳恩達教授的課程,只不過這個是極簡版的cs229,幾乎就是教怎么在matlab里快速實現一個模型(這套教程里有神經網絡基本概念及實現)。這套課程的缺點是難度比較低,推導過程非常簡略,但是這也是它的優點——讓我專注于把理論轉化成代碼。
?
廣告:作業參考?GitHub - zlotus/Coursera_Machine_Learning_Exercises: Machine Learning by Andrew Ng from Coursera(https://github.com/zlotus/Coursera_Machine_Learning_Exercises)
?
第四步:自己實現功能完整的模型——進行中。
?
還是因為比較懶,搜到了cs231n的課程視頻?CS231n Winter 2016 - YouTube(https://www.youtube.com/playlist?list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC)?,李飛飛教授的課,主講還有Andrej Karpathy和Justin Johnson,主要介紹卷積神經網絡在圖像識別/機器視覺領域的應用(前面神經網絡的代碼沒寫夠?這門課包你嗨到爆~到處都是從零手寫~)。這門課程的作業就更貼心了,直接用Jupyter Notebook布置的,可以本地運行并自己檢查錯誤。主要使用Python以及Python系列的科學計算庫(Scipy/Numpy/Matplotlib)。課堂筆記的翻譯可以參考?智能單元 - 知乎專欄(https://zhuanlan.zhihu.com/p/22339097),主要由知友杜客翻譯,寫的非常好~
?
在多說一點,這門課對程序員來說比較走心,因為這個不像上一步中用matlab實現的作業那樣偏向算法和模型,這門課用Python實現的模型同時注重軟件工程,包括常見的封裝layer的forward/backward、自定義組合layer、如何將layer組成網絡、如何在網絡中集成batch-normalization及dropout等功能、如何在復雜模型下做梯度檢查等等;最后一個作業中還有手動實現RNN及其基友LSTM、編寫有助于調試的CNN可視化功能、Google的DeepDream等等。(做完作業基本就可以看懂現在流行的各種圖片風格變換程序了,如?cysmith/neural-style-tf -?https://github.com/cysmith/neural-style-tf)另外,這門課的作業實現非常推崇computational graph,不知道是不是我的幻覺……要注意的是講師A.K的語速奇快無比,好在YouTube有自動生成解說詞的功能,準確率還不錯,可以當字幕看。
?
廣告:作業參考?GitHub - zlotus/cs231n: CS231n Convolutional Neural Networks for Visual Recognition (winter 2016) -?https://github.com/zlotus/cs231n,(我的在作業的notebook上加了一些推導演算哦~可以用來參考:D)
?
因為最近手頭有論文要撕,時間比較緊,第四步做完就先告一段落。后面打算做繼續業界傳奇Geoffrey Hinton教授的Neural Networks for Machine Learning | Coursera(https://www.coursera.org/learn/neural-networks),再看看NLP的課程 Stanford University CS224d: Deep Learning for Natural Language Processing(http://cs224d.stanford.edu),先把基礎補完,然后在東瞅瞅西逛逛看看有什么好玩的……
?
PS:一直沒提諸如TensorFlow之類的神器,早就裝了一個(可以直接在conda中為Tensorflow新建一個env,然后再裝上Jupyter、sklearn等常用的庫,把這些在學習和實踐ML時所用到的庫都放在一個環境下管理,會方便很多),然而一直沒時間學習使用,還是打算先忍著把基礎部分看完,抖M總是喜歡把最好的留在最后一個人偷偷享受2333333(手動奸笑
PS**2:關于用到的系統性知識,主要有:
?
線性代數,非常重要,模型計算全靠它~一定要復習扎實,如果平常不用可能忘的比較多;
?
高數+概率,這倆只要掌握基礎就行了,比如積分和求導、各種分布、參數估計等等。(評論中有知友提到概率與數理統計的重要性,我舉四肢贊成,因為cs229中幾乎所有算法的推演都是從參數估計及其在概率模型中的意義起手的,參數的更新規則具有概率上的可解釋性。對于算法的設計和改進工作,概統是核心課程,沒有之一。答主這里想要說的是,當拿到現成的算法時,僅需要概率基礎知識就能看懂,然后需要比較多的線代知識才能讓模型高效的跑起來。比如最近做卷積的作業, 我手寫的比作業里給出的帶各種trick的fast函數慢幾個數量級,作業還安慰我不要在意效率,豈可修!)
?
需要用到的編程知識也就是Matlab和Numpy了吧,Matlab是可以現學現賣的;至于Python,就看題主想用來做什么了,如果就是用來做機器學習,完全可以一天入門,如果想要做更多好玩的事,一天不行那就兩天。(貼一個Python/Numpy的簡要教程:Python Numpy Tutorial -?http://cs231n.github.io/python-numpy-tutorial/,是cs231n的課堂福利。)
?
我感覺機器學習的先修就這么點,記得Adobe的馮東大神也說過機器學習簡直是21世界的黑科技——因為理論非常簡單但是效果驚人的好。
====
既然提到好玩的,墻裂推薦 Kaggle: Your Home for Data Science(https://www.kaggle.com)?,引用維基上的介紹:
?
Kaggle是一個數據建模和數據分析競賽平臺。企業和研究者可在其上發布數據,統計學者和數據挖掘專家可在其上進行競賽以產生最好的模型。這一眾包模式依賴于這一事實,即有眾多策略可以用于解決幾乎所有預測建模的問題,而研究者不可能在一開始就了解什么方法對于特定問題是最為有效的。Kaggle的目標則是試圖通過眾包的形式來解決這一難題,進而使數據科學成為一場運動。
?
原文:https://www.zhihu.com/question/51039416/answer/126821822
?
?
案例二
?
作者 | SimonS
?
?
我曾經也只是一個只懂 ACM 競賽相關算法的普通程序員,誤打誤撞接觸到了數據挖掘,之后才開始系統地了解機器學習相關的知識,如今已經基本走上了正軌,開始了走向 Data Scientist 的征途。
?
首先作為一個普通程序員,C++ / Java / Python 這樣的語言技能棧應該是必不可少的,其中 Python 需要重點關注爬蟲、數值計算、數據可視化方面的應用,主要是:
?
?
?
?
可以參考:怎么用最短時間高效而踏實地學習 Python?-https://www.zhihu.com/question/28530832/answer/41170900
?
如果日常只編寫增刪改查的代碼的話,那可能數學已經忘得差不多了,需要重溫線性代數和微積分的基礎知識,這會為之后的學習立下汗馬功勞。
?
再然后就是統計學相關基礎:我在知乎專欄——BI學習大綱中寫過,貼過來僅供參考:https://zhuanlan.zhihu.com/p/22543073
?
相關性分析(相關系數r、皮爾遜相關系數、余弦相似度、互信息)
?
-
回歸分析(線性回歸、L1/L2正則、PCA/LDA降維)
-
聚類分析(K-Means)
-
分布(正態分布、t分布、密度函數)
-
指標(協方差、ROC曲線、AUC、變異系數、F1-Score)
-
顯著性檢驗(t檢驗、z檢驗、卡方檢驗)
-
A/B測試
?
推薦閱讀:李航 —《統計學習方法》
?
如果以上知識都具備了,再往后的路就可以開得很快了,可以一直沖刺到 Deep Learning。但在這之前我們還是需要了解不少機器學習的基礎:
?
-
關聯規則(Apriori、FP-Growth)
-
回歸(Linear Regression、Logistics Regression)
-
決策樹(ID3、C4.5、CART、GBDT、RandomForest)
-
SVM(各種核函數)
-
推薦(User-CF、Item-CF)
?
推薦閱讀:《集體智慧編程》、Andrew Ng — Machine Learning Coursera from Stanford
此時的你或許已經有一塊可以用的敲門磚了,但離工業界實際應用還有比較大的距離,主要差距就在于 Feature Engineering,這也是我在面試考察有經驗的人面前比較注重的點。這一塊中有一些比較基礎的知識點,簡單羅列如下:
?
-
可用性評估:獲取難度、覆蓋率、準確率
-
特征清洗:清洗異常樣本
-
采樣:數據不均衡、樣本權重
-
單個特征:無量綱化(標準化、歸一化)、二值化、離散化、缺失值(均值)、啞編碼(一個定性特征擴展為N個定量特征)
-
數據變換:log、指數、Box-Cox
-
降維:主成分分析PCA、線性判別分析LDA、SVD分解
-
特征選擇:Filter(相關系數、卡方檢驗)、Wrapper(AUC、設計評價函數A*、Embedded(L1-Lasso、L2-Ridge、決策樹、DL)
-
衍生變量:組合特征
-
特征監控:監控重要特征,fa特征質量下降
?
我放一張公司內部算法培訓關于特征工程的 PPT,僅供學習參考:
再往后你就可以在技能樹上點幾個酷炫的了:
-
提升
-
Adaboost
-
加法模型
-
xgboost
-
-
SVM
-
軟間隔
-
損失函數
-
核函數
-
SMO算法
-
libSVM
-
-
聚類
-
K-Means
-
并查集
-
K-Medoids
-
聚譜類SC
-
-
EM算法
-
Jensen不等式
-
混合高斯分布
-
pLSA
-
-
主題模型
-
共軛先驗分布
-
貝葉斯
-
停止詞和高頻詞
-
TF-IDF
-
-
詞向量
-
word2vec
-
n-gram
-
-
HMM
-
前向/后向算法
-
Baum-Welch
-
Viterbi
-
中文分詞
-
-
數據計算平臺
-
Spark
-
Caffe
-
Tensorflow
-
?
推薦閱讀:周志華——《機器學習》
?
可以看到,不管你是用 TensorFlow 還是用 Caffe 還是用 MXNET 等等一系列平臺來做高大上的 Deep Learning,在我看來都是次要的。想要在這個行業長久地活下去,內功的修煉要比外功重要得多,不然會活得很累,也很難獲得一個優秀的晉升空間。
?
最后,關注你所在行業的最新 paper,對最近的算法理論體系發展有一個大致印象,譬如計算廣告領域的幾大經典問題:
?
相關 paper 的 gitlist 僅供參考:wnzhang/rtb-papers -?https://github.com/wnzhang/rtb-papers
?
最最后,也要時刻關注能幫你偷懶的工具,它將讓你擁有更多的時間去調參: Python 網頁爬蟲 & 文本處理 & 科學計算 & 機器學習 & 數據挖掘兵器譜 - Python - 伯樂在線 -?http://python.jobbole.com/81153/
?
原文鏈接:https://www.zhihu.com/question/51039416/answer/126821822
?
?
案例三
?
作者 | hahakity
?
說說我學習深度學習的經歷吧,從開始學習到現在大概有4個月,剛好可以回答新手問題。
?
先說編程:自認會用C++, 熟悉Python
?
英語水平:中等,能很快讀懂英文科學文獻
?
最開始對人工智能/深度學習感興趣是因為想用它試一試自然語言生成,后來想到一個物理方面的題目,預計可以用深度學習技術解決,開始接觸深度神經網絡。記錄一下學習歷程,
?
1. 安裝 Tensorflow(google 開源的深度學習程序), 嘗試里面最簡單的例子MNIST 獲得激勵。
?
2. 之后嘗試通過讀書(看視頻)理解最簡單的全連接神經網絡
?
先搜索找到答案:為什么要Go Deep?
?
(1) 神經網絡中輸入層,隱藏層,輸出層之間矩陣乘積的維度變化。
?
(2) Weight, Bias 這些是什么,改變它們有什么結果。
?
(3) 激勵函數是什么,有什么作用,有哪些常用的激勵函數
?
(4)誤差如何向后傳遞,網絡如何通過最小化誤差函數更新,有哪些常用的優化方法
?
以上這些在一本交互式電子書中可以找到答案:
Neural networks and deep learning
https://link.zhihu.com/?target=http%3A//neuralnetworksanddeeplearning.com/index.html
?
(5) 如何對權重正規化,L1, L2, BatchNormalization, (這些在以后真正應用的時候再看)
?
-
Deep Learning chapter 7 for L1, L2 regulation.
-
http://www.deeplearningbook.org
-
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (2015) original paper for BN
-
https://arxiv.org/abs/1502.03167
-
why does batch normalization help? Quora
-
https://www.quora.com/Why-does-batch-normalization-help
-
Note for BN in Chinese
-
http://blog.csdn.net/happynear/article/details/44238541
-
Implementing Batch Normalization in Tensorflow from R2RT
-
https://r2rt.com/implementing-batch-normalization-in-tensorflow.html
-
Layer normalization (2016) Replace Batch Normalization in RNN
-
https://arxiv.org/pdf/1607.06450v1.pdf
-
Why Does Unsupervised Pre-training Help Deep Learning?
-
http://www.jmlr.org/papers/volume11/erhan10a/erhan10a.pdf
-
Summary and discussion on pre training
-
http://www.stat.cmu.edu/~ryantibs/journalclub/deep.pdf
?
3. 選擇一種比較比較底層的神經網絡開源庫,tensorflow 或 theano
?
(1) 讀官方文檔 https://www.tensorflow.org/versions/r0.11/tutorials/index.html
https://www.tensorflow.org/tutorials/
(2) 看周莫凡的網絡教程 https://www.youtube.com/user/MorvanZhou
https://www.youtube.com/user/MorvanZhou
(3) 重復敲代碼,重復實現例子程序
?
4. 開始理解各種不同神經網絡架構所能處理的問題
?
CNN 圖像識別,圖像處理,語音處理
RNN,LSTM 自然語言理解與生成
增強學習,玩游戲?
?
5. 嘗試各種開源的有意思的神經網絡項目,新手可以從下面這個列表開始
?
Andrej Karpathy blog char-rnn, Deep Reinforcement Learning: Pong from Pixels- http://karpathy.github.io
Neural Style In tensorflow -?https://github.com/anishathalye/neural-style
?
6. 如果能翻墻,注冊 twitter, facebook 賬號,follow 那些文章中經常出現的大牛的名字。他們每天提供很多新動向及最新技術,很多時候有很 Fancy的應用。試試從這個大牛follow的人開始follow -?https://twitter.com/karpathy
?
當你對這些都很熟悉的時候,開始閱讀艱深的文獻:
?
1. CNN 的原始文獻
2. RNN 和 LSTM 的原始文獻
3. Reinforcement Learning 的原始文獻
4. Google DeepMind 發表在 Nature 上的幾篇經典
?
最后推薦一個高級點的庫: Keras Documentation -?https://keras.io
?
雖然這個庫還在發展階段,里面仍有不少bug,但前途不可限量,可以很容易實現你之前讀文章時候見到的那些復雜的構架。作為例子,這里有個教程:
?
Deep learning book in ipython-notebook and Keras Many example code in Keras -?http://ml4a.github.io/guides/
?
這些學習歷程中遇到的資料都記錄在了我的個人note里,希望大家共勉:
http://web-docs.gsi.de/~lpang/ -?http://web-docs.gsi.de/~lpang/
?
最后強調一個最最重要的事情:要有自己的想法,有將這種新技術用到自己項目中的強烈愿望,從開始就要Coding,不斷嘗試才能不斷進步。
?
(看了很多其他的回答,在這里想補充一段)
?
說實話,作為一個其他行業(物理,工程,化學,醫學,農業,衛星地圖識別,網絡安全領域,社會科學)的普通程序員,在本行業有比較深的理論和實驗背景,能接觸到海量數據(無論是傳感器數據,互聯網數據還是蒙特卡洛模擬數據),想做處一些創新性,交叉性的工作,這一輪人工智能的風絕對是要跟的。
?
作為一個計算機專業的人,可能覺得機器學習,人工智能,深度學習已經炒的過熱了。但是對于其他領域,可能大部分人還沒有想到把最基本的機器學習算法如:PCA,SVM,k-means...運用到本行業積累的大數據上, 更不要說最近的深度學習。
?
作為其他行業的普通程序員(除了數學與理論物理),我們不要指望從理論上徹底解決深度學習現存的問題。我們的優勢不在這里,我們的優勢是計算機專業的人所沒有的專業知識,行業大數據。我們需要做的是把機器學習,深度神經網絡當作工具,知道它們能做什么,如何去做。參考Andrew Ng 的機器學習筆記:Machine Learning - complete course notes -?http://www.holehouse.org/mlclass/
?
舉幾個簡單的例子:
?
1. 使用深度學習中生成風格化圖片的技術,制備具有特定功能的抗癌藥物
The cornucopia of meaningful leads: Applying deep adversarial autoencoders for new molecule development in oncology -?http://www.oncotarget.com/index.php?journal=oncotarget&page=article&op=view&path%5B%5D=14073&path%5B%5D=44886
?
2. 使用反常探測,尋找網絡攻擊 Cyber-attacks prediction
?
3. 對于國家來說,更加聰明的互聯網關鍵詞過濾
?
4. 自動探測衛星地圖上道路,建筑,車輛,河流。
?
5. 環境科學中尋找霧霾與眾多可能因素的非線性關聯
?
安利我們最近放到預印文本庫的文章,
?
我們用卷積神經網絡來區分量子色動力學相變是crossover還是一階相變。
?
?
?
paper:?https://arxiv.org/pdf/1612.04262.pdf
talk:?http://starmeetings.physics.ucla.edu/sites/default/files/pang.pdf
?
原文:https://www.zhihu.com/question/51039416/answer/126717678
總結
以上是生活随笔為你收集整理的普通程序员,几个月如何成功转型AI?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批评“古风”歌词“狗屁不通”就是不尊重?
- 下一篇: 计算机视觉行业迎来大发展,多角度解读未来