A. 如何准備機器學習工程師的面試
機器學習方面的面試主要分成三個部分:
1. 演算法和理論基礎
2. 工程實現能力與編碼水平
3. 業務理解和思考深度
1. 理論方面,我推薦最經典的一本書《統計學習方法》,這書可能不是最全的,但是講得最精髓,薄薄一本,適合面試前突擊准備。
我認為一些要點是:
統計學習的核心步驟:模型、策略、演算法,你應當對logistic、SVM、決策樹、KNN及各種聚類方法有深刻的理解。能夠隨手寫出這些演算法的核心遞歸步的偽代碼以及他們優化的函數表達式和對偶問題形式。
非統計學習我不太懂,做過復雜網路,但是這個比較深,面試可能很難考到。
數學知識方面,你應當深刻理解矩陣的各種變換,尤其是特徵值相關的知識。
演算法方面:你應當深刻理解常用的優化方法:梯度下降、牛頓法、各種隨機搜索演算法(基因、蟻群等等),深刻理解的意思是你要知道梯度下降是用平面來逼近局部,牛頓法是用曲面逼近局部等等。
2. 工程實現能力與編碼水平
機器學習從工程實現一般來講都是某種數據結構上的搜索問題。
你應當深刻理解在1中列出的各種演算法對應應該採用的數據結構和對應的搜索方法。比如KNN對應的KD樹、如何給圖結構設計數據結構?如何將演算法map-red化等等。
一般來說要麼你會寫C,而且會用MPI,要麼你懂Hadoop,工程上基本都是在這兩個平台實現。實在不濟你也學個python吧。
3. 非常令人失望地告訴你盡管機器學習主要會考察1和2
但是實際工作中,演算法的先進性對真正業務結果的影響,大概不到30%。當然演算法必須要足夠快,離線演算法最好能在4小時內完成,實時演算法我沒搞過,要求大概
更高。
機器學習大多數場景是搜索、廣告、垃圾過濾、安全、推薦系統等等。對業務有深刻的理解對你做出來的系統的結果影響超過70%。這里你沒做過實際的項目,是
完全不可能有任何體會的,我做過一個推薦系統,沒有什麼演算法上的高大上的改進,主要是業務邏輯的創新,直接就提高了很明顯的一個CTR(具體數目不太方便
透露,總之很明顯就是了)。如果你做過實際的項目,一定要主動說出來,主動讓面試官知道,這才是最大最大的加分項目。
最後舉個例子,阿里內部機器學習挑戰賽,無數碾壓答主10000倍的大神參賽。最後冠軍沒有用任何高大上的演算法而是基於對數據和業務的深刻理解和極其細致
的特徵調優利用非常基本的一個演算法奪冠。所以啥都不如真正的實操擼幾個生產項目啊。
B. 《精通數據科學:從線性回歸到深度學習》pdf下載在線閱讀全文,求百度網盤雲資源
《精通數據科學:從線性回歸到深度學習》(唐亘)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/1cQ6f79HuCy5Spcrx81DsiQ
書名:精通數據科學:從線性回歸到深度學習
作者:唐亘
豆瓣評分:7.2
出版社:人民郵電出版社
出版年份:2018-5-8
頁數:432
內容簡介:
數據科學是一門內涵很廣的學科,它涉及到統計分析、機器學習以及計算機科學三方面的知識和技能。本書深入淺出、全面系統地介紹了這門學科的內容。
本書分為13章,最初的3章主要介紹數據科學想要解決的問題、常用的IT工具Python以及這門學科所涉及的數學基礎。第4-7章主要討論數據模型,主要包含三方面的內容:一是統計中最經典的線性回歸和邏輯回歸模型;二是計算機估算模型參數的隨機梯度下降法,這是模型工程實現的基礎;三是來自計量經濟學的啟示,主要涉及特徵提取的方法以及模型的穩定性。接下來的8-10章主要討論演算法模型,也就是機器學習領域比較經典的模型。這三章依次討論了監督式學習、生成式模型以及非監督式學習。目前數據科學最前沿的兩個領域分別是大數據和人工智慧。本書的第11章將介紹大數據中很重要的分布式機器學習,而本書的最後兩章將討論人工智慧領域的神經網路和深度學習。
本書通俗易懂,而且理論和實踐相結合,可作為數據科學家和數據工程師的學慣用書,也適合對數學科學有強烈興趣的初學者使用。同時也可作為高等院校計算機、數學及相關專業的師生用書和培訓學校的教材。
作者簡介:
唐亘,數據科學家,專注於機器學習和大數據,熱愛並積極參與Apache Spark、scikit-learn等開源項目。作為講師和技術顧問,為多家機構(包括惠普、華為、復旦大學等)提供百餘場技術培訓。
此前的工作和研究集中於經濟和量化金融,曾參與經濟合作與發展組織(OECD)的研究項目並發表論文,並擔任英國知名在線出版社Packt的技術審稿人。
曾獲得復旦大學的數學和計算機雙學士學位;巴黎綜合理工的金融碩士學位;法國國立統計與經濟管理學校的數據科學碩士學位。
C. 《終極演算法機器學習和人工智慧如何重塑世界》epub下載在線閱讀全文,求百度網盤雲資源
《終極演算法機器學習和人工智慧如何重塑世界》([美]佩德羅·多明戈斯)電子書網盤下載免費在線閱讀
鏈接:
書名:終極演算法機器學習和人工智慧如何重塑世界
作者:[美] 佩德羅·多明戈斯
出版社:中信出版集團
副標題:機器學習和人工智慧如何重塑世界
原作名:The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World
譯者:黃芳萍
出版年:2017-1-1
頁數:402
內容簡介
演算法已在多大程度上影響我們的生活?購物網站用演算法來為你推薦商品,點評網站用演算法來幫你選擇餐館,GPS系統用演算法來幫你選擇最佳路線,公司用演算法來選擇求職者……當機器最終學會如何學習時,將會發生什麼?不同於傳統演算法,現在悄然主導我們生活的是「能夠學習的機器」,它們通過學習我們瑣碎的數據,來執行任務;它們甚至在我們還沒提出要求,就能完成我們想做的事。
作者簡介
佩德羅•多明戈斯(Pedro Domingos)美國華盛頓大學計算機科學教授,加州大學歐文分校信息與計算機科學博士,在機器學習與數據挖掘方面著有200多部專業著作和數百篇論文。國際機器學習學會聯合創始人,《機器學習》雜志編委會成員,JAIR前副主編。美國人工智慧協會院士(AAAI Fellow,國際人工智慧界的最高榮譽),榮獲SIGKDD創新大獎(數據科學領域的最高獎項)、斯隆獎(Sloan Fellowship)、美國國家科學基金會成就獎(NSF CAREER Award)、富布賴特獎學金、IBM學院獎以及多個頂級論文獎項。
D. 幾種常見的循環神經網路結構RNN、LSTM、GRU
傳統文本處理任務的方法中一般將TF-IDF向量作為特徵輸入。顯而易見,這樣的表示實際上丟失了輸入的文本序列中每個單詞的順序。在神經網路的建侍空模過程中,一般的前饋神經網路,如卷積神經網路,通常接受一個定長的向量作為輸入。卷積神經網路對文本數據建模時,輸入變長的字元串或者單詞串,然後通過滑動窗口加池化的方式將原先的輸入轉換成一個固定長度的向量表示,這樣做可以捕捉到原文本中的一些局部特徵,但是兩個單詞之間的長距離依賴關系還是很難被學習到。
循環神經網路卻能很好地處理文本數據變長並且有序的輸入序列。它模擬了人閱讀一篇文章的順序,從前到後閱讀文章中的每一個單詞,將前面閱讀到的有用信息編碼到狀態變數中去,從而擁有了一定的記憶能力,可以更好地理解之後的文本。
其網路結構如下圖所示:
由圖可見,t是時刻,x是輸入層,s是隱藏層,o是輸出層,矩陣W就是隱藏層上一次的值作為這一次的輸入的權重。
如果反復把式 2 帶入到式 1,將得到:
其中f和g為激活函數,U為輸入層到隱含層的權重矩陣,W為隱含層從上一時刻到下一時刻狀態轉移的權重矩陣。在文本分類任務中,f可以選取Tanh函數或者ReLU函數,g可以採用Softmax函數。
通過最小化損失誤差(即輸出的y與真實類別之間的距離),我們可以不斷訓練網路,使得得到的循環神經網路可以准確地預測文本所屬的類別,達到分類目的。相比於卷積神經網路等前饋神經網路,循環神經網路由於具備對序列順序信息的刻畫能力,往往能得到更准確的結果。
RNN的訓練演算法為:BPTT
BPTT的基本原理和BP演算法是一樣的,同樣是三步:
1.前向計算每個神經元的輸出值;
2.反向計算每個神經元的誤差項值,它是誤差函數E對神經元j的加權輸入的偏導數;
3.計算每個權重的梯度。
最後再用隨機梯度下降演算法更新權重。
具體參考: https://www.jianshu.com/p/39a99c88a565
最後由鏈式法則得到下面以雅可比矩陣來表達的每個權重的梯度:
由於預測的誤差是沿著神經網路的每一層反向傳播的,因此當雅克比矩陣的最大特徵值大於1時,隨著離輸出越來越遠,每層的梯度大小會呈指數增長,導致梯度爆炸;反之,若雅克比矩陣的最大特徵值小於1,梯度的大小會呈指數縮小,產生梯度消失。對於普通的前饋網路來說,梯度消失意味著無法通過加深網路層次來改善神經網路的預測效果,因為無論如何加深網路,只有靠近輸出的若干層才真正起到學習的作用。 這使得循環神經網路模型很難學習到輸入序列中的長距離依賴關系 。
關於RNN梯度下降的詳細推導可以參考: https://zhuanlan.hu.com/p/44163528
梯度爆凳缺炸的問題可以通過梯度裁剪來緩解,即當梯度的範式大於某個給定值時,對梯度進行等比收縮。而梯度消失問題相對比較棘手,需要對模型本身進行改進。深度殘差網路是對前饋神經網路的改進,通過殘差學習的方式緩解了梯度消失的現象,從而使得我們能夠學習到更深層的網路表示;而對於循環神經網路來說,長短時記憶模型及其變種門控循環單元等模型通過加入門控機制,很大程度上彌補了梯度消失所帶來的損失。
LSTM的網路機構圖如下所示:
與傳統的循環神經網路相比,LSTM仍然是基於xt和ht−1來計算ht,只不過對內部的結構進行了更加精心的設計,加入了輸入門it 、遺忘門ft以及輸出門ot三個門和一個內部記憶單元ct。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中;遺老粗瞎忘門控制前一步記憶單元中的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決於當前的記憶單元。
在經典的LSTM模型中,第t層的更新計算公式為
其中it是通過輸入xt和上一步的隱含層輸出ht−1進行線性變換,再經過激活函數σ得到的。輸入門it的結果是向量,其中每個元素是0到1之間的實數,用於控制各維度流過閥門的信息量;Wi 、Ui兩個矩陣和向量bi為輸入門的參數,是在訓練過程中需要學習得到的。遺忘門ft和輸出門ot的計算方式與輸入門類似,它們有各自的參數W、U和b。與傳統的循環神經網路不同的是,從上一個記憶單元的狀態ct−1到當前的狀態ct的轉移不一定完全取決於激活函數計算得到的狀態,還由輸入門和遺忘門來共同控制。
在一個訓練好的網路中,當輸入的序列中沒有重要信息時,LSTM的遺忘門的值接近於1,輸入門的值接近於0,此時過去的記憶會被保存,從而實現了長期記憶功能;當輸入的序列中出現了重要的信息時,LSTM應當把其存入記憶中,此時其輸入門的值會接近於1;當輸入的序列中出現了重要信息,且該信息意味著之前的記憶不再重要時,輸入門的值接近1,而遺忘門的值接近於0,這樣舊的記憶被遺忘,新的重要信息被記憶。經過這樣的設計,整個網路更容易學習到序列之間的長期依賴。
GRU是在LSTM上進行簡化而得到的,GRU的網路結構如下所示:
Zt代表更新門,更新門的作用類似於LSTM中的遺忘門和輸入門,它能決定要丟棄哪些信息和要添加哪些新信息。
Rt代表重置門,重置門用於決定丟棄先前信息的程度。
要注意的是,h只是一個變數,因此在每個時刻,包括最後的線性組合,h都是在用以前的自己和當前的備選答案更新自己。舉例來說,這一個變數好比一杯酒,每次我們要把一部分酒倒出去,並把倒出去的酒和新加入的原料混合,然後在倒回來,這里的reset控制的就是要倒出去的,並且混合好之後再倒回來的酒的比例,而update控制的則是用多大的比例混合新原料和倒出來的之前調制好的酒。同理,也可以以此理解LSTM,LSTM的遺忘門功能上和reset相似,而輸入門與update相似,不同之處在於LSTM還控制了當前狀態的exposure,也就是輸出門的功能,這是GRU所沒有的。
1.百面機器學習
2. https://zhuanlan.hu.com/p/45649187
3. https://www.jianshu.com/p/39a99c88a565