天天看點

我是如何五個月從小白到AI工程師?

本文轉自BitTiger,原作者Yumi,位址http://blog.bittiger.io/post155/

轉載謹作備份和分享。侵權删。

-

Chris

BitTiger AI工程師直通車學員

EE大學,EE研究所學生,圖像背景,SLAM和醫療圖像實習;剛入職一家馬裡蘭醫療圖像公司,職位是Computer Vision Engineer。

“我整個準備時間超過五個月,不知道有多少天的突擊學習,看書,程式設計,配置環境,不禁覺着如果能一直堅持下去總會有收獲。很多時候多堅持一會就能找到工作了。各位共勉。”

我們來看Chris為大家分享他找AI全職工作(視覺方向)的經曆和經驗。

在所有事情開始之前,要把相關的環境設定好。首先你要有OpenCV(對于視覺工程師方向),至少一個深度學習架構(TensorFlow, Kaffe, Keras等,新手推薦用Keras),Ubuntu。還要掌握C++, Python, 和基本的機器學習知識。

C++在AI類工作中有怎樣的重要性?

C++對于你找AI視覺方向的工作是比較重要的。以下幾個工作Title是要求你必須會C++的:

  • AI Engineer / Computer Vision Engineer / Self-driving Car Engineer / Image Processing Engineer / SLAM Engineer
  • GPGPU Engineer

而這四類工作Title并不要求你一定會C++:

* Data Scientist(Python, R etc.)

* Deep Learning Scientist

* NLP engineer (Python)

* Machine Learning Engineer (Pyhton, Java)

如何準備C++?

C++11中最重要的是Smart pointer,很容易考到。其次還有STL(vector, map etc.) 添加,删除,排序。類也會考察,類裡有很多字首字尾,如const, static, override, virtual,pure virtual等,這些需要清楚地記得。

然後說到刷題,LeetCode上Easy和Medium的題,起碼要刷三百道。最好是能一邊上現成的算法課,一邊用C++刷題練習。

關于用到的資料,向大家推薦一本C++的書:Effective C++。這本書比較薄,三天内就能看完,可以不用看得太細,它對程式設計風格的講解是比較值得一看的。比如你可以了解到面對過程的程式設計風格和面向對象的程式設計風格。

最後給大家推薦一個YouTube播主:Cppnuts。他把C++的每個知識點總結成三到五分鐘的視訊,講得很不錯,大家可以關注。

找AI視覺方向的工作,你需要哪些必要的圖像知識?

特征點: Harris角點檢測,SIFT,SURF,ORB。例如,面試官可能會問你:在SLAM系統中,我們為什麼要用ORB,而不用SIFT和SURF?答案是因為ORB比SIFT和SURF快,并且精度也不錯。

描述子和比對,FLANN算法

相機模型:相機内參,外參數,相機标定。這部分其實是3D的概念,是視覺中的一大塊,但不需要了解得太深,現在這個領域絕大部分還是基于深度學習,隻需這些基本的概念了解清楚。

基本的大塊概念:圖像配準,運動檢測,光流算法等。

OpenCV:很重要,任何一個關于圖像的工程師職位都對OpenCV有要求。Mat基本操作周遊必須會,其他的東西可以根據算法推演。

CUDA:這是找工作過程中非常容易赢得優勢的一門技術。任何一個項目如果你說你用了CUDA,并解釋得清除完整,會讓面試官刮目相看。雖然CUDA有優勢但學起來并不容易,内容比較多。

你需要哪些深度學習的知識積累?

  • 至少熟悉一種架構:如Caffe,Tensorflow,Pytorch,MXNet等。推薦TensorFlow和Keras。Keras适合新手,比較簡單,并且和TensorFlow是一樣的。對于TensorFlow,推薦《TensoFlow實戰》這本書。
  • 至少一次Kaggle項目的經曆:Kaggle項目的名次最好在15%以内,這樣隻需寫一個。如果沒有名次,就可以多寫幾個項目。寫在履歷上的項目要突出兩點:第一,你把模型重新訓練了一遍。第二,你Ensemble了Multiple models。 Dogs and Cats的獲獎感言中講了一些他做Kaggle的經曆,推薦大家去看,可以借鑒他的話用在面試中。曆屆冠軍說的一些感言有很多是十分有用的。
  • 對于這些模型,能夠迅速說出其優點:GoogleNet V12345, VGG, ResNet, MobileNet, AlexNet。
  • 模型選擇方面:了解Fine tune,參數訓練的技巧(如何設定初值,如何調參等)
  • 各種面試的小問題:如你平時喜歡用什麼Optimizer?為什麼神經網絡越深越好?為什麼網絡要Thin呢?Gradient Vanish造成的原因?為什麼會造成Overfitting?怎樣克服Overfitting?你怎麼看Overfitting?Batch Normalization是什麼?還有Range of each hyper parameter,SVM和分類算法的對比,資料集大小和切割等。

關于面試準備過程中的Tips

  • 不要想着準備好了再面試。其實”準備好“是一個難以界定的概念,也許你永遠都達不到所謂的“準備好”的狀态,等你準備好時很多職位都沒有了,會錯失很多機會。
  • 多面試,才知道職位究竟需要什麼技能。AI的職位不像軟體工程師職位那樣有相對固定的需要準備的知識點,醫療方向有醫療方向需要準備的東西,無人機有無人機需要準備的東西。多面試才能知道這個職位到底需要什麼技能。但是不要一開始就面大公司,可以從一些小公司練手,積攢經驗後再面大公司,并且大公司盡量找内推。
  • 通過面試失敗總結經驗,建立一個自己的Cheatsheet。當你準備去面試一個陌生的領域,通過把每次面試的經驗寫在Cheatsheet上,你就會逐漸知道面試官需要什麼樣的項目,你要如何潤色自己的項目。
  • 如果拿不到面試可以嘗試投國内公司練手。投國内的公司可能拿到面試的機會更大一些,通過這些面試一樣可以積攢經驗。國内公司可能對算法方面沒那麼嚴苛,但其他方面可以對你有很大的指導性,并且問的問題很實際,很接地氣。

面試中可能會面對哪些失敗?

  • 回複很少:有時候你可能沒有把履歷寫到Recruiter能看懂的程度。如果你履歷寫得不夠直白,Recruiter沒看懂,他可能就pass了你的履歷。我們要把項目中最重要的關鍵詞突出出來,并且可能需要寫一個general的cover letter,讓Recruiter了解你。我們自己也可以去LinkedIn加Recruiter,越多越好,可以直接把履歷發給他,增加Recruiter回複的機率。
  • 公司其實并不招人:有時候公司把招聘資訊釋出在網上,但其實他并不想招人,他就是要招不到人,才能給自己公司裡的人辦H1b。這個時候面試官可能會出特别難的題,這種情況大家需要理性識别,不要一次遇到太難的面試就懷疑自己,進而喪失信心。
  • 代碼沒時間準備:這其實是最不應該出現的問題。代碼在AI工程師求職中是很重要的。每個公司至少有兩輪代碼的面試,Online或者白闆面試。大家一定要勤刷題。
  • 項目不夠吸引人:打造一些實習經曆,實習是最重要的,有了實習對找全職是非常有幫助的。
  • 心态已崩:找工作的難度大,但很多時候多堅持一會就能找到工作了。你要知道,如果你是MS最終做了AI,你已經為自己省了兩到三年轉行的時間。

現在AI有這些比較熱門的方向

自動駕駛、醫療診斷、推薦nlp、聊天機器人、視覺導航、金融、視覺機器人、VR / AR、監控等。