【記錄】一個深度學習算法工程師的成長之路(思考和方法以及計劃)

聲明:

1)該文章整理自網上的大牛和機器學習專家無私奉獻的資料,具體引用的資料請看參考文獻。
2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系博主刪除。
3)博主才疏學淺,文中如有不當之處,請各位指出,共同進步,謝謝。
4)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。大家都共享一點點,一起爲祖國科研的推進添磚加瓦。

〇、寫在前面

在這裏插入圖片描述
講道理,其實這個博客我是懷着一個很嚴肅的心情準備寫的,但是吧,一談到【找工作】這個問題,我就很焦慮。。。。。。看到這個省略號了嘛?這就是我的心情 😐,尤其是在就業一年比一年難的情況下。爲什麼這麼說?

事實上19屆秋招算法崗就有些【供過於求】了,頭條甚至發了 算法勸退貼。而這很大程度上就是由於前幾年算法就業形勢太好了,導致一大批人轉算法,這導致的大泡沫其實還沒有消化掉,所以其實不是現在算法突然不好找工作了,而是之前太容易了。其實你說公司真的不缺算法工程師嘛?當然不是,公司也是有算法工程師的缺口的,那爲什麼出現這種情況?除了要勸退一部分盲目入行的同學;聽到、遇到的好幾個HR都說,收到幾百份簡歷,但是沒什麼匹配的。所以說做算法的人多是真的,可是需要做算法的人也是真的,而主要的矛盾點在於 供需不匹配

所以在經歷過好多次心態崩裂,也問過很多前輩和大佬之後,參考了很多大佬的文章之後,我決定來總結一下如果想成爲一個【深度學習算法工程師】需要什麼學習能力和知識儲備。這個文章應該會是一個【記錄】性質的文章,期望看看自己這一路走來 學了什麼準備學什麼需要學什麼,希望和各位共勉。

一、編程能力

這真是個老生常談的問題,爲什麼這麼說呢,自然是因爲這個【編程能力】我聽過不下幾百遍,聽的腦瓜子都疼,可是沒法子,這就是 必備技能,必備到什麼程度?

這麼說吧,假如你想寫作文,如果你不會寫字,組詞,造句,我想你應該完全沒法完成這個創作過程。很形象吧,但是也確實如此,仔細想一想,招你進去是要幹活的,公司不會招聘一個只會 MATLAB 或者 python 都用不熟的人來做項目開發吧,做純算法研究都不行。

  • MATLAB 大家都懂的,做實驗室研究確實很棒,高效方便的矩陣和數組運算,畫圖方面也相當不錯,但是工業應用還沒聽過誰說是用 MATLAB 實現的呢。
  • python 你可能想問爲什麼,可以這麼說,如果連 python 這樣比較簡單的語言還用不熟,那真是無話可說。

那麼 具體地說,編程能力需要哪些基本要求呢?

(1)熟練使用 linux

在這裏插入圖片描述
新手肯定都是用 Windows 起手的了,像我之前就是這樣,但是在學習過程中發現在 Windows 上搞不定了,一般也會先忍幾次,然後掉頭就去學 linux 了,一定是這樣的過程。哪些在 Windows 上真的搞不定呢?比如:最新論文中提出的視覺開源算法等等。

但是在條件上可能很多人都覺得不是太合適,比如實驗室條件,電腦條件等等,不過對我們而言,linux 並不需要了解太深。裝個 ubuntu 系統,常用的文件操作、程序編譯等知道就OK了。剩下的完全是在使用的過程中現用現學,手邊常備一本書 《鳥哥的linux私房菜》,神書,你可以百度或者Google一下自然就知道這個書的強大了。在或者現在的網絡比較強大了,資源也是很多,實驗樓 也是一個不錯的選擇,幫你搭配好的環境,直接使用就OK了。如果還是想自己搞一下,虛擬機也是一個不錯的選擇,不會影響你電腦本來的環境配置,但是還滿足了要求。

個人計劃

  • 《鳥哥的linux私房菜》
  • 實驗樓

(2)熟練使用 python

在這裏插入圖片描述
網絡如此發達的今天,如果你說你找不到資源我是不相信的,但是如果你說你眼花繚亂了,我是毫不質疑的。因爲我當時就就是這樣的,基礎部分看廖雪峯的 python教程 就可以了,我個人有看一些,但是真正入門的是一本書——《Python編程:從入門到實踐》,極其的基礎,但是對小白來說非常友好。

有的同學會問是學 python2 還是 python3?這麼說吧,python 核心團隊計劃2020年停止支持 python2,也就是說 python2 馬上就要說再見了,肯定還是學 python3,遇到之前的 python2 的代碼再查找區別即可。python 學起來其實很簡單,看別人代碼的過程就是學習的過程。對於不熟悉的用法多搜下官方文檔,如 pythonnumpypandasmatplotscikit-learn等等。

python 的開發環境值得說一下,因爲有太多選擇,這裏比較建議使用 pycharm 和 jupyter notebook 吧,具體可以參考這個博客——Windows10 下 Anaconda和 PyCharm 的詳細的安裝教程(圖文並茂)

個人計劃

  • 《Python編程:從入門到實踐》
  • 《瘋狂Python講義》

(3)流暢使用 C++

在這裏插入圖片描述
至於 C++,比較普遍的都是 《C++ primer》《C++ primer plus》 這樣的大塊頭書,如果是入門的話應該還可以,倒是不如 《王道程序員求職寶典》 這類書實用。大塊頭書優點在於全面,同時也往往導致了重點不突出。如果想看視頻課程的話,推薦中國慕課上北大的《程序設計與算法》,第1門課程是 C 語言程序設計,第2門課程是算法基礎,第3門課程是 C++ 程序設計。看視頻課程一般比較慢,如果沒什麼基礎或者特別想把基礎學好的話,強烈推薦。

個人計劃

  • 《C++ primer》
  • 《C++ primer plus》
  • 程序設計與算法課程(一)
  • 程序設計與算法課程(三)

(4)良好的算法基礎

在這裏插入圖片描述
其實沒做過檢測或者分割或者其他的,是很正常的,快速跟進就是了,這是公司開發的常態。但是如果一些網絡結構基礎,圖像的基礎概念,卷積神經網絡的基礎——大話卷積神經網絡CNN(乾貨滿滿),等等,這樣很可能會犯很多低級錯誤,可能會出現很多問題。

這就要求開發能力必須過關,因爲算法效率在實際生產中還是有要求的。工業界用的算法是滯後於學術界好幾年的,不要對公司所做的算法有太多的幻想,現實數據比你想的質量差太多,現實用的算法也沒有那麼高端,大部分時間都不是用在建模。

個人計劃

  • LeetCode
  • 牛客網
  • 《劍指offer》

python:

  • 《算法圖解》
  • 《用Python解決數據結構與算法問題》
  • 《數據結構與算法 Python語言描述》

C++:

  • 《啊哈!算法》
  • 程序設計與算法課程(二)
  • 《算法導論中文第三版》(這是本神書。。。)

(5)良好的編程習慣

在這裏插入圖片描述
這裏說的習慣有:多使用類,多利用函數封裝,寫好項目的目錄結構,良好的變量或者函數命名,善用程序的註釋功能,Python 編程語言需要遵循 PEP8 規範(雜談——Python代碼寫得醜怎麼辦?autopep8來幫你)等等。這可以幫助你更好的和同事或者同行溝通,而且看着也舒服,就算好久不看程序了,依然可以做到很好的回溯記憶。

二、深度學習理論

在這裏插入圖片描述
基於深度學習的計算機視覺是計算機視覺的兩大方向之一,另一個是 SLAM,機器學習包括深度學習裏的大部分算法本質上都是用來做 分類 的。具體到計算機視覺領域一般就是 物體分類(Object Classification)目標檢測(Object Detection)語義分割(Image Semantic Segmentation) 等,當然也有一些很酷又好玩的東西比如 edges2catsdeepart 等等。

我主要做一些【圖像重建】或者【超分辨率】相關的東西。其實一般是看一看論文,復現復現網絡結構,或者直接跑一跑別人的代碼,做一做網絡結構修改,調一調超參數。前期的圖像數據集製作,還有預處理纔是主要的工作。深度學習爲什麼這麼強?它比傳統的圖像處理方法好嗎?它主要解決了什麼樣的問題呢?

個人比較認同是以下三點:學習特徵的能力很強,通用性強,開發優化維護成本低。存在的問題可能就是數據量,對 label 的精準性要求比較大。之前看過的一個文章寫得不錯,參見 爲什麼深度學習幾乎成了計算機視覺研究的標配?

關於這一部分理論的學習,漫天飛的各種資源。這裏推薦一些:

個人計劃

  • 《一天搞懂深度學習》
  • CS231N課程
  • Deep Learning AI課程
  • 《DeepLearning深度學習花書》
  • 《Tensorflow+實戰Google深度學習框架》
  • 《圖解神經網絡與深度學習》
  • 《PyTorch深度學習實戰》
  • 《Python 深度學習(Keras)》
  • 《深度學習之Pytorch》
  • 《深度學習框架PyTorch》
  • 《PaddlePaddle與深度學習應用實戰》
  • 《動⼿學深度學習》
  • 《深度學習之PyTorch實戰計算機視覺》
  • 經典深度學習論文

三、g++, CMake和Makefile

在這裏插入圖片描述
python 是腳本語言,而當前大量的 AI 算法都部署在移動端嵌入式平臺,需要使用 c / c++ / java 語言,g++,CMake 和 Makefile 正是 Linux 下編譯 C系代碼 的工具,也是必備的基礎。實際上一些python,matlab開源項目也需要預編譯,更多的等到了工作崗位自然懂。

個人計劃

  • g++
  • CMake
  • Makefile

四、shell,vim 和 git

在這裏插入圖片描述
Linux 下一個熟練的工程師,會比 Windows 下工作效率高很多,提高寫代碼效率可以從終端多任務管理,熟練使用 shell 命令,熟練使用 vim 等開發環境,熟練使用 git 命令等地方入手。

  • shell 命令是 Linux 的操作基礎,也是學習使用 Linux 的開始,而慢慢熟悉高級的 shell 命令在將來的工作中會帶來很大的效率提升。
  • vim 是 Linux 下最常用的編輯器,從小白到高手都可以使用,而它的列編輯,查找替換,自動補全等功能都是效率的保證,或許從visual studio等環境切換過來的同學剛開始會有些許不適應,但是時間久了就會越來越明白 vim 的好。
  • git 是程序員必備的素養,慢慢學會維護幾個自己的代碼庫,等到將來出問題的時候就明白了。

個人計劃

  • shell
  • vim
  • git

五、python 爬蟲

在這裏插入圖片描述
深度學習項目開發中最重要的就是 數據!!!或許是一句戲言,但是有一句話是這麼說的,深度學習在目前階段可以認爲是一個數據的遊戲,你的數據更好,標記的更完美,你的運行結果就更棒。尤其是實際的項目經常沒有足夠多的數據,這個時候就需要自己去想辦法獲取了。除了公開的數據集之外,其他的數據怎麼獲得呢?互聯網是一個什麼資源都有的大寶庫,學會使用好爬蟲,你將可能成爲時代裏最有資源的人,我想叫你金礦工,而且這也很可能是項目成功的開始。

個人計劃

  • 網絡爬蟲
  • 《Python項目案例開發從入門到實戰——爬蟲、遊戲和機器學習》

六、數據可視化

在這裏插入圖片描述
處理數據的一個常用的手段就是數據可視化!在深度學習項目中,常需要的數據可視化操作包括原始圖片數據的可視化,損失和精度的可視化等。除了對數據可視化,還需要對模型進行可視化,方便調試和感知。

這個方面我的建議是多打一些比賽,多看一看別人的代碼和博客,這樣就會很容易學會的。

個人計劃

  • Kaggle
  • 天池

七、數學基礎

在這裏插入圖片描述

  • 微積分:其實個人感覺涉及的微積分知識相對簡單,積分很少,微分也不是特別複雜,花一天時間學一學就行。

  • 概率論與統計:這個比較高深,是應用在機器學習領域裏最重要的數序分支。應用比如:條件概率、相關係數、最大似然、大數定律、馬爾可夫鏈等等,還是得好好搞一下概率。

  • 線性代數:數字圖像本身就是以矩陣的形式呈現的,多個向量組成的樣本也是矩陣這種形式非常常見,大多機器學習算法裏每個樣本都是以向量的形式存在的,多個矩陣疊加則是以張量(tensor)的形式存在 Google 深度學習庫 TensorFlow 的字面意思之一。

  • 凸優化:這個需要單獨拎出來說一下。因爲太多問題(尤其機器學習領域)都是優化問題(求最優),凸優化是裏面最簡單的形式,所以大家都在想辦法怎麼把一般的優化問題轉化爲凸優化問題。至於單純的凸優化理論,好像已經比較成熟了。在機器學習裏,經常會看到什麼求對偶問題、KKT條件等,潛下心花兩天學一學。

數學知識真的沒必要系統學習,效率低又耗時,畢竟大家都有本科或者研究生的基礎了,這就足夠了。用的最多的就是矩陣論!!!或者用到的時候學,學完之後總結一下。再就是活學活用網上的搜索資源,比如 CSDN、知乎等等。

個人計劃

八、公衆號

時代變了,一百年前的人類絕對想像不出自己有了困惑不是去翻書或請教他人而是告訴身旁的一臺機器。如今,小學生做道算術題或小女生來個大姨媽都要問問電腦:這是怎麼回事。但這些與學視覺又有什麼關係呢?——答:沒有。好像跑偏的有點多了,再扯遠一點吧。跨越時間維度來思考一些新事物的發生及其與舊事物的聯繫,也許會給你一種想象的自由。比如電報、電話、視頻聊天和全息通話用 HoloLens 通話,再比如馬車、汽車、火車、飛機和火箭太空旅行,蒸汽機、電、互聯網和AI。所以活用資源,多看肯定沒錯,不過要有所選擇的看,不能啥都看,,,人的精力還是優先的。

先說明公衆號不是打廣告,推薦幾個自己看的而已(排名沒有先後順序)。

  • 機器學習實驗室
  • 磐創AI
  • kaggle競賽寶典
  • 有三AI
  • 我愛計算機視覺
  • Datawhale
  • 計算機視覺life
  • CVer
  • 小小挖掘機

九、彩蛋

看一下目錄,你會發現它向一把小刀一樣,是不是?希望你我能劍鋒所指,所向披靡!!!

推薦一個自己寫的博客——大話卷積神經網絡CNN(乾貨滿滿),種樹從現在開始。

在這裏插入圖片描述

如果有幸幫到你,請幫我點個【贊】,給個【關注】!如果能順帶【評論】給個鼓勵,我將不勝感激。

如果想要更多的資源,歡迎關注 @我是管小亮,文字強迫症MAX~

回覆【福利】即可獲取我爲你準備的大禮,包括C++,編程四大件,NLP,深度學習等等的資料。

想看更多文(段)章(子),歡迎關注微信公衆號「程序員管小亮」~

在這裏插入圖片描述
學習AI可以看一下這個課程!
在這裏插入圖片描述

參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章