機器學習算法工程師面試題及答案,個別沒有寫

1快速排序
2介紹下邏輯迴歸;損失函數;代價函數;加正則化項的作用。
https://blog.csdn.net/jk123vip/article/details/80591619
分類和迴歸是機器學習可以解決兩大主要問題,從預測值的類型上看,連續變量預測的定量輸出稱爲迴歸;離散變量預測的定性輸出稱爲分類。例如:預測明天多少度,是一個迴歸任務;預測明天陰、晴、雨,就是一個分類任務。
線性迴歸

預測函數
在一維特徵空間,線性迴歸是通過學習一條直線hθ(x)=θ0+θ1x1,使得這條直線儘可能擬合所有已有的看到的點y(觀測數據),並希望未看到的數據(測試數據)也儘可能落在這條線上(泛化性能),hθ是預測值,y是實際值。

損失函數
那麼怎樣評價它對於觀測到的數據點擬合得好壞呢?所以需要對我們做出的假設h進行評估,一般這個函數成爲損失函數(loss function)
很直觀的想法是希望預測值與實際值儘可能接近,即看預測值與實際值之間的均方誤差是否最小,定義線性迴歸損失函數爲
J(θ)=1/2m∑(hθ(x(i))−y(i))2
所以現在變成了一個優化問題,即找到要找到令損失函數J(θ)J最小的θ。定義均方誤差有着非常好的幾何含義,對應常用的歐式距離(Euclidean distance),基於均方誤差最小化進行模型求解的方法稱爲“最小二乘法”(least square method)。
最小二乘法
最小二乘法是一種完全數學描述的方法,用矩陣表示J(θ)=1/2(Xθ−Y)2,展開並對其求偏導,令偏導∂J(θ)/∂θ=0即可得到所求的θ
θ=(XTX)−1XTY
然而現實任務中當特徵數量大於樣本數時,XTX不滿秩,此時θ有多個解;而且當數據量大時,求矩陣的逆非常耗時;對於不可逆矩陣(特徵之間不相互獨立),這種正規方程方法是不能用的。所以,還可以採用梯度下降法,利用迭代的方式求解θ。

梯度下降法
梯度下降法是按下面的流程進行的:
1)首先對θ賦值,這個值可以是隨機的,也可以讓θ是一個全零的向量。
2)改變θ的值,使得θ按梯度下降的方向進行減少。

邏輯迴歸(Logistic Regression)
邏輯迴歸由於存在易於實現、解釋性好以及容易擴展等優點,被廣泛應用於點擊率預估(CTR)、計算廣告(CA)以及推薦系統(RS)等任務中。邏輯迴歸雖然名字叫做迴歸,但實際上卻是一種分類學習方法。
線性迴歸完成的是迴歸擬合任務,而對於分類任務,我們同樣需要一條線,但不是去擬合每個數據點,而是把不同類別的樣本區分開來。

這樣求出的θ3θ3和θ4θ4就會非常小,接近0,得到一個近似的二次函數。
一般來說,正規化背後的思路就是,如果我們的參數值對應一個較小值的話(參數值比較小),那麼往往我們會得到一個形式更簡單的假設。
但更一般地說,如果我們像懲罰θ3θ3和θ4θ4這樣懲罰其它參數,那麼我們往往可以得到一個相對較爲簡單的假設。
實際上,這些參數的值越小,通常對應于越光滑的函數,也就是更加簡單的函數。因此就不易發生過擬合的問題。
假如我們有非常多的特徵,我們並不知道其中哪些特徵我們要懲罰,我們將對所有的特徵進行懲罰,並且讓代價函數最優化算法來選擇這些懲罰的程度。我們需要修改代價函數,在後面添加一個正則項,收縮每個參數。

3激活函數,傳統的激活函數和現在的激活函數有什麼不同
https://blog.csdn.net/cyh_24/article/details/50593400
激活函數通常有如下一些性質:
非線性: 當激活函數是線性的時候,一個兩層的神經網絡就可以逼近基本上所有的函數了。但是,如果激活函數是恆等激活函數的時候(即f(x)=xf(x)=x),就不滿足這個性質了,而且如果MLP使用的是恆等激活函數,那麼其實整個網絡跟單層神經網絡是等價的。
可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
單調性: 當激活函數是單調的時候,單層網絡能夠保證是凸函數。
f(x)≈xf(x)≈x: 當激活函數滿足這個性質的時候,如果參數的初始化是random的很小的值,那麼神經網絡的訓練將會很高效;如果不滿足這個性質,那麼就需要很用心的去設置初始值。
輸出值的範圍: 當激活函數輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因爲特徵的表示受有限權值的影響更顯著;當激活函數的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的learning rate.
這些性質,也正是我們使用激活函數的原因!

  1. http://cs231n.github.io/neural-networks-1/
  2. https://zhuanlan.zhihu.com/p/21462488
  3. http://blog.csdn.net/cyh_24/article/details/50593400

4神經網絡爲什麼能火起來

當數據量小的時候,神經網絡的作用還沒有徹底顯示出來,但是,當帶標籤的數據量特別大的時候我們就會發現神經網絡的準確率是穩定的比其他高。由圖發現,很多模型在數據量大的時候就會基於水平值,因爲這些模型無法處理海量的數據。但規模巨大的神經網絡就可以再次提升準確率。爲什麼神經網絡發展這麼快,因爲現在能獲取的數據遠遠大於傳統數據,CPU硬件也做的越來越好,深度學習的算法也有了很大的創新(算法創新可以提升迭代速度,更快的獲得實驗結果)。
5與早起的神經網絡相比,現在的神經網絡爲什麼可以擬合線性和非線性函數
樣本變量不需要那麼多,因爲神經網絡的信息存儲能力有限,過多的樣本會造成一些有用的信息被丟棄。如果樣本數量過多,應增加隱層節點數或隱層數目,才能增強學習能力。一、隱層數一般認爲,增加隱層數可以降低網絡誤差(也有文獻認爲不一定能有效降低),提高精度,但也使網絡複雜化,從而增加了網絡的訓練時間和出現“過擬合”的傾向。一般來講應設計神經網絡應優先考慮3層網絡(即有1個隱層)。一般地,靠增加隱層節點數來獲得較低的誤差,其訓練效果要比增加隱層數更容易實現。對於沒有隱層的神經網絡模型,實際上就是一個線性或非線性(取決於輸出層採用線性或非線性轉換函數型式)迴歸模型。因此,一般認爲,應將不含隱層的網絡模型歸入迴歸分析中,技術已很成熟,沒有必要在神經網絡理論中再討論之。二、隱層節點數在BP 網絡中,隱層節點數的選擇非常重要,它不僅對建立的神經網絡模型的性能影響很大,而且是訓練時出現“過擬合”的直接原因,但是目前理論上還沒有一種科學的和普遍的確定方法。 目前多數文獻中提出的確定隱層節點數的計算公式都是針對訓練樣本任意多的情況,而且多數是針對最不利的情況,一般工程實踐中很難滿足,不宜採用。事實上,各種計算公式得到的隱層節點數有時相差幾倍甚至上百倍。爲儘可能避免訓練時出現“過擬合”現象,保證足夠高的網絡性能和泛化能力,確定隱層節點數的最基本原則是:在滿足精度要求的前提下取儘可能緊湊的結構,即取儘可能少的隱層節點數。研究表明,隱層節點數不僅與輸入/輸出層的節點數有關,更與需解決的問題的複雜程度和轉換函數的型式以及樣本數據的特性等因素有關。
https://blog.csdn.net/zkq_1986/article/details/52117095
6激活函數
https://blog.csdn.net/tyhj_sf/article/details/79932893
神經網絡中的每個神經元節點接受上一層神經元的輸出值作爲本神經元的輸入值,並將輸入值傳遞給下一層,輸入層神經元節點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關係,這個函數稱爲激活函數(又稱激勵函數)。

激活函數的用途(爲什麼需要激活函數)?
如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層節點的輸入都是上層輸出的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了,那麼網絡的逼近能力就相當有限。正因爲上面的原因,我們決定引入非線性函數作爲激勵函數,這樣深層神經網絡表達能力就更加強大(不再是輸入的線性組合,而是幾乎可以逼近任意函數)。

有哪些激活函數,都有什麼性質和特點?
早期研究神經網絡主要採用sigmoid函數或者tanh函數,輸出有界,很容易充當下一層的輸入。
近些年Relu函數及其改進型(如Leaky-ReLU、P-ReLU、R-ReLU等)在多層神經網絡中應用比較多。下面我們來總結下這些激活函數:

特點:
它能夠把輸入的連續實值變換爲0和1之間的輸出,特別的,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1.
缺點:
sigmoid函數曾經被使用的很多,不過近年來,用它的人越來越少了。主要是因爲它固有的一些 缺點。
缺點1:在深度神經網絡中梯度反向傳遞時導致梯度爆炸和梯度消失,其中梯度爆炸發生的概率非常小,而梯度消失發生的概率比較大。首先來看Sigmoid函數的導數,如下圖所示:

原文:https://blog.csdn.net/tyhj_sf/article/details/79932893
7梯度下降,兩個sample估計權重的,用SBB和所有的數據二者的區別

8K-means 怎麼迭代的
K-means 算法的基本步驟:

1.從 n個數據對象任意選擇 k 個對象作爲初始聚類中心迭代
2.通過把每個點分配給最近的聚類中心,從而形成K個類 重新計算每個類的聚類中心
3.終止 如果計算後,聚類中心不發生改變

看圖:仔細看每張圖的變化 更易理解 (k = 2)

K-means 算法優點

算法框架清晰,簡單,容易理解。
本算法確定的k個劃分到達平方誤差最小。當聚類是密集的,且類與類之間區別明顯時,效果較好。
對於處理大數據集,這個算法是相對可伸縮和高效的,計算的複雜度爲O(NKt),其中N是數據對象的數目,t是迭代的次數。一般來說,K<<N,t<<N 。
K-means 算法缺點
K-means算法中k是事先給定的,這個k值的選定是非常難以估計的。
算法的時間開銷是非常大的。
K-means算法對異常數據很敏感。在計算質心的過程中,如果某個數據很異常,在計算均值的時候,會對結果影響非常大。
原文:https://blog.csdn.net/u011808673/article/details/81296623

9數據處理流程,特徵提取方面的工作做過嗎?
10CNN RNN
https://blog.csdn.net/lff1208/article/details/77717149
11聚類 什麼是聚類
12邏輯迴歸是怎麼進行分類的,空間和時間複雜度
13框架 tensorflow
14github 代碼吃透 運行
15自然語言處理了解嗎?

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