回覆列表
  • 1 # Mystic

    1 業界的大規模模型基本上是logistic regression和linear regression,所以sgd 和lbfgs很重要要了解,並行求導很重要要了解lr怎麼並行

    2 其次就是常見的機器學習演算法,比如svm gbdt knn等,要做到原理了解,能在壓力下快速應答。演算法的優劣和適應場景也要基本清楚

    3基本的演算法資料結構要熟練,連結串列二叉樹,快排歸併動歸等等…

  • 2 # AI4Robot

    我很適合來回答這個問題,因為我剛從傳統行業跳到網際網路公司,這一兩個月面試了很多一二線網際網路公司的機器學習相關職位。

    雖說是演算法工程師,但基本的程式設計能力是必須的,所以要至少掌握一門語言並熟悉常見的資料結構和演算法,推薦去leetcode刷刷題,技巧性很強,背下來也可以。

    別忘了置頂哈!

  • 3 # 追一科技

    前段時間我們在公司內部做了一期採訪,針對我司機器學習的研究院和工程師當初面試經過的,一共採訪了九個人,正好可以回答這個問題。下面摘取其中兩個:

    1、 Wind ——NLP工程師

    我之前是在研究院工作了兩年,之所以考慮來企業,一方面是處於生活上的考慮,還有一方面是因為現在學校其實已經離科技前沿越來越遠了,因為做科研需要很多資料,而這些資料越來越集中在企業的手裡。譬如我們之前有兩個專案其實都是和國內巨頭網際網路公司合作的,但是那些資料也不會給我們。所以現在越來越多的學術大牛比如楊老師都已經走入工業界了。

    我的面試是在公司,三位面試官一起跟聊了四個多小時。先是問我用過一些什麼樣的演算法,以工作專案為切入點,主要是和機器學習有關的專案。我之前在做機器視覺影象處理處理方面的工作,問我的主要是CNN,以及關於神經網路的一些基本概念。問了我一個現在很新穎也很流行的模型叫VGG,然後面試官問我是怎樣訓練這個模型的,因為現在市面上已經有訓練好了的現成的模型可以直接使用。我的回答是我是有自己訓練的,並且我自己剪裁了後面幾層網路,加上了我自己設計的一個全連線的模型,整個模型進行重新訓練。然後還問我訓練過程中有沒有考慮過over fitting的問題,我的回答是增加資料量,減少模型複雜度,然後面試官也提出了動態調節這種方法。後面我們又聊了些影象的特徵,因為我們做影象的時候常遇到非常大的資料,就涉及到怎樣壓縮這樣的資料。回答的也都還比較順暢。

    然後還問了我自己做的一些專案,音訊指紋和影片指紋演算法。這個技術可以用來標識和代表一段音訊,用來做搜尋和版權保護等方面的工作。另外影象指紋演算法也是類似的原理,主要也是利用影象的頻譜特性,但是提取特徵點的方法不同。這個環節面試官問了我一些具體的演算法和細節,比如landmark, DCT, STFT. 還聊了一些關於搜尋方面的技術,這個就主要是面試官給我講了,大家互相分享。

    最後還做了幾道演算法題,其中一個是,假設有一個包含2億個整型數的檔案,怎麼樣給他們排序。這個問題常規的做法有這麼幾步:1、分治——根據資料存在檔案中的位置分裂檔案到批次小檔案中.相對於樸素的排序,這是一種比較穩妥的解決方法。因為資料量太大了!我們不得不將大事化小,小事化了。2、排序 。3、歸併排序 這其中還涉及到的一些方法,比如快排,Hash,堆排序,字典樹等,這裡就不詳述了。

    2.Tony 演算法組實習生

    我的一面是電話面試。我簡歷上第一個專案做的是古詩詞生成器,用的是多層的 RNN 做的 Language model, cell 用的是基本的 LSTM。面試官先讓我介紹了模型大概設計,然後針對我的介紹提了幾個問題:怎麼評估生成的質量?詞向量怎麼生成的?有沒有看過其他文獻?能不能講一下他們的做法?我的回答是:1. 對於生成的句子只能透過人工去評估。在訓練過程則用的是 perplexity 去評估的,而 perplexity 是 2 的 cross entropy 次方。2. 詞向量有用 Word2Vec pretrain 過,但是因為資料比較充足,隨機初始化詞向量然後直接訓練也可以得到還不錯的效果。3. 至於文獻,我看過一篇14年的文章,裡面的做法是在基礎的多層 RNN 的基礎上加了很多古詩詞相關的先驗知識,比如詩詞的押韻,斷句方式等。

    問完了專案之後,接下來的問題感覺應該是在考察我知識的廣度。問我 RNN 除了用來做 Language Modeling,還可以用來做什麼?我的回答是情感分析、實體詞識別等句子分類任務。然後面試官緊接著問,現在如果我要用 RNN 做句子的分類,有什麼需要注意的?我的回答是,短文字的語義獲取對模型的要求很高,RNN 在這上面效果不是很好。當時舉了一個例子--"not bad",這種類似雙重否定的語義很難透過求和加非線性抓住。之前看過一個比較新的文章,用的是 Recursive Neural Tensor Network,它就能很好地抓住這種語義。後來還繼續解釋說,對於比較長的文字的話,其實只要文字足夠長,簡單的詞包也是能達到很好的效果。比如一篇黑川普的文章裡面肯定會用到很多負面的表達。面試官最後還問了我除了 Deep Learning 相關的知識,對其他的 Machine Learning 的知識瞭解的如何?我提了一下 SVM,他就立刻問 SVM 在什麼情況下效果會比較差?當時有些呆住了,因為自己沒有實際用過 SVM,所以只是答了 outlier 對分類效果影響會比較大,然後補充說可以用 soft margin 的方法解決這個問題。後來查了一下文獻才發現別有洞天,當時還擔心面試官會不滿意呢。

    二面是在公司面的,針對專案又做了一些細節提問。除了上面提到的古詩詞生成器之外,還具體問了我之前寫過的一個類似 Prisma 的圖片藝術風格轉換的程式。這是我當時的課程專案,先是用 python 把網路結構實現了一遍,後來又用 Tensor Flow 再做了一遍。我給面試官講了背後的模型原理,也展示了前陣子做出來的結果。另外一個是我之前參加過的資料探勘比賽,我講了當時用的演算法以及為什麼要選那個演算法。因為我提到所有機器學習相關的知識都是看網課自學的,面試官便還問了我閱讀文獻的頻率。除了這些問題之外,面試官還問我機器學習的方法在什麼情況下比較適合使用。這是很基本的問題,因為之前有仔細想過,所以自己答得還不錯。

    二面的最後是猝不及防的演算法題。第一道題是,假設資料庫裡有一億條搜尋請求,假設已經知道怎麼判斷兩條請求是不是一樣,要我設計一個演算法,快速從裡面找出出現頻率最高的十條。還有一道題是,假如有10萬個IP段,每個IP段對應一個城市。現在如果知道一個使用者的IP地址,如何快速找出其城市。雖然沒有仔細複習過演算法,但這兩個問題其實還蠻簡單的,我答得也比較順利。

    更多的面試經過和經驗分享可以檢視:http://www.toutiao.com/i6409813711887794690/

  • 4 # 紐比克

    工程師不是架構師,也不是科學家,更不是無所不知的雜家。有解決問題的能力最重要,是真正的實力所在。不懂沒關係,經過培訓能上手就行了。面試最怕的是那種沒有不知道的概念,一旦錄用動起手來不行,這種人行業裡俗稱混子。有些沒有經驗的面試者,經常會被這些人矇蔽。

  • 5 # 太平洋電腦網

    機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及機率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的效能,是人工智慧的核心技術之一。

    當然啦,你都準備去面試演算法工程師啦,這東西您肯定心裡很清楚的。

    領英前段時間釋出的《全球AI領域人才報告》,截至2017年一季度,基於領英平臺的全球AI領域技術人才數量超過190萬。美國相關人才總數超過85萬,佔據榜首。中國的相關人才總數也超過5萬人,位居全球第七。

    但是並不意味著您就一定能夠獲得offer,陰溝翻船的事情歷史上比比皆是。

    作為一個技術人員,您應該準備好跟面試官進行關於薪資/職業晉升途徑/公司狀況等,跟技術面試官談技術甚至筆試,所以我給出一下的建議:

    客觀估計自己的實力,合理定位

    您是入門級別、還是理解使用級別、實際應用級、大佬般的創造級。

    入門級別:是否瞭解演算法的內部構成模組?能不能對比多種演算法?

    理解使用級別:模型因為什麼而產生?這個模型構成各個模組是什麼?這些模組都有什麼功用?如何整合使用這些模組?

    實際應用級別:如何把創造出來的演算法應用於什麼場景?估計能夠得到什麼結果?

    大佬般的創造級別:通常不用面試,直接出offer..........

    瞭解行也薪資水平

    合理的薪資,HR也好辦,自己心裡也有數。不用怕開太高嚇走HR;被壓價的時候知道自己是否吃虧。

    瞭解與自身水平相似的同行平均薪資。這並不意味著是光看跟自身水平差不多的人,還需要看這些跟您面試的企業的規模是否相當。大公司的薪資福利相對好一點,小一點的公司會給更多的未來(股權之類的)。

    有兩個辦法:①上招聘網站做一次精細的檢視;②找從事同行業的同學朋友,跟他們商量一下。

    做好複習

    避免陰溝翻船,你需要在短時間裡有的放矢,快速回憶起相關的知識,從容面對技術官的提問,甚至應付筆試。

    但是機器學習的內容龐大,不可能面面俱全。那麼也就是老方法兩個:①上招聘網站,看該公司的的招聘要求,是結合資料探勘傳統演算法,機器學習淺層演算法,還是深度學習深層演算法在人工智慧領域的產品中進行分類和預測,還是一起來?是否以在影象識別、自然語言處理、輿情分析、語音識別等人工智慧方面的應用;

    ②找到該公司的相關員工,打探一下面試官的喜好,心裡做好準備。

    ④可以做做測試

    話說,機器學習的測試的話,您應該做得很多,可以試試自己的實力。(例如:https://datahack.analyticsvidhya.com/contest/skilltest-machine-learning/lb)

    ⑤找到做HR的同學,讓你給你做好面試前的準備,不要因為小事丟了工作。

  • 6 # 九章演算法

    首先,看一個機器學習工程師的技能圖譜,你看你掌握了多少

    如果你熟練的掌握了裡面的80%,那恭喜你,你的面試技術上基本是沒問題了,接下來進入正題。

    1、簡歷

    首先,想要進入一家公司,簡歷是必不可少的,一份漂亮的簡歷能讓你在眾多簡歷中脫穎而出,當然,這裡的漂亮並不僅僅是你的簡歷長得怎麼樣,而是裡面的內容

    新增簡歷時,哪些相關的側面專案會很好看?

    · 你處理缺失或混亂的資料的專案,例如一些人提供他們的位置和一些人沒有的情況。

    · 一個有很多地方都可以應用統計推理的專案,即不僅僅是平面資料

    · 一個應用機器學習解決了一個重要問題的專案(你可以使用ML在任何事情上,但它是否有用是另說),例如,預測人們在醫學論壇上描述的症狀是否能最終被診斷為疾病。

    2、瞭解公司背景

    瞭解你即將進行面試的公司背景:即為什麼公司會開放這樣一個職位 ?這是你準備面試的一個重要部分。知道你為什麼要接受面試,自己會被問到什麼,將有助於定位自己對這個公司所產生的價值。例如,如果一家公司正在招聘機器學習工程師,那麼你應該很清楚,他們正在努力解決一個複雜的問題,傳統的演算法解決方案難以應用,或者根本不能很好地運作。你還應該清楚的是,他們也非常積極地想解決了這個問題。

    3、確定核心問題

    在申請這樣一個職位時,你需要做的第一件事就是想象自己已經得到了這個offer。為此,你需要儘可能多地瞭解公司和職位的資訊。問問自己:我能為這個公司解決的核心問題是什麼?

    追求這個問題的答案的過程應該是很刺激的,可以促使你更多地瞭解關於這個問題的資訊,比如現有的解決方法、該領域的最新發展等。

    如果你明確的知道你申請的職位是屬於哪個團隊的,那麼就很容易挑選一個合適的問題;否則想想這家公司正在面臨的挑戰,然後試著預估他們可能提出的問題。

    4、探索潛在資料來源

    在確定問題以後,下一步就是準備工作的下一步應該是考慮你需要什麼資料來回答這些問題。其中一些資料可能很容易得到,而另一些資料可能需要寫額外的程式碼來收集。

    嘗試去挖掘這家公司的基礎設施和業務——他們從事什麼樣的業務,擁有什麼樣的API,已經收集了哪些資料等等。

    5、面試官對於特定角色問題

    (瞭解模型的工作原理)

    通常面試官建立技術對話的一種的方式是讓應聘者描述他們熟悉的模型如何工作。技術面試常常會給候選人帶來很大壓力,同時這也是一種讓應聘者稍稍放鬆,談論他們在這些情境中處理問題的的經驗和方法的事。應聘者即使選擇一些簡單的東西來回答也沒有關係,因為面試官是看應聘者是否真正瞭解模型,而不只是知道基礎知識。深入研究像KNN演算法或線性迴歸這樣簡單的東西,對應聘者來說是非常有幫助的。

    關於模型可能會被問到的的問題

    · 模型試圖解決什麼型別的問題?

    · 是否容易過擬合?如果是這樣 - 對此該怎麼辦?

    · 模型是否對資料做出了重要的假設?什麼時候這些可能假設可能是不現實的?我們如何檢查資料來測試這些假設是否得到滿足?

    · 模型有收斂問題嗎?它是否有一個隨機元件,或者相同的訓練資料是否始終生成相同的模型?我們如何處理訓練中的隨機效應?

    · 模型處理什麼型別的資料(數字,分類等)?

    · 模型可以處理丟失的資料嗎?如果我們在資料中找到缺少的欄位,該怎麼辦?

    · 對於同一型別的問題,我們可以用哪種替代模型來解決這個問題?

    更深入的機器學習問題

    · 什麼是EM演算法?給幾個應用程式

    · 什麼是深度學習?區別於傳統機器學習的一些主要特徵是什麼?

    · 廣義線性模型中的線性是什麼?

    · 什麼是機率圖模型?馬爾可夫網路與貝葉斯網路有什麼區別?

    · 舉一個非負矩陣分解的應用的例子

    · 你知道哪些降維方法,它們的異同點是什麼?

    · 如何評估由K-means執行時產生的叢集的質量?

    其實根據面試官和環節的不同,你可能會被問到很理論性的問題,比如上述某些問題。但你應該用這個機會來展示自己對公司的瞭解和對角色的定位。當被問到一些開放性問題,比如說“請描述一個你在做專案時遇到過的技術難題以及你是如何解決它的”時,最好選擇一個跟公司有關的話題來談。

    6、需掌握的技能和樣例問題

    機器學習工程師所必須掌握的 5 類技能:

    1、計算機科學基礎和程式設計能力

    對機器學習工程師而言,計算機科學基礎的重要性包括資料結構(資料堆疊、佇列、多位陣列、樹形以及影象等等)、演算法(搜尋、分類、最佳化、動態程式設計等)、科計算性與複雜性(P對NP、NP完全問題、大O符號以及近似演算法等)和計算機架構(儲存、快取、頻寬、死鎖和分散式處理等等)。

    2、機率論和數理統計

    機率的形式表徵(條件機率、貝葉斯法則、可能性、獨立性等)和從其中衍生出的技術(貝葉斯網、馬爾夫決策過程、隱藏式馬可夫模型等)是機器學習演算法的核心,這些理論可以用來處理現實世界中存在的不確定性問題。和這個領域密切相關的還有統計學,這個學科提供了很多種衡量指標(平均值、中間值、方差等)、分佈(均勻分佈、正態分佈、二項式分佈、泊松分佈等)和分析方法(ANOVA、假設實驗等),這些理論對於觀測資料模型的建立和驗證非常必要。很多機器學習演算法的統計建模程式都是可以擴充套件的。

    3、資料建模和評估

    資料建模就是對一個給定的資料庫的基本結構進行評估的過程,目的就是發現其中所蘊含的有用模式(相互關係,聚合關係、特徵向量等)和/或者預測以前案例(分類,迴歸、異常檢測等)的特徵。評估過程的關鍵就是不斷地對所給模型的優良效能進行評價

    4、應用機器學習演算法和庫

    儘管透過程式庫/軟體包/API(比如scikit-learn,Theano, Spark MLlib, H2O, TensorFlow等)可以廣泛地實現機器學習演算法的標準化執行,但是演算法的應用還包括選取合適的模型(決策、樹形結構、最近鄰點、神經網路、支援向量機器、多模型整合等)、適用於資料的學習程式(線性迴歸、梯度下降法、基因遺傳演算法、袋翻法、模型特定性方法等),同時還需要你能夠了解超引數對學習產生影響的方式

    5、軟體工程和系統設計

    在每天工作結束的時候,機器學習工程師通常產生的成果或者應交付的產品就是一種軟體。這種軟體其實也是一種小型外掛,它可以適用於相對更大型的產品或者服務的生態系統。軟體工程的最佳的實踐經驗(需求分析、系統設計、模組化、版本控制、測試以及歸檔等)對於產能、協作、質量和可維護性而言是不可獲取的無價之寶。

    計算機科學

    樣例問題:

    · 如何判斷一個而連結串列中是否有環?

    · 給定某一二叉查詢樹中的兩個元素,求它們的最近公共祖先。

    · 給一個棧排序

    · 基於比較排序演算法的時間複雜度是什麼?證明?

    · 如何求一個加權圖中兩個結點的最短路徑?如果有些權值是負的怎麼辦?

    · 求一個給定字串中所有的迴文子串?

    對這些問題你都要能夠推導你的解法的時間和空間複雜度(大 O 表示法),並且儘量用最低的複雜度解決。

    只有透過大量的練習才能將這些不同型別的問題爛熟於胸,從而在面試中迅速地給出一個高效的解法。

    機率論和數理統計

    樣例問題:

    一副撲克牌54張,現分成3等份每份18張,問大小王出現在同一份中的機率是多少?

    一個國家人們只想要男孩,每個家庭都會一直要孩子,只到他們得到一個男孩。如果生的是女孩,他們就會再生一個。如果生了男孩,就不再生了。那麼,這個國家裡男女比例如何?

    很多機器學習演算法都以機率論和統計作為理論基礎。對於這些基礎知識有清晰的概念是極為重要的。當然同時你也要能夠將這些抽象的概念與現實聯絡起來。

    資料建模和評估

    樣例問題:

    根據各種績效指標做出決策。

    什麼是ROC曲線,什麼是AUC(又名AUROC)?

    為什麼ROC曲線下的區域(AUROC)比原始精度更好,作為樣本外的評估指標?

    例如,如果你想檢測出只有1%人口普遍存在的癌症,您可以透過簡單地分類每個人都無癌症,建立一個達到99%準確度的模型。

    再例如,過去幾個世紀的氣象資料展現出一種迴圈的氣溫模式:一會升高一會下降。對於這樣的資料(一個年平均氣溫的序列),你會如何建模並預測未來 5 年的平均氣溫?

    應用機器學習演算法和庫

    樣例問題:

    LASSO 迴歸用 L1-norm 作為懲罰項,而嶺迴歸(Ridge Regression)則使用 L2-norm 作為懲罰項。這兩者哪個更有可能得到一個稀疏(某些項的係數為 0)的模型?

    在用反向傳播法訓練一個 10 層的神經網路時,你發現前 3 層的權值完全沒有變化,而 4 ~ 6 層的權值則變化得非常慢。這是為什麼?如何解決?

    你手上有一個關於小麥產出的資料集,包括年降雨量 R、平均海拔 A 以及小麥產量 O。你經過初步分析認為產量跟年降雨量的平方以及平均海報的對數之間存在關係,即:O = β_0 + β_1 x R^2 + β_2 x log(A)。能用線性迴歸求出係數 β 嗎?

    你可以透過像Kaggle、天池大資料競賽那樣的資料科學和機器學習挑戰來了解各種各樣的問題和它們之間的細微差別。多多參加這些比賽,並嘗試應用不同的機器學習模型。

    軟體工程和系統設計

    樣例問題:

    對於網易雲音樂那樣的平臺,你會收集哪些資料來衡量哪個型別的歌曲的熱度和使用者的參與度?

    一個簡單的垃圾郵件檢測系統是這樣的:它每次處理一封郵件,統計不同單詞的出現頻率(Term frequency),並將這些頻率與之前已經被標註為垃圾 / 正常郵件的那些頻率進行比較。現在需要對這系統進行拓展來處理海量的郵件流量,請設計一個 Map-Reduce 方案在一個叢集上部署這個系統。

    本文主要從兩個方面闡述了機器學習工程師的面試:情景方面和技術方面。對於大多機器學習者來說,沉浸在技術準備中是很平常的事,他們對面試的原因卻很少考慮,為什麼公司會有這樣一個職位開放?為什麼他們要對你感興趣?理解這些問題能夠在你回答技術問題時提供情景,從而讓你在諸多的應聘者中脫穎而,成為最適合公司的人。因此我不建議應聘者忽略前者只重視後者。

  • 7 # DatawhaleCN

    應該是一份屬於自己的面經。

    牛客網,知乎等眾多網站上包含了數以百萬計的面經,但往往大而散,面試者在準備面試時候去翻閱不但浪費時間,翻閱材料越多,越覺得自己很多知識點都沒有掌握,造成心理上極大的壓力,導致面試中不能發揮正常水平甚至面試失敗。這就和高考前夕是一個道理,老師會告誡你:迴歸基礎,不要再去做難題。迴歸基礎為了以不變應萬變,不做難題則是心理上的博弈。

    那說到迴歸基礎,每個人的做法又不同。有的人會拿起課本,將書中基礎概念理論全部過一遍,沒有針對性,沒有側重點。這時候就需要看看學霸們是怎麼做的了,學霸會拿起自己的筆記本,上邊全是重點難點易錯點,是針對自己的學習情況總結出來的,這也是為什麼每年狀元的筆記本能賣出天價的原因之一吧。

    其實,如果你是位有心人,那應該有自己的一份面試筆記,記錄求職中常涉及到的知識點和自己做的專案中常被問到的問題。每次面試之前看一遍,做到舉一反三,融會貫通,熟捻於心,方能在每次面試中汲取經驗,最後從容應對。我個人就有自己的面試筆記,每次面試之前都會翻一遍,邊看邊想,但求好運。

    https://mp.weixin.qq.com/s/AimQI8Z70e1M68uQlBCjdQ

  • 8 # it橘子鋪

    我看了其他回答,剛好最近也在知乎上看見這個話題,有一句話送給你。

    把你做過的機器學習專案的細節講清楚,對經典的以及前沿的機器學習知識有所瞭解。

    機器學習面試要考察三方面的內容,

    1、理論基礎;

    2、工程能力;

    3、業務理解。

    但資深一點的面試官只要問你一個專案,這三方面的能力也就都考察到了。我記得我的一位面試同學介紹自己實習時候用過XGBoost預測股票漲跌,那面試官會由淺入深依次考察。

    GBDT的原理 (理論基礎)決策樹節點分裂時如何選擇特徵,寫出Gini index和Information Gain的公式並舉例說明(理論基礎)分類樹和迴歸樹的區別是什麼?(理論基礎)與Random Forest作比較,並以此介紹什麼是模型的Bias和Variance(理論基礎)XGBoost的引數調優有哪些經驗(工程能力)XGBoost的正則化是如何實現的(工程能力)XGBoost的並行化部分是如何實現的(工程能力)為什麼預測股票漲跌一般都會出現嚴重的過擬合現象(業務理解)針對這個問題有同學覺得沒什麼太多好講的,我在評論裡給了我的理解,我不是做這塊的,可能比較淺顯,大家理解一下面試官的意圖就好。如果選用一種其他的模型替代XGBoost,你會選用什麼?(業務理解和知識面)除了

    上面的問題,可能檢查一下面試者對NN,RNN,個別聚類演算法,模型評估等知識的理解程度以及對GAN,LSTM,online learning是否有基本理解,這是考察面試者對經典以及前沿的機器學習知識的瞭解程度。再稍微檢查一下面試者對工具的瞭解程度,寫一段簡單的spark或者map reduce的程式,如果無誤的話,那麼可以說這位面試者的機器學習部分是完全合格的。

    當然,如果你介紹的專案是用CNN實現的,這條考察線路當然是不一樣的,大概會是

    LR推導->梯度消失->啟用函式->tensorflow調參經驗這條路,大家體會意思就好。除此之外,還有其他工程方向的面試官會著重考察coding和一些演算法題目,那是另外一個話題了。

    總之:講清楚自己所做的,嚴肅對待在簡歷上所寫的。

    文章來自知乎作者問題:如何準備機器學習工程師的面試?。

  • 9 # 人民郵電出版社

    備戰機器學習工程師面試,你需要掌握這些經典面試題

    金九銀十,又到了就業旺季,網際網路公司的秋招如火如荼的進行著。機器學習類崗位依然非常熱門且高薪,但想在競爭激烈的面試中殺出重圍,必須有充足的準備。

    如何能夠短時間內抓住機器學習知識的技術重點,集中突擊? 如何不再懼怕“演算法”? 如何才能在面試中對答如流,打造屬於自己的“offer收割機”?

    刷題是必不可少的步驟。應聘前,你需要了解的內容有:機器學習的基本概念和分類(訓練/測試資料、監督/非監督學習等)、經典的機器學習模型(支援向量機、樸素貝葉斯、隨機森林等)、深度學習模型(卷積神經網路、迴圈神經網路、生成式對抗網路等);特徵工程(特徵組合、特徵選擇等),模型評估(評價指標、超引數的選擇等),最佳化演算法(損失函式、梯度下降等),數學基礎(機率論、線性代數等),工程能力(資料結構與演算法、機器學習平臺等),業務與應用(計算機視覺、自然語言處理等)。

    Q1:如何對貝葉斯網路進行取樣 (8.6)

    對一個沒有觀測變數的貝葉斯網路進行取樣,最簡單的方法是祖先採樣(Ancestral Sampling),它的核心思想是根據有向圖的順序,先對祖先節點進行取樣,只有當某個節點的所有父節點都已完成取樣,才對該節點進行取樣。以場景描述中的圖8.9 為例,先對Cloudy 變數進行取樣,然後再對Sprinkler 和Rain 變數進行取樣,最後對WetGrass 變數取樣,如圖8.10 所示(圖中綠色表示變數取值為True,紅色表示取值為False)。根據貝葉斯網路的全機率公式

    可以看出祖先採樣得到的樣本服從貝葉斯網路的聯合機率分佈。

    如果只需要對貝葉斯網路中一部分隨機變數的邊緣分佈進行取樣, 可以用祖先採樣先對全部隨機變數進行取樣,然後直接忽視那些不需要的變數的取樣值即可。由圖可見,如果需要對邊緣分佈p(Rain) 進行取樣,先用祖先採樣得到全部變數的一個樣本,如(Cloudy=T, Sprinkler=F,Rain=T,WetGrass=T),然後忽略掉無關變數,直接把這個樣本看成是Cloudy=T 即可。

    接下來考慮含有觀測變數的貝葉斯網路的取樣,如圖8.11 所示。網路中有觀測變數(Sprikler=T,WetGrass=T)(觀測變數用斜線陰影表示),又該如何取樣呢?最直接的方法是邏輯取樣,還是利用祖先採樣得到所有變數的取值。如果這個樣本在觀測變數上的取樣值與實際觀測值相同,則接受,否則拒絕,重新取樣。這種方法的缺點是取樣效率可能會非常低,隨著觀測變數個數的增加、每個變數狀態數目的上升,邏輯取樣法的取樣效率急劇下降,實際中基本不可用。

    因此,在實際應用中,可以參考重要性取樣的思想,不再對觀測變數進行取樣,只對非觀測變數取樣,但是最終得到的樣本需要賦一個重要性權值:

    其中E 是觀測變數集合。這種取樣方法稱作似然加權取樣(Likelihood Weighted Sampling),產生的樣本權值可以用於後續的積分操作。在有觀測變數(Sprikler=T,WetGrass=T)時,可以先對Cloudy 進行取樣,然後對Rain 進行取樣,不再對Sprinkler 和WetGrass 取樣(直接賦觀測值),如圖8.12 所示。這樣得到的樣本的重要性權值為

    w ∝ p(Sprinkler=T|Cloudy=T)·p(WetGrass=T|Sprinkler=T, Rain=T)=0.1×0.99=0.099.

    除此之外,還可以用MCMC取樣法來進行取樣。具體來說,如果採用Metropolis-Hastings 取樣法的話,如圖8.13所示,只需要在隨機向量(Cloudy, 、Rain)上選擇一個機率轉移矩陣,然後按照機率轉移矩陣不斷進行狀態轉換,每次轉移有一定機率的接受或拒絕,最終得到的樣本序列會收斂到目標分佈。最簡單的機率轉移矩陣可以是:每次獨立地隨機選擇(Cloudy, Rain)的四種狀態之一。如果採用吉布斯取樣法的話,根據條件機率p(Cloudy|Rain, Sprinkler, WetGrass) 和p(Rain|Cloudy, Sprinkler, WetGrass), 每次只對(Cloudy, Rain)中的一個變數進行取樣,交替進行即可。

    Q2:ResNet 的提出背景和核心理論 (9.6)

    ResNet的提出背景是解決或緩解深層的神經網路訓練中的梯度消失問題。假設有一個L 層的深度神經網路,如果我們在上面加入一層, 直觀來講得到的L+1 層深度神經網路的效果應該至少不會比L 層的差。因為我們簡單地設最後一層為前一層的複製(用一個恆等對映即可實現),並且其他層維持原來的引數即可。然而在進行反向傳播時,我們很難找到這種形式的解。實際上,透過實驗發現,層數更深的神經網路反而會具有更大的訓練誤差。在CIFAR-10 資料集上的一個結果如圖9.22 所示,56 層的網路反而比20 層的網路訓練誤差更大,這很大程度上歸結於深度神經網路的梯度消失問題。

    為了解釋梯度消失問題是如何產生的。回顧第3 節推匯出的誤差傳播公式

    將式(9.31)再展開一層,可以得到

    可以看到誤差傳播可以寫成引數 、 以及導數 、 連乘的形式。當誤差由第L 層(記為 )傳播到除輸入以外的第一個隱含層(記為 )的時候,會涉及非常多的引數和導數的連乘,這時誤差很容易產生消失或者膨脹,影響對該層引數的正確學習。因此深度神經網路的擬合和泛化能力較差,有時甚至不如淺層的神經網路模型精度更高。

    ResNet 透過調整網路結構來解決上述問題。首先考慮兩層神經網路的簡單疊加(見圖9.23(a)),這時輸入x 經過兩個網路層的變換得到H(x),啟用函式採用ReLU。反向傳播時,梯度將涉及兩層引數的交叉相乘,可能會在離輸入近的網路層中產生梯度消失的現象。ResNet 把網路結構調整為,既然離輸入近的神經網路層較難訓練,那麼我們可以將它短接到更靠近輸出的層,如圖9.23(b)所示。輸入x經過兩個神經網路的變換得到F(x),同時也短接到兩層之後,最後這個包含兩層的神經網路模組輸出H(x)=F(x)+x。這樣一來,F(x) 被設計為只需要擬合輸入x 與目標輸出 的殘差 ,殘差網路的名稱也因此而來。如果某一層的輸出已經較好的擬合了期望結果,那麼多加入一層不會使得模型變得更差,因為該層的輸出將直接被短接到兩層之後, 相當於直接學習了一個恆等對映,而跳過的兩層只需要擬合上層輸出和目標之間的殘差即可。

    ResNet 可以有效改善深層的神經網路學習問題,使得訓練更深的網路成為可能,如圖9.24 所示。圖9.24(a)展示的是傳統神經網路的結果,可以看到隨著模型結構的加深訓練誤差反而上升;而圖9.24(b) 是ResNet 的實驗結果,隨著模型結構的加深,訓練誤差逐漸降低,並且優於相同層數的傳統的神經網路。

    Q3:WGAN 解決了原始 GAN 中的什麼問題 (13.2)

    直覺告訴我們:不要讓生成器在高維空間傻傻地佈網,讓它直接到低維空間“抓”真實資料。道理雖然是這樣,但是在高維空間中藏著無數的低維子空間,如何找到目標子空間呢?站在大廈頂層,環眺四周,你可以迅速定位遠處的山巒和高塔,卻很難知曉一個個樓宇間辦公室裡的事情。你需要線索,而不是簡單撒網。處在高維空間,對抗隱秘的低維空間,不能再用粗暴簡陋的方法,需要有特殊武器,這就是Wasserstein 距離(見圖13.7),也稱推土機距離(Earth Mover distance)

    怎麼理解這個公式?想象你有一個很大的院子,院子裡有幾處坑坑窪窪需要填平,四個牆角都有一堆沙子,沙子總量正好填平所有坑。搬運沙子很費力,你想知道有沒有一種方案,使得花的力氣最少。直覺上, 每個坑都選擇最近的沙堆,搬運的距離最短。但是存在一些問題,如果最近的沙堆用完了,或者填完坑後近處還剩好多沙子,或者坑到幾個沙堆的距離一樣,我們該怎麼辦?所以需要設計一個系統的方案,通盤考慮這些問題。最佳方案是上面目標函式的最優解。可以看到,當沙子分佈和坑分佈給定時,我們只關心搬運沙子的整體損耗,而不關心每粒沙子的具體擺放,在損耗不變的情況下,沙子擺放可能有很多選擇。對應式(13.16),當你選擇一對(x,y) 時,表示把x 處的一些沙子搬到y 處的坑,可能搬部分沙子,也可能搬全部沙子,可能只把坑填一部分,也可能都填滿了。x 處沙子總量為 ,y 處坑的大小為 ,從x 到y的沙子量為γ(x,y),整體上滿足等式

    為什麼Wasserstein 距離能克服JS 距離解決不了的問題?理論上的解釋很複雜,需要證明當生成器分佈隨引數θ 變化而連續變化時,生成器分佈與真實分佈的Wasserstein 距離也隨θ 變化而連續變化,並且幾乎處處可導,而JS 距離不保證隨θ 變化而連續變化。

    通俗的解釋,接著“佈網”的比喻,現在生成器不再“佈網”,改成“定位追蹤”了,不管真實分佈藏在哪個低維子空間裡,生成器都能感知它在哪,因為生成器只要將自身分佈稍做變化,就會改變它到真實分佈的推土機距離;而JS 距離是不敏感的,無論生成器怎麼變化,JS 距離都是一個常數。因此,使用推土機距離,能有效鎖定低維子空間中的真實資料分佈。

    其他常見經典面試題:

    Q:如何緩解影象分類任務中訓練資料不足帶來的問題?(特徵工程)

    Q:超引數有哪些調優方法?(模型評估)

    Q:訓練誤差為0的SVM分類器一定存在嗎?(經典演算法)

    Q:自組織對映神經網路是如何工作的?(非監督學習)

    Q:L1正則化使得模型引數具有稀疏性的原理是什麼?(最佳化演算法)

    Q:XGBoost與GBDT的聯絡和區別有哪些?(整合學習)

    Q:在GAN的生成器和判別器中應該怎樣設計深層卷積結構?(生成式對抗網路)

    ……

    以上面試題都來自知名網際網路公司Hulu機器學習演算法研究崗位的真實面試場景,而像這樣的經典題目和解答,有超過100道收錄在《百面機器學習》這本機器學習面試寶典中。

    《百面機器學習》是一本怎樣的書?

    《百面機器學習》出版自2018年,書中收錄了超過100道機器學習演算法工程師的面試題目和解答,其中大部分源於Hulu演算法研究崗位的真實場景。

    集結15位一線演算法工程師,來自全球頂尖影片流媒體公司hulu

    本書按照面試的邏輯,從日常工作、生活中各種有趣的現象出發,梳理了知識點和工具與業務場景結合能力,不僅囊括了機器學習的基本知識 ,而且還包含了成為出眾演算法工程師的相關技能。機器學習面試中最常見的考點,你都可以在這本書中找到。

    《百面機器學習》這本書無論是入門還是技術進階都給出相對應的學習脈絡圖。

  • 中秋節和大豐收的關聯?
  • 網際網路資訊科技的發展,真正給人們帶來了什麼好處?