數據類問題
1.樣本不平衡的處理方法
①欠采樣 - 隨機刪除觀測數量足夠多的類,使得兩個類別間的相對比例是顯著的。雖然這種方法使用起來非常簡單,但很有可能被我們刪除了的數據包含着預測類的重要信息。
②過采樣 - 對於不平衡的類別,我們使用拷貝現有樣本的方法隨機增加觀測數量。理想情況下這種方法給了我們足夠的樣本數,但過采樣可能導致過擬合訓練數據。
③合成采樣( SMOTE )-該技術要求我們用合成方法得到不平衡類別的觀測,該技術與現有的使用最近鄰分類方法很類似。問題在於當一個類別的觀測數量極度稀少時該怎么做。比如說,我們想用圖片分類問題確定一個稀有物種,但我們可能只有一幅這個稀有物種的圖片。
④在loss方面,采用focal loss等loss進行控制不平衡樣本。
不平衡類別會造成問題有兩個主要原因:
1.對於不平衡類別,我們不能得到實時的最優結果,因為模型/算法從來沒有充分地考察隱含類。
2.它對驗證和測試樣本的獲取造成了一個問題,因為在一些類觀測極少的情況下,很難在類中有代表性。
2.講下數據增強有哪些方法(重點)
翻轉,旋轉,縮放,裁剪,平移,添加噪聲,有監督裁剪,mixup,上下采樣,增加不同懲罰
解決圖像細節不足問題(增強特征提取骨干網絡的表達能力)
3.過擬合的解決辦法(重點)
數據擴充/數據增強/更換小網絡(網絡太復雜)/正則化/dropout/batch normalization
增加訓練數據、減小模型復雜度、正則化,L1/L2正則化、集成學習、早期停止
什么是過擬合
過擬合(overfitting)是指在模型參數擬合過程中的問題,由於訓練數據包含抽樣誤差,訓練時,復雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。
產生過擬合根本原因:
觀察值與真實值存在偏差, 訓練數據不足,數據太少,導致無法描述問題的真實分布, 數據有噪聲, 訓練模型過度,導致模型非常復雜
什么是欠擬合:訓練的模型在訓練集上面的表現很差,在驗證集上面的表現也很差
原因:訓練的模型太簡單,最通用的特征模型都沒有學習到
正則化
正則化的原理:在損失函數上加上某些規則(限制),縮小解空間,從而減少求出過擬合解的可能性。
機器學習中幾乎都可以看到損失函數后面會添加一個額外項,常用的額外項一般有兩種,一般英文稱作 l1-norm 和l2-norm,中文稱作 L1正則化 和 L2正則化,或者 L1范數 和 L2范數。
1. L0、L1、L2正則化
L0 范數:向量中非0元素的個數。
L1 范數 (Lasso Regularization):向量中各個元素絕對值的和。
L2 范數(Ridge Regression):向量中各元素平方和再求平方根。
2. L1、L2正則化區別,為什么稀疏的解好?
L1會趨向於產生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近於0(產生稀疏性)。
實現參數的稀疏有什么好處嗎?
一個好處是可以簡化模型,避免過擬合。另一個好處是參數變少可以使整個模型獲得更好的可解釋性。
3.L1正則化和L2正則化的作用
L1正則化可以產生稀疏權值矩陣,即產生一個稀疏模型,可以用於特征選擇。
L2正則化可以防止模型過擬合(overfitting);一定程度上,L1也可以防止過擬合。
4.正則化有哪幾種,分別有什么作用?
L0 范數和 L1 范數都能夠達到使參數稀疏的目的,但 L0 范數更難優化求解,L1 范數是 L0 范數的最優凸近似,而且它比 L0 范數要容易優化求解。
L2 范數不但可以防止過擬合,提高模型的泛化能力,還可以讓我們的優化求解變得穩定和快速。L2 范數對大數和 outlier 更敏感。
L1、L2范數,L1趨向於0,但L2不會,為什么?
L1范數更容易產生稀疏的權重,L2范數更容易產生分散的權重
激活函數與梯度
在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關系,這個函數稱為激活函數(又稱激勵函數)。
1.激活函數的意義如下:
①模擬生物神經元特性,接受輸入后通過一個閾值模擬神經元的激活和興奮並產生輸出;
②為神經網絡引入非線性,增強神經網絡的表達能力;
③導出神經網絡最后的結果(在輸出層時)。
常用的激活函數?sigmoid,tanh,ReLU, leaky ReLU, PReLU, ELU,random ReLU等。
①sigmoid
我們通常就用其中最常用的logistic函數來代指sigmoid函數:

sigmoid函數和階躍函數非常相似,但是解決了光滑和連續的問題,同時它還成功引入了非線性。由於其值域處在0~1,所以往往被用到二分類任務的輸出層做概率預測。
當輸入值大於3或者小於-3時,梯度就非常接近0了,在深層網絡中,這非常容易造成“梯度消失”(也就是反向傳播時誤差難以傳遞到前面一層)而使得網絡很難訓練。
此外,sigmoid函數的均值是0.5,但是不符合我們對神經網絡內數值期望為0的設想。
特點: 它能夠把輸入的連續實值變換為0和1之間的輸出,特別的,如果是非常大的負數,那么輸出就是0;如果是非常大的正數,輸出就是1.
缺點:
缺點1:在深度神經網絡中梯度反向傳遞時導致梯度爆炸和梯度消失,其中梯度爆炸發生的概率非常小,而梯度消失發生的概率比較大。
缺點2:Sigmoid 的 output 不是0均值(即zero-centered)。
缺點3:其解析式中含有冪運算,計算機求解時相對來講比較耗時。
②tanh函數

這個tanh函數又被稱作雙曲正切函數,可以看出它的函數范圍是(-1,1)而均值為0,解決了上面sigmoid的一個問題。但是不難發現,該函數依舊沒有解決梯度消失的問題。
③Relu函數
ReLu函數又叫線性整流單元,應該說是當前最常用的一個激活函數了,尤其是在卷積神經網絡和層次較深的神經網絡中。

ReLu將x=0處的光滑曲線替換為了折線,這使得它的計算也相對更加簡單,而且有助於隨機梯度下降算法收斂(有研究指出收斂加速可達6倍)。當然ReLu函數也能夠緩解梯度消失的問題。
當然,ReLu還是有一些缺陷的,對於小於0的這部分值,梯度會迅速降為0而不再影響網絡訓練。這會造成部分神經元從來不被激活,也稱作“死區”。這也給了ReLu函數的變種很多發揮空間。
優點:
1)解決了gradient vanishing問題 (在正區間)
2)計算速度非常快,只需要判斷輸入是否大於0
3)收斂速度遠快於sigmoid和tanh
④Leaky ReLu

這樣就將小於0部分的梯度從零提高到α,給了這些被抑制部分一定參與網絡訓練的可能。
⑤PReLu
參數化ReLu(Parameterised ReLu,PReLu)的形式和Leaky ReLu一樣,唯一地不同是它將α視作一個可訓練的參數而不是人為設定的超參數。這樣,就避免了Leaky ReLu中的選定α值的問題。

⑦ELU
 
ELU也是為解決ReLU存在的問題而提出,顯然,ELU有ReLU的基本所有優點,以及:不會有Deal ReLU問題;輸出的均值接近0,zero-centered。
它的一個小問題在於計算量稍大。類似於Leaky ReLU,理論上雖然好於ReLU
2.寫出Sigmoid、Sigmoid的導數
Sigmoid函數:

3. sigmoid和relu的優缺點
Relu優點:
(1)relu函數在大於0的部分梯度為常數,所以不會產生梯度彌散現象.。而對於sigmod函數,在正負飽和區的梯度都接近於0,可能會導致梯度消失現象。
(2)Relu函數的導數計算更快,所以使用梯度下降時比Sigmod收斂起來要快很多。
Relu缺點:
Relu死亡問題。當 x 是小於 0 的時候,那么從此所以流過這個神經元的梯度將都變成 0;
這個時候這個 ReLU 單元在訓練中將死亡(也就是參數無法更新),這也導致了數據多樣化的丟失(因為數據一旦使得梯度為 0,也就說明這些數據已不起作用)。
Sigmod優點:具有很好的解釋性,將線性函數的組合輸出為0,1之間的概率。
Sigmodu缺點:(1)激活函數計算量大,反向傳播求梯度時,求導涉及除法。
(2)反向傳播時,在飽和區兩邊導數容易為0,即容易出現梯度消失的情況,從而無法完成深層網絡的訓練。
4. softmax和sigmoid在多分類任務中的優劣
多個sigmoid與一個softmax都可以進行多分類.如果多個類別之間是互斥的,就應該使用softmax,即這個東西只可能是幾個類別中的一種。如果多個類別之間不是互斥的,使用多個sigmoid。
5.用softmax做分類函數,假如現在要對1w甚至10w類做分類會出現什么問題?
過擬合,怎么解決,面試官讓自己想(不能使用softmax,使用三元組損失)
6.梯度爆炸,梯度消失,梯度彌散是什么,為什么會出現這種情況以及處理辦法
梯度彌散(梯度消失): 通常神經網絡所用的激活函數是sigmoid函數,sigmod函數容易引起梯度彌散。這個函數能將負無窮到正無窮的數映射到0和1之間,並且對這個函數求導的結果是f′(x)=f(x)(1−f(x))表示兩個0到1之間的數相乘,得到的結果就會變得很小了。神經網絡的反向傳播是逐層對函數偏導相乘,因此當神經網絡層數非常深的時候,最后一層產生的偏差就因為乘了很多的小於1的數而越來越小,最終就會變為0,從而導致層數比較淺的權重沒有更新,這就是梯度消失。
梯度爆炸:就是由於初始化權值過大,前面層會比后面層變化的更快,就會導致權值越來越大,梯度爆炸的現象就發生了。
梯度消失/爆炸是什么?(反向傳播中由於鏈式求導法則的連乘,如果乘數都比較小趨於0,最終傳遞到網絡輸入層的梯度會變得很小(梯度消失),如果乘數都很大,最終的梯度也會變得很大(梯度爆炸),其實二者都是因為網絡太深導致權值更新不穩定,本質上是因為梯度反向傳播中的連乘效應)
梯度消失與梯度爆炸的產生原因
梯度消失:(1)隱藏層的層數過多;(2)采用了不合適的激活函數(更容易產生梯度消失,但是也有可能產生梯度爆炸)
梯度爆炸:(1)隱藏層的層數過多;(2)權重的初始化值過大
梯度消失與梯度爆炸的解決方案(重點)
(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。
(2)用Batch Normalization。
(3)LSTM的結構設計也可以改善RNN中的梯度消失問題。
(4)預訓練+微調
(5)使用殘差網絡
回歸
1.分類和回歸的區別,各舉例3個模型
定量輸出稱為回歸,或者說是連續變量預測;定性輸出稱為分類,或者說是離散變量預測。
常見分類模型有感知機、朴素貝葉斯、邏輯回歸(LR)、支持向量機(SVM)、神經網絡等;
常見回歸模型有線性回歸、多項式回歸、嶺回歸(L2正則化)、Lasso回歸(L1正則化)等
2.線性回歸和邏輯回歸的區別
線性回歸:利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法。一元線性回歸分析:y=ax+by=ax+b,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示。多元線性回歸分析:hθ(x)=θ0+θ1x1+...+θnxn,包括兩個或兩個以上的自變量,並且因變量和自變量是線性關系。
邏輯回歸:邏輯回歸(Logistic Regression)是用於處理因變量為分類變量的回歸問題,常見的是二分類或二項分布問題,也可以處理多分類問題,它實際上是屬於一種分類方法。
邏輯回歸的數學表達模型:

區別:LR通常用於二分類,使用的是交叉熵損失函數;線性回歸用於回歸,使用的是均方誤差損失函數
3.怎么優化LR?就是求解LR
梯度下降、極大似然法。
SVM—支持向量機
支持向量機(support vector machines, SVM)是一種二分類模型,它的基本模型是定義在特征空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;SVM還包括核技巧,這使它成為實質上的非線性分類器。SVM的學習策略就是間隔最大化,可形式化為一個求解凸二次規划的問題,也等價於正則化的合頁損失函數的最小化問題。SVM的的學習算法就是求解凸二次規划的最優化算法。
1.SVM的原理
SVM學習的基本想法是求解能夠正確划分訓練數據集並且幾何間隔最大的分離超平面。
 
即為分離超平面,對於線性可分的數據集來說,這樣的超平面有無窮多個(即感知機),但是幾何間隔最大的分離超平面卻是唯一的。
2. SVM的核函數了解哪些?為什么要用核函數?
當樣本在原始空間線性不可分時,可將樣本從原始空間映射到一個更高維的特征空間,使得樣本在這個特征空間內線性可分。
①線性核函數

線性核,主要用於線性可分的情況,我們可以看到特征空間到輸入空間的維度是一樣的,其參數少速度快,對於線性可分數據,其分類效果很理想
②多項式核函數

多項式核函數可以實現將低維的輸入空間映射到高緯的特征空間,但是多項式核函數的參數多,當多項式的階數比較高的時候,核矩陣的元素值將趨於無窮大或者無窮小,計算復雜度會大到無法計算。
③高斯(RBF)核函數
 
高斯徑向基函數是一種局部性強的核函數,其可以將一個樣本映射到一個更高維的空間內,該核函數是應用最廣的一個,無論大樣本還是小樣本都有比較好的性能,而且其相對於多項式核函數參數要少,因此大多數情況下在不知道用什么核函數的時候,優先使用高斯核函數。
④sigmoid核函數

采用sigmoid核函數,支持向量機實現的就是一種多層神經網絡。
1.如果特征的數量大到和樣本數量差不多,則選用LR或者線性核的SVM;
2.如果特征的數量小,樣本的數量正常,則選用SVM+高斯核函數;
3.如果特征的數量小,而樣本的數量很大,則需要手工添加一些特征從而變成第一種情況。
3.SVM如何解決線性不可分問題?
間隔最大化,通過引入軟間隔、核函數解決線性不可分問題。
4. SVM優化的目標是啥?SVM的損失函數,SVM的適用場景
凸優化問題,

SVM的損失函數就是合頁損失函數加上正則化項;
 
5.SVM為什么要對偶(優化復雜度轉變,核化)
①首先是我們有不等式約束方程,這就需要我們寫成min max的形式來得到最優解。而這種寫成這種形式對x不能求導,所以我們需要轉換成max min的形式,這時候,x就在里面了,這樣就能對x求導了。
而為了滿足這種對偶變換成立,就需要滿足KKT條件(KKT條件是原問題與對偶問題等價的必要條件,當原問題是凸優化問題時,變為充要條件)。
②對偶問題將原始問題中的約束轉為了對偶問題中的等式約束
③方便核函數的引入
④改變了問題的復雜度。由求特征向量w轉化為求比例系數a,在原始問題下,求解的復雜度與樣本的維度有關,即w的維度。在對偶問題下,只與樣本數量有關。
6.LR和SVM介紹+區別,什么場景用SVM比較好
相同點:第一,LR和SVM都是分類算法;
第二,如果不考慮核函數,LR和SVM都是線性分類算法,也就是說他們的分類決策面都是線性的。
第三,LR和SVM都是監督學習算法。第四,LR和SVM都是判別模型。
不同點: 第一,本質上是其損失函數(loss function)不同。注:lr的損失函數是 cross entropy loss,adaboost的損失函數是expotional loss ,svm是hinge loss,常見的回歸模型通常用 均方誤差 loss。
第二,支持向量機只考慮局部的邊界線附近的點,而邏輯回歸考慮全局(遠離的點對邊界線的確定也起作用)。
第三,在解決非線性問題時,支持向量機采用核函數的機制,而LR通常不采用核函數的方法。
第四,線性SVM依賴數據表達的距離測度,所以需要對數據先做normalization,LR不受其影響。
第五,SVM的損失函數就自帶正則!而LR必須另外在損失函數上添加正則項。
SVM(支持向量機)主要用於分類問題,主要的應用場景有字符識別、面部識別、行人檢測、文本分類等領域。
7.支持向量回歸原理(SVR)
SVR(支持向量回歸)是SVM(支持向量機)中的一個重要的應用分支。SVR回歸與SVM分類的區別在於,SVR的樣本點最終只有一類,它所尋求的最優超平面不是SVM那樣使兩類或多類樣本點分的“最開”,而是使所有的樣本點離着超平面的總偏差最小。
K-Means(K均值)
K-Means是聚類算法中的最常用的一種,算法最大的特點是簡單,好理解,運算速度快,但是只能應用於連續型的數據,並且一定要在聚類前需要手工指定要分成幾類。
算法思想:
[選擇K個點作為初始質心 
repeat 
    將每個點指派到最近的質心,形成K個簇 
    重新計算每個簇的質心 
until 簇不發生變化或達到最大迭代次數 ] 
        1.K-means聚類的原理以及過程?
K-means算法是很典型的基於距離的聚類算法,采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。該算法認為簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作為最終目標。
2.K-means聚類怎么衡量相似度的?
歐式距離
3.K值怎么來進行確定?(輪廓系數法和手肘法)
4.簡要闡述一下KNN算法和K-Means算法的區別
①KNN算法是分類算法,分類算法肯定是需要有學習語料,然后通過學習語料的學習之后的模板來匹配我們的測試語料集,將測試語料集合進行按照預先學習的語料模板來分類;
②Kmeans算法是聚類算法,聚類算法與分類算法最大的區別是聚類算法沒有學習語料集合。
機器學習相關常考內容
1.什么是特征歸一化
數據的標准化(normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除數據的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權其中最典型的就是數據的歸一化處理,即將數據統一映射到[0,1]區間上。
特征歸一化的作用:數據歸一化后, 更容易正確的收斂到最優解、提升模型的精度歸一化的另一好處是提高精度、深度學習中數據歸一化可以防止模型梯度爆炸
2.為什么要用1*1卷積?
增加網絡的深度(加入非線性)、升維或者是降維、跨通道信息交互(channal 的變換)
3.padding的作用
①保持邊界信息,如果沒有加padding的話,輸入圖片最邊緣的像素點信息只會被卷積核操作一次,但是圖像中間的像素點會被掃描到很多遍,那么就會在一定程度上降低邊界信息的參考程度,但是在加入padding之后,在實際處理過程中就會從新的邊界進行操作,就從一定程度上解決了這個問題。
②可以利用padding對輸入尺寸有差異圖片進行補齊,使得輸入圖片尺寸一致。
③在卷積神經網絡的卷積層加入Padding,可以使得卷積層的輸入維度和輸出維度一致。
④卷積神經網絡的池化層加入Padding,一般都是保持邊界信息和①所述一樣。
4. pooling如何反向傳播
max pooling: 下一層的梯度會原封不動地傳到上一層最大值所在位置的神經元,其他位置的梯度為0;
average pooling: 下一層的梯度會平均地分配到上一層的對應相連區塊的所有神經元。
Pooling的作用和缺點
增大感受野、平移不變性、降低優化難度和參數。缺點:造成梯度稀疏,丟失信息
感受野的理解:一個卷積核可以映射原始輸入圖的區域大小。
感受野的計算公式?
 
其中lk−1為第k−1層對應的感受野大小,fk為第k層的卷積核大小,或者是池化層的池化尺寸大小。
5.反向傳播的原理: 它的主要思想是由后一級的誤差計算前一級的誤差,從而極大減少運算量。
6.各種數據的channel是指什么意思 每個卷積層中卷積核的數量
7.卷積層和全連接層的區別
全連接層的權重矩陣是固定的,即每一次feature map的輸入過來必須都得是一定的大小,所以網絡最開始的輸入圖像尺寸必須固定,才能保證傳送到全連接層的feature map的大小跟全連接層的權重矩陣匹配。
卷積層就不需要固定大小了,因為它只是對局部區域進行窗口滑動,所以用卷積層取代全連接層成為了可能。
8.網絡權重初始化
把w初始化為0、對w隨機初始化、Xavier initialization、He initialization
9.講下Attention的原理
減少處理高維輸入數據的計算負擔,結構化的選取輸入的子集,從而降低數據的維度。讓系統更加容易的找到輸入的數據中與當前輸出信息相關的有用信息,從而提高輸出的質量。幫助類似於decoder這樣的模型框架更好的學到多種內容模態之間的相互關系。
Attention有什么缺點
Attention模塊的參數都是通過label和預測值的loss反向傳播進行更新,沒有引入其他監督信息,因而其受到的監督有局限,容易對label過擬合。
10. AuC,RoC,mAP,Recall,Precision,F1-score
召回率(Recall) = 預測為真實正例 / 所有真實正例樣本的個數。
准確率(Precision) =預測為真實正例 / 所有被預測為正例樣本的個數。
Precision:P=TP/(TP+FP) 精准率(查准率),Recall:R=TP/(TP+FN) 召回率(查全率 )
mAP: mean Average Precision, 即各類別AP的平均值,AP: PR曲線下面積,后文會詳細講解,PR曲線: Precision-Recall曲線。
ROC:全稱Receiver Operating Characteristic曲線,常用於評價二分類的優劣。
AUC:全稱Area Under Curve,被定義為ROC曲線下的面積,取值范圍在0.5到1之間。
F1-score:F1值,又稱調和平均數,公式(2)和(3)中反應的precision和recall是相互矛盾的,當recall越大時,預測的覆蓋率越高,這樣precision就會越小,反之亦然,通常,使用F1-score來調和precision和recall。

11. dropout的原理 在進行傳播的時候刪除一些結點,降低網絡的復雜性
dropout訓練和測試有什么區別嗎?
Dropout 在訓練時采用,是為了減少神經元對部分上層神經元的依賴,類似將多個不同網絡結構的模型集成起來,減少過擬合的風險。而在測試時,應該用整個訓練好的模型,因此不需要dropout。
原文: 在訓練過程中,從不同數量的“稀疏”網絡中刪除樣本。在測試時,僅使用權重較小的單個未精簡網絡,就很容易估算出所有這些精簡網絡的預測結果的平均值。
12.是否了解free anchor
FreeAnchor基於先進的單級探測器RetinaNet。通過用自由錨幀匹配損失替換RetinaNet的損失。
13. pytorch 多gpu訓練機制的原理
Pytorch 的多 GPU 處理接口是 torch.nn.DataParallel(module, device_ids),其中 module 參數是所要執行的模型,而 device_ids 則是指定並行的 GPU id 列表。
並行處理機制是,首先將模型加載到主 GPU 上,然后再將模型復制到各個指定的從 GPU 中,然后將輸入數據按 batch 維度進行划分,具體來說就是每個 GPU 分配到的數據 batch 數量是總輸入數據的 batch 除以指定 GPU 個數。
每個 GPU 將針對各自的輸入數據獨立進行 forward 計算,最后將各個 GPU 的 loss 進行求和,再用反向傳播更新單個 GPU 上的模型參數,再將更新后的模型參數復制到剩余指定的 GPU 中,這樣就完成了一次迭代計算。
14.PyTorch里增加張量維度和減少張量維度的函數
擴大張量:
torch.Tensor.expand(*sizes) → Tensor
 
        壓縮張量:
torch.squeeze(input, dim=None, out=None) → Tensor
 
        15.nn.torch.conv2d()的參數
class torch.nn.Conv2d(in_channels,out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1,bias=True)
 
        in_channels:輸入的通道數目 out_channels:輸出的通道數目
kernel_size:卷積核的大小,類型為int 或者元組,當卷積是方形的時候,只需要一個整數邊長即可,卷積不是方形,要輸入一個元組表示 高和寬。
stride:卷積每次滑動的步長為多少,默認是 1
padding:設置在所有邊界增加 值為 0 的邊距的大小(也就是在feature map 外圍增加幾圈 0 ),例如當 padding =1 的時候,如果原來大小為 3 × 3 ,那么之后的大小為 5 × 5 。即在外圍加了一圈 0 。dilation:控制卷積核之間的間距
16. tensorflow搭建網絡和訓練的流程
①訓練的數據②定義節點准備接收數據③定義神經層:隱藏層和預測層
④定義loss表達式⑤選擇optimizer使loss達到最小
17.TensorFlow的參數初始化機制
tf中使用tf.constant_initializer(value)類生成一個初始值為常量value的tensor對象。tf中使用 tf.random_normal_initializer() 類來生成一組符合標准正太分布的tensor。
18.TensorFlow 怎么在網絡結構實現一個 if 判斷 布爾類型
19.Tensorflow中scope的作用
在tensorflow中使用tf.name_scope()和tf.variable_scope()函數主要是為了變量共享。
20.還有什么辦法可以加速python代碼嗎?
簡要:我補充說可以用GPU、batchsize。然后面試官繼續追問還有沒有,最后他說了cpu加載數據和gpu訓練數據的差異,如果只用cpu加載,那發揮不出gpu的優勢,可以用異步來加速,即先加載一部分數據到緩存。
21.圖像的特征提取有哪些算法
1、SIFT:尺度不變特征變換(Scale-invariant features transform)。SIFT是一種檢測局部特征的算法,該算法通過求一幅圖中的特征點(interest points,or corner points)及其有關scale 和 orientation 的描述子得到特征並進行圖像特征點匹配,獲得了良好效果。SIFT特征不只具有尺度不變性,即使改變旋轉角度,圖像亮度或拍攝視角,仍然能夠得到好的檢測效果
2、SURF:加速穩健特征(Speeded Up Robust Features)。SURF是對SIFT算法的改進,其基本結構、步驟與SIFT相近,但具體實現的過程有所不同。SURF算法的優點是速度遠快於SIFT且穩定性好。
3、HOG:方向梯度直方圖(Histogram of Oriented Gradient)。
4、DOG:高斯函數的差分(Difference of Gaussian)5、LBP特征,Haar特征等
22.極大似然估計和最大后驗估計的區別是什么?
貝葉斯公式:

極大似然估計(MLE):在已經得到試驗結果(即樣本)的情況下,估計滿足這個樣本分布的參數,將使這個樣本出現的概率最大的那個參數Θ作為真參數Θ的估計。在樣本固定的情況下,樣本出現的概率與參數Θ之間的函數,稱為似然函數。
最大后驗概率(MAP):最大后驗估計是根據經驗數據,獲得對難以觀察的量的點估計。與最大似然估計不同的是,最大后驗估計融入了被估計量的先驗分布,即模型參數本身的概率分布。
最大后驗概率估計其實就是多了一個參數的先驗概率,也可以認為最大似然估計就是把先驗概率認為是一個定值;后驗概率 := 似然 * 先驗概率
23. EM算法---最大期望算法
在概率模型中尋找參數最大似然估計或者最大后驗估計的算法,其中概率模型依賴於無法觀測的隱性變量。
最大期望算法經過兩個步驟交替進行計算:
第一步是計算期望(E),利用對隱藏變量的現有估計值,計算其最大似然估計值;
第二步是最大化(M),最大化在E步上求得的最大似然值來計算參數的值。M步上找到的參數估計值被用於下一個E步計算中,這個過程不斷交替進行。
24.降維方法:主成分分析(PCA)、線性判別分析(LDA)、局部線性嵌入(LLE)、LE、SVD
PCA原理和執行步驟:主成分分析(PCA) 是最常用的線性降維方法,它的目標是通過某種線性投影,將高維的數據映射到低維的空間中表示,並期望在所投影的維度上數據的方差最大,以此使用較少的數據維度,同時保留住較多的原數據點的特性。是將原空間變換到特征向量空間內,數學表示為AX = γX。
LDA算法:LDA是一種有監督的(supervised)線性降維算法。與PCA保持數據信息不同,核心思想:往線性判別超平面的法向量上投影,是的區分度最大(高內聚,低耦合)。LDA是為了使得降維后的數據點盡可能地容易被區分!
25.條件隨機場
CRF即條件隨機場(Conditional Random Fields),是在給定一組輸入隨機變量條件下另外一組輸出隨機變量的條件概率分布模型,它是一種判別式的概率無向圖模型,既然是判別式,那就是對條件概率分布建模。
26.隱馬爾科夫模型(HMM)
隱馬爾可夫模型(Hidden Markov Model,HMM)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數。然后利用這些參數來作進一步的分析,例如模式識別。
27.伯努利分布
伯努利分布(Bernoulli distribution)又名兩點分布或0-1分布。
28.余弦相似度距離和歐氏距離的區別?
歐式距離:如果是平面上的兩個點 A(x1,y1) 和 B(x2,y2) ,那么 A 與 B 的歐式距離就是
 
余弦相似度距離: 余弦相似度用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。
29.知道決策樹算法嗎?ID3,C4.5和CART樹
決策樹呈樹形結構,在分類問題中,表示基於特征對實例進行分類的過程。學習時,利用訓練數據,根據損失函數最小化的原則建立決策樹模型;預測時,對新的數據,利用決策模型進行分類。
決策樹的分類:離散性決策樹、連續性決策樹。
離散性決策樹:離散性決策樹,其目標變量是離散的,如性別:男或女等;
連續性決策樹:連續性決策樹,其目標變量是連續的,如工資、價格、年齡等;
決策樹的優點:(1)具有可讀性,如果給定一個模型,那么過呢據所產生的決策樹很容易推理出相應的邏輯表達。(2)分類速度快,能在相對短的時間內能夠對大型數據源做出可行且效果良好的結果。
決策樹的缺點:(1)對未知的測試數據未必有好的分類、泛化能力,即可能發生過擬合現象,此時可采用剪枝或隨機森林。
①ID3 ---- ID3算法最核心的思想是采用信息增益來選擇特征
②C4.5采用信息增益比,用於減少ID3算法的局限(在訓練集中,某個屬性所取的不同值的個數越多,那么越有可能拿它來作為分裂屬性,而這樣做有時候是沒有意義的)
③CART算法采用gini系數,不僅可以用來分類,也可以解決回歸問題。
30. K折交叉驗證(k-fold cross validation)具體是怎么做的
K折交叉驗證用於模型調優,所有的數據都被用來訓練,會導致過擬合,K折交叉驗證可以緩解過擬合。將數據分為k組,每次從訓練集中,抽取出k份中的一份數據作為驗證集,剩余數據作為訓練集。測試結果采用k組數據的平均值。
31.拐點怎么求?
拐點,又稱反曲點,在數學上指改變曲線向上或向下方向的點,直觀地說拐點是使切線穿越曲線的點(即連續曲線的凹弧與凸弧的分界點)。
若函數y=f(x)在c點可導,且在點c一側是凸,另一側是凹,則稱c是函數y=f(x)的拐點。

32.講一下偏差和方差
模型誤差 = 偏差(Bias) + 方差(Variance) + 不可避免的誤差
偏差:描述的是預測值(估計值)的期望與真實值之間的差距。偏差越大,越偏離真實數據。
方差:描述的是預測值的變化范圍,離散程度,也就是離其期望值的距離。方差越大,數據的分布越分散。
33.鞍點的定義:目標函數在此點上的梯度(一階導數)值為 0, 但從改點出發的一個方向是函數的極大值點,而在另一個方向是函數的極小值點。
34.假設檢驗的基本思想
假設檢驗的基本思想是小概率反證法思想。小概率思想是指小概率事件(P<0.01或P<0.05)在一次試驗中基本上不會發生。反證法思想是先提出假設(檢驗假設Ho),再用適當的統計方法確定假設成立的可能性大小,如可能性小,則認為假設不成立,若可能性大,則還不能認為假設不成立。
35.熵是什么意思,寫出熵的計算公式
熵定義為:信息的數學期望。

36. KL散度的公式
KL散度(Kullback-Leibler Divergence)也叫做相對熵,用於度量兩個概率分布之間的差異程度。

37.集成學習(bagging和boosting)bagging和boosting的聯系和區別
Bagging和Boosting都是將已有的分類或回歸算法通過一定方式組合起來,形成一個性能更加強大的分類器,更准確的說這是一種分類算法的組裝方法。即將弱分類器組裝成強分類器的方法。
boosting(提升法):Boosting是一族可將弱學習器提升為強學習器的算法。
其工作機制為:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本分布進行調整,使得先前基學習器做錯的訓練樣本在后續受到更多關注,然后基於調整后的樣本分布來訓練下一個基學習器;如此重復進行,直至基學習器數目達到事先指定的值T,最終將這T個基學習器進行加權結合。
Bagging(套袋法):Bagging是指采用Bootstrap(有放回的均勻抽樣)的方式從訓練數據中抽取部分數據訓練多個分類器,每個分類器的權重是一致的,然后通過投票的方式取票數最高的分類結果最為最終結果。
區別:
1)樣本選擇上:Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的.Boosting:每一輪的訓練集不變(個人覺得這里說的訓練集不變是說的總的訓練集,對於每個分類器的訓練集還是在變化的,畢竟每次都是抽樣),只是訓練集中每個樣例在分類器中的權重發生變化.而權值是根據上一輪的分類結果進行調整.
2)樣例權重:Bagging:使用均勻取樣,每個樣例的權重相等Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大.
3)預測函數:Bagging:所有預測函數的權重相等.Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重.
4)並行計算:Bagging:各個預測函數可以並行生成Boosting:各個預測函數只能順序生成,因為后一個模型參數需要前一輪模型的結果.
1)Bagging + 決策樹 = 隨機森林
2)AdaBoost + 決策樹 = 提升樹
3)Gradient Boosting + 決策樹 = GBDT
38.隨機森林的原理
隨機森林屬於集成學習(Ensemble Learning)中的bagging算法。在集成學習中,主要分為bagging算法和boosting算法。我們先看看這兩種方法的特點和區別。
Bagging(套袋法)
bagging的算法過程如下:
從原始樣本集中使用Bootstraping方法隨機抽取n個訓練樣本,共進行k輪抽取,得到k個訓練集。(k個訓練集之間相互獨立,元素可以有重復)
對於k個訓練集,我們訓練k個模型(這k個模型可以根據具體問題而定,比如決策樹,knn等)
對於分類問題:由投票表決產生分類結果;對於回歸問題:由k個模型預測結果的均值作為最后預測結果。(所有模型的重要性相同)
Boosting(提升法)
boosting的算法過程如下:
對於訓練集中的每個樣本建立權值wi,表示對每個樣本的關注度。當某個樣本被誤分類的概率很高時,需要加大對該樣本的權值。
進行迭代的過程中,每一步迭代都是一個弱分類器。我們需要用某種策略將其組合,作為最終模型。(例如AdaBoost給每個弱分類器一個權值,將其線性組合最為最終分類器。誤差越小的弱分類器,權值越大)
下面是將決策樹與這些算法框架進行結合所得到的新的算法:(重點:再次重復)
1)Bagging + 決策樹 = 隨機森林
2)AdaBoost + 決策樹 = 提升樹
3)Gradient Boosting + 決策樹 = GBDT
隨機森林的隨機體現在哪里?
隨機森林的隨機性體現在每顆樹的訓練樣本是隨機的,樹中每個節點的分裂屬性集合也是隨機選擇確定的。有了這2個隨機的保證,隨機森林就不會產生過擬合的現象了。
調參:一般采用網格搜索法優化超參數組合。這里將調參方法簡單歸納為三條:
1、分塊調參(不同框架參數分開調參);
2、一次調參不超過三個參數;
3、逐步縮小參數范圍。
39.樹模型(RF, GBDT, XGBOOST)(必問)
Adaboost與GBDT兩者boosting的不同策略是兩者的本質區別。
Adaboost強調Adaptive(自適應),通過不斷修改樣本權重(增大分錯樣本權重,降低分對樣本權重),不斷加入弱分類器進行boosting。
而GBDT則是旨在不斷減少殘差(回歸),通過不斷加入新的樹旨在在殘差減少(負梯度)的方向上建立一個新的模型。——即損失函數是旨在最快速度降低殘差。
而XGBoost的boosting策略則與GBDT類似,區別在於GBDT旨在通過不斷加入新的樹最快速度降低殘差,而XGBoost則可以人為定義損失函數(可以是最小平方差、logistic loss function、hinge loss function或者人為定義的loss function),只需要知道該loss function對參數的一階、二階導數便可以進行boosting,其進一步增大了模型的泛華能力,其貪婪法尋找添加樹的結構以及loss function中的損失函數與正則項等一系列策略也使得XGBoost預測更准確。
GBDT每一次的計算是都為了減少上一次的殘差,進而在殘差減少(負梯度)的方向上建立一個新的模型。
XGBoost則可以自定義一套損失函數,借助泰勒展開(只需知道損失函數的一階、二階導數即可求出損失函數)轉換為一元二次函數,得到極值點與對應極值即為所求。
本文亮點總結 1.梯度爆炸:就是由於初始化權值過大,前面層會比后面層變化的更快,就會導致權值越來越大,梯度爆炸的現象就發生了。 2.決策樹呈樹形結構,在分類問題中,表示基於特征對實例進行分類的過程。學習時,利用訓練數據,根據損失函數最小化的原則建立決策樹模型;預測時,對新的數據,利用決策模型進行分類。
參考:鏈接
