您好,登錄后才能下訂單哦!
https://www.toutiao.com/a6695518937334940174/
文/編輯 | 言有三
一直有同學希望我寫寫面試相關(guān)的東西,一直沒寫。我們不會開相關(guān)的板塊,因為沒有標準,容易引起爭議,而且可能會加重大家的浮躁和焦慮。
不過關(guān)于面試,有三還是有一些話可以說的,下面分兩部分道來。
假如我是老板或者誠心為公司招聘優(yōu)秀人才的面試官,我會喜歡擁有以下特質(zhì)的人。這里說的是招聘一個算法工程師,一個能夠為公司創(chuàng)造收益的人,簡單起見就不分社招校招。
1、忠誠度,這很重要。一個不忠誠的員工,能力再大,也不能要。所以如果看到一份簡歷滿滿當當?shù)亩际翘酆蛯嵙暫啔v,兩個月?lián)Q一個實習,半年換一份工作,除非你說出很充分客觀的理由,否則我可能不會通過這份簡歷。
2、編碼能力,這是一切的前提。前面說了,我們這里要招聘的是一個計算機視覺領(lǐng)域(CV)算法工程師,招進來是要干活的。公司不會招聘一個只會Matlab或者python都用不熟的人來做項目開發(fā),做純算法研究都不行,一個不能實現(xiàn)自己想法的牛人我還沒見過。見過的牛人不僅算法好,編程能力也強大。
說起編程能力,有幾點基本要求:
(1) linux得熟。
現(xiàn)在不是若干年前開源項目還不多的時代,大家還在Windows下面吭哧吭哧用Matlab和VS仿真,都9102年了,Linux都不熟,效率如何讓老大放心。
(2) python得熟,c++得會。
如果連python這樣簡單的語言還用不熟,那真是無話可說。c/c++ 這是一門基礎(chǔ)課吧,理工科的學校沒開過應該很罕見,CV領(lǐng)域的工業(yè)界部署和算法優(yōu)化都離不開C++。
(3) 編程習慣得好。
雖然說代碼寫的爛,不會真有同事拿gun突突突你,但是好的編程習慣不僅僅提高效率,而且看著也舒服,不會被別人鄙視。
這里說的習慣包括: 多寫寫類和函數(shù)封裝,組織好項目目錄結(jié)構(gòu),好好命名 等等??梢圆粫懚嗝磁1旗趴岬拇a,但是要 保證代碼具有良好的可拓展性,方便他人閱讀移植 ,具體要求以后再說。
3、算法基礎(chǔ),這決定了潛力。沒做過檢測?沒事,沒做過分割?沒事。邊做邊學,快速跟進就是了,這本就是公司開發(fā)的常態(tài)。
人的精力有限,沒做過的多了去了。但是如果CNN的一些基礎(chǔ)傻傻說不清楚,圖像的基礎(chǔ)概念一問三不知,這就有事了。因為你交給他一個項目,可能會犯一些低級錯誤而不自知,老大心里也慌,還要陪著檢查和普及基礎(chǔ)知識。
以上就是三個基本要求,每一家公司肯定都是這樣要求的,我覺得如果通過了這三個考驗,那至少就是一個可以培養(yǎng)的候選人,我會愿意給他機會進入下一輪的PK。
踏實(基礎(chǔ)好),靠譜(穩(wěn)定),能干活(能寫代碼),這3個基本前提比什么都重要,其他的都可以在項目學習。
接下來就該說說具體怎么辦了,這就是我開 《AI修行之路》 這個專欄的原因了,如果你有耐心,不妨接著看下去,我們也是再重新回顧總結(jié)一下之前的文章,每一篇文章的開設(shè)都有充分的理由。
1、為什么要用Linux
在以前,你可能覺得Linux并非剛需,用著自己的Windows電腦,也不需要與人共享操作系統(tǒng),硬件和磁盤。但是如果你們團隊一起使用服務器,不可能不用Linux。
所以這是對還沒有在Linux上面真正進行日常開發(fā)工作的小朋友說的,要正式進入AI行業(yè)發(fā)展,Linux是必備和唯一的操作系統(tǒng),“軟”兵器,我還沒有聽過哪家公司在Windows或者Mac上面訓練模型的。
「AI白身境」深度學習從棄用windows開始
2、使用shell,vim,git提高開發(fā)效率
編程習慣,工作效率很重要,很重要!Linux下一個熟練的工程師,會比Windows下工作效率高很多,提高寫代碼效率可以從終端多任務管理,熟練使用shell命令,熟練使用vim等開發(fā)環(huán)境,熟練使用git命令等地方入手。
shell命令是Linux的操作基礎(chǔ) ,也是學習使用Linux的開始,而慢慢熟悉高級的shell命令在將來的工作中會帶來很大的效率提升。
vim是Linux下最常用的編輯器,從小白到高手都可以使用,而它的 列編輯,查找替換,自動補全 等功能都是效率的保證,或許從visual studio等環(huán)境切換過來的同學剛開始會有些許不適應,但是時間久了就會越來越明白VIM的好。
git是程序員必備的素養(yǎng) ,慢慢學會維護幾個自己的代碼庫,等到將來出問題的時候就明白了。
「AI白身境」Linux干活三板斧,shell、vim和git
3、python基礎(chǔ)和編程習慣
在機器學習領(lǐng)域,python可謂是一騎絕塵,學習python需要掌握好基礎(chǔ)的語法包括函數(shù),類設(shè)計,掌握大量的開源矩陣庫Numpy等。
python簡單嗎?簡單。真的簡單嗎?看看大神們寫的項目吧。
「AI白身境」學AI必備的python基礎(chǔ)
4、圖像基礎(chǔ)
深度學習有一個最大的問題,就是太好用了。導致什么圖像基礎(chǔ)和傳統(tǒng)算法都不需要懂,也能項目做的風生水起。
但是如果沒有好的圖像基礎(chǔ),總有一天遇到CNN解決不了的問題,或者無法單獨解決的問題,就不知所措了。很多的新技術(shù)都是從傳統(tǒng)算法中獲得靈感或者相互結(jié)合的,不懂圖像基礎(chǔ),就仿佛埋了一顆定 時 炸 彈 ,一般沒事,炸了就炸了。
「AI白身境」深度學習必備圖像基礎(chǔ)
5、OpenCV基礎(chǔ)
如果說圖像處理領(lǐng)域有什么庫是繞不過去的,那一定是OpenCV,這一個開源計算機視覺庫堪稱最優(yōu)秀的計算機視覺庫,不僅可以學術(shù)和商業(yè)免費使用,而且跨平臺,高性能。需要掌握的基礎(chǔ)內(nèi)容包括:如何部署,基本數(shù)據(jù)結(jié)構(gòu)的熟悉與使用,基本模塊的了解。
「AI白身境」搞計算機視覺必備的OpenCV入門基礎(chǔ)
6、CMake編譯
python是腳本語言,而當前大量的AI算法都部署在移動端嵌入式平臺,需要使用c/c++/java語言,g++,CMake和Makefile正是Linux下編譯C系代碼的工具。
實際上一些python,matlab開源項目也需要預編譯,更多的等到了工作崗位自然懂。
「AI白身境」只會用Python?g++,CMake和Makefile了解一下
7、爬蟲基礎(chǔ)
深度學習項目開發(fā)中最重要的是什么,當然是數(shù)據(jù)!實際的項目你經(jīng)常沒有足夠多的數(shù)據(jù),這個時候就需要自己去想辦法獲取了。
互聯(lián)網(wǎng)是一個什么資源都有的大寶庫,學會使用好爬蟲,你將可能成為時代里最有“資源”的人,這也很可能是項目成功的開始。
本文最后的一個實際項目就需要用到。
「AI白身境」學深度學習你不得不知的爬蟲基礎(chǔ)
8、數(shù)據(jù)可視化
爬取完數(shù)據(jù)之后就應該進行處理了,一個很常用的手段是數(shù)據(jù)可視化。在深度學習項目中,常需要的數(shù)據(jù)可視化操作包括原始圖片數(shù)據(jù)的可視化,損失和精度的可視化等。
除了對數(shù)據(jù)可視化,我們還需要對模型進行可視化,方便調(diào)試和感知。
「AI白身境」深度學習中的數(shù)據(jù)可視化
9、數(shù)學基礎(chǔ)
雖然對于大部分來說,做項目不需要多么強悍的數(shù)學基礎(chǔ),但是你會需要看懂別人論文,也會經(jīng)常需要進行簡單的推導和算法改進。
從線性代數(shù),概率論與統(tǒng)計學到微積分和最優(yōu)化,都是需要掌握的。不過數(shù)學的學習是一個非常漫長的過程,不要急于求成,也不是靠跟著視頻或者書本就能完全學會的,重要的是用起來。
「AI白身境」入行AI需要什么數(shù)學基礎(chǔ):左手矩陣論,右手微積分
10、計算機視覺研究方向
學習和做項目都需要一個方向,在前面這些基礎(chǔ)都掌握好了,就要好好了解一下計算機視覺的各大研究方向及其特點,方便自己選題和項目方案定型了。
從圖像分類,分割,目標檢測,跟蹤,到圖像濾波與降噪,增強,風格化,三維重建,圖像檢索,GANs,相信總有你喜歡或者項目涉及的。
「AI白身境」一文覽盡計算機視覺研究方向
11、應用方向
學習最終是為了解決實際問題,AI已經(jīng)滲入到了我們生活的方方面面。從自動駕駛汽車、圖像美顏,到聊天機器人,金融支付等,因此好好了解下當前AI在各大領(lǐng)域的應用沒錯的,這次就不僅僅限于計算機視覺了。
https://dwz.cn/Gj18HPHd
12、認識學術(shù)大咖
要想真正融入行業(yè)圈子,緊跟技術(shù)發(fā)展,就必須要時刻了解大佬們的狀態(tài),他們就是行業(yè)發(fā)展的風向標。
不管是學術(shù)界還是工業(yè)界,不管是老師傅還是青年才俊,讓我們一起見賢思齊吧。
我們開源了大佬研究方向的項目,歡迎follow。
https://github.com/longpeng2008/Awesome_DNN_Researchers
「AI白身境」究竟誰是paper之王,全球前10的計算機科學家
13、人工智能簡史
基礎(chǔ)打好了,接下來就是正式學習AI相關(guān)的知識,不管是在哪個課堂或者教材,都是讓大家先了解先賢們。
從圖靈與機器智能,馮諾伊曼與類腦計算引發(fā)的人工智能啟蒙,到三次浪潮的曲折和技術(shù)的成長史,值得每一個從事該行業(yè)的人閱讀。
「AI初識境」從3次人工智能潮起潮落說起
14、神經(jīng)網(wǎng)絡基礎(chǔ)
深度學習研究問題的方法就是仿造大腦,根基是神經(jīng)網(wǎng)絡。從感受野,到MP模型,到感知機,到反向傳播,要很熟悉全連接神經(jīng)網(wǎng)絡的劣勢,卷積神經(jīng)網(wǎng)絡的特點,核心技術(shù)和優(yōu)勢,這是學習深度學習最重要的基礎(chǔ)。
「AI初識境」從頭理解神經(jīng)網(wǎng)絡-內(nèi)行與外行的分水嶺
15、了解領(lǐng)域的突破
既然學深度學習,就必須要了解深度學習的重要進展。
在前深度學習時代,視覺機制的發(fā)現(xiàn),第一個卷積神經(jīng)網(wǎng)絡Neocognitron的提出,反向傳播算法的流行,促進了LeNet5和MNIST數(shù)據(jù)集的誕生。
隨著新理論的成熟,大數(shù)據(jù)的積累,GPU的普世,以卷積神經(jīng)網(wǎng)絡為代表的技術(shù)在圖像分類,目標檢測等基礎(chǔ)領(lǐng)域取得重大突破,隨著AlphaGo的成功同時在業(yè)內(nèi)和業(yè)外人士的心目中種下了深度學習/人工智能技術(shù)的種子,從此煥發(fā)勃勃生機。
「AI初識境」近20年深度學習在圖像領(lǐng)域的重要進展節(jié)點
16、激活函數(shù)
深度學習的機制模仿于人腦,人腦的細胞接受刺激從而產(chǎn)生活動需要一定的閾值,這便是激活函數(shù)根本性的由來。
激活函數(shù)肩負著網(wǎng)絡非線性表達能力的提升,從早期平滑的sigmoid和tanh激活函數(shù),到后來的ReLU和各類ReLU的變種(LReLU,PReLU,RReLU,ELU,SELU,GELU等等),Maxout,研究者一直試圖讓網(wǎng)絡擁有更好的表達能力。
隨著技術(shù)的發(fā)展,利用增強學習等算法從函數(shù)池中學習新的激活函數(shù)如swish等,成為了當下的研究主流,激活函數(shù)也走上了數(shù)據(jù)驅(qū)動的道路。
激活機制看似簡單,實則不易,大家一定多跟進了解了解。
「AI初識境」激活函數(shù):從人工設(shè)計到自動搜索
17、參數(shù)初始化
參數(shù)初始化,一個看似很簡單的問題,卻實實在在地困住了神經(jīng)網(wǎng)絡的優(yōu)化很久,2006年Hinton等人在science期刊上發(fā)表了論文“Reducing the dimensionality of data with neural networks”,揭開了新的訓練深層神經(jīng)網(wǎng)絡算法的序幕,仍舊被認為是當前第三次人工智能熱潮的紀元。
從全零初始化和隨機初始化,到標準初始化,Xavier初始化,He初始化,時至今日上千層網(wǎng)絡的訓練都已經(jīng)成為了現(xiàn)實,初始化似乎已經(jīng)不再是那么重要的課題了,但是誰說就沒有思考的空間了呢。
「AI初識境」什么是深度學習成功的開始?參數(shù)初始化
18、歸一化
我們總是希望所研究的統(tǒng)計問題能夠滿足固定的分布,而且這樣也的確會降低問題的難度。
在深度學習中,因為網(wǎng)絡的層數(shù)非常多,如果數(shù)據(jù)分布在某一層開始有明顯的偏移,隨著網(wǎng)絡的加深這一問題會加劇,進而導致模型優(yōu)化的難度增加。
歸一化便是致力于解決這個問題,從數(shù)據(jù)到權(quán)重,從限定在同一樣本的一個特征通道到不同樣本的所有通道,各類歸一化方法以簡單的方式,優(yōu)雅地解決了深度學習模型訓練容易陷入局部解的難題,順帶提升訓練速度提高泛化能力,這是一定要掌握的理論和工程技巧。
「AI初識境」深度學習模型中的Normalization,你懂了多少?
19、池化
大腦學習知識靠抽象,從圖像中抽象知識是一個“從大到小”過濾提煉信息的過程。從視覺機制中來的pooling即池化,正是對信息進行抽象的過程。
池化增加了網(wǎng)絡對于平移的不變性,提升了網(wǎng)絡的泛化能力,大家已經(jīng)習慣了使用均值池化mean pooling和最大池化(max pooling),雖然可以用帶步長的卷積進行替代。
盡管池化究竟起到了多大的作用開始被研究者懷疑,但是池化機制仍然是網(wǎng)絡中必備的結(jié)構(gòu),所以你一定要熟悉它,而且基于數(shù)據(jù)驅(qū)動的池化機制值得研究。
「AI初識境」被Hinton,DeepMind和斯坦福嫌棄的池化到底是什么?
20、最優(yōu)化
模型的學習需要通過優(yōu)化方法才能具體實現(xiàn)。深度學習模型的優(yōu)化是一個非凸優(yōu)化問題,盡管一階二階方法都可以拿來解決它,但是當前隨機梯度下降SGD及其各類變種仍然是首選。
從SGD開始,有的致力于提高它的優(yōu)化速度如Momentum動量法和Nesterov accelerated gradient法,有的致力于讓不同的參數(shù)擁有不同的學習率如Adagrad,Adadelta與Rmsprop法,有的希望大家從調(diào)參中解脫如Adam方法及其變種,有的致力于讓收斂過程更加穩(wěn)定如Adafactor方法和Adabound方法。
沒有一個方法是完美的,訓練的時候總歸要試試。
「AI初識境」為了圍剿SGD大家這些年想過的那十幾招
21、泛化能力
如果一個模型只能在訓練集上起作用,那是沒有用的。
因此我們總是希望模型不僅僅是對于已知的數(shù)據(jù)(訓練集)性能表現(xiàn)良好,對于未知的數(shù)據(jù)(測試集)也表現(xiàn)良好,即具有良好的泛化能力,通過添加正則項來實現(xiàn)。
從直接提供正則化約束的參數(shù)正則化方法如L1/L2正則化,工程上的技巧如訓練提前終止和模型集成,以及隱式的正則化方法如數(shù)據(jù)增強等,研究人員在這方面投入的精力非常多,大家一定要時刻關(guān)注。
「AI初識境」如何增加深度學習模型的泛化能力
22、模型評估
口說無憑,用數(shù)據(jù)說話才是研究者們進行PK的正確姿態(tài)。計算機視覺的任務何其多,從分類,回歸,質(zhì)量評估到生成模型,我們當然需要掌握科學的評估方法。
「AI初識境」深度學習模型評估,從圖像分類到生成模型
23、損失目標
模型的學習需要指導,這正是損失函數(shù)的責任,它往往對模型最終表現(xiàn)如何影響巨大。
這一篇文章就重點總結(jié)分類問題,回歸問題,生成對抗網(wǎng)絡中使用的損失目標,為大家設(shè)計更好的優(yōu)化目標奠定理論基礎(chǔ)。
「AI初識境」深度學習中常用的損失函數(shù)有哪些?
24、如何開始訓練你的模型
磨刀不誤砍柴工,當我們開始訓練自己的模型的時候,總歸要想清楚一些事兒再動手。
第一步知道你要做的任務是一個什么任務,找到競爭對手做好預期,想好你需要什么樣的數(shù)據(jù)。第二步確定好框架,基準模型,準備好數(shù)據(jù)。然后才是第三步開始訓練,從輸入輸出,數(shù)據(jù)的預處理到維持正確地訓練姿勢。
這是我總結(jié)出來的經(jīng)驗,想必總是有點用的。
「AI初識境」給深度學習新手做項目的10個建議
25、認真做一個項目
到了最后,相信大家都擁有了基本技能了,那我們就來開始一個真正的項目吧,實現(xiàn)形色識花App的部分功能。
在這里不會教大家如何完成,因為這個項目一點都不簡單,是個很難的分類項目,不是給一個現(xiàn)有的數(shù)據(jù)集和一個模型就能解決的,至少有以下問題需要考慮,每一個都有很多工程細節(jié)需要解決。
如果你能獨立將這個任務的整個流程完成,識別20種包含遠近景的花,做到95%的精度,那么我相信你完全有能力去應聘計算機視覺算法工程師了。
如果在框架上有什么問題,可以參考我們開源的12個主流的開源框架在各類任務中的使用git項目。
https://github.com/longpeng2008/yousan.ai
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。