送你一篇關於如何成為一名AI算法工程師的長文

來源:Datawhale

本文約5000字,建議閱讀9分鐘。

本文和大家分享一篇成為AI算法工程師的文章,助力大家早日成為專業人士~

這是一篇關於如何成為一名 AI 算法工程師的長文~

經常有朋友私信問,如何學 python 呀,如何敲代碼呀,如何進入 AI 行業呀?

正好回頭看看自己這一年走過的路,進行一次經驗總結。

來看看你距離成為一名 AI 工程師還有多遠吧~

⭐具體內容:

  • 我是因為什麼開始接觸敲代碼
  • 人工智能/機器學習/深度學習
  • 自學如何尋找學習資料
  • 如何選擇編程語言/框架
  • 校招/社招/實習/面試經驗
  • 一碗雞湯

⭐聲明:

  • 本篇內容均屬於個人觀點,建議採納對自己有用的經驗,如有疏漏,歡迎指正,共同進步!
  • 2017 年 5 月開始第一份實習 / 2017 年 7 月開始學敲代碼 / 2017 年 11 月碩士畢業
  • 擅長的編程語言:R / Python
  • 不花錢報班,全靠自學,最初是因為窮,後來發現開源的世界真是太美好了!



送你一篇關於如何成為一名AI算法工程師的長文


我是因為什麼開始接觸敲代碼?

我的第一個模型是什麼?

由於本科是數學,研究生是量化分析,第一份實習是一家金融科技公司,開始接觸所謂的Fintech

第一個任務就是做客戶的信用評分卡模型,目的是給每個用戶打一個信用分數,類似支付寶的芝麻信用分。這是銀行標配的一個模型,最常見最傳統的算法用的就是邏輯迴歸。

在課堂上使用的工具是 SAS,SPSS,屬於有操作界面的,菜單非常齊全,只需要鼠標點一點就能建模,很好上手。但是 SAS 這些要付錢的,年費還是相當的貴,所以深圳大部分公司進行數據分析和建模工作都選擇開源免費的 R 語言或者 Python。這就體現了掌握一門編程語言的重要性。

雖然說是建模任務,但是前三個月跟建模基本都扯不上邊。都在做數據清洗,表格整理(攤手),都在 library 各種包,用的最多的可能是 data.table 和 dplyr。沒辦法,很多模型都有包可以直接調用,是最簡單的環節了。

其實一開始,我一直在犯很低級的錯誤,各種報錯,沒有 library 啦,標點符號沒打對啦,各種很 low 的錯誤犯了一次又一次,而且連報錯的內容都不會看,不知道怎麼去改正。如果你也像我一樣,真得請不要灰心,我就是這樣走過來的。對著錯誤一個個去解決就好了~

當時什麼都不知道的時候,覺得真難呀,每個環節都有那麼多細節要照顧,要學的那麼多,做完一個還有一個,還要理解業務含義。但是當完整的做一遍之後再回頭,就會覺得,其實,也沒那麼難嘛~

送你一篇關於如何成為一名AI算法工程師的長文


敲代碼容易嗎?

因為我不是計算機專業的,所以基本上屬於沒怎麼敲過代碼的那種。

後來發現程序員也有好多種類的,前端後端等,因此敲的代碼種類也很多,才會有幾十種的編程語言,下圖是一些這幾年的主流語言。

送你一篇關於如何成為一名AI算法工程師的長文


實習時我一直被隊友嫌棄很蠢,而且一開始敲的東西怎麼也運行不通,運行出來的都是鬼結果。有 n 次想放棄的念頭,“我幹嘛一定要敲這玩意兒?”,但也有 n+1 次想堅持的理由,因為我真的喜歡我正在做的事。為什麼用“堅持”,因為真的不容易。不難,但真的需要有耐心。

一開始我的狀態就是一行行代碼的運行,一個個命令的熟悉,反覆看,反覆運行。

  • 從敲出第一行代碼到敲出第一個完整的模型花了 3 個月。
  • 學習 XGBoost,光是理論學了 3 個月,因為前期鋪墊要學的還有 adaboost/gbdt 和各種機器學習的知識模塊。
  • 從 R 切換到 python 花了 1 個月。
  • 從機器學習 (Machine Learning) 切換到自動機器學習 (Auto Machine Learning) 花了 2 個月。
  • 從 NLP 零基礎到搭建一個智能問答機器人花了 1 個月。

從一年前的什麼是過擬合,什麼是交叉檢驗,損失函數有哪些到後來參加全球人工智能峰會時都能聽懂的七七八八,會覺得,努力沒有白費呀!

送你一篇關於如何成為一名AI算法工程師的長文


可以看出,經過前面的積累,後面會學的越來越快。

慢慢的就從一開始的那種唉,怎麼又報錯啊,好挫敗的心態變成現在的啊?沒 error?感覺不對啊,再查驗一遍吧這種抖 M 傾向的人。代碼虐我千百遍,我已經被磨的沒有了脾氣。

已經有幾個朋友說想轉行了,我何曾沒想過,只是不知不覺中堅持了下來而已。因為熱愛,越虐越停不下來

小結

設定一個非常清晰的目標

為什麼第一個寫:我是因為什麼開始敲代碼的,因為動機真的非常重要!

所以,很多人在問我如何學 python?這種問題時,我的第一回答都是你學 python 用來幹嘛?

在學校也敲打過 python,做個爬蟲 demo 什麼的,因為目的性不強沒多久就放一邊了。清晰的目標就比如說你要做 NLP,你要知道 NLP 的應用有智能問答、機器翻譯、搜索引擎等等。

然後如果你要做智能問答你要知道現在最發達的技術是深度學習,使用的算法有 RNN/LSTM/Seq2Seq/等等一系列。

而我的清晰目標是在實習的時候給我的任務。當任務很明確的時候,所需要的語言就明確了,所要學習的算法也就明確了,很多東西就順理成章了不用一頭亂撞了。

從金融到科技

AI 的應用範圍很廣,每一個研究方向都是無窮盡的。由於金融公司很少與圖像處理,NLP 等技術會有交集,而我強大的好奇心讓我決定去純粹的科技公司一探究竟。目前已投身於智能家居,目標是 Javis

⚡人工智能/機器學習/深度學習

我經常在公交的廣告牌上看見這些詞,好像哪家公司沒有這個技術就落後了似的。更多的還有強化學習,遷移學習,增量學習等各種學習。

這些詞兒之間到底什麼關係?

機器學習是人工智能的一種,深度學習是機器學習的一種。學 AI 先學機器學習。

送你一篇關於如何成為一名AI算法工程師的長文


計算機的算法與數學的算法的區別

理論知識對於 AI 算法工程師極其重要。敲代碼只是思路的一個實現過程。這裡的算法和計算機 CS 的算法還不太一樣,AI 算法是偏數學推導的,所以數學底子還是需要點的,學的越深,要求越高。面試的時候,很少讓手寫代碼,90% 都是在問模型摳算法細節。

在學校我是一個不愛記筆記的人,甚至是一個不愛上課的人。但是自從入了機器學習的坑後,筆記寫的飛起~


送你一篇關於如何成為一名AI算法工程師的長文


送你一篇關於如何成為一名AI算法工程師的長文



機器學習的框架

按照數據集有沒有 Y 值可以將機器學習分為監督學習、半監督學習和無監督學習。監督學習是分類算法,無監督學習是聚類算法。

送你一篇關於如何成為一名AI算法工程師的長文


機器學習的通用流程和相關技術如下圖:

送你一篇關於如何成為一名AI算法工程師的長文


ML 這棵樹還可以有更多的分支。先有個整體感受,再一個一個的解決掉。這裡的知識點也是面試最愛問的幾個,是重點呀!面試過的同學應該都不陌生了。

機器學習如何入門

機器學習之大,初學者都無從下手。說白了,機器學習就是各種模型做預測,那麼就需要有數據,要想有好的效果,就要把原始的髒數據洗乾淨了才能用。數據內隱藏的信息有時候是肉眼不可見的,那麼就需要一些相關技巧來把有用信息挖出來。所有絞盡腦汁使用的技巧,都是為了能預測的更準確。但是誰也沒辦法做到百分百的命中。

這裡簡單介紹下機器學習的三大塊:傳統的機器學習 ML、圖像處理 CV、自然語言處理 NLP。

再推薦一個入門神器:

  • Kaggle(www.kaggle.com)

這是一個世界級的最權威的機器學習比賽,已被谷歌收購。上面的賽題不僅很有代表性,還有很多免費的優秀的數據集供你使用,要知道收集數據是機器學習的第一大難題,它就幫你解決了。入門不用立馬參加比賽,把數據下載下來,盡情折騰就好了,要是沒有思路,去網上搜別人的解題筆記和代碼借鑑一下也很美好~因為這是大家都爭相打榜的比賽,所以你並不孤單。

ML 入門該參加的賽題(Titanic)

送你一篇關於如何成為一名AI算法工程師的長文


圖像入門該參加的賽題(數字識別)

送你一篇關於如何成為一名AI算法工程師的長文


NLP 入門該參加的賽題(情感分析、quora 問句語義匹配)

送你一篇關於如何成為一名AI算法工程師的長文


送你一篇關於如何成為一名AI算法工程師的長文


等做完第一個 titanic 的比賽應該就有點感覺了。上面 4 個比賽我都做過,覺得很經典,很適合入門。

深度學習的入門算法有哪些

如今的樣本輸入可以是文字,可以是圖像,可以是數字。

深度學習是跟著圖像處理火起來的。甚至現在這個概念都火過了機器學習。

深度學習的算法主要都是神經網絡系列。入門推薦 CNN(卷積神經網絡) 的一系列:

  • LeNet5
  • AlexNet
  • VGG
  • GoogleNet
  • ResNet

自學如何尋找學習資料?

開源的世界,美好的世界❤

開源,我的愛!代碼屆裡開源的中心思想就是,share and free

對於機器學習,網上的社區氛圍特別好,分享的很多很全面,而且 MLer 都非常樂於助人。

介紹幾個我經常逛的社區,論壇,和網頁:

kaggle(www.kaggle.com)

全球最權威的機器學習比賽,已被谷歌收購。賽題覆蓋傳統機器學習、NLP、圖像處理等,而且都是很實際的問題,來自各行各業。kaggle 是數一數二完善的 ML 社區了,賽題開放的數據集就很有用,非常適合新手練手。對優秀的 kaggler 也提供工作機會。

github(www.github.com)

全球最大同性交友網站,適合搜項目,開源大社區,大家一起看星星,看 issue~

StackOverFlow(www.stackoverflow.com)

代碼報錯找它,代碼不會敲找它!所有與代碼相關的坑,基本都有人踩過啦

csdn(www.csdn.net)

最接地氣的博客聚集地,最常看的網頁之一,一般用來搜索細節知識點或者代碼報錯時

sklearn(scikit-learn.org/stable)

專業做機器學習 100 年!各算法各技巧的例子 code 應有盡有

medium(medium.com)

創辦人是 Twitter 的創始人,推崇優質內容,國內很多 AI 公眾大號的搬運都來自於這裡,medium 裡每個作者都有自己獨特的見解,值得學習和開拓眼界,需要科學上網

towards data science(towardsdatascience.com)

與 medium 很像,需要科學上網

google AI blog(ai.googleblog.com)

谷歌的 AI 團隊維護的博客,每天至少更新一篇技術博客。剛在上海開的谷歌開發者大會宣佈將會免費開放機器學習課程,值得關注一下,畢竟是 AI 巨頭

各種大神的技術博客/個人網站

有很多的網站,會不定期的更新在我的個人博客裡

有口碑的 AI 公開課平臺

首先說明我沒有上課,也沒有報班,屬於個人學習習慣問題。但考慮到學習差異性,所以還是總結了口碑排名靠前的課程系列。前提,需要有一定數學基礎,沒有的可以順便補一補。

coursera(www.coursera.org/browse)

吳恩達 (Andrew Ng) 機器學習

deeplearning.ai(www.deeplearning.ai)

fast.ai(www.fast.ai)

專注於深度學習。Fast.ai 的創始人就蠻有意思的,是橫掃 kaggle 圖像處理的高手,不擺架子,也不故弄玄虛。中心思想就是深度學習很簡單,不要怕。fast.ai 有博客和社區。Jeremy 和 Rachel 鼓勵撰寫博客,構建項目,在會議中進行討論等活動,以實力來代替傳統證書的證明作用。

udacity(in.udacity.com)

有中文版,課程覆蓋編程基礎,機器學習,深度學習等。

網易雲課堂

碎片時間

科技圈也是有潮流要趕的,等你入坑就知道。

追最新的論文,最新的算法,最新的比賽,以及 AI 圈的網紅是哪些~有條件的開個 twitter,平時娛樂看看機器學習板塊還是蠻有意思的,有很多自嘲的漫畫~

推薦幾個我超愛看的 AI 主題美劇

硅谷(強推!簡直是我日常生活,太有共鳴了~下飯劇)

西部世界(看的時候不要學我一直在思考如何實現這個那個技術)

實用的小技巧

瀏覽器首推 chrome

當閱讀英文網頁呼吸困難時,右擊選擇翻成中文(簡體)

考過雅思和 GMAT,曾經我也是一個熱愛英文的孩子,如今跪倒在海量技術文檔和文獻裡苟活

搜索問題一定用 google,如果沒解決是你的問題不是 google 的鍋

baidu???ummm...... 別為難我...... 很少用

學會提問很重要,搜索格式推薦

語言+問題,例如:python how to convert a list to a dataframe

直接複製錯誤信息,例如:ValueError: No variables to save...

請把所有的問題往上拋,網上查比問人快!總是問別人會引起關係破裂的~

學會順藤摸瓜

當你讀到一個非常不錯的技術文檔時,看完別急著關掉。這可能是一個個人網站,去觀察菜單欄裡有沒有【About】選項。或者這也可能是一個優秀的社區,看看有沒有【Home】選項,去看看 po 的其它的文章。

很多優秀網站都是英文,科學上網必不可少

學習費用不來自課程,可能來自於硬件要求,學生黨要利用好學校資源

小結

雖然說了那麼多,但還是要說請放棄海量資料!用多少,找多少就好了!(別把這句話當耳旁風)

資料不在量多而在於內容是有質量保證的。很多課程或者公眾號只管塞知識,你有疑問它也解答不了的時候,這樣出來的效果不好,就像一個模型只管訓練,卻不驗證,就是耍流氓。

如何選擇編程語言/框架

首選英語!!!(咳咳,我認真的)

說到底,語言只是工具,不去盲目的追求任何一種技術。根據任務來選擇語言,不一樣的程序員選擇不一樣的編程語言。很多人最後不是把重點放在能力而是炫工具,那就有點走偏了。

據觀察,在機器學習組裡 R 和 Python 是使用率最高的兩門語言,一般你哪個用的順就用哪個,只要能達到效果就行,除非強制規定。

我使用之後的感受是,人生苦短,我用 python

用 python 建個模型到底多難?

算法任務大致分為兩種,一種是普通算法工程師做的調包、調參,另一種是高級算法工程師做的,可以自己創建一個算法或者能靈活修改別人的算法。

先說說建個模到底有多簡單吧。

有優秀的算法封裝框架

tensorflow / caffe / keras /...

Auto ML 是不可阻擋的一個方向

Auto ML(auto machine learning),自動機器學習。就是你只管丟進去數據,坐等跑出結果來就行了。前一陣子谷歌的 CloudML 炒的很火,願景是讓每個人都能建模,但畢竟這種服務是要錢的。所以我研究了下開源的 auto sklearn 框架的代碼,發現了什麼呢?建模到底有多簡單呢?就,簡單到 4 行代碼就可能打敗 10 年工作經驗的建模師。

再說回來,如果你自己根本不知道自己在做什麼,只能跑出來一個你不能負責的結果,就是很糟糕的,那還不是一個合格的算法工程師。你的模型必須像你親生的那樣。但是,只要你想,絕對能做到的!

學習 python 電腦上要裝哪些東西

Anaconda

對,就是這麼簡單粗暴,裝這個就 ok 了

學 python 的應該都會面臨到底是 python2 還是 python3 的抉擇吧。語言版本和環境真的很讓人頭疼,但是 Anaconda 驚豔到我了,就是可以自定義 python 環境,你可以左手 py2 右手 py3

推薦幾個 python 的 IDE

Spyder

Anaconda 自帶的IDE。界面排版與 Rstudio 和 Matlab 很相似。輸入什麼就輸出什麼結果,適合分析工作,我寫小功能的時候很喜歡用。

Jupyter Notebook

Anaconda 自帶的IDE,屬於 web 界面的。當你程序跑在虛擬機,想調代碼的時候適合用。

PyCharm

對於寫項目的,或者代碼走讀的比較友好。當你需要寫好多 python 文件互相 import 時,特別好用。

我的筆記本配置

(不考慮經濟約束的請忽略這條)

牌子+型號:ThinkPad X1 Carbon

推薦配置:i7+16G 內存+256G(或更多) 硬盤

系統推薦:Linux,因為開源,有空可以玩玩

校招/社招/實習/面試經驗

如何安排校招

大廠的開放時間會比較早,密切關注網申時間節點:

  • 2019 屆的秋招:2019 年 7 月 - 2019 年 11 月
  • 2020 屆的春招:2020 年 2 月 - 2020 年 4 月
  • 2020 屆的暑期實習:2020 年 3 月 - 2020 年 5 月
  • 2020 屆的秋招:2020 年 7 月 - 2020 年 11 月
  • (以此類推)

手撕代碼能力

建議提早半年開始準備。我的代碼也是從實習開始敲起,敲了半年才覺得下手如有神哈哈。不要做沒實際意義的課後題,也不要照著書本例題敲,敲完你就忘了,書本這些都是已經排除萬難的東西,得不到什麼成長。

入門修煉:全國大學生數學建模競賽、全美大學生數學建模競賽、kaggle、天池…

項目經歷/實習經歷

如果明確自己的職業方向為人工智能/數據挖掘類的,請不要浪費時間去申請其他與技術無關的實習。端茶送水,外賣跑腿,打印紙並不能幫你。當時由於身邊同學都斷斷續續出去實習,面前有一份大廠行政的實習,我…竟然猶豫了一下,好在也還是拒絕了。

儘量選擇大廠的技術實習,畢竟以後想進去會更難。但是不要因為一個月拿 3000 塊就只幹 3000 塊的活。把整個項目跟下來,瞭解框架的架構,優化的方向,多去嘗試,就算加班(加班在深圳很正常)也是你賺到,思考如何簡化重複性工作,去嘗試瞭解自己部門和其他部門的工作內容與方向,瞭解的越多你對自己想做的事情瞭解的也越多。

我實習做的評分卡模型,除了傳統邏輯迴歸,也嘗試新的 XGB 等等,而且雖然別人也在做,但是私下自己會把整個模型寫一遍,包含數據清洗和模型調優等,這樣對業務的瞭解也更透徹,面試起來所有的細節都是親手做過的,也就比較順了。

如果沒有實習在手,世界給我們數據挖掘選手的大門還是敞開著的。kaggle 上有專門給數據挖掘入門者的練習場。相關的比賽還有很多,包括騰訊、阿里等大廠也時不時會發布算法大賽,目測這樣的算法大賽只會越來越多,你堅持做完一個項目,你在平臺上還可以得到相關名次,名次越靠前越有利哈哈哈這是廢話。

BAT 常見的面試題(不分先後)

  • 自我介紹/項目介紹
  • 類別不均衡如何處理
  • 數據標準化有哪些方法/正則化如何實現/onehot 原理
  • 為什麼 XGB 比 GBDT 好
  • 數據清洗的方法有哪些/數據清洗步驟
  • 缺失值填充方式有哪些
  • 變量篩選有哪些方法
  • 信息增益的計算公式
  • 樣本量很少情況下如何建模
  • 交叉檢驗的實現
  • 決策樹如何剪枝
  • WOE/IV 值計算公式
  • 分箱有哪些方法/分箱原理是什麼
  • 手推 SVM:目標函數,計算邏輯,公式都寫出來,平面與非平面
  • 核函數有哪些
  • XGB 原理介紹/參數介紹/決策樹原理介紹/決策樹的優點
  • Linux/C/Java 熟悉程度
  • 過擬合如何解決
  • 平時通過什麼渠道學習機器學習(好問題值得好好準備)
  • 決策樹先剪枝還是後剪枝好
  • 損失函數有哪些
  • 偏向做數據挖掘還是算法研究(好問題)
  • bagging 與 boosting 的區別
  • 模型評估指標有哪些
  • 解釋模型複雜度/模型複雜度與什麼有關
  • 說出一個聚類算法
  • ROC 計算邏輯
  • 如何判斷一個模型中的變量太多
  • 決策樹與其他模型的損失函數、複雜度的比較
  • 決策樹能否有非數值型變量
  • 決策樹與神經網絡的區別與優缺點對比
  • 數據結構有哪些
  • model ensembling 的方法有哪些

小結

問題是散的,知識是有關聯的,學習的時候要從大框架學到小細節。

沒事多逛逛招聘網站看看招聘需求,瞭解市場的需求到底是什麼樣的。時代變化很快,捕捉信息的能力要鍛煉出來。你可以關注的點有:職業名/職業方向/需要會什麼編程語言/需要會什麼算法/薪資/...

每個面試的結尾,面試官會問你有沒有什麼想問的,請注意這個問題也很關鍵。

比如:這個小組目前在做什麼項目/實現項目主要用什麼語言和算法/…

儘量不要問加不加班,有沒有加班費之類的,別問我為什麼這麼說(攤手)

在面試中遇到不理解的,比如 C++語法不懂,可以問這個 C++具體在項目中實現什麼功能。如果你提出好問題,能再次引起面試官對你的興趣,那就能增加面試成功率。

應屆生就好好準備校招,別懶,別怕輸,別怕被拒,從哪裡跌倒從哪裡起來。社招不是你能招呼的,會更挫敗,因為你什麼也沒做過。

雖然是做技術的,但是日常 social 一下還是收益很大的。實習的時候,也要與周圍同事和平相處,尤其是老大哥們,也許哪天他就幫你內推大廠去了。內推你能知道意想不到的信息,面試官,崗位需求,最近在做什麼項目之類的。

挑選給你機會的公司,不要浪費自己的時間。不要每家都去,去之前瞭解這家公司與你的匹配度。

尤其社招,你一改動簡歷就很多人給你打電話,你要有策略的去進行面試,把握總結每個機會。像我就是東一榔頭西一榔頭的,好多都是止步於第一面,就沒回信兒了,因為每次面完沒有好好反思總結,等下次再遇到這問題還是抓瞎,十分消耗自己的時間和信心。

一碗雞湯

一切才剛剛開始,彆著急

AI 才剛剛起步,為什麼呢?因為上數學課的時候,課本上都是柯西、牛頓、高斯等等,感覺他們活在遙遠的時代,很有陌生感。但是現在,我每天用的模型是比我沒大幾歲的陳天奇創造出來的,我甚至 follow 他的社交賬號,他就鮮活在我的世界裡,這種感覺,很奇妙。

每次查論文查文獻的時候,看 2017 年出來的都覺得晚了,懊悔自己怎麼學的這麼慢,看 2018 年 2 月出來的才心裡有點安慰。這個證明,你在時代發展的浪潮上,也是一切剛剛起步的證明。機遇與挑戰並肩出現的時候,是你離創造歷史最近的時候。而所謂的風口所謂的浪尖都不重要,重要的是,因為你喜歡。

找一件可以堅持的事,不要停止去尋找的腳步

當人做喜歡的事情時,會發光呀!

當你因為真的熱愛某件事,而不斷接近它的時候,你的靈魂像是被上帝指點了迷津,受到了指示,受到了召喚。你會很自然的知道該做什麼,你想做什麼,好像生而為了這件事而來。你有時候自己都想不明白為什麼做這件事。看過月亮與六便士的應該懂這種使命感~

送你一篇關於如何成為一名AI算法工程師的長文


我不是屬於聰明的那類人,我是屬於比較倔的那種。就是隻要我認定的,我認定到底。天知道我有多少次懷疑過自己,有多少次想放棄,但我還是選擇咬牙向前,選擇相信自己。堅持的意義就在這裡。


編輯:王菁

校對:譚佳瑤

— 完 —

關注清華-青島數據科學研究院官方微信公眾平臺“THU數據派”及姊妹號“數據派THU”獲取更多講座福利及優質內容。

相關推薦

推薦中...