注:本文預設傳統演算法是所有工程師的基礎技能,所以後面提到的演算法主要指機器學習以及深度學習等演算法。
儘管目前本人求職的重心還是在後端上,但是為了能從現在的人工智慧專業碩士順利畢業,也為了讓自己順便拓展演算法工程這條路,簡單的規劃一下演算法這部分需要補的知識和技能還是有必要的。
本文以拿到2021演算法崗offer為目標,從2020的演算法崗面經入手,分析需要點的技能樹都有哪些。
首先需要說明的乙個地方就是,不同領域的技術崗位,都會按照接觸科研和業務的程度來進行一定的區分。
可以簡單參考知乎上霍華德在問題「學術界科研(research)與工業界研發(r&d)有什麼區別?」的回答[1],演算法崗可以大致分為:
近幾年這一點在演算法崗上表現體現的比較明顯,因為在幾年前大部分演算法都還只在研究階段,而最近隨著一些成熟的機器學習封裝庫被開放過後,部分行業裡開始發現這些演算法可以產生實際的價值,所以演算法崗位也就呈現了近幾年的爆發式增長,尤其是業務導向的演算法工程師(因為大部分公司還是希望這些演算法能更多更快的產出業務價值)。
當然這話其實說的已經有點晚了,現在已經不是剛開始那樣的時候了,那個時候會使用框架、調調參就可以拿到offer,現在的演算法崗更像是浪潮過後的歸於正常的情況,不僅需要紮實的理論基礎,還需要豐富的專案實踐。
為了更好地了解各行業公司都比較看重哪些方面的東西(很可能也都是這些公司在用的技術),我選擇直接從演算法崗的面經裡去尋找可能的答案,面經貼主要是牛客網上的[3]。
找到的點可以簡單分為以下幾類:
內容因為並沒有特別多的先後依賴關係,所以就按照在面經裡出現的順序來列了。
在大部分演算法面試中,面試官的問題都是圍繞著簡歷上的專案來問的,我們可以看到上面的很多專案所涉及到的點,面試官都有可能往深了問,比如:
所以在學習過程中不光要知道how,還是要多知道幾個why,一是為了能在面試的時候能回答出問題,二是為了更好地理解手裡的這個工具。
有些帖子可能會在數學基礎這部分加上乙個凸優化,個人理解上,在純粹的學習過程中凸優化可以說是最枯燥的一門課,裡面大部分是一些凸優化的定義和理**式的證明,所以建議在後期遇到的時候再切入某乙個點深入學習。
在數值分析和人工智慧這方面,還是python支援的庫比較方便,在入門學習方面已經足夠使用了,版本目前推薦3.5 or 3.6。
anaconda(or miniconda)是乙個比較方便的python虛擬環境和包管理軟體,但是在某些時候會遇到麻煩事(比如一些演算法框架的奇奇怪怪的環境要求),但是在大部分情況下的入門階段已經足夠使用了。
python的ide大部分人常用的就是pycharm,如果有些能力折騰的,可以考慮用vscode+外掛程式等等。
實際使用中,很多機器學習、深度學習方法只有在高質量資料中才能起作用,比如資料的資訊量足夠多、雜訊和錯誤資訊足夠少。而實際資料收集過程中,很多情況下不可能讓資料這麼完美,所以需要進行一些初步的資料處理(採集、清洗、取樣、去噪、降維、…)。
這本書含有大量的實踐案例,你將學會如何利用各種python庫(包括numpy,pandas、matplotlib以及ipython等)高效地解決各式各樣的資料分析問題。如果把**都執行一次,基本上就能解決資料分析的大部分問題了。另外還有就是[4]:
資料探勘可以幫助我們初步的理解資料各特徵之間具有的一些關係,增加或者刪除一些特徵來幫助後續的學習。資料探勘可以通過一些導論書籍或者課程進行一些初步系統性的了解,其中的大部分原理都不是很高深。
3.4.1 - 入門
如果在入門的時候,一開始就學習數學和理**式,也不去弄明白這個東西到底有什麼用,就很難去理解到底為什麼需要這些理論。
在學習每個機器學習演算法前,可以先籠統的明白這個東西的作用,然後帶著問題「這個是怎麼實現的?」去**演算法的理論,才能比較貫通的理解其中的數學和公式。
人工智慧領域的百科全書,非常適合小白和新手入門 ai 領域。現在市面上大家看到的絕大部分 ai 資料都是追求嚴謹的「理工科天書」,這個世界不缺少嚴謹真確晦澀難懂的 ai 資料,但是很缺容易理解的內容。我們希望拋開複雜的公式,複雜的邏輯,複雜的專用名詞。做一套文科生也能看懂的 ai 知識庫。3.4.2 - 理論
機器學習的理論部分大概有:
回歸 聚類
降維 …
回歸
決策樹與隨機森林
svm
最大熵與em演算法
多演算法組合與模型優化
貝葉斯網路
隱馬爾可夫鏈hmm
主題模型lda
整合學習…
內心os:這總結下來基本上和某些書的目錄差不多了。
3.4.3 - 實踐
在初步入門和學習理論後,為了活學活用學到的演算法,可以嘗試進行實踐。
首先是一些可以拓展能力的常用工具(免得自己造輪子):
如果你對某些演算法有更深程度的理解,你甚至可以嘗試用自己**復現這些演算法。
3.5.1 - 入門
在這裡同樣推薦產品經理的人工智慧學習庫。
3.5.2 - 理論
深度學習的理論部分大概有[4]:
cnn
rnn
gan…
你可以從廣度上入手,在都了解的基礎上,選擇乙個方向進行深入學習:
自然語言處理nlp(包括文字、語音處理,序列資料往往需要rnn);
生成模型(gan、vae等等);
3.5.3 - 實踐
在初步入門和學習理論後,為了活學活用學到的深度學習演算法,可以嘗試進行實踐。
首先是一些可以拓展能力的常用工具(免得自己造輪子):
關於哪個工具更好的問題,"支持者"之間也是爭議不斷,其實也不用糾結到底應該選哪乙個,都試試不就知道了(逃。
機器學習、深度學習大部分理論內容都來自計算機科研領域發表的**,當下的前沿技術也都在近幾年發表的**中。
作為入門、理論、實踐的之後乙個拓展階段,可以通過閱讀前沿**來增加知識面。
面向offer學習未必是最優的一條路。我的目標是以後端為主線發展,之所以還沒有完全的放棄這部分的演算法,一部分是因為我的專業,更多的原因是我知道在某些問題上只有這些演算法才能有效地解決,會用更多的演算法也可以讓程式設計師解決更多的問題。
2023年秋招演算法崗需要準備什麼?
找工作準備過程中,收集了一些個人覺得對演算法崗有用的資料,以我的水平也很難評定出哪些資料的含金量高,稍微有些參考意義就都收藏了。cv公司 按城市分類 amusi cv company list ai求職攻略 amusi ai job notes 深度學習面試寶典 amusi deep learnin...
如何看待2023年秋招推薦演算法崗灰飛煙滅?
由於近些年深度學習技術的飛速發展,大力加速推動了ai在網際網路以及傳統各個行業的商業化落地,其中,推薦系統 計算廣告等領域彰顯的尤為明顯。由於推薦系統與提公升使用者量以及商業化變現有著密不可分的聯絡,各大公司都放出了眾多推薦系統相關職位,且薪水不菲,目前發展勢頭很猛。但是,這裡存在幾個問題,很多欲從...
樹的相關基礎演算法
樹的相關基礎演算法,先序 中序 後序遞迴與非遞迴,層次遍歷,建立二叉搜尋樹。include include include using namespace std typedef struct tree bstree bstree newbstree int n void createtree bs...