【深度学习】6万字解决算法面试中的深度学习基础问题
這是對白的第?51?期分享
作者 l 清雨盧? ? 出品 l 對白的算法屋
前言
真的是千呼萬喚始出來emmmm,去年春招結束寫了篇面試的經驗分享。在文中提到和小伙伴整理了算法崗面試時遇到的常見知識點及回答,本想著授人以漁,但沒想到大家都看上了我家的 !但因本人執行力不足,被大家催到現在才終于想著行動起來分享給大家,筆者在這里給各位讀者一個大大的抱歉,求原諒嗚嗚~~相信今年參加秋招的小伙伴們一定都拿到理想的offer啦,明年準備找工作的小盆友如果覺得本文還有些用可以收藏哈。
由于篇幅限制,就先發出前半部分,后面等下回筆者得空哈~另外歡迎小伙伴們轉發!轉發!再轉發呀!!轉發請注明出處,且謝絕一切利用本文檔的商業行為!!
第一章 機器學習
1.Batch Normalization
背景:由于Internal Covariate Shift(Google)效應,即深度神經網絡涉及到很多層的疊加,而每一層的參數更新會導致上層的輸入數據分布發生變化,通過層層疊加,高層的輸入分布變化會非常劇烈,這就使得高層需要不斷去重新適應底層的參數更新。為了訓好模型,我們需要非常謹慎地去設定學習率、初始化權重、以及盡可能細致的參數更新策略。? ?也就是隨是著網絡加深,參數分布不斷往激活函數兩端移動(梯度變小),導致反向傳播出現梯度消失,收斂困難。
原理:可在每層的激活函數前,加入BN,將參數重新拉回0-1正態分布,加速收斂。(理想情況下,Normalize的均值和方差應當是整個數據集的,但為了簡化計算,就采用了mini_batch的操作) ? ?
*機器學習中的白化(eg.PCA)也可以起到規范化分布的作用,但是計算成本過高。?
*BN不是簡單的歸一化,還加入了一個y = γx+β的操作,用于保持模型的表達能力。否則相當于僅使用了激活函數的線性部分,會降低模型的表達能力。?
訓練與測試:測試時均值和方差不再用每個mini-batch來替代,而是訓練過程中每次都記錄下每個batch的均值和方差,訓練完成后計算整體均值和方差用于測試。
參考:https://blog.csdn.net/sinat_33741547/article/details/87158830
 https://blog.csdn.net/qq_34484472/article/details/77982224
 https://zhuanlan.zhihu.com/p/33173246
*BN對于Relu是否仍然有效?
有效,學習率稍微設置大一些,ReLU函數就會落入負區間(梯度為0),神經元就會永遠無法激活,導致dead relu問題。BN可以將數據分布拉回來。
*四種主流規范化方法
Batch Normalization(BN):縱向規范化
Layer Normalization(LN):橫向規范化 對于單個樣本
Weight Normalization(WN):參數規范化 對于參數
Cosine Normalization(CN):余弦規范化 同時考慮參數和x數據 ?
*多卡同步
原因:
對于BN來說,用Batch的均值和方差來估計全局的均值和方差,但因此Batch越大越好.但一個卡的容量是有限的,有時可能batch過小,就起不到BN的歸一化效果.
原理:
利用多卡同步,單卡進行計算后,多卡之間通信計算出整體的均值和方差,用于BN計算, 等同于增大batch size 大小.
2次同步? 第一次同步獲得全局均值,然后第二次計算全局方差 ?
1次同步! 直接傳遞一次X和X2,就可直接計算出全局均值和方差. ?
- 操作(pytorch) 
注:
- 對于目標檢測和分類而言,batch size 通??梢栽O置的比較大,因此不用多卡否則反而會因為卡間通訊,拖慢訓練速度. 
- 對于語義分割這種稠密的問題而言,分辨率越高效果越好,因此一張卡上容納的batch size 比較小,需要多卡同步. 
- 數據被可使用的GPU卡分割(通常是均分),因此每張卡上BN層的batch size(批次大小)實際為:Batch Size/nGpu 
2.VGG使用使用3*3卷積核的優勢是什么?
2個3x3的卷積核串聯和一個5x5的卷積核擁有相同的感受野,但是,2個3x3的卷積核擁有更少的參數,對于通道為1的5x5特征圖得到通道為1的輸出特征圖,前者有3x3x2=18個參數,后者5x5=25個參數,其次,多個3x3的卷積核比一個較大的尺寸的卷積核加入了更多的非線性函數,增強了模型的非線性表達能力。
1x1卷積核的作用:改變通道數目,保持尺度不變情況下增強非線性表達能力,可以實現跨通道的信息交互。
VGG:?
ResNet: ?
3.邏輯斯蒂回歸(LR, Logistic Regression)
3.1 模型簡介
分布函數與概率密度函數:?
其中,μ表示位置參數,γ為形狀參數。在深度學習中常用到的 Sigmoid 函數就是 Logistic 的分布函數在μ=0,γ=1的特殊形式。
損失函數:?
求解方法:1.隨機梯度下降法 2.牛頓法 ? ?
參考 https://zhuanlan.zhihu.com/p/74874291
3.2 相關問題
一、LR有什么特點?
簡單、容易欠擬合、值域為(0,1)、無窮階連續可導。
各feature之間不需要滿足條件獨立假設,但各個feature的貢獻獨立計算
二、Sigmoid變化的理解?
a) sigmoid函數光滑,處處可導,導數還能用自己表示 
b) sigmoid能把數據從負無窮到正無窮壓縮到0,1之間,壓縮掉了長尾,擴展了核心分辨率。
c) sigmoid在有觀測誤差的情況下最優的保證了輸入信號的信息。
三、與SVM、線性回歸等模型對比
參考 https://zhuanlan.zhihu.com/p/74874291
 ?
因為階躍函數不連續,尋找替代函數如 sigmoid:?
作變換可得到:?
即用線性回歸的結果去擬合事件發生幾率(“幾率”是事件發生與不發生的概率比值)的對數,這就是“對數幾率回歸”的名稱來由,其名為回歸,實際上是做分類任務。
為什么不用均方誤差作為損失:?
4.卷積
原理:卷積過程就是卷積核行列對稱翻轉后,在圖像上滑動,并且依次相乘求和.(與濾波器不同的一點就是多了一個卷積核翻轉的過程).然后經過池化,激活后輸入下一層. 單個卷積層可以提取特征,當多個卷積疊加后即可逐步學習出更高語義的抽象特征. 
*這里提到了卷積,池化以及激活,那么池化以及激活的順序如何考慮?一般來說池化和激活的順序對計算結果沒有影響(其實是maxpooling無影響,但是如果用avgpooling的話,先后順序還是會影響結果一點的),但先池化可以減小接下來激活的計算量.
卷積核:其中卷積核主要有兩類,普通卷積核和1*1的卷積核.
 ? ? ? ?普通卷積核同時改變圖像的空間域和通道域,如下圖所示,每個卷積核的通道數與輸入相同,卷積后會得到一個通道為一的特征圖,我們希望卷積后的通道數有幾個,卷積核就有幾個.
1*1卷積核,視野大小為單個特征位點,能夠實現在空間域不改變的情況下實現通道域信息的交流,并且獲得我們想要的通道數量(一般是降維). 
另外,1*1的卷積可以看作全連接.
參考:https://blog.csdn.net/amusi1994/article/details/81091145?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task ?
反卷積:上采樣有3種常見的方法:雙線性插值(bilinear),反卷積(Transposed Convolution),反池化(Unpooling),我們這里只討論反卷積。這里指的反卷積,也叫轉置卷積,它并不是正向卷積的完全逆過程,用一句話來解釋:
反卷積是一種特殊的正向卷積,先按照一定的比例通過補0來擴大輸入圖像的尺寸,接著旋轉卷積核,再進行正向卷積。?
https://www.zhihu.com/question/48279880
空洞卷積
誕生背景
在圖像分割領域,圖像輸入到CNN(典型的網絡比如FCN[3])中,FCN先像傳統的CNN那樣對圖像做卷積再pooling,降低圖像尺寸的同時增大感受野,但是由于圖像分割預測是pixel-wise的輸出,所以要將pooling后較小的圖像尺寸upsampling到原始的圖像尺寸進行預測,在先減小后增大尺寸的過程中,肯定有些信息損失掉了,如何避免?答案就是空洞卷積。?
(a)圖對應3x3的1-dilated conv,和普通的卷積操作一樣,(b)圖對應3x3的2-dilated conv,實際的卷積kernel size還是3x3,但是空洞為1,也就是對于一個7x7的圖像patch,只有9個紅色的點和3x3的kernel發生卷積操作,其余的點略過。也可以理解為kernel的size為7x7,但是只有圖中的9個點的權重不為0,其余都為0。(c)圖是4-dilated conv操作
優點
dilated的好處是不做pooling損失信息的情況下,加大了感受野,讓每個卷積輸出都包含較大范圍的信息。在圖像需要全局信息或者語音文本需要較長的sequence信息依賴的問題中,都能很好的應用dilated conv,比如圖像分割、語音合成WaveNet、機器翻譯ByteNet中。
潛在問題 1:The Gridding Effect ?
我們發現我們的 kernel 并不連續,也就是并不是所有的 pixel 都用來計算了,因此這里將信息看做 checker-board 的方式會損失信息的連續性。這對 pixel-level dense prediction 的任務來說是致命的。
潛在問題 2:Long-ranged information might be not relevant.
我們從 dilated convolution 的設計背景來看就能推測出這樣的設計是用來獲取 long-ranged information。然而光采用大 dilation rate 的信息或許只對一些大物體分割有效果,而對小物體來說可能則有弊無利了。如何同時處理不同大小的物體的關系,則是設計好 dilated convolution 網絡的關鍵。
通向標準化設計:Hybrid Dilated Convolution (HDC)
對于上個 section 里提到的幾個問題,圖森組的文章對其提出了較好的解決的方法。他們設計了一個稱之為 HDC 的設計結構。
第一個特性是,疊加卷積的 dilation rate 不能有大于1的公約數。比如 [2, 4, 6] 則不是一個好的三層卷積,依然會出現 gridding effect。
第二個特性是,我們將 dilation rate 設計成 鋸齒狀結構,例如 [1, 2, 5, 1, 2, 5] 循環結構。
第三個特性是,我們需要滿足一下這個式子:?
ri 是i層的dilation rate, Mi是i層的最大dilation rate, 那么假設總共有n層的話,默認 Mn = rn 。假設我們應用于 kernel 為 k x k 的話,我們的目標則是M2 <= k ?,這樣我們至少可以用 dilation rate 1 即 standard convolution 的方式來覆蓋掉所有洞。?
基于港中文和商湯組的 PSPNet 里的 Pooling module (其網絡同樣獲得當年的SOTA結果),ASPP 則在網絡 decoder 上對于不同尺度上用不同大小的 dilation rate 來抓去多尺度信息,每個尺度則為一個獨立的分支,在網絡最后把他合并起來再接一個卷積層輸出預測 label。這樣的設計則有效避免了在 encoder 上冗余的信息的獲取,直接關注與物體之間之內的相關性。
https://www.zhihu.com/question/54149221
卷積的三種模式:
通常用外部api進行卷積的時候,會面臨mode選擇
其實這三種不同模式是對卷積核移動范圍的不同限制
設 image的大小是7x7,filter的大小是3x3
full mode:
橙色部分為image, 藍色部分為filter。full模式的意思是,從filter和image剛相交開始做卷積,白色部分為填0。filter的運動范圍如圖所示。
same mode:
當filter的中心(K)與image的邊角重合時,開始做卷積運算,可見filter的運動范圍比full模式小了一圈。注意:這里的same還有一個意思,卷積之后輸出的feature map尺寸保持不變(相對于輸入圖片)。當然,same模式不代表完全輸入輸出尺寸一樣,也跟卷積核的步長有關系。same模式也是最常見的模式,因為這種模式可以在前向傳播的過程中讓特征圖的大小保持不變,調參師不需要精準計算其尺寸變化(因為尺寸根本就沒變化)。
valid mode:
當filter全部在image里面的時候,進行卷積運算,可見filter的移動范圍較same更小了。
5.交叉熵與softmax
5.1 數學原理
交叉熵刻畫的是實際輸出(概率)與期望輸出(概率)的距離,也就是交叉熵的值越小,兩個概率分布就越接近。假設概率分布p為期望輸出(標簽),概率分布q為實際輸出,H(p,q)為交叉熵。
第一種交叉熵損失函數的形式:?
第二種交叉熵損失函數的形式:
 ?
5.2 交叉熵不適用于回歸問題
當MSE和交叉熵同時應用到多分類場景下時,(標簽的值為1時表示屬于此分類,標簽值為0時表示不屬于此分類),MSE對于每一個輸出的結果都非??粗?#xff0c;而交叉熵只對正確分類的結果看重。例如:在一個三分類模型中,模型的輸出結果為(a,b,c),而真實的輸出結果為(1,0,0),那么MSE與cross-entropy相對應的損失函數的值如下:
MSE:?
cross-entropy:?
從上述的公式可以看出,交叉熵的損失函數只和分類正確的預測結果有關系,而MSE的損失函數還和錯誤的分類有關系,該分類函數除了讓正確的分類盡量變大,還會讓錯誤的分類變得平均,但實際在分類問題中這個調整是沒有必要的。但是對于回歸問題來說,這樣的考慮就顯得很重要了。所以,回歸問題熵使用交叉上并不合適。
5.3 交叉熵與softmax
交叉熵損失函數經常用于分類問題中,特別是神經網絡分類問題,由于交叉熵涉及到計算每個類別的概率,所以在神經網絡中,交叉熵與softmax函數緊密相關。在神經網絡中,Softmax通常作用于分類模型最后的輸出,將分類結果歸一化為(0,1)區間,表示各分類結果的概率。它的函數形式為:?
1)為什么softmax分母是所有類別的加權和?
歸一化操作,將輸入映射為(0,1)之間的概率值。
2)為什么要引入指數形式?
如果使用max函數,雖然能完美的進行分類但函數不可微從而無法進行訓練,引入以 e 為底的指數并加權歸一化,一方面指數函數使得結果將分類概率拉開了距離,另一方面函數可微。
3)為什么不用2、4、10等自然數為底而要以 e 為底呢?
主要是以e為底在求導的時候比較方便。
參考:https://www.jianshu.com/p/1536f98c659c
6. 激活函數的意義
激活函數的主要作用是提供網絡的非線性建模能力。如果沒有激活函數,那么該網絡僅能夠表達線性映射,即便有再多的隱藏層,其整個網絡跟單層神經網絡也是等價的。
Sigmoid ?
?
可以被表示作概率,或用于輸入的歸一化。
sigmoid函數連續,光滑,嚴格單調,以(0,0.5)中心對稱,是一個非常良好的閾值函數。
Sigmoid函數的導數是其本身的函數,即f′(x)=f(x)(1?f(x)),計算非常方便,也非常節省計算時間。
【補充:?
具有這種性質的稱為軟飽和激活函數。具體的,飽和又可分為左飽和與右飽和。與軟飽和對應的是硬飽和, 即 f′(x)=0,當|x|>c,其中c為常數。f′(x)=0,當|x|>c,其中c為常數?!?br />一旦輸入落入飽和區,f′(x)f′(x) 就會變得接近于0,導致了向底層傳遞的梯度也變得非常小。此時,網絡參數很難得到有效訓練。這種現象被稱為梯度消失。
此外,sigmoid函數的輸出均大于0,使得輸出不是0均值,這稱為偏移現象,這會導致后一層的神經元將得到上一層輸出的非0均值的信號作為輸入。
tanh ?
tanh也是一種非常常見的激活函數。與sigmoid相比,它的輸出均值是0,使得其收斂速度要比sigmoid快,減少迭代次數。然而,從途中可以看出,tanh一樣具有軟飽和性,從而造成梯度消失。
tanh 的導數為 1-(tanh(x))2
RELU ?
當x<0時,ReLU硬飽和,而當x>0時,則不存在飽和問題。所以,ReLU 能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。
然而,隨著訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為“神經元死亡”。與sigmoid類似,ReLU的輸出均值也大于0,偏移現象和 神經元死亡會共同影響網絡的收斂性。針對在x<0的硬飽和問題,Leaky-ReLU對ReLU做出相應的改進,使得 ?
7. pooling有什么意義,和卷積有什么區別
1、降維減少計算量和內存消耗
2、增大深層卷積的感受野
3、壓縮特征圖,提取主要特征
反向傳播
設卷積核尺寸為p x q, 步長為t,為保證整除,填充后的X是m x n 矩陣, 經MaxPooling 卷積得到g x h矩陣Y, 前向傳播得到誤差值error(標量e)。上游的誤差梯度向量 ?
已在反向傳播時得到, 求 e 對 X 的梯度.
已知 : ?
e=forward(Y) ?
其中:?
其中, ?
由上游計算得出。
參考:https://www.nowcoder.com/discuss/371584
https://www.nowcoder.com/tutorial/95/ea84cef4fb2c4555a7a4c24ea2f6b6e8
https://blog.csdn.net/oBrightLamp/article/details/84635346
8.泛化誤差(過擬合)
訓練誤差與泛化誤差:訓練誤差:?
泛化誤差:?
泛化誤差表達模型的泛化能力,可以理解為樣本誤差的期望,p(x)為表示全集合X中x出現的概率(x可以是一個樣本,也可以是一個集合)
訓練誤差只能代表選定的部分數據的誤差,但泛化誤差能考慮到全數據集。
泛化誤差分解:?
即泛化誤差 = 方差 + 偏差 + 噪聲
1,噪聲是模型訓練的上限,也可以說是誤差的下限,噪聲無法避免。
 ? ?2,方差表示不同樣本下模型預測的穩定程度(方差大其實就是過擬合,預測不穩定) ? 
3,偏差表示模型對訓練數據的擬合程度 ? ?(偏差大就是欠擬合,預測效果不好)
訓練過程中方差和偏差此消彼漲 ?
降低方差的方法:(其實就是防止過擬合)
 數據:
1. 增大數據量,進行數據增強 ?
 2. 進行數據清洗(糾正錯誤數據)
3. 進行特征選擇,降低特征維度
4. 類別平衡(欠采樣、過采樣)
 網絡結構:1,正則化L1,L2, BN ?2,dropout
 宏觀:1. 選擇合適復雜度的模型,或對已有模型進行剪枝、刪減
? ? ? ? ? ?2. 集成學習(Ensemble) 
? ? ? ? ? ?3. 限制訓練
降低偏差的方法:(防止欠擬合)
 ? ? 輸入:優化特征,檢查特征工程是否有漏掉的具有預測意義的特征
 網絡中間:削弱或者去除已有的正則化約束
 宏觀:1,增加模型復雜度, 2,集成學習(Ensemble) ?3,增大訓練輪數
 ? *注:集成學習可以同時降低方差與偏差
參考 :https://www.sohu.com/a/317862976_654419
https://www.zhihu.com/question/27068705/answer/137487142?utm_source=wechat_session&utm_medium=social&utm_oi=929368776753954816
9. LR相關
手推:
zhx: ?
?最大似然<-> 最小化損失??
優缺點:
優點:
1. 參數代表每個特征對輸出的影響,可解釋性強
2. 簡單,計算量小、存儲占用低,可以在大數據場景中使用
缺點
1. 容易欠擬合,精度不高
2. 對異常值比較敏感
- LR如何解決低維不可分:通過核函數將特征把低維空間轉換到高維空間,在低維空間不可分的數據,到高維空間中線性可分的幾率會高一些 
- 怎么防止過擬合:L1正則與L2正則 
10. SVM
1. 基本原理、意義(4)
SVM需要找到一個超平面,將所有的樣本點都正確分類,并且其與所有樣本點的幾何間隔最大化;通過變換可以將其化為凸二次規劃問題,是一個帶有不等式約束的求最小值的問題。二次規劃問題可以直接解,但通常的做法是利用拉格朗日乘子法去解它的對偶問題,解法如 SMO;而根據其所需滿足的 KKT 條件,可以知道該解僅和幾何間隔最小的那部分樣本有關,這些樣本就叫支持向量。
1. 軟間隔、損失函數(3)
2. 核函數列舉、選擇(3)
3. 為什么用對偶函數(2)
4. SVM與LR (2)
基本原理與推導? :
點到超平面的距離:?
令(樣本確定后,最優的r就固定了,可以通過改變分母來調整分子的大小,得出下式)
:?
最大化r,也就是最小化下式 (約束中有不等式,需要滿足KKT條件):?
KKT條件:乘子、約束、約束*乘子:?
必有:?
前者表明樣本無影響,后者表明樣本是支持向量。
核函數:
當樣本是線性不可分的時候,需要將其特征映射到高維空間,使其線性可分;而在解對偶問題時涉及到兩個樣本的內積運算,直接在高維空間計算太困難;因此引入核函數,其值等于樣本在高維空間的內積,就能在低維空間計算。
核函數的作用:
1. 將特征空間從低維映射到高維,使得原本線性不可分的問題變為線性可分。
2. 使用核函數計算,避免了在高維空間中進行復雜計算,且不影響其效果。
常見的核函數如下:
 ?
核函數的選擇:
1. 樣本特征較多、維數較高、線性可分時,通常采用線性核。
2. 樣本特征較少,樣本數適中、線性不可分、情況不明時可先嘗試高斯核。高斯核參數較多,結果對參數的敏感性較高,通過交叉驗證可以尋找到合適的參數,但比較耗時
軟間隔與損失函數:
現實任務中很難確定核函數是否使得樣本線性可分了(即便找到了某個核函數使得樣本線性可分,也不能保證它不是過擬合產生的結果。)。
軟間隔意味著SVM允許部分樣本不滿足約束條件,即不要求所有樣本都被正確分類。
此時,優化目標為:?
式中的后一項表示被錯誤分類的數目,C是權重,單純的0/1損失顯然不好用,于是引入替代的損失函數,常見如下:?
11. 約束優化問題的對偶問題
參考鏈接:https://www.bilibili.com/video/BV1Hs411w7ci
對偶性的幾何解釋:??
d* <= p* ?(弱對偶性)
凸優化+Slater條件 => d* = p*
充分非必要
參考鏈接:https://www.bilibili.com/video/BV1aE411o7qd?p=33
 ?
凸優化(百科):凸優化是指一種比較特殊的優化,是指求取最小值的目標函數為凸函數的一類優化問題。其中,目標函數為凸函數且定義域為凸集的優化問題稱為無約束凸優化問題。而目標函數和不等式約束函數均為凸函數,等式約束函數為仿射函數,并且定義域為凸集的優化問題為約束優化問題。?
仿射函數:仿射函數即由由1階多項式構成的函數,一般形式為f(x)=Ax+b,其中的特例是,函數f(x)=ax+b,其中a、x、b都是標量。此時嚴格講,只有b=0時,仿射函數才可以叫“線性函數”(“正比例”關系)。
Slater條件:?
relint:relative interior,除去邊界的定義域
1. 對于大多數凸優化,slater條件成立。
有時候在定義域內部求fi(x)是否<0比較困難
1. 放松的slater:m中有k個仿射函數,那么只檢查剩下m-k個是否滿足條件。
SVM天生:凸二次優化+slater條件 => 強對偶性(p*=d*) <=> KKT條件
KKT條件:
原問題如下,其最優解p* ?
其對偶問題,最優解d* ?
KKT條件:給定了x*,λ*,η*求解關系。
1. 梯度為0,L`=0
2. 原問題可行條件, mi(x)<=0, nj(x)=0
3. 對偶問題可行,λi>=0
4. 互補松弛條件:λi * mi=0
互補松弛條件和梯度=0條件推導。?
參考資料:https://zhuanlan.zhihu.com/p/58064316
https://www.bilibili.com/video/BV1aE411o7qd?p=34
https://blog.csdn.net/feilong_csdn/article/details/62427148
11.Dropout
背景:為了減輕過擬合問題,2012年Hintion在論文中提出Dropout方法
原理:1,前向傳播時按概率p隨機關閉神經元(每個neuron, 有p%的可能性被去除;(注意不是去除p比例的神經元),本次反向傳播時,只更新未關閉的神經元
 ? ? ?2,下一次訓練時,恢復上一輪被更新的神經元,然后重復操作1 ?
其中,Bernoulli函數是為了生成概率r向量,也就是隨機生成一個0、1的向量
訓練與測試:
測試時需要關閉dropout,否則仍然按概率拋棄神經元會導致網絡不穩定,即同一樣本多次預測結果不同。
但若什么處理都不做,會導致訓練與測試結果不同。
為了平衡訓練與測試的差異,可以采取使得訓練與測試的輸出期望值相等的操作:
[補]:
1,訓練時除以p:假設一個神經元的輸出激活值為a,在不使用dropout的情況下,其輸出期望值為a,如果使用了dropout,神經元就可能有保留和關閉兩種狀態,把它看作一個離散型隨機變量,它就符合概率論中的0-1分布,其輸出激活值的期望變為 p*a+(1-p)*0=pa,此時若要保持期望和不使用dropout時一致,就要除以 p
2, 測試時乘p
為什么可以減輕過擬合?
 1,ensemble效果:訓練過程中每次隨機關閉不同的神經元,網絡結構已經發生了改變,整個dropout的訓練過程就相當于很多個不同的網絡取平均,進而達到ensemble的效果。
 2,減少神經元之間復雜的共適應關系:dropout導致每兩個神經元不一定每一次都在網絡中出現,減輕神經元之間的依賴關系。阻止了某些特征僅僅在其它特定特征下才有效果的情況,從而迫使網絡無法關注特殊情況,而只能去學習一些更加魯棒的特征。
BN和Dropout共同使用出現的問題
Dropout為了平衡訓練和測試的差異,會通過隨機失活的概率來對神經元進行放縮,進而會改變其方差。如果再加一層BN,又會將方差拉回至(0-1)分布,進而產生方差沖突。
處理方法:1,始終將Dropout放在BN后 2,使用高斯Dropout
參考 :
https://zhuanlan.zhihu.com/p/38200980
https://blog.csdn.net/songyunli1111/article/details/89071021
12. 評價指標
1,準確率和召回率(虛警和漏報) ?
 ?準確率為預測陽性的病人中真正為陽性的概率
 ?召回率等價于敏感度,即有病的人中被檢測到有病的概率(有病且被召回的概率)
 4、PR曲線與F1值:縱軸為精確率P,橫軸為召回率R
PR曲線圍成面積越大越好,但:?
 ?5、ROC曲線與AUC值:縱軸為真陽性率TPR,橫軸為假陽性率FPR
真陽性率(true positive rate,TPR),又稱敏感度 正樣本被預測為正樣本的概率
假陽性率:無病,但根據篩檢被判為有病的百分比 ?
?6、怎么形成曲線:分類閾值α的調整形成
 ?7、PR和ROC曲線應用場景對比:?
13.正則化L1,L2
1、什么是正則化
正則化就是一類通過顯式設計降低泛化誤差,以提升算法通用性的策略的統稱。從概率論角度看,許多正則化技術對應的是在模型參數上施加一定的先驗分布,其作用是改變泛化誤差的結構。正則化在經驗風險最小化的基礎上(也就是訓練誤差最小化),盡可能采用簡單的模型,可以有效提高泛化預測精度。如果模型過于復雜,變量值稍微有點變動,就會引起預測精度問題。正則化之所以有效,就是因為其降低了特征的權重,使得模型更為簡單。
2、L1正則化
而L1正則項就是一個L1范數,即相當于為模型添加了這樣一個先驗知識:w 服從零均值拉普拉斯分布。?
由于引入了先驗知識,所以似然函數這樣寫:?
取 log 再取負,得到目標函數:?
3、L2正則化
L2正則項就是一個L2范數,即Ridge 回歸,相當于為模型添加了這樣一個先驗知識:w 服從零均值正態分布。?
類似的,似然函數為:?
目標函數為:?
即L2范數
4、L1和L2正則化的區別
L1 正則化增加了所有權重 w 參數的絕對值之和逼迫更多 w 為零,也就是變稀疏,L2 正則化中增加所有權重 w 參數的平方之和,逼迫所有 w 盡可能趨向零但不為零(L2 的導數趨于零)。?
5、總結
給 loss function 加上正則化項,能使新得到的優化目標函數 h=f+||w|| ,需要在 f 和 ||w|| 中做一個權衡,如果還像原來只優化 f 的情況下,那可能得到一組解比較復雜,使得正則項 ||w|| 比較大,那么 h 就不是最優的,因此可以看出加正則項能讓解更加簡單,符合奧卡姆剃刀理論,同時也比較符合在偏差和方差(方差表示模型的復雜度)分析中,通過降低模型復雜度,得到更小的泛化誤差,降低過擬合程度。
L1 正則化就是在 loss function 后邊所加正則項為 L1 范數,加上 L1 范數容易得到稀疏解(0 比較多)。L2 正則化就是 loss function 后邊所加正則項為 L2 范數的平方,加上 L2 正則相比于 L1 正則來說,得到的解比較平滑(不是稀疏),但是同樣能夠保證解中接近于 0(但不是等于 0,所以相對平滑)的維度比較多,降低模型的復雜度。
- 縮小參數空間 
- 防止過擬合 
- 加先驗知識 
- 使得求解變得可行(比如樣本較少時候OLS的逆矩陣求解) 
不用L0正則化的原因
根據上面的討論,稀疏的參數可以防止過擬合,因此用L0范數(非零參數的個數)來做正則化項是可以防止過擬合的。
從直觀上看,利用非零參數的個數,可以很好的來選擇特征,實現特征稀疏的效果,具體操作時選擇參數非零的特征即可。但因為L0正則化很難求解,是個NP難問題,因此一般采用L1正則化。L1正則化是L0正則化的最優凸近似,比L0容易求解,并且也可以實現稀疏的效果。
不正則化參數b的原因
如果對||b||進行懲罰,其實是沒有作用的,因為在對輸出結果的貢獻中,參數b對于輸入的改變是不敏感的,不管輸入改變是大還是小,參數b的貢獻就只是加個偏置而已。舉個例子,如果你在訓練集中,w和b都表現得很好,但是在測試集上發生了過擬合,b是不背這個鍋的,因為它對于所有的數據都是一視同仁的(都只是給它們加個偏置),要背鍋的是w,因為它會對不同的數據產生不一樣的加權。
6、稀疏與平滑
f(x) = b + w1x1+w2x2+w3x3+...
稀疏
對于模型而言,稀疏指的是模型中的參數有較少的非零值,其作用有:
1. 去掉冗余特征,使模型更簡單,防止過擬合
2. 降低運算量,防止維度爆炸
L1正則化 與 Relu 都能帶來稀疏性。
對于樣本而言,稀疏指的是樣本中存在較多的特征值缺失或為零(文本數據通常是稀疏表示的),也叫作樣本的稀疏表示。
稀疏表示的樣本可以使得其數據集線性可分,使用SVM方法時能夠有很好的性能,并且稀疏矩陣的已經有高效的存儲方式,并不會帶來額外的負擔。
Adagrad 適合處理稀疏數據的原因:Adagrad 中每個參數的學習率:?
假設有10000個樣本,其中有9900個樣本的特征 x1 的值為0,這就是稀疏的數據。
那么在更新時,x1 的參數 w1 有 9900 次其更新梯度都是 0,僅有 100 次更新梯度非零。假如沒有使用 Adagrad,其學習率沒有針對過往梯度和做比例調整,那么10000個樣本中僅有這100次更新是有效的,相對于非稀疏特征,其收斂速度大減,而使用 Adagrad 后,學習率會被放大,雖然僅有100次更新,但是能夠大大加快收斂速度。
平滑
平滑是指模型中的參數都比較小,其函數圖像看起來比較平滑,而非陡峭,作用是使模型對樣本特征值(也就是 x)的變化不敏感,防止過擬合。
 ? 【補】
7、使用場景:
需要對特征進行篩選的場景,那我們可以選擇L1正則
L2可讓所有特征的系數都縮小,但是不會變成零,會使得優 求解穩定快速;
有些應用場景,也會把L1和L2聯合起來使用8、如何解決L1求導困難:坐標下降法 ?
9、坐標下降法缺點:可能會調到局部最優而不是全局最優
14.權重初始化
是否可以將權重初始化為0?
背景:對于簡單的網絡可以直接隨機初始化
 ? ? ?但對于深層網絡而言,參數如果初始化不合適,就有可能導致輸出結果分布在梯度過大或過小的位置,那么經過層層疊加之后就容易發生梯度消失或梯度爆炸的問題。
幾種初始化:
1. pretraining
2. raddom initialization, 但若所選分布不當,也會影響收斂
eg,10層網絡,激活函數為tanh
a,隨機初始化為均值為0,方差為0.1 ?
 b,隨機初始化為均值0,方差1 ?
Xavier Initialization(其實就是rescale 標準0,1正態分布)
2010年Xavier Glorot提出一般情況下,激活值的方差是逐層衰減的,反向傳播梯度也逐層遞減。要避免梯度消失,就是要避免激活值方差的衰減。如果能保證每層網絡的輸入和輸出分布保持一致,就perfect了, ?
推導:?
Kaiming Initialization
但Xavier假設網絡中沒有激活函數,或者為線性激活函數,若使用Relu,輸出值依舊會跑偏。
對于Relu函數,若激活前均值為0,那么激活后拋棄掉小于0的值,均值會增大,進而不滿足Xavier關于均值為0的前提。何凱明經過推導得出rescale系數應改成 ?
15. 決策樹
15.1 原理
決策樹(decision tree) 是一類常見的機器學習方法.一般的,一棵決策樹包含一個根結點、若干個內部結點和若干個葉結點,葉結點對應于決策結果,其他每個結點則對應一個屬性測試;每個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中;根結點包含樣本全集.從根結點到每個葉結點的路徑對應了一個判定測試序列。
根據不同的劃分方式,衍生出多種不同類型的決策樹方法。
15.2 ID3
信息熵:"信息熵" (information entropy)是度量樣本集合純度最常用的一種指標.假定當前樣本集合D 中第k 類樣本所占的比例為Pk (k = 1, 2,. . . , |Y|) ,則D信息熵定義為 ?
Ent(D) 的值越小,則D 的純度越高.
信息增益:?
一般而言,信息增益越大,則意味著使用屬性a來進行劃分所獲得的"純度提升"越大。
15.3 C4.5
增益率:?
需注意的是,增益率準則對可取值數目較少的屬性有所偏好,因此,C4.5算法并不是直接選擇增益率最大的候選劃分屬性,而是使用了一個啟發式:先從候選劃分屬性中找出信息增益高于平均水平的屬性,再從中選擇增益率最高的.
15.4 CART決策樹
"基尼指數" (Gini index):?
我們在候選屬性集合A 中,選擇那個使得劃分后基尼指數最小的屬性作為最優劃分屬性
15.5 剪枝處理o
 ? ? 預剪枝:生成樹時對某一節點的劃分用驗證集對比精度,沒提高則剪枝。預剪枝降低了過擬合,但基于貪心的本質禁止這些分支展開,有欠擬合的風險。?
 后剪枝:生成完整決策樹后,自底向上判斷結點剪枝與否在驗證集精度是否提高。
一般情形下,后剪枝決策樹的欠擬合風險很小,泛化性能往往優于預剪枝決策樹,但后剪枝過程是在生成完全決策樹之后進行的,并且要自底向上地對樹中的所有非葉結點進行逐一考察,因此其訓練時間開銷比未剪枝決策樹和預剪枝決策樹都要大得多。
15.6 連續值處理(回歸樹)
一般選用相鄰連續值的中點作為候選劃分點,判斷最優點進行劃分。且與離散屬性不同,若當前結點劃分屬性為連續屬性,該屬性還可作為其后代結點的劃分屬性。
15.7 缺失值處理
1. 如何在屬性值缺失的情況F進行劃分屬性選擇?
推廣的信息增益公式:?
2. 給定劃分屬性?若樣本在該屬性上的值缺失,如何對樣本進行劃分?
若樣本x劃分屬性a上的取值己知,則將x劃入與其取值對應的子結點,且樣本權值在于結點中保持為ω. 若樣本x在劃分屬性a上的取值未知,則將x同時劃入所有子結點,且樣本權值在與屬性值a_v對應的子結點中調整為凡ω·r_v。
15.8 多變量決策樹
使用多變量將每一個非葉結點用一個線性分類器進行劃分。?
15.9 LR、決策樹、SVM的選擇與對比
邏輯回歸的優點:
1. 便利的觀測樣本概率分數;
2. 已有工具的高效實現;
3. 對邏輯回歸而言,多重共線性并不是問題,它可以結合L2正則化來解決;
4. 邏輯回歸廣泛的應用于工業問題上(這一點很重要)。
邏輯回歸的缺點:
1. 當特征空間很大時,邏輯回歸的性能不是很好;
2. 不能很好地處理大量多類特征或變量;
3. 對于非線性特征,需要進行轉換;
4. 依賴于全部的數據(個人覺得這并不是一個很嚴重的缺點)。
決策樹的優點:
1. 直觀的決策規則
2. 可以處理非線性特征
3. 考慮了變量之間的相互作用
決策樹的缺點:
1. 訓練集上的效果高度優于測試集,即過擬合[隨機森林克服了此缺點]
2. 沒有將排名分數作為直接結果
SVM的優點:
1. 能夠處理大型特征空間
2. 能夠處理非線性特征之間的相互作用
3. 無需依賴整個數據
SVM的缺點:
1. 當觀測樣本很多時,效率并不是很高
2. 有時候很難找到一個合適的核函數
何時選擇這三種算法,流程如下:
首當其沖應該選擇的就是邏輯回歸,如果它的效果不怎么樣,那么可以將它的結果作為基準來參考;然后試試決策樹(隨機森林)是否可以大幅度提升模型性能。即使你并沒有把它當做最終模型,你也可以使用隨機森林來移除噪聲變量;如果特征的數量和觀測樣本特別多,那么當資源和時間充足時,使用SVM不失為一種選擇。
`
參考:機器學習,第四章 周志華 ?(本節1-8點)
https://blog.csdn.net/weixin_41712499/article/details/88149170 (本節9點)
16. Boosting vs Bagging
1. Boosting vs Bagging (3)
Bagging和Boosting的區別:
1)樣本選擇上:Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。
2)樣例權重:Bagging:使用均勻取樣,每個樣例的權重相等。Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。
3)預測函數:Bagging:所有預測函數的權重相等。Boosting:每個弱分類器都有相應的權重,對于分類誤差小的分類器會有更大的權重。
4)并行計算:Bagging:各個預測函數可以并行生成。Boosting:各個預測函數只能順序生成,因為后一個模型參數需要前一輪模型的結果。
1. XGBoost、AdaBoost、 GBDT (2)
2. 決策樹、GBDT、XGBoost 區別與聯系
https://blog.csdn.net/quiet_girl/article/details/88756843
1. XGBoost (5)
16.1 集成學習
結合多個“好而不同”的學習器,來獲得優于單一學習器的泛化性能。?
學習器之間應“好而不同”,“好而同”則集成不起作用,“壞而不同”則起副作用。(“好”可以理解為至少優于隨機瞎猜) ?
16.2 Boosting
 ? ?個體學習器之間存在強依賴關系,串行生成。
主要關注減低偏差,可以將弱分類器提升為強分類器。
先從原始訓練集訓練得到一個基學習器,再提高對錯誤樣本的權重比例,使用新的樣本分布來重新訓練學習器,重復進行T次,最終將T個學習器加權結合。
AdaBoost ?
16.3 Bagging
通過自助采樣法得到T個互有交集的訓練集,基于每個訓練集訓練出基學習器,最后結合。Bagging在最后結合時,通常對分類任務做簡單投票法,對回歸任務做簡單平均法。
由于每個學習器使用的樣本都只是原始訓練集的一個子集(約有63.2% 的樣本),所以剩下的樣本可以用作驗證集,來對泛化性能做“包外估計”。
Bagging的復雜度與訓練一個學習器的復雜度同階(可以簡單看做O(Tn),T是一個不大的常數)
主要關注降低方差,在不剪枝決策樹、神經網絡等易受樣本擾動的學習器上效用明顯。
 ?
16.4從減小偏差和方差來解釋Boosting和Bagging
Bagging:減小方差
Bagging就是對數據隨機采樣,訓練若干基分類器,對所有基分類器取平均。
假設n個基分類器,方差為σ2,若兩兩相互獨立,則取平均后的方差為σ2/n。但模型之間不可能完全獨立,假設模型之間的相關性為p,則取平均后的方差為:?
可以看出,相關性越低,方差越小。
因此,bagging時要盡可能降低模型之間的相關性:
1. 隨機森林算法中,每次選取節點分裂屬性時,會隨機抽取一 個屬性子集,而不是從所有屬性中選取最優屬性
2. 訓練集的重采樣
Boosting:減小偏差
Boosting在訓練好一個弱分類器后,我們需要計算弱分類器的錯誤或者殘差,作為下一個分類器的輸入。學習過程中不斷減小損失函數,使模型不斷逼近靶心。
可以看出,此時基分類器之間強相關,所以不會顯著降低方差。
16.5 隨機森林(RF)
隨機選取樣本+特征
是Bagging的擴展變體,在以決策樹為基學習器的Bagging集成上,在決策樹的訓練過程中引入隨機屬性選擇(原本是選擇最優的屬性,改為先隨機選擇k個屬性,再從中選擇最優屬性,推薦值 k=log2d, d為屬性數)。
相比Bagging的多樣性僅來自于樣本擾動,RF還增加了屬性擾動,進一步提升學習器之間的差異性,從而提升泛化性能。隨機森林簡單、易實現、計算開銷小,實現效率比Bagging還低(每次屬性選擇時只考慮了子集,而非全集。)
17.優化算法
在機器學習算法中,對于很多監督學習模型,需要對原始的模型構建損失函數,之后通過優化算法對損失函數進行優化,尋找到最優的參數。求解機器學習參數的優化算法中,使用較多的是基于梯度下降的優化算法(Gradient Descent, GD)。
梯度下降法的含義是通過當前點的梯度方向尋找到新的迭代點。
基本思想可以這樣理解:我們從山上的某一點出發,找一個最陡的坡走一步(也就是找梯度方向),到達一個點之后,再找最陡的坡,再走一步,直到我們不斷的這么走,走到最“低”點(最小花費函數收斂點)。?
梯度下降法的變形形式
1. 批量梯度下降法 (Batch Gradient Descent)
批梯度下降法(Batch Gradient Descent)針對的是整個數據集,通過對所有的樣本的計算來求解梯度的方向。
梯度和參數更新公式如下:?
其中,是η學習率,是g_t梯度。
每迭代一步,都要用到訓練集所有的數據,如果樣本數目很大,這種方法的迭代速度很慢!
優點:理論上講,可以得到全局最優解,參數更新比較穩定,收斂方向穩定;可以并行實現;
缺點:計算量大,參數更新慢,對內存的要求很高,不能以在線的形式訓練模型,也就是運行時不能加入新樣本。
從迭代的次數上來看,批量梯度下降法迭代的次數相對較少。其迭代的收斂曲線示意圖可以表示如下:?
2. 隨機梯度下降(Stochastic Gradient Descent)
為了加快收斂速度,并且解決大數據量無法一次性塞入內存(顯存)的問題,每次只訓練一個樣本去更新參數,這就是隨機梯度下降法。
如果我們的數據集很大,比如幾億條數據, 基本上設置1,2,(10以內的就足夠了)就可以。但是SGD也有缺點,因為每次只用一個樣本來更新參數,會導致不穩定性大些,每次更新的方向,不像batch gradient descent那樣每次都朝著最優點的方向逼近,會在最優點附近震蕩)。因為每次訓練的都是隨機的一個樣本,會導致導致梯度的方向不會像BGD那樣朝著最優點。
在代碼中的隨機把數據打亂很重要,因為這個隨機性相當于引入了“噪音”,正是因為這個噪音,使得SGD可能會避免陷入局部最優解中。
優點:訓練速度快;同時能夠在線學習。
缺點:
1、參數更新的過程震蕩很大,目標函數波動劇烈,參數更新方向有很大的波 動。
2、其較大的波動可能收斂到比批量梯度下降更小的局部極小值,因為會從一個極小值跳出來
3、不易并行實現。
從迭代的次數上來看,SGD迭代的次數較多,在解空間的搜索過程看起來很盲目。其迭代的收斂曲線示意圖可以表示如下:?
下面來對比下SGD和BGD的代價函數隨著迭代次數的變化圖:?
可以看到SGD的代價函數隨著迭代次數是震蕩式的下降的(因為每次用一個樣本,有可能方向是背離最優點的)
3.? 小批量梯度下降(Mini-Batch Gradient Descent)
在上述的批梯度的方式中每次迭代都要使用到所有的樣本,對于數據量特別大的情況,如大規模的機器學習應用,每次迭代求解所有樣本需要花費大量的計算成本。所以出現了mini-batch梯度下降,其思想是:可以在每次的迭代過程中利用部分樣本代替所有的樣本。batch通常設置為2的冪次方,通常設置(很少設置大于512)。因為設置成2的冪次方,更有利于GPU加速。現在深度學習中,基本上都是用 mini-batch gradient descent,(在深度學習中,很多直接把mini-batch gradient descent(a.k.a stochastic mini-batch gradient descent)簡稱為SGD,所以當你看到深度學習中的SGD,一般指的就是mini-batch gradient descent)。
假設每個batch有64個樣本,如下圖所示:?
mini-batch gradient descent 和 stochastic gradient descent 在下降時的對比圖: ?
mini-batch gradient descent的代價函數隨著迭代次數的變化圖:?
mini-batch gradient descent 相對SGD在下降的時候,相對平滑些。不像SGD那樣震蕩的比較厲害。mini-batch gradient descent的一個缺點是增加了一個超參數。
優點:
1、降低了更新參數的方差,使得收斂過程更加的穩定
2、能夠利用高度優化的矩陣運算,很高效的求得每小批數據的梯度
SGD容易收斂到局部最優,并且在某些情況下可能被困在鞍點,【在合適的初始化和step size的情況下,鞍點的影響不是很大。】 ?
【上述梯度下降法方法面臨的主要挑戰】:
- 選擇合適的學習率較為困難,太小的學習率會導致收斂緩慢,太大的學習率導致波動較大,可能跳出局部最小值 
? 目前可采用的方法是在訓練過程中調整學習率的大小,
 ? 例如模擬退火法:預定義一個迭代次數m,每次執行完m次訓練便減小學習率,
 ? 或者當損失函數的值低于一個閾值時,減小學習率,迭代次數和損失函數的閾值必須訓練前先定義好。
- 上述方法中,每個參數的學習率都是相同的,但這種方法是不合理的,如果訓練數據是稀疏的,并且不同特征的出現頻率差異較大,那么比較合理的做法是對于出現頻率較低的特征設置較大的學習率,對于出現頻率較大的特征設置較小的學習率。 
- 近期研究表明[1],深層網絡之所以比較難以訓練,并不是因為容易進入局部最優,因為網絡結構十分復雜,即使進入了局部最優也可以得到很好的效果,難以訓練的原因在于學習的過程很容易落入鞍點,也就是在一個維度是極小值,另一個維度卻是極大值的點,而這種情況比較容易出現在平坦區域,在這種區域中,所有方向的梯度幾乎都是0,但有的方向的二階導小于0,即出現極大值。 
4.? 動量法(Momentum)
SGD(一般指小批量梯度下降)的一個缺點在于,其更新的方向完全依賴于當前batch計算出的梯度,因而十分不穩定。
Momentum算法借用了物理中的動量的概念,模擬物體運動時候的慣性,即在更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度對之前的梯度進行微調,這樣一來,可以在一定程度上增加穩定性,從而學習的更快,并且有一定的擺脫局部最優的能力。?
更新后的梯度 = 動量項(折損系數(gamma)) x 更新前的梯度+當前的梯度 ?
注意:?
表示之前所有步驟所累積的動量和,而不僅僅是上一個更新梯度。?
紅色為SGD+momentum,黑色為SGD
【注意】:
- 動量項是表示在多大程度上保留原來的更新方向,值在0~1之間,是自己設置的超參數,訓練開始時,由于梯度可能會很大,所以初始值一般選為0.5,當梯度慢慢減小的時候,改為0.9。 
- 剛開始的時候,梯度方向變化很大,原始梯度起的作用較小,當前時刻的梯度方向減弱,則動量項較小,動量小則步長小 
xwn:SGD其實就是摸著石頭下山,動量項越大,則越難轉向。初始時尚在找路階段,原始梯度方向借鑒意義比較小,所以可以動量項設置小一些,后期經過積累基本已鎖定正確優化方向,則動量項可以設置大一些,使得每次的當前梯度只是使總方向微調而已。
- 后面的時候,梯度方向變化較小了,原始梯度起的作用大,當前時刻的梯度方向增強,則動量項較大,動量大則步長大 
- 動量項的解釋:物體運動都是有慣性的,隨機梯度下降和批量梯度下降的梯度之和本時刻的梯度有關,可以立刻改變方向,但如果加上動量的話,方向不可能驟轉。 
- 當動量項分別設置為0.5,0.9,0.99的時候,分別表示最大速度2倍、10倍、100倍于SGD的算法 
- xwn: pytorch 中用的SGD其實為加入動量的mini-batch SGD ? 
5. Nesterov Momentum(Nesterov Accelerated Gradient)
在預測參數下一次的位置之前,我們已有當前的參數和動量項,先用 ?
作為參數下一次出現位置的預測值,雖然不準確,但是大體方向是對的,之后用我們預測到的下一時刻的值來求偏導,讓優化器高效的前進并收斂。?
其中:?
表示之前所有步驟所累積的動量和,θ表示參數,一般 γ 仍取值 0.9 左右。
【注意】:在計算梯度時,不是在當前位置,而是未來的位置上
NAG 可以使 RNN 在很多任務上有更好的表現。?
【自適應學習率的方法】
1. Adagrad法[2]
該方法是基于梯度的優化方法,其主要功能是:對于不同的參數使用不同的學習率,頻繁變化的參數以更小的步長進行更新,而稀疏的參數以更大的步長進行更新,
適合于處理稀疏數據。?
對g_t從1到t進行一個遞推形成一個對學習率約束項? ,??用來保證分母非0。
??
xwn:不同參數的梯度不同,但之前的方法所有參數的學習率是相同的。
對于稀疏數據而言,每當該參數所對應的特征缺失或者為0時,其基本就不更新了,所以稀疏的那部分特征所對應參數更新頻率較低,收斂較慢。(累積的梯度也較小)
此方法通過學習率除以累積梯度的方法,增大稀疏參數的學習率,降低稠密的
超參數設定值:一般η選取0.01
直觀感受AdaGrad:
假設我們現在采用的優化算法是最普通的梯度下降法mini-batch。它的移動方向如下面藍色所示:?
假設我們現在就只有兩個參數w,b,我們從圖中可以看到在b方向走的比較陡峭,這影響了優化速度。
而我們采取AdaGrad算法之后,我們在算法中使用了累積平方梯度n_t=n_(t-1)+g2。
從上圖可以看出在b方向上的梯度g要大于在w方向上的梯度。
那么在下次計算更新的時候,r是作為分母出現的,越大的反而更新越小,越小的值反而更新越大,那么后面的更新則會像下面綠色線更新一樣,明顯就會好于藍色更新曲線。?
結論:在參數空間更為平緩的方向,會取得更大的進步(因為平緩,所以歷史梯度平方和較小,對應學習下降的幅度較小),并且能夠使得陡峭的方向變得平緩,從而加快訓練速度。
特點:
1. 前期較小的時候, 學習率約束項較大,能夠放大梯度
2. 后期較大的時候,學習率約束項較小,能夠約束梯度
缺點:
1. 由公式可以看出,仍依賴于人工設置一個全局學習率
2. 設置過大的話,會使學習率約束項過于敏感,對梯度的調節太大
3. 中后期,分母上梯度平方的累加將會越來越大,使參數更新梯度區域0,使得訓練提前結束
【補充】:
It adapts the learning rate to the parameters, performing smaller updates (i.e. low learning rates) for parameters associated with frequently occurring features, and larger updates (i.e. high learning rates) for parameters associated with infrequent features. For this reason, it is well-suited for dealing with sparse data.
高頻出現特征的相關參數有較小的更新,低頻出現特征的相關參數有較大的更新,適合處理稀疏數據。
原論文對稀疏數據的解釋:sparse data (input sequences where g_t has many zeros) 
網上對于適合稀疏數據的解釋:?
1. Adadelta/RMSprop
Adadetla是Adagrad的一個延伸,它旨在解決Adagrad學習率不斷急劇單調下降的問題,Adagrad是利用之前所有梯度的平方和,Adadelta法僅計算在一個時間區間內的梯度值的累積和。
此處的梯度累積和定義為:關于過去梯度值的指數衰減均值,當前時間的梯度均值是基于過去梯度的均值和當前梯度值平方的加權平均,γ是權重。
xwn:每一次都會在之前的梯度積累值上乘γ,越久遠的梯度值,被乘γ的次數就越大,被遺忘的就越多。?
? ? ??7.1 ?
? ? ? ?7.2
這個分母相當于梯度的均方根 root mean squared (RMS),在數據統計分析中,將所有值平方求和,求其均值,再開平方,就得到均方根值 ,所以可以用 RMS 簡寫:?
RMSprop可以算作Adadelta的一個特例,γ=0.9 ?
RMSprop提出者Hinton 建議設定γ為0.9, 學習率η為 0.001。
RMSprop和Adadelta都是大約在同一時間獨立開發的,它們都是為了解決Adagrad的學習率急劇下降的問題。
總體算法圖,可能會對全局有把握:?
RMSProp算法不是像AdaGrad算法那樣直接暴力地累加平方梯度,而是加了一個衰減系數來控制歷史信息的獲取多少。見公式7.1。γ作用相當于加了一個指數衰減系數來控制歷史信息的獲取多少,通俗理解,見https://zhuanlan.zhihu.com/p/29895933
優點:
1、RMSprop算是Adagrad的一種發展,和Adadelta的變體,效果趨于二者之間
2、適合處理非平穩目標-對于RNN效果很好
1. Adam:Adaptive Moment Estimation自適應矩估計
矩估計 ?
?二階矩估計:?
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在于經過偏置校正后,每一次迭代學習率都有個確定范圍,使得參數比較平穩。公式如下:?
特點:?
參考:
[1] Adolphs, Leonard, Hadi Daneshmand, Aurelien Lucchi, and Thomas Hofmann. “Local Saddle Point Optimization: A Curvature Exploitation Approach.” ArXiv:1805.05751 [Cs, Math, Stat], February 14, 2019. http://arxiv.org/abs/1805.05751.
[2] Duchi, J., Hazan, E., & Singer, Y. (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research, 12, 2121–2159. Retrieved from http://jmlr.org/papers/v12/duchi11a.html 
https://blog.csdn.net/u012328159/article/details/80252012
https://blog.csdn.net/cs24k1993/article/details/79120579
https://zhuanlan.zhihu.com/p/22252270
https://blog.csdn.net/jiaoyangwm/article/details/81457623
https://www.jiqizhixin.com/graph/technologies/f41c192d-9c93-4306-8c47-ce4bf10030dd ? Adam
18. 線性判別分析
線性判別分析(linear discriminant analysis,LDA)是對fisher的線性鑒別方法的歸納,這種方法使用統計學,模式識別和機器學習方法,試圖找到兩類物體或事件的特征的一個線性組合,以能夠特征化或區分它們。所得的組合可用來作為一個線性分類器,或者,更常見的是,為后續的分類做降維處理。
線性判別分析是特征抽取的一種方法。
特征抽取又可以分為監督和無監督的方法。監督的特征學習的目標是抽取對一個特定的預測任務最有用的特征,比如線性判別分析(Linear Discriminant Analysis, LDA)。而無監督的特征學習和具體任務無關,其目標通常是減少冗余信息和噪聲,比如主成分分析(Principle Components Analysis, PCA)、獨立成分分析、流形學習、自編碼器。
線性判別分析可以用于降維。
在實際應用中,數據是多個類別的,我們的原始數據一般也是超過二維的,投影后的也一般不是直線,而是一個低維的超平面。?
LDA與PCA 異同點:?
某些某些數據分布下PCA比LDA降維較優,如下圖所示:?
LDA優缺點:
LDA算法既可以用來降維,又可以用來分類,但是目前來說,主要還是用于降維。在進行圖像識別相關的數據分析時,LDA是一個有力的工具。下面總結下LDA算法的優缺點。?
參考:
https://zhuanlan.zhihu.com/p/27899927
https://www.cnblogs.com/jiangkejie/p/11153555.html
https://www.cnblogs.com/jerrylead/archive/2011/04/21/2024384.html
19.樸素貝葉斯
為什么“樸素”:條件獨立性假設:
推導:
在計算條件概率P(x|y)時出現概率為0的情況怎么辦:拉普拉斯平滑
優缺點:
優點:
1. 對小規模的數據表現很好
2. 面對孤立的噪聲點,樸素貝葉斯分類器是健壯的
3. 可解釋性高
缺點:輸入變量必須都是條件獨立的
20.梯度提升決策樹GBDT/MART (Gradient Boosting Decision Tree)
Decision Tree:GBDT中使用的決策樹一般為CART
Gradient Boosting:每次沿著損失函數的梯度下降(負梯度)的方向訓練基分類器,
最后將所有基分類器結果加和作為預測結果. ?
梯度提升與梯度下降關系:
兩者都是沿著梯度下降的方向對模型進行優化.
1. 梯度下降是LR或神經網絡中使用,梯度優化是針對模型參數的,每次迭代過程都是對參數的更新.
2. 梯度提升是直接對函數的更新,這樣和使用什么模型無關,擴展了使用模型的種類
優點:
預測的時候基分類器可以并行計算,預測速度快
對于分布稠密的數據,泛化能力和表達能力都很好
采用決策樹作為基分類器,可解釋性高,能自動發現特征之間的高階關系,
也不需要對數據進行歸一化等預處理
缺點:
高維稀疏數據,不如svm和神經網絡
處理文本分類的時候,沒有像處理數值特征的時候那么有優勢
串行訓練,訓練過程慢
21.KMeans
優點:相對是高效的,它的計算復雜度是O(NKt)接近于線性,其中N是數據對象的數目,K是聚類的簇數,t是迭代的輪數
缺點:(1)受初始點、初始K值的影響每次的結果不穩定;
 ? ? ?(2)結果通常不是全局最優而是局部最優解
K值的選擇:一般基于經驗和多次實驗結果。例如采用手肘法,我們可以嘗試不同的K值:?
由圖可見,K值越大,距離和越小;并且,當K=3時,存在一個拐點,就像人
的肘部一樣;當K (1,3)時,曲線急速下降;當K>3時,曲線趨于平穩。手肘法認
為拐點就是K的最佳值
K-means++算法:優化K-means“初始點”缺點 ?
二分K-Means算法:
1、將所有樣本數據作為一個簇放到一個隊列中。
2、從隊列中選擇一個簇進行K-means算法劃分,劃分為兩個子簇,并將子簇添加到隊列中。
3、循環迭代第二步操作,直到中止條件達到(聚簇數量、最小平方誤差、迭代次數等)。
4、隊列中的簇就是最終的分類簇集合。
從隊列中選擇劃分聚簇的規則一般有兩種方式,分別如下:
1、對所有簇計算誤差和SSE(SSE也可以認為是距離函數的一種變種),選擇SSE最大的聚簇進行劃分操作(優選這種策略)。2、選擇樣本數據量最多的簇進行劃分操作
22. 牛頓法
xwn:牛頓法解決的問題:a,求解函數的根 ? b,求解函數極值
eg,求函數的根, 圖像理解 ?
首先得明確,牛頓法是為了求解函數值為零的時候變量的取值問題的,具體地,當要求解 f(x)=0時,如果 f可導,那么將 f(x)展開:?
?
求局部最優點(極值點) ?
通過比較牛頓法和梯度下降法的迭代公式,可以發現兩者極其相似。海森矩陣的逆就好比梯度下降法的學習率參數alpha。牛頓法收斂速度相比梯度下降法很快,而且由于海森矩陣的的逆在迭代中不斷減小,起到逐漸縮小步長的效果。
海森矩陣:?
牛頓法的優缺點總結:
  優點:二階收斂,收斂速度快;
  缺點:牛頓法是一種迭代算法,每一步都需要求解目標函數的Hessian矩陣的逆矩陣,計算比較復雜,尤其是在高維情況下。(擬牛頓法就是以較低的計算代價求海森矩陣的近似逆矩陣)
參考 https://www.youtube.com/watch?v=FQN0-KHAgRw
 https://zhuanlan.zhihu.com/p/37588590
 ?http://sofasofa.io/forum_main_post.php?postid=1000966
23. 缺失值的處理
缺失值的原因:
- 信息暫時無法獲取。如商品售后評價、雙十一的退貨商品數量和價格等具有滯后效應。 
- 信息被遺漏。可能是因為輸入時認為不重要、忘記填寫了或對數據理解錯誤而遺漏,也可能是由于數據采集設備的故障 
- 獲取這些信息的代價太大。如統計某校所有學生每個月的生活費,家庭實際收入等等。 
- 有些對象的某個或某些屬性是不可用的。如一個未婚者的配偶姓名、一個兒童的固定收入狀況等 
缺失值較多:直接舍棄該特征
缺失值較少(<10%):填充處理
- 異常值填充:將缺失值作為一種情況處理0 
- 均值/條件均值填充: 
- 均值:對于數值類型屬性,可采用所有樣本的該屬性均值, 
?非數值類型,可采用所有樣本的眾數
- 其條件均值指的是與缺失值所屬標簽相同的所有數據的均值 
- 最近距離法K-means:先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據 
- 插值 
- 算法擬合填充:對有值的數據采用隨機森林等方法擬合,然后對有缺失值的數據進行預測,用預測的值來填充 
具體算法的缺失值處理:
- LR:如上所述 
- 決策樹:詳見第15點 
- XGBoost:將樣本分別分配到左孩子和右孩子,選擇增益大的方向分裂即可;如果在訓練中沒有缺失值而在預測中出現缺失,那么會自動將缺失值的劃分方向放到右子樹 
參考鏈接
https://zhuanlan.zhihu.com/p/33996846
24. 模型評估中常用的驗證方法
在機器學習中,我們通常把樣本分為訓練集和測試集,訓練集用于訓練模型,測試集用于評估模型。在樣本劃分和模型驗證的過程中,存在著不同的抽樣方法和驗證方法。
1)Holdout檢驗
Holdout 檢驗是最簡單也是最直接的驗證方法,它將原始的樣本集合隨機劃分成訓練集和驗證集兩部分。比方說,對于一個點擊率預測模型,我們把樣本按照70%~30% 的比例分成兩部分,70% 的樣本用于模型訓練;30% 的樣本用于模型驗證,包括繪制ROC曲線、計算精確率和召回率等指標來評估模型性能。
缺點:在驗證集上計算出來的最后評估指標與原始分組有很大關系。
2)交叉檢驗
k-fold交叉驗證:首先將全部樣本劃分成k個大小相等的樣本子集;依次遍歷這k個子集,每次把當前子集作為驗證集,其余所有子集作為訓練集,進行模型的訓練和評估;最后把k次評估指標的平均值作為最終的評估指標。在實際實驗中,k經常取10。
留一驗證:每次留下1個樣本作為驗證集,其余所有樣本作為測試集。樣本總數為n,依次對n個樣本進行遍歷,進行n次驗證,再將評估指標求平均值得到最終的評估指標。在樣本總數較多的情況下,留一驗證法的時間開銷極大。事實上,留一驗證是留p驗證的特例。
留p驗證:每次留下p個樣本作為驗證集,而從n個元素中選擇p個元素有C(p,n)種可能,因此它的時間開銷更是遠遠高于留一驗證,故而很少在實際工程中被應用。
3) 自助法:
不管是Holdout檢驗還是交叉檢驗,都是基于劃分訓練集和測試集的方法進行模型評估的。然而,當樣本規模比較小時,將樣本集進行劃分會讓訓練集進一步減小,這可能會影響模型訓練效果。有沒有能維持訓練集樣本規模的驗證方法呢?自助法可以比較好地解決這個問題。
自助法是基于自助采樣法的檢驗方法。對于總數為n的樣本集合,進行n次有放回的隨機抽樣,得到大小為n的訓練集。n次采樣過程中,有的樣本會被重復采樣,有的樣本沒有被抽出過,將這些沒有被抽出的樣本作為驗證集,進行模型驗證,這就是自助法的驗證過程。
當樣本無窮大時,使用自助法有多少樣本未被選擇:
一個樣本一次抽中概率為1-1/n,n次未抽中的概率為(1-1/n)^n, ?
25. 主成分分析
主成分分析是一種降維的方法,目的是找到一個超平面,將原有樣本投射在該超平面上,原則則是樣本經過投射后損失的信息盡量的少。?
PCA 對該超平面有兩種解釋:
1. 最近重構性:樣本點到該超平面的距離都足夠近。
2. 最大可分性:樣本點到該超平面的投影都盡量可分。
用最大可分性來推導,就是使得投影后的樣本的方差盡可能大,兩種方式都可以得到下式:(tr表示矩陣的跡,即矩陣主對角線元素的和,也等于矩陣所有特征值的和) ?
對其使用拉格朗日乘子法得到:?
對XXT做特征值分解,取最大的d'(d'為降維后的維數)個特征值對應的特征向量作為W,即得到PCA的解。?
d'的選取:
1. 用戶事先指定。
2. 用其它開銷較小的學習器先進行交叉驗證選取。
3. 從重構的角度出發,設定一個重構閾值,如t=95%:
降維的作用:
1. 增大樣本采樣密度。
2. 去除噪聲。
26.Softmax函數的特點和作用是什么
我們知道max,假如說我有兩個數,a和b,并且a>b,如果取max,那么就直接取a,沒有第二種可能
但有的時候我們不想這樣,因為這樣會造成分值小的那個饑餓。所以我希望分值大的那一項經常取到,分值小的那一項也偶爾可以取到,那么我用softmax就可以了 
現在還是a和b,a>b,如果我們取按照softmax來計算取a和b的概率,那a的softmax值大于b的,所以a會經常取到,而b也會偶爾取到,概率跟它們本來的大小有關。所以說不是max,而是Softmax那各自的概率究竟是多少呢,我們下面就來具體看一下
定義:?
1、計算與標注樣本的差距
在神經網絡的計算當中,我們經常需要計算按照神經網絡的正向傳播計算的分數S1,和按照正確標注計算的分數S2,之間的差距,計算Loss,才能應用反向傳播。Loss定義為交叉熵 ?
樣本中正確的那個分類的對數值。
取log里面的值就是這組數據正確分類的Softmax值,它占的比重越大,這個樣本的Loss也就越小,這種定義符合我們的要求。
2、計算上非常方便
當我們對分類的Loss進行改進的時候,我們要通過梯度下降,每次優化一個step大小的梯度。我們定義選到yi的概率是 ?
然后我們求Loss對每個權重矩陣的偏導,應用鏈式法則 ?
27.樣本不均衡
導致模型性能降低的本質原因
模型訓練時優化的目標函數和人們在測試時的評價標準不同:
1. 分布:在訓練時優化的是整個訓練集(正負樣本比例可能是1∶99)的正確率 而測試時可能想要模型在正樣本和負樣本上的平均正確率盡可能大(實際上是期望正負樣本比例為 1∶1)
2. 權重(重要性):訓練時認為所有樣本的貢獻是相等的,而測試時假陽性樣本(False Positive) 和偽陰性樣本(False Negative)有著不同的代價
解決辦法
基于數據
a)隨機采樣:欠采樣(有放回)+過采樣(放不放回都可以)
欠采樣對少數樣本進行多次復制,擴大了數據規模,但容易造成過擬合
欠采樣丟棄部分樣本,有可能會丟失部分有用信息,導致模型只學到了整體模式的部分
b)SMOTE算法(針對過采樣)不再簡單的復制樣本,而是生成新樣本,降低過擬合
 對少數類的數據集的每一個樣本x,從其k近鄰中隨機選取一個樣本y,在其連線上隨機選取一點,作為新合成的樣本
 ? ? ? ? ?根據采樣倍率重復操作 ?
每個少數類樣本合成相同數量的新樣本,這可能會增大類間重疊度,并且會生成一些不能提供有益信息的樣本
 ? ?i)Borderline-SMOTE:只給那些處在分類邊界上的少數類樣本 合成新樣本
 ? ?ii)ADASYN: 給不同的少數類樣本合成不同個數的新樣本
 ? ?iii)數據清理方法:進一步降低合成樣本帶來 的類間重疊
數據擴充方法也是一種過采樣,對少數類樣 本進行一些噪聲擾動或變換(如圖像數據集中對圖片進行裁剪、翻轉、旋轉、加光照等)以構造出新的樣本
c)Informed Undersampling(欠采樣):解決數據丟失問題
i)easy ensemble
從多數類中隨機抽取子集E,與所有少數類訓練基分類器。
重復操作后,基分類器融合
ii)Balance Cascade
從多數類中隨機抽取子集E,與所有少數類訓練基分類器
從多數類中剔除被分類正確的樣本,繼續重復操作
融合基分類器
基于算法
1. 改變損失函數,不同類別不同權重 ------不平衡
2. 轉化為單類學習(one-class learning)---極度不平衡
3. 異常檢測(anormaly detection)
28.損失函數
- 回歸 
- MSE loss/均方誤差--L2損失 
MAE loss/平均絕對誤差--L1損失
MSE VS MAE
MSE易求解,但對異常值敏感,得到觀測值的均值
MAE對于異常值更加穩健,?得到觀測值的中值 ?
對于誤差較大的異常樣本,MSE損失遠大于MAE,使用MSE的話,模型會給予異常值更大的權重,全力減小異常值造成的誤差,導致模型整體表現下降
因此,訓練數據中異常值較多時,MAE較好
但MAE在極值點梯度會發生躍遷,即使很小的損失也會造成較大的誤差,為解決這一問題,可以在極值附近動態減小學習率
總結:
1. MAE對異常值更加魯棒,但導數的不連續導致找最優解過程中低效
2. MSE對異常值敏感,但優化過程更加穩定和準確
問題:例如某個任務中90%的數據都符合目標值——150,而其余的10%數據取值則在0-30之間 
那么利用MAE優化的模型將會得到150的預測值而忽略的剩下的10%(傾向于中值);
而對于MSE來說由于異常值會帶來很大的損失,將使得模型傾向于在0-30的方向取值。
Huber loss/平滑平均絕對誤差
對異常值不敏感,且可微
使用超參數δ來調節這一誤差的閾值。當δ趨向于0時它就退化成了MAE,而當δ趨向于無窮時則退化為了MSE ?
Log-Cosh loss
擁有Huber的所有優點,并且在每一個點都是二次可導的。二次可導在很多機器學習模型中是十分必要的
Quantile loss/分位數損失
參考:https://www.jianshu.com/p/b715888f079b
- 分類 
- 0-1 loss(很少使用) 
對每個錯分類點都施以相同的懲罰
不連續、非凸、不可導,難以使用梯度優化算法
- Cross Entropy Loss/交叉熵損失 
- Hinge Loss 
一般多用于支持向量機(SVM)
ys > 1 的樣本損失皆為 0,由此帶來了稀疏解,使得 SVM 僅通過少量的支持向量就能確定最終超平面
- Exponential loss/指數損失 
一般多用于AdaBoost 中。因為使用 Exponential Loss 能比較方便地利用加法模型推導出 AdaBoost算法。該損失函數對異常點較為敏感,相對于其他損失函數robust性較差
Modified Huber loss
結合了 Hinge Loss 和 交叉熵 Loss 的優點。一方面能在 ys > 1 時產生稀疏解提高訓練效率;另一方面對于 ys < ?1 樣本的懲罰以線性增加,這意味著受異常點的干擾較少
Softmax loss
當 s << 0 時,Softmax 近似線性;當 s>>0 時,Softmax 趨向于零。Softmax 同樣受異常點的干擾較小,多用于神經網絡多分類問題中
注:相比 Exponential Loss,其它四個 Loss,包括 Softmax Loss,都對離群點有較好的“容忍性”,受異常點的干擾較小,模型較為健壯
參考:https://blog.csdn.net/weixin_41065383/article/details/89413819
Focal loss
背景:
one-stage網絡因為正負樣本嚴重不均衡,且負樣本中還有很多易區分的原因,精度一般低于two-stage 網絡(two-stage 利用RPN網絡,將正負樣本控制在1:3左右)
原理:
1,解決正負樣本不均衡問題:添加權重控制,增大少數類樣本權重 ?
2,解決難易樣本問題:Pt越大說明該樣本易區分,應當降低容易區分樣本的權重。也就是說希望增加一個系數,概率越大的樣本,權重系數越小。
另,為提高可控性,引入系數γ ?
綜合:兩個參數α和γ協調來控制,本文作者采用α=0.25,γ=2效果最好 ?
29.貝葉斯決策論
概率框架下實施決策的基本方法
以多分類舉例:
共 N 種類別,λij 為將 j 類樣本誤分類為 i 類樣本所產生的損失。
那么,給定樣本 x,將其分類為 i 類樣本所產生的期望損失為:?
任務目標為找到分類器 h:X→Y ,使總體損失最小:?
最好的 h 顯然是對每個樣本 x,都選擇期望損失最小的類別:?
h* 就叫貝葉斯最優分類器,R(h*)叫貝葉斯風險,1-R(h*) 是分類器所能達到的最優性能,即通過機器學習所能產生的模型精度的理論上限。
比如,目標是最小化誤分類率,那么:?
判別式 vs 生成式
兩者的本質區別在于建模對象不同。
判別式
直接對 P(c|x) 建模:給定 x,使用模型預測其類別 c,通過各種方法來選擇最好的模型。
生成式
對 P(c,x) 建模,再計算 P(c|x):?
P(c)好得,P(x)無所謂,重點在如何獲取 P(x|c).
極大似然估計
假設 P(x|c) 滿足某種分布(分布參數為 θ),再用極大似然估計找出 θ.
樸素貝葉斯
假設 x 中所有屬性相互獨立:?
生成式模型理解 LR:?
1. 常見的判別式與生成式模型:
判別式:線性回歸、邏輯回歸、線性判別分析、SVM、神經網絡
生成式:隱馬爾科夫模型HMM、樸素貝葉斯、高斯混合模型GMM、LDA、KNN
優缺點
1. 生成式模型最終得到的錯誤率會比判別式模型高,但是收斂所需的訓練樣本數會比較少。
2. 生成式模型更容易擬合,比如在樸素貝葉斯中只需要計數即可,而判別式模型通常都需要解決凸優化問題。
3. 生成式模型可以更好地利用無標簽數據。
4. 生成式模型可以用來生成樣本 x.
5. 生成式模型可以用來檢測異常值。
30.采樣
實現均勻分布的隨機數生成器
計算機程序都是確定性的,因此并不能產生真正意義上的完全均勻分布隨機數,只能產生偽隨機數。
計算機 的存儲和計算單元只能處理離散狀態值,因此也不能產生連續均勻分布隨機數,只能通過離散分布來逼近連續分布(用很大的離散空間來提供足夠的精度)
線性同余法:根據當前生成的隨機數xt來進行適當變換,進而產生下一次的隨機數xt+1 。初始值x0稱為隨機種子 ?
得到的是區間[0,m?1]上的隨機整數,如果想要得到區間[0,1]上的連續均勻分布隨機數,用xt除以m即可。
實際上對于特定的種子,很多數無法取到,循環周期基本達不到m。進行多次操作,得到的隨機數序列會進入循環周期gcc中的設置 ?
種子seed應該是隨機選取的,可以將時間戳作為種子。
本站qq群554839127,加入微信群請掃碼:
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【深度学习】6万字解决算法面试中的深度学习基础问题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 腾讯视频下载安装_如何上传视频到腾讯视频
- 下一篇: 【NLP】探索NLP模型可解释性的7种姿
