|
機器之心整理 項目作者:HUA Yang 春季到來,春招不久也會開始。在本項目中,作者為大家準備了 ML 算法工程師面試指南,它提供了完整的面試知識點、編程題及題解、各科技公司的面試題錦等內(nèi)容。目前該 GitHub 項目已經(jīng)有 1 萬+的收藏量,想要跳一跳的同學快來試試吧。
如下所示為整個項目的結(jié)構(gòu),其中從機器學習到數(shù)學主要提供的是筆記與面試知識點,讀者可回顧整體的知識架構(gòu)。后面從算法到筆試面經(jīng)主要提供的是問題及解答方案,根據(jù)它們可以提升整體的解題水平與編程技巧。 面試知識點 面試題多種多樣,但機器學習知識就那么多,那么為了春招或春季跳槽,何不過一遍 ML 核心知識點?在這個 GitHub 項目中,作者前一部分主要介紹了機器學習及各子領域的知識點。其中每一個知識點都只提供最核心的概念,如果讀者遇到不熟悉的算法或者遇到知識漏洞,可以進一步閱讀相關文獻。 項目主要從機器學習、深度學習、自然語言處理和數(shù)學等方面提供詳細的知識點,因為作者比較關注 NLP,所以并沒有提供詳細的計算機視覺筆記。 機器學習 首先對于機器學習,項目主要從基礎概念、基本實踐、基本算法和集成學習專題這四個方面概括 ML 的總體情況。其中基礎概念可能是最基本的面試問題,例如「偏差方差怎么權衡?」、「生成模型和判別模型的差別是什么?」、「先驗和后驗概率都是什么,它們能轉(zhuǎn)換嗎?」。 這些知識點一般是入門者都需要了解的,而對于 ML 基本實踐,主要會從如何做好傳統(tǒng) ML 開發(fā)流程的角度提問。例如「你如何選擇超參數(shù),能介紹一些超參數(shù)的基本搜索方法嗎?」、「混淆矩陣、準確率、精確率、召回率或 F1 值都是什么,如何使用它們度量模型的好壞?」、「你能介紹數(shù)據(jù)清洗和數(shù)據(jù)預處理的主要流程嗎,舉個例子?」。 這些問題都能在前兩部分的知識點中找到答案。后一部分的基本算法就非常多了,從最簡單的 Logistic 回歸到復雜的梯度提升樹,這一部分總結(jié)了主流的機器學習算法: 其中每一種算法都提供了最核心的概念,例如對于決策樹中的 CART 算法,筆記主要引用了李航《統(tǒng)計學習方法》中的描述: 最后機器學習還有一個關于集成方法的專題。除了支持向量機,集成方法相關的問題在 ML 中也比較重要,因為像 XGboost 和隨機森林等方法在傳統(tǒng) ML 中效果應該是頂尖的,被問到的概率也大得多。 深度學習 深度學習的內(nèi)容就相對比較多了,目前也有非常多的筆記或資料,但是我們可能會感覺深度學習的問題并沒有機器學習難。頂多會讓我們手推一個反向傳播算法,不會像手推支持向量機那樣讓我們從表達式推一下卷積網(wǎng)絡。如果要為深度學習打基礎,其實最好的辦法是學習 Ian Goodfellow 的《Deep Learning》,我們只要閱讀這本書的前兩部分:應用數(shù)學與機器學習基礎;深度網(wǎng)絡:現(xiàn)代實踐。第三部分因為涉及大量前沿研究的東西,我們暫時可以不急著學。 該項目主要從以下幾個方面介紹深度學習面試知識點:
前面 6 個專題都是介紹的筆記,每一個專題都有非常多的具體內(nèi)容,其中序列建模專題還引用了機器之心綜述的從循環(huán)到卷積,探索序列建模的奧秘。如下展示了優(yōu)化算法專題所包含的內(nèi)容: 在最后的《Deep Learning》整理中,項目作者給出了五十多道深度學習問題,并根據(jù)這些問題介紹《Deep Learning》中的知識點。如下為問題示例,不同的星號表示問題的難度: 自然語言處理與數(shù)學 后面的自然語言處理也是最近在重點更新的,目前介紹的方面主要有;
NLP 很多知識點其實都不算基礎內(nèi)容,這需要根據(jù)我們自己學習的領域收集復習內(nèi)容。不過像 NLP 基礎或詞嵌入等知識點,項目作者介紹得很詳細,它們也是 NLP 面試必備知識。 最后還有一些數(shù)學知識點,它們是算法工程師面試所需要具備的基礎。例如今日頭條算法工程師的實習生面試會問:「在圓環(huán)上隨機選取 3 個點,這 3 個點組成銳角三角形的概率?」,或者其它算個積分之類的。項目作者主要為面試準備了以下幾方面的知識點;
其中深度學習核心主要包含非線性激活函數(shù)、梯度下降和反向傳播。 算法題和筆試題 對于編程面試,基礎算法是必不可少的,它們一般體現(xiàn)在筆試題上,例如數(shù)據(jù)結(jié)構(gòu)、動態(tài)規(guī)劃或排列組合等。很多開發(fā)者可能感覺筆試解題會很難,因為題目并不會告訴你需要用什么樣的基礎算法來解決,全靠我們自己一步步解析題目。這就要求我們對各種基礎算法都比較熟悉,項目作者提供了以下基本算法專題:
這些算法題會介紹具體的問題、解題思路以及對應的解題代碼。例如在數(shù)據(jù)結(jié)構(gòu)中,我們?nèi)绾闻袛鄻?B 是不是樹 A 的子樹。 如下所示為解題代碼,注意基本上各基礎算法的題解都是用 C++寫的,作者會引用劍指 Offer 題解和 Leetcode 題解等的解決方案。 class Solution {此外,該項目還提供了 IO 模板和必備算法模板。作者表示不少筆試不像 LeetCode 那樣可以自動完成 I/O,我們需要手動完成數(shù)據(jù) I/O,而且如果我們沒有 ACM 經(jīng)驗,很可能會在這上面浪費很多時間。因此這里總結(jié)的幾種常見 IO 模板對于編程面試有很大的幫助,另外的算法模板同樣也是。 例如如果我們輸入不定數(shù)量個 Input,且以某個特殊輸入為結(jié)束標志,那么用 C 語言實現(xiàn)的模板為: 用 C++實現(xiàn)的模板為: // 示例 1面試真題 最后,項目作者還收集了十多家科技企業(yè)面試真題,并介紹從一面到三面的內(nèi)容與經(jīng)驗。 例如以下是頭條/字節(jié)跳動-深度學習/NLP 方向的三面概覽: 具體的面試題也會提供,如下所示為字節(jié)跳動 18 年 8 月的筆試題:積分卡牌游戲。 當然給了題目,對應的解決方案也會提供: 本文為機器之心整理,轉(zhuǎn)載請聯(lián)系本公眾號獲得授權。 ?------------------------------------------------ 加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com 投稿或?qū)で髨蟮溃?strong>content@jiqizhixin.com 廣告 & 商務合作:bd@jiqizhixin.com |
|
|
來自: taotao_2016 > 《計算機》