『壹』 正則化的通俗解釋
正則化:
1. 正則化的目的:防止過擬合!
2. 正則化的本質:約束(限制)要優化的參數。
關於第1點,過擬合指的是給定一堆數據,這堆數據帶有雜訊,利用模型去擬合這堆數據,可能會把雜訊數據也給擬合了,這點很致命,一方面會造成模型比較復雜(想想看,本來一次函數能夠擬合的數據,現在由於數據帶有雜訊,導致要用五次函數來擬合,多復雜!),另一方面,模型的泛化性能太差了(本來是一次函數生成的數據,結果由於雜訊的干擾,得到的模型是五次的),遇到了新的數據讓你測試,你所得到的過擬合的模型,正確率是很差的。
關於第2點,本來解空間是全部區域,但通過正則化添加了一些約束,使得解空間變小了,甚至在個別正則化方式下,解變得稀疏了。這一點不得不提到一個圖,相信我們都經常看到這個圖,但貌似還沒有一個特別清晰的解釋,這里我嘗試解釋一下,圖如下:
這里的w1,w2都是模型的參數,要優化的目標參數,那個紅色邊框包含的區域,其實就是解空間,正如上面所說,這個時候,解空間「縮小了」,你只能在這個縮小了的空間中,尋找使得目標函數最小的w1,w2。左邊圖的解空間是圓的,是由於採用了L2范數正則化項的緣故,右邊的是個四邊形,是由於採用了L1范數作為正則化項的緣故,大家可以在紙上畫畫,L2構成的區域一定是個圓,L1構成的區域一定是個四邊形。
再看看那藍色的圓圈,再次提醒大家,這個坐標軸和特徵(數據)沒關系,它完全是參數的坐標系,每一個圓圈上,可以取無數個w1,w2,這些w1,w2有個共同的特點,用它們計算的目標函數值是相等的!那個藍色的圓心,就是實際最優參數,但是由於我們對解空間做了限制,所以最優解只能在「縮小的」解空間中產生。
藍色的圈圈一圈又一圈,代表著參數w1,w2在不停的變化,並且是在解空間中進行變化(這點注意,圖上面沒有畫出來,估計畫出來就不好看了),直到脫離了解空間,也就得到了圖上面的那個w*,這便是目標函數的最優參數。
對比一下左右兩幅圖的w*,我們明顯可以發現,右圖的w*的w1分量是0,有沒有感受到一絲絲涼意?稀疏解誕生了!是的,這就是我們想要的稀疏解,我們想要的簡單模型。
還記得模式識別中的剃刀原理不?傾向於簡單的模型來處理問題,避免採用復雜的。【剃刀原理:剃刀是一種經驗法則,用於允許排除(刮掉)不可能的解釋或者情況。另提一句,剃刀是一種有效的思維方式,但事實上並不是嚴格意義上的「定理」。】
這里必須要強調的是,這兩幅圖只是一個例子而已,沒有說採用L1范數就一定能夠得到稀疏解,完全有可能藍色的圈圈和四邊形(右圖)的一邊相交,得到的就不是稀疏解了,這要看藍色圈圈的圓心在哪裡。
此外,正則化其實和「帶約束的目標函數」是等價的,二者可以互相轉換。關於這一點,
通過熟悉的拉格朗日乘子法(注意這個方法的名字),
看到沒,這兩個等價公式說明了,正則化的本質就是,給優化參數一定約束,所以,正則化與加限制約束,只是變換了一個樣子而已。
此外,我們注意,正則化因子,也就是裡面的那個lamda,如果它變大了,說明目標函數的作用變小了,正則化項的作用變大了,對參數的限制能力加強了,這會使得參數的變化不那麼劇烈(僅對如上數學模型),直接的好處就是避免模型過擬合。反之,自己想想看吧。。。
個人感覺,「正則化」這幾個字叫的實在是太抽象了,會嚇唬到人,其實真沒啥。如果改成「限制化」或者是「約束化」,豈不是更好?
『貳』 正則化的方法
求解不適定問題的普遍方法是:用一組與原不適定問題相「鄰近」的適定問題的解去逼近原問題的解,這種方法稱為正則化方法。如何建立有效的正則化方法是反問題領域中不適定問題研究的重要內容。通常的正則化方法有基於變分原理的Tikhonov 正則化、各種迭代方法以及其它的一些改進方法,這些方法都是求解不適定問題的有效方法,在各類反問題的研究中被廣泛採用,並得到深入研究。
正則化:Regularization,代數幾何中的一個概念。 就是給平面不可約代數曲線以某種形式的全純參數表示。
即對於PC^2中的不可約代數曲線C,尋找一個緊Riemann面C*和一個全純映射σ:C*→PC^2,使得σ(C*)=C 設C是不可約平面代數曲線,S是C的奇點的集合。如果存在緊Riemann面C*及全純映射σ:C*→PC^2,使得
(1) σ(C*)=C (2) σ^(-1)(S)是有限點集 (3) σ:C*σ^(-1)(S)→CS是一對一的映射
則稱(C*,σ)為C的正則化。不至於混淆的時候,也可以稱C*為C的正則化。
正則化的做法,實際上是在不可約平面代數曲線的奇點處,把具有不同切線的曲線分支分開,從而消除這種奇異性。 正則化就是對最小化經驗誤差函數上加約束,這樣的約束可以解釋為先驗知識(正則化參數等價於對參數引入先驗分布)。約束有引導作用,在優化誤差函數的時候傾向於選擇滿足約束的梯度減少的方向,使最終的解傾向於符合先驗知識(如一般的l-norm先驗,表示原問題更可能是比較簡單的,這樣的優化傾向於產生參數值量級小的解,一般對應於稀疏參數的平滑解)。 同時,正則化解決了逆問題的不適定性,產生的解是存在,唯一同時也依賴於數據的,雜訊對不適定的影響就弱,解就不會過擬合,而且如果先驗(正則化)合適,則解就傾向於是符合真解(更不會過擬合了),即使訓練集中彼此間不相關的樣本數很少。
『叄』 優化演算法是什麼呢
優化演算法是指對演算法的有關性能進行優化,如時間復雜度、空間復雜度、正確性、健壯性。
大數據時代到來,演算法要處理數據的數量級也越來越大以及處理問題的場景千變萬化。為了增強演算法的處理問題的能力,對演算法進行優化是必不可少的。演算法優化一般是對演算法結構和收斂性進行優化。
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
遺傳演算法
遺傳演算法也是受自然科學的啟發。這類演算法的運行過程是先隨機生成一組解,稱之為種群。在優化過程中的每一步,演算法會計算整個種群的成本函數,從而得到一個有關題解的排序,在對題解排序之後,一個新的種群----稱之為下一代就被創建出來了。首先,我們將當前種群中位於最頂端的題解加入其所在的新種群中,稱之為精英選拔法。新種群中的餘下部分是由修改最優解後形成的全新解組成。
常用的有兩種修改題解的方法。其中一種稱為變異,其做法是對一個既有解進行微小的、簡單的、隨機的改變;修改題解的另一種方法稱為交叉或配對,這種方法是選取最優解種的兩個解,然後將它們按某種方式進行組合。爾後,這一過程會一直重復進行,直到達到指定的迭代次數,或者連續經過數代後題解都沒有改善時停止。
『肆』 LightGBM(lgb)介紹
GBDT (Gradient Boosting Decision Tree) 是機器學習中一個長盛不衰的模型,其主要思想是利用弱分類器(決策樹)迭代訓練以得到最優模型,該模型具有訓練效果好、不易過擬合等優點。GBDT不僅在工業界應用廣泛,通常被用於多分類、點擊率預測、搜索排序等任務;在各種數據挖掘競賽中也是致命武器,據統計Kaggle上的比賽有一半以上的冠軍方案都是基於GBDT。而LightGBM(Light Gradient Boosting Machine)是一個實現GBDT演算法的框架,支持高效率的並行訓練,並且具有更快的訓練速度、更低的內存消耗、更好的准確率、支持分布式可以快速處理海量數據等優點。
1.1 LightGBM提出的動機
常用的機器學習演算法,例如神經網路等演算法,都可以以mini-batch的方式訓練,訓練數據的大小不會受到內存限制。而GBDT在每一次迭代的時候,都需要遍歷整個訓練數據多次。如果把整個訓練數據裝進內存則會限制訓練數據的大小;如果不裝進內存,反復地讀寫訓練數據又會消耗非常大的時間。尤其面對工業級海量的數據,普通的GBDT演算法是不能滿足其需求的。
LightGBM提出的主要原因就是為了解決GBDT在海量數據遇到的問題,讓GBDT可以更好更快地用於工業實踐。
1.2 XGBoost的缺點及LightGBM的優化
(1)XGBoost的缺點
在LightGBM提出之前,最有名的GBDT工具就是XGBoost了,它是基於預排序方法的決策樹演算法。這種構建決策樹的演算法基本思想是:
這樣的預排序演算法的優點是能精確地找到分割點。但是缺點也很明顯:
首先,空間消耗大。這樣的演算法需要保存數據的特徵值,還保存了特徵排序的結果(例如,為了後續快速的計算分割點,保存了排序後的索引),這就需要消耗訓練數據兩倍的內存。
其次,時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。
最後,對cache優化不友好。在預排序後,特徵對梯度的訪問是一種隨機訪問,並且不同的特徵訪問的順序不一樣,無法對cache進行優化。同時,在每一層長樹的時候,需要隨機訪問一個行索引到葉子索引的數組,並且不同特徵訪問的順序也不一樣,也會造成較大的cache miss。
(2)LightGBM的優化
為了避免上述XGBoost的缺陷,並且能夠在不損害准確率的條件下加快GBDT模型的訓練速度,lightGBM在傳統的GBDT演算法上進行了如下優化:
下面我們就詳細介紹以上提到的lightGBM優化演算法。
2.1 基於Histogram的決策樹演算法
(1)直方圖演算法
Histogram algorithm應該翻譯為直方圖演算法,直方圖演算法的基本思想是:先把連續的浮點特徵值離散化成 個整數,同時構造一個寬度為 的直方圖。在遍歷數據的時候,根據離散化後的值作為索引在直方圖中累積統計量,當遍歷一次數據後,直方圖累積了需要的統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點。
直方圖演算法簡單理解為:首先確定對於每一個特徵需要多少個箱子(bin)並為每一個箱子分配一個整數;然後將浮點數的范圍均分成若干區間,區間個數與箱子個數相等,將屬於該箱子的樣本數據更新為箱子的值;最後用直方圖(#bins)表示。看起來很高大上,其實就是直方圖統計,將大規模的數據放在了直方圖中。
我們知道特徵離散化具有很多優點,如存儲方便、運算更快、魯棒性強、模型更加穩定等。對於直方圖演算法來說最直接的有以下兩個優點:
當然,Histogram演算法並不是完美的。由於特徵被離散化後,找到的並不是很精確的分割點,所以會對結果產生影響。但在不同的數據集上的結果表明,離散化的分割點對最終的精度影響並不是很大,甚至有時候會更好一點。原因是決策樹本來就是弱模型,分割點是不是精確並不是太重要;較粗的分割點也有正則化的效果,可以有效地防止過擬合;即使單棵樹的訓練誤差比精確分割的演算法稍大,但在梯度提升(Gradient Boosting)的框架下沒有太大的影響。
(2)直方圖做差加速
LightGBM另一個優化是Histogram(直方圖)做差加速。一個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到,在速度上可以提升一倍。通常構造直方圖時,需要遍歷該葉子上的所有數據,但直方圖做差僅需遍歷直方圖的k個桶。在實際構建樹的過程中,LightGBM還可以先計算直方圖小的葉子節點,然後利用直方圖做差來獲得直方圖大的葉子節點,這樣就可以用非常微小的代價得到它兄弟葉子的直方圖。
注意:XGBoost 在進行預排序時只考慮非零值進行加速,而 LightGBM 也採用類似策略:只用非零特徵構建直方圖。
2.2 帶深度限制的 Leaf-wise 演算法
在Histogram演算法之上,LightGBM進行進一步的優化。首先它拋棄了大多數GBDT工具使用的按層生長 (level-wise) 的決策樹生長策略,而使用了帶有深度限制的按葉子生長 (leaf-wise) 演算法。
XGBoost 採用 Level-wise 的增長策略,該策略遍歷一次數據可以同時分裂同一層的葉子,容易進行多線程優化,也好控制模型復雜度,不容易過擬合。但實際上Level-wise是一種低效的演算法,因為它不加區分的對待同一層的葉子,實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂,因此帶來了很多沒必要的計算開銷。
LightGBM採用Leaf-wise的增長策略,該策略每次從當前所有葉子中,找到分裂增益最大的一個葉子,然後分裂,如此循環。因此同Level-wise相比,Leaf-wise的優點是:在分裂次數相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度;Leaf-wise的缺點是:可能會長出比較深的決策樹,產生過擬合。因此LightGBM會在Leaf-wise之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合。
Gradient-based One-Side Sampling 應該被翻譯為單邊梯度采樣(GOSS)。GOSS演算法從減少樣本的角度出發,排除大部分小梯度的樣本,僅用剩下的樣本計算信息增益,它是一種在減少數據量和保證精度上平衡的演算法。
AdaBoost中,樣本權重是數據重要性的指標。然而在GBDT中沒有原始樣本權重,不能應用權重采樣。幸運的是,我們觀察到GBDT中每個數據都有不同的梯度值,對采樣十分有用。即梯度小的樣本,訓練誤差也比較小,說明數據已經被模型學習得很好了,直接想法就是丟掉這部分梯度小的數據。然而這樣做會改變數據的分布,將會影響訓練模型的精確度,為了避免此問題,提出了GOSS演算法。
GOSS是一個樣本的采樣演算法,目的是丟棄一些對計算信息增益沒有幫助的樣本留下有幫助的。根 據計算信息增益的定義,梯度大的樣本對信息增益有更大的影響。因此,GOSS在進行數據采樣的 時候只保留了梯度較大的數據,但是如果直接將所有梯度較小的數據都丟棄掉勢必會影響數據的總 體分布。所以,GOSS首先將要進行分裂的特徵的所有取值按照絕對值大小降序排序(XGBoost一 樣也進行了排序,但是LightGBM不用保存排序後的結果),選取絕對值最大的 個數 據。然後在剩下的較小梯度數據中隨機選擇 個數據。接著將這 個數據乘 以一個常數 這樣演算法就會更關注訓練不足的樣本, 而不會過多改變原數據集的分布。最 後使用這 個數據來計算信息增益。下圖是GOSS的具體演算法。
2.4 互斥特徵捆綁演算法
高維度的數據往往是稀疏的,這種稀疏性啟發我們設計一種無損的方法來減少特徵的維度。通常被 抹綁的特徵都是互斥的(即特徵不會同時為非零值,像one-hot),這樣兩個特徵描綁起來才不會 丟失信息。如果兩個特徵並不是完全互斥 (部分情況下兩個特徵都是非零值),可以用一個指標對 特徵不互斥程度進行像量,稱之為沖突比率,當這個值較小時,我們可以選擇把不完全互斥的兩個 特徵肺綁,而不影響最後的精度。
互斥特徵肺綁演算法 (Exclusive Feature Bundling, EFB) 指出如 果將一些特徵進行融合綁定,則可以降低特徵數量。這樣在構建直方圖時的時間復雜度從O(#data* # feature)變為 O(#data* # bundle), 這里 bundle 指特徵融合綁 定後特徵包的個數, 且 #bundle 遠小於 # feature 。
我們將論文《Lightgbm: A highly efficient gradient boosting decision tree》中沒有提到的優化方案,而在其相關論文《A communication-efficient parallel algorithm for decision tree》中提到的優化方案,放到本節作為LightGBM的工程優化來向大家介紹。
3.1 直接支持類別特徵
實際上大多數機器學習工具都無法直接支持類別特徵,一般需要把類別特徵,通過 one-hot 編碼,轉化到多維的0/1特徵,降低了空間和時間的效率。但我們知道對於決策樹來說並不推薦使用 one-hot 編碼,尤其當類別特徵中類別個數很多的情況下,會存在以下問題:
1,會產生樣本切分不平衡問題,導致切分增益非常小(即浪費了這個特徵)。使用 one-hot編碼,意味著在每一個決策節點上只能使用one vs rest(例如是不是狗,是不是貓等)的切分方式。
例如,動物類別切分後,會產生是否狗,是否貓等一系列特徵,這一系列特徵上只有少量樣本為 1,大量樣本為 0,這時候切分樣本會產生不平衡,這意味著切分增益也會很小。較小的那個切分樣本集,它占總樣本的比例太小,無論增益多大,乘以該比例之後幾乎可以忽略;較大的那個拆分樣本集,它幾乎就是原始的樣本集,增益幾乎為零。比較直觀的理解就是不平衡的切分和不切分沒有區別。
2,會影響決策樹的學習。因為就算可以對這個類別特徵進行切分,獨熱編碼也會把數據切分到很多零散的小空間上,如下圖左邊所示。而決策樹學習時利用的是統計信息,在這些數據量小的空間上,統計信息不準確,學習效果會變差。但如果使用下圖右邊的切分方法,數據會被切分到兩個比較大的空間,進一步的學習也會更好。下圖右邊葉子節點的含義是X=A或者X=C放到左孩子,其餘放到右孩子。
演算法流程如下圖所示,在枚舉分割點之前,先把直方圖按照每個類別對應的label均值進行排序; 然後按照排序的結果依次枚舉最優分割點。從下圖可以看到, 為類別的均值。當然,這個方法很容易過擬合,所以LightGBM裡面還增加了很多對於這個方法的約束和正則化。
在Expo數據集上的實驗結果表明,相比0/1展開的方法,使用LightGBM支持的類別特徵可以使訓練速度加速8倍,並且精度一致。更重要的是,LightGBM是第一個直接支持類別特徵的GBDT工具。
3.2 支持高效並行
(1)特徵並行
特徵並行的主要思想是不同機器在不同的特徵集合上分別尋找最優的分割點,然後在機器間同步最優的分割點。XGBoost使用的就是這種特徵並行方法。這種特徵並行方法有個很大的缺點:就是對數據進行垂直劃分,每台機器所含數據不同,然後使用不同機器找到不同特徵的最優分裂點,劃分結果需要通過通信告知每台機器,增加了額外的復雜度。
LightGBM 則不進行數據垂直劃分,而是在每台機器上保存全部訓練數據,在得到最佳劃分方案後可在本地執行劃分而減少了不必要的通信。具體過程如下圖所示。
(2)數據並行
傳統的數據並行策略主要為水平劃分數據,讓不同的機器先在本地構造直方圖,然後進行全局的合 並,最後在合並的直方圖上面尋找最優分割點。這種數據劃分有一個很大的缺點:通訊開銷過大。 如果使用點對點通信,一台機器的通訊開銷大約為 O(#machine* # feature*#bin) 如果使用集成的通信,則通訊開銷為
LightGBM在數據並行中使用分散規約 (Rece scatter) 把直方圖合並的任務分攤到不同的機器,降低通信和計算,並利用直方圖做差,進一步減少了一半的通信量。具體過程如下圖所示。
(3)投票並行
基於投票的數據並行則進一步優化數據並行中的通信代價,使通信代價變成常數級別。在數據量很大的時候,使用投票並行的方式只合並部分特徵的直方圖從而達到降低通信量的目的,可以得到非常好的加速效果。具體過程如下圖所示。
大致步驟為兩步:
XGBoost對cache優化不友好,如下圖所示。在預排序後,特徵對梯度的訪問是一種隨機訪問,並且不同的特徵訪問的順序不一樣,無法對cache進行優化。同時,在每一層長樹的時候,需要隨機訪問一個行索引到葉子索引的數組,並且不同特徵訪問的順序也不一樣,也會造成較大的cache miss。為了解決緩存命中率低的問題,XGBoost 提出了緩存訪問演算法進行改進。
而 LightGBM 所使用直方圖演算法對 Cache 天生友好:
4.1 優點
這部分主要總結下 LightGBM 相對於 XGBoost 的優點,從內存和速度兩方面進行介紹。
(1)速度更快
(2)內存更小
4.2 缺點
訓練配置 :
6307410個樣本做訓練集
訓練出的LightGBM模型文件及其含義解析:
第1棵樹
樹的結構
第二棵樹,含義參考第一棵樹
特徵重要性
重要性值是統計特徵在所有樹中作為中間節點(分裂節點)的分裂特徵且分裂增益為正的次數,可以理解成是對分裂作用越大的特徵越重要
參考自:
Microstrong
魚達爾
『伍』 AI面試題第二彈(神經網路基礎)
提取主要特徵,減小網路參數量,減小計算量
層層傳遞的梯度>1 梯度爆炸
層層傳遞的梯度<1 梯度消失
與權重有很大關系,激活函數的影響較小。
每次訓練一層隱節點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一層隱節點的輸入,此過程就是逐層「預訓練」(pre-training);在預訓練完成後,再對整個網路進行「微調」(fine-tunning)。Hinton在訓練深度信念網路(Deep Belief Networks中,使用了這個方法,在各層預訓練完成後,再利用BP演算法對整個網路進行訓練。
這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然後更新梯度的時候,如果梯度超過這個閾值,那麼就將其強制限制在這個范圍之內。這可以防止梯度爆炸。
比較常見的是l1l1l1正則,和l2l2l2正則,在各個深度框架中都有相應的API可以使用正則化
反向傳播中,經過每一層的梯度會乘以該層的權重。
舉個簡單例子:
為了得到一致假設而使假設變得過度復雜稱為過擬合(overfitting), 過擬合表現在訓練好的模型在訓練集上效果很好,但是在測試集上效果差 。也就是說模型的泛化能力弱。
過擬合主要由兩個原因造成,數據集太小或模型太復雜
(1). 數據集擴增(Data Augmentation)
(2). 改進模型
·Early Stopping。在模型效果比較好的時候便提前停止訓練
·正則化(regularization)
L1:稀疏參數
L2:更小參數
·Dropout
·多任務學習
深度學習中兩種多任務學習模式:隱層參數的硬共享和軟共享
硬共享機制是指在所有任務中共享隱藏層,同時保留幾個特定任務的輸出層來實現。硬共享機制降低了過擬合的風險。多個任務同時學習,模型就越能捕捉到多個任務的同一表示,從而導致模型在原始任務上的過擬合風險越小。
軟共享機制是指每個任務有自己的模型,自己的參數。模型參數之間的距離是正則化的,以便保障參數相似性。
見後文
leaky relu
輸入是x輸出是y,正常的流程是:我們首先把x通過網路前向傳播,然後把誤差反向傳播以決定如何更新參數讓網路進行學習。使用Dropout之後,過程變成如下:
(1)首先隨機(臨時)刪掉網路中一半的隱藏神經元,輸入輸出神經元保持不變(圖中虛線為部分臨時被刪除的神經元)
(2) 然後把輸入x通過修改後的網路前向傳播,然後把得到的損失結果通過修改的網路反向傳播。一小批訓練樣本執行完這個過程後,在沒有被刪除的神經元上按照隨機梯度下降法更新對應的參數(w,b)。
(3)然後繼續重復這一過程:
恢復被刪掉的神經元(此時被刪除的神經元保持原樣,而沒有被刪除的神經元已經有所更新)
從隱藏層神經元中隨機選擇一個一半大小的子集臨時刪除掉(備份被刪除神經元的參數)。
對一小批訓練樣本,先前向傳播然後反向傳播損失並根據隨機梯度下降法更新參數(w,b) (沒有被刪除的那一部分參數得到更新,刪除的神經元參數保持被刪除前的結果)。
不斷重復這一過程。
沒有對數據進行歸一化
忘記檢查輸入和輸出
沒有對數據進行預處理
沒有對數據正則化
使用過大的樣本
使用不正確的學習率
在輸出層使用錯誤的激活函數
網路中包含壞梯度
初始化權重錯誤
過深的網路
隱藏單元數量錯誤
網路設計不合理(任務-網路不匹配)
機器學習有個很重要的假設:就是假設訓練數據和測試數據是滿足獨立同分布的,這保障了通過訓練數據獲得的優秀模型也能夠在測試集獲得好的效果。但是在機器學習訓練中輸入層的每個批量(X,Y)中X的分布是不一致的,並且神經網路的隱藏層的輸入分布在每次訓練迭代中發生變化。 BatchNorm就是在深度神經網路訓練過程中使得每一層神經網路的輸入保持相同分布的。
BN的基本思想其實相當直觀:因為深層神經網路在做非線性變換前(激活前)的 輸入值 (就是那個x=WU+B,U是輸入) 隨著網路深度加深或者在訓練過程中,其分布逐漸發生偏移或者變動,之所以訓練收斂慢,一般是整體分布逐漸往非線性函數的取值區間的上下限兩端靠近 (對於Sigmoid函數來說,意味著激活輸入值WU+B是大的負值或正值),所以這 導致反向傳播時低層神經網路的梯度消失 ,這是訓練深層神經網路收斂越來越慢的 本質原因 , 而BN就是通過一定的規范化手段,把每層神經網路任意神經元這個輸入值的分布強行拉回到均值為0方差為1的標准正態分布 ,其實就是把越來越偏的分布強制拉回比較標準的分布,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函數較大的變化,意思是 這樣讓梯度變大,避免梯度消失問題產生,而且梯度變大意味著學習收斂速度快,能大大加快訓練速度。
但是接下來的問題是:如果都通過BN,那麼不就跟把非線性函數替換成線性函數效果相同了,意味著網路的非線性表達能力下降了, 所以BN為了保證非線性的獲得,對變換後的滿足均值為0方差為1的x又進行了scale加上shift操作(y=scale*x+shift), 每個神經元增加了兩個參數scale和shift參數,這兩個參數是通過訓練學習到的,意思是通過scale和shift把這個值從標准正態分布左移或者右移一點並長胖一點或者變瘦一點,每個實例挪動的程度不一樣,這樣等價於激活前的值經過標准正太分布歸一化後再從正中心周圍的線性區往非線性區動了動。核心思想應該是想找到一個線性和非線性的較好平衡點,既能享受非線性的較強表達能力的好處,又避免太靠非線性區兩頭使得網路收斂速度太慢
Batch Normalization 好處:(1)提高了訓練速度,收斂速度也大大加快(2)另外調參過程也簡單多了,對於初始化要求沒那麼高,而且可以使用大的學習率等 (3)可以防止梯度消失(4)BN類似於Dropout的一種防止過擬合的正則化表達方式,可以有效防止過擬合,不用太依賴dropou和正則化
以下情況最好不要使用BN:(1)數據不平衡(2)batch_size太小
batch_size是機器學習中的一個重要參數,決定了梯度下降的方向,如果數據集比較小,完全可以採用全數據集的形式計算梯度,由全數據集確定的梯度方向能夠更好地代表樣本總體,從而更准確地朝向極值所在的方向。對於大型數據集則需要使用mini-batch_size,因為隨著數據集的海量增長和內存限制,一次性載入所有的數據進來變得越來越不可行。
當batch_size=1,即在線學習,模型難以達到收斂 。
合理增加batch_size好處 :
(1)內存利用率提高了,大矩陣乘法的並行化效率提高
(2)跑完一次 epoch(全數據集)所需的迭代次數減少,對於相同數據量的處理速度進一步加快。
(3)在一定范圍內,一般來說 Batch_Size 越大,其確定的下降方向越准,引起訓練震盪越小
盲目增大 Batch_Size 壞處 :
(1)內存利用率提高了,但是內存容量可能撐不住了
(2)跑完一次 epoch(全數據集)所需的迭代次數減少,要想達到相同精度所需要的 epoch 數量越來越多,花費的時間越長
(3)大的batchsize收斂到sharp minimum,而小的batchsize收斂到flat minimum,後者具有更好的泛化能力。
總之batchsize在變得很大(超過一個臨界點)時,會降低模型的泛化能力。在這個臨界點之下,模型的性能變換隨batch size通常沒有學習率敏感
目標所在的真實框(ground truth) 與演算法預測的目標所在的框(bounding box)的交集與並集的比值,我們會用IOU閾值來判定預測的bounding box是否有效。一般閾值會設定在0.5,當IOU的值大於等於0.5時,我們會把這個預測的bounding box 歸為正類,而小於0.5的歸為負類。
牛頓法使用的是目標函數的二階導數,在高維情況下這個Hessian(n*n維度)矩陣非常大,計算復雜度是n*n,計算和存儲都是問題
(1) 通過控制卷積核個數實現升維或者降維,從而減少模型參數和計算量
(2) 用於不同channel上特徵的融合
(3)1x1的卷積相當於全連接層的計算過程,並且加入了非線性激活函數,從而增加了網路的非線性,使得網路可以表達更加復雜的特徵。
它能夠把輸入的連續實值變換為0和1之間的輸出,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1
缺點:
(1)函數的飽和區,導致梯度幾乎為0,造成梯度消失問題
(2)Sigmoid 的 output 不是0均值,具體解釋見 https://blog.csdn.net/tyhj_sf/article/details/79932893
(3)其解析式中含有冪運算,計算機求解時相對來講比較耗時。對於規模比較大的深度網路,這會較大地增加訓練時間。
它解決了Sigmoid函數的不是零均值輸出問題,然而,梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在。
(1)在正區間解決了梯度消失的問題
(2)函數簡單,計算速度快,收斂速度遠快於sigmoid和tanh
缺點:
(1)Relu函數輸出不是0均值
(2)神經元壞死問題:指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新,有兩個主要原因導致這種狀況發生
(1) 非常不幸的參數初始化,這種情況比較少見
(2) learning rate太高導致在訓練過程中參數更新太大,不幸使網路進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的演算法
為了解決ReLU函數帶來的神經元壞死問題 , 提出了將ReLU的前半段設為αx,α通常設為0.01,,另外一種直觀的想法是基於參數的方法PReLU函數, α可由方向傳播演算法學習出來。
ELU也是為解決ReLU存在的問題而提出,顯然,ELU有ReLU的基本所有優點,以及:(1)不會有神經元壞死現象(2)函數輸出均值接近於0
但是ELU的小問題就是計算量稍微有點大。
1、使用不同的激活函數,比如Relu,Leak-Relu,PRelu,elu等激活函數代替sigmoid函數
2、使用Batch Normalizaion(批量歸一化)
3、使用殘差網路
4、預訓練加微調
1、梯度裁剪
2、權重正則化
兩個3x3的卷積核的感受野比5x5的卷積核的感受野大,在保持相同感受野的同時,用3x3的卷積核可以提升網路的深度,可以很明顯的減少計算量。
1、局部連接
2、權值共享:減小參數量
3、池化操作:增大感受野
4、多層次結構:可以提取low-level以及high-level的信息
1、數據集太小,數據樣本不足時,深度學習相對其它機器學習演算法,沒有明顯優勢。
2、數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單片語合成句子,這些特徵元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習演算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。
作用 :對輸入的特徵圖進行壓縮,
一方面使特徵圖變小,簡化網路計算復雜度;
一方面進行特徵壓縮,提取主要特徵。
通常來講,max-pooling的效果更好,雖然max-pooling和average-pooling都對數據做了下采樣,但是 max-pooling感覺更像是做了特徵選擇,選出了分類辨識度更好的特徵,提供了非線性 。 pooling的主要作用一方面是去掉冗餘信息,一方面要保留feature map的特徵信息,在分類問題中,我們需要知道的是這張圖像有什麼object,而不大關心這個object位置在哪,在這種情況下顯然max pooling比average pooling更合適。在 網路比較深的地方,特徵已經稀疏了,從一塊區域里選出最大的,比起這片區域的平均值來,更能把稀疏的特徵傳遞下去 。
average-pooling更強調對整體特徵信息進行一層下采樣,在減少參數維度的貢獻上更大一點,更多的體現在 信息的完整傳遞這個維度 上,在一個很大很有代表性的模型中,比如說DenseNet中的模塊之間的連接大多採用average-pooling,在減少維度的同時,更有利信息傳遞到下一個模塊進行特徵提取。
average-pooling在 全局平均池化操作 中應用也比較廣,在ResNet和Inception結構中最後一層都使用了平均池化。有的時候在模型接近 分類器的末端使用全局平均池化還可以代替Flatten操作 ,使輸入數據變成一位向量。
CNN網路中另外一個不可導的環節就是Pooling池化操作,因為Pooling操作使得feature map的尺寸變化,假如做2×2的池化(步長也為2),假設那麼第l+1層的feature map有16個梯度,那麼第l層就會有64個梯度,這使得梯度無法對位的進行傳播下去。其實解決這個問題的思想也很簡單,就是把1個像素的梯度傳遞給4個像素,但是需要保證傳遞的loss(或者梯度)總和不變。根據這條原則,mean pooling和max pooling的反向傳播也是不同的
mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那麼反向傳播的過程也就是把 某個元素的梯度等分為n份分配給前一層,這樣就保證池化前後的梯度(殘差)之和保持不變 ,圖示如下 :
(2) max pooling
max pooling也要滿足梯度之和不變的原則 ,max pooling的前向傳播是把patch中最大的值傳遞給後一層,而其他像素的值直接被舍棄掉。那麼 反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。 所以max pooling操作和mean pooling操作不同點在於需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個變數就是記錄最大值所在位置的,因為在反向傳播中要用到,那麼假設前向傳播和反向傳播的過程就如下圖所示 :
28、細粒度分類
29、LSTM&RNN
30、解釋LSTM結構(相對於RNN)的好處
31、RNN的梯度消失原因和解決辦法
32、Object Detection
33、Unet的介紹
34、FCN和Unet的區別
35、RCNN系列的演算法流程和區別
36、Fast RCNN中 bbox 回歸的損失函數什麼
37、解釋 ROI Pooling 和 ROI Align
38、Mask RCNN中 mask branch 如何接入 Faster RCNN中
39、解釋 FPN
40、解釋 ROI Align
41、簡述 YOLO 和 SSD
42、簡述 Hough 直線檢測、Sobel 邊緣檢測演算法流程
43、Mask RCNN中的anchors如何判定為正負樣本
44、簡述 NMS 演算法流程
45、attention起源是用在哪裡?pixel還是frame,是soft還是hard
46、anchor的正負樣本比是多少
47、演算法和激活函數等
48、BN的原理和作用
49、BN層反向傳播,怎麼求導
50、BN 的作用和缺陷,以及針對batch_size小的情況的改進(GN)
51、BN層,先加BN還是激活,有什麼區別
52、手推BP
53、優化演算法舉例和他們的區別(SGD、SGDM、RMSprop、Adam)
54、隨機梯度下降和梯度下降
55、訓練不收斂的原因有哪些
56、簡述 SVM 流程、核函數尋參及常見的核函數舉例
57、batch_size 和 learning rate 的關系(怎麼平衡和調整二者)
58、解釋過擬合和欠擬合,以及解決方法
59、激活函數有哪些,各自區別
60、損失函數有哪些
61、Sigmoid 和 ReLu 對比(各自優缺點)
62、為什麼不用sigmoid而用relu?做出了哪些改進?
63、梯度消失和梯度爆炸的原因和解決方法
64、Precision 和 Recall 的定義
65、精確率高、召回率低是為什麼
66、SVM,線性回歸和邏輯回歸的原理及區別
67、PCA原理,PCA和SVD的區別和聯系
68、正則化怎麼選擇,有哪些方式
69、L1、L2范數,區別
70、boost、Adaboost
71、dropout和batch normalization
72、講一下決策樹和隨機森林
73、講一下GBDT的細節,寫出GBDT的目標函數。 GBDT和Adaboost的區別與聯系
74、偏差、方差
75、距離度量公式哪些,區別
76、多標簽識別怎麼做
77、data argumentation怎麼處理的
78、數據不均衡怎麼處理、只有少量帶標簽怎麼處理
79、權重初始化方法都有哪些
80、權值衰減這個參數怎麼設置
81、分類問題有哪些評價指標?每種的適用場景。
82、無監督學習了解哪些
83、圖像處理Opencv
84、邊緣檢測運算元有哪些
85、霍夫變換
86、直方圖是什麼
87、canny運算元是怎麼做的
88、圖像的特徵提取有哪些演算法,適用范圍、優缺點
參考:
https://blog.csdn.net/bluesliuf/article/details/89389117
https://zhuanlan.hu.com/p/107279000
https://zhuanlan.hu.com/p/56475281
『陸』 想知道優化演算法是什麼
優化演算法是通過改善計算方式來最小化或最大化損失函數E(x)。模型內部有些參數是用來計算測試集中目標值Y的真實值和預測值的偏差程度的,基於這些參數就形成了損失函數E(x),比如說,權重(W)和偏差(b)就是這樣的內部參數,一般用於計算輸出值,在訓練神經網路模型時起到主要作用。
優化演算法分的分類
一階優化演算法是使用各參數的梯度值來最小化或最大化損失函數E(x),最常用的一階優化演算法是梯度下降。函數梯度導數dy/dx的多變數表達式,用來表示y相對於x的瞬時變化率。
二階優化演算法是使用了二階導數也叫做Hessian方法來最小化或最大化損失函數,由於二階導數的計算成本很高,所以這種方法並沒有廣泛使用。
『柒』 Xgboost原理分析
從陳天奇的PPT中進行總結,重點了解模型的構建,策略的選擇和優化演算法的選取。
機器學習的目標函數基本都是:
也就是 損失函數和正則化項的組合。
在目標函數,偏差和方差之間 做trade-off
也稱分類回歸樹
上圖可以看出來,每個葉子結點都有一個分數,那麼被分到該結點的數據獲得這個分數。
我們通過將多個這樣的回歸樹集成起來,獲得我們的集成演算法。
上圖可以看出來,對於小男孩的總體分數,就是兩棵樹的加和結果。
集成樹的特點有:
模型假設我們有K棵樹(上面提到的回歸樹):
F就是我們的假設空間(函數空間,包含k個回歸樹)
這個模型中的參數包括:
定義目標函數,然後去優化這個目標函數
上圖中,是以時間為變數,來構建回歸樹,評價個人隨著時間t是否喜歡浪漫音樂。
將一個回歸樹等價到一個分段函數中,那麼我們從中需要學習的「參數」也就是我們的:
上面四幅圖中,給出了不同劃分位置和劃分高度,最後的參數模型也就是圖四的效果。
那麼從一棵樹開始,我們可以來定義我們模型的目標函數。
我們有K棵樹
目標函數是:
第一項是我們的損失函數項,第二項是我們的正則化項。
當我們討論決策樹的時候,都是啟發式的從一些方面進行考慮:
我們使用決策樹演算法時候,就是通過信息增益來劃分分支,那麼這里我們可以用每一次劃分的信息增益當做我們的損失函數。(劃分後的信息增益-劃分前的信息增益)
決策樹中的剪枝,就是為了控制決策樹的模型復雜度,這里我們也通過控制葉子節點的個數,來實現正則化,控制模型的復雜度。
限制樹的深度,也是一定程度上限制我們的模型復雜度。
盡可能的讓我們的葉子上的score平滑,使用L2正則化來控制葉子結點上的權重。
目標函數是:
那我們是如何學習這個目標函數的呢?
我們不能使用梯度下降演算法來進行計算損失函數,因為我們這里的參數是回歸樹,而不是一些數值型數據(類比線性模型裡面的參數 w)
從常數開始,然後每次加入一棵新樹(一個新的函數)
其中,我們的 是第t輪的訓練模型, 是t輪前我們的訓練結果, 是新加入的函數(新加入的一棵樹)
那麼我們怎麼樣決定一個新加入的樹(函數 ),這個函數就是我們上面提到的我們的參數,即如何選擇一個參數來優化我們的模型,當然從優化目標函數中找。
上述目標函數還是很復雜,於是作者引入了泰勒展開式來替換損失函數。
類比泰勒展開式的
在我們的目標函數中損失函數 相當於函數
所以我們可以得到我們的目標函數帶入泰勒展開之後的結果是:
這裡面 是我們前t-1輪的對 預測和 的目標的損失,這是一個常數項。因為我們優化的是第t輪,研究怎麼選擇第t輪需要加進去的樹,所以前面的 我們都可以看作是一個常量。
給目標函數對權重求偏導,得到一個能夠使目標函數最小的權重,把這個權重代回到目標函數中,這個回代結果就是 求解後的最小目標函數值 。
是一個葉子結點上的 每一個樣本的梯度值,同理理解
從我們的損失函數 ,說起,看我們如何定義這個 ,不如這里我們以簡單的 為例子:
針對我們的平方差損失函數來說, 就是如下式子:
其中 項也就是我們常說的殘差項。
從例子中理解各個參數的含義,
比如葉子結點1代表的權重(分數)是+2,葉子結點2對應的是+0.1,葉子結點3對應是-1
然後看我們的正則化項,其中T代表葉子結點的數目, 從上面的例子可以很容易的計算得到我們的正則化結果。
我們定義: 就是第i個數據屬於第j個葉子結點。
然後我們將屬於同一個葉子結點的數據放入一個group裡面得到
也就是將從各個樣本上的遍歷,映射到了對葉子結點的遍歷(葉子結點里可能包含多個樣本)
重新定義G 和H ,也將其從單個樣本上的遍歷,映射到對葉子結點的遍歷。
其中的 是來評價一棵樹的結構是否很好,分數越小,結構越好。
但是仍然有無數顆樹可以進行選擇,那麼我們如何選擇才能保證最優化呢?
從常數0開始,我們選擇一個樹加入,每一次嘗試去對已有的葉子加入一個分割。
然後我們來計算分割後的結構分數(左子樹+右子樹)與我們不進行分割的結構分數進行做差,同時還要減去因為分割引入的結構復雜度。
也可以很好的處理非數值型特徵,並且不需要將類別特徵(離散的)和數值型特徵(連續的)分開進行處理。
我們可以通過one-hot編碼將離散的特徵類別映射到數值型。
如果類別特別多,向量會非常稀疏,但是這個演算法也很擅長處理稀疏的數據。
設置最大樹深度,然後遞歸的去剪裁 所有葉子節點出現負的Gain的分裂情況
更細節的問題是,我們不會每個樹做到最優化,這樣容易過擬合,我們賦予一個參數,來控制每次的優化(不讓優化效果太好),這樣留下更多的優化空間給後邊的樹。
分類回歸樹的集成演算法可以用來做回歸,分類,ranking等等,這取決於我們的損失函數如何定義。
(1)objective [ default=reg:linear ] 定義學習任務及相應的學習目標,可選的目標函數如下:
(2)』eval_metric』 The choices are listed below,評估指標:
(3)lambda [default=0] L2 正則的懲罰系數
(4)alpha [default=0] L1 正則的懲罰系數
(5)lambda_bias 在偏置上的L2正則。預設值為0(在L1上沒有偏置項的正則,因為L1時偏置不重要)
(6)eta [default=0.3]
為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之後,會直接獲得新特徵的權重。 eta通過縮減特徵的權重使提升計算過程更加保守。預設值為0.3
取值范圍為:[0,1]
(7)max_depth [default=6] 數的最大深度。預設值為6 ,取值范圍為:[1,∞]
(8)min_child_weight [default=1]
孩子節點中最小的樣本權重和。如果一個葉子節點的樣本權重和小於min_child_weight則拆分過程結束。在現行回歸模型中,這個參數是指建立每個模型所需要的最小樣本數。該參數越大演算法越保守。
取值范圍為: [0,∞]
『捌』 L0,L1,L2范數及其應用
原文作者鏈接
L0,L1,L2范數及其應用
在線性代數,函數分析等數學分支中,范數(Norm)是一個函數,其賦予某個向量空間(或矩陣)中的每個向量以長度或大小。對於零向量,另其長度為零。直觀的說,向量或矩陣的范數越大,則我們可以說這個向量或矩陣也就越大。有時范數有很多更為常見的叫法,如絕對值其實便是一維向量空間中實數或復數的范數,而Euclidean距離也是一種范數。
范數的一般化定義:設p≥1p≥1的實數,p-norm定義為:
此處,當p=1時,我們稱之為taxicab Norm,也叫Manhattan Norm。其來源是曼哈頓的計程車司機在四四方方的曼哈頓街道中從一點到另一點所需要走過的距離。也即我們所要討論的l1范數。其表示某個向量中所有元素絕對值的和。
而當p=2時,則是我們最為常見的Euclidean norm。也稱為Euclidean distance。也即我們要討論的l2范數。
而當p=0時,因其不再滿足三角不等性,嚴格的說此時p已不算是范數了,但很多人仍然稱之為l0范數。 這三個范數有很多非常有意思的特徵,尤其是在機器學習中的正則化(Regularization)以及稀疏編碼(Sparse Coding)有非常有趣的應用。
下圖給出了一個Lp球的形狀隨著P的減少的可視化圖。
1- L0 范數
雖然L0嚴格說不屬於范數,我們可以採用等式 1 1來給出l0-norm得定義:
上面的公式仍然讓人不是很明白,0的指數和平方根嚴格意義上是受限條件下才成立的。因此在實際應用中,多數人給出下面的替代定義:
其表示向量中所有非零元素的個數。正是L0范數的這個屬性,使得其非常適合機器學習中 稀疏編碼 ,特徵選擇的應用。通過最小化L0范數,來尋找最少最優的稀疏特徵項。但不幸的是,L0范數的最小化問題在實際應用中是NP難問題。因此很多情況下,L0優化問題就會被relaxe為更高維度的范數問題,如L1范數,L2范數最小化問題。
2- L1 范數
對於向量X,其L1范數的定義如下:
其應用范圍非常的廣泛。如在計算機視覺中的 Sum of Absolute Differents , Mean Absolute Error ,都是利用L1範式的定義。
L1最優化問題的解是稀疏性的 , 其傾向於選擇很少的一些非常大的值和很多的insignificant的小值。而L2最優化則更多的非常少的特別大的值,卻又很多相對小的值,但其仍然對 最優化解有significant的貢獻。 但從最優化問題解的平滑性來看,L1范數的最優解相對於L2范數要少,但其往往是最優解,而L2的解很多,但更多的傾向於某種局部最優解。
但由於L1范數並沒有平滑的函數表示,起初L1最優化問題解決起來非常困難,但隨著計算機技術的到來,利用很多凸優化演算法使得L1最優化成為可能。
3- L2 范數
當然范數中最常見,也最著名的非L2范數莫屬。其應用也幾乎包括科學和工程的各個領域。定義公式如下:
也Euclidean Norm,如果用於計算兩個向量之間的不同,即是Euclidean Distance.
歐幾里德范數的最優化問題可以用如下公式表述:
藉助拉格朗日乘子,我們便可以解決該最優化問題。由L2衍生,我們還可以定義無限norm,即l-infinity norm:
無窮范數
一眼看上去上面的公式還是有點tricky的。我們通過一個簡單的數學變換,假設X_j是向量中最大的元素,則根據無限大的特性,我們可以得到:
則根據公式無窮范數的定義,我們可以得到:
因此我們便可以說l-infinity norm是X向量中最大元素的長度。
4- 機器學習中的應用
不知道有多少人是因為機器學習中的正則化和特徵選擇等才開始了解這些范數的,至少我是。L0范數本身是特徵選擇的最直接最理想的方案,但如前所述,其不可分,且很難優化,因此實際應用中我們使用L1來得到L0的最優凸近似。L2相對於L1具有更為平滑的特性,在模型預測中,往往比L1具有更好的預測特性。當遇到兩個對預測有幫助的特徵時,L1傾向於選擇一個更大的特徵。而L2更傾向把兩者結合起來。
4-1 正則化
在機器學習中正則化是指在損失函數中通過引入一些額外的信息,來防止 ill-posed 問題或 過擬合 問題。一般這些額外的信息是用來對模型復雜度進行懲罰( Occam's razor )。其一般形式如下:
||w||||w||便可以選取L1或是L2范數來作為懲罰項,不同的模型,其損失函數也不同,對於線性回歸而言,如果懲罰項選擇L1,則是我們所說的 Lasso回歸 ,而L2則是 Ridge回歸 。下面我們列出了不同模型中的正則化的損失函數(來自Andrew Ng的 Machine Learning 課程):
Regularized Logistic Regression
Regularized Neural Network
Soft Margin SVM
從上面可以看出常用的正則化項多是L2范數,除了防止過擬合的問題,還有一個好處就是能否改善ill-posed(condition)問題。尤其是當訓練樣本相對於特徵數非常少時,其矩陣便是非滿秩的,往往傾向於有無數個解,且是不可逆的。其 condition num 便會很大。一方面,根據此得到的最優化值很不穩定,往往某個特徵變數很小的變動都會引發最終結果較大的偏差。另外通過矩陣求逆從而求的最優解就會變的非常困難。如對於線性回歸而言,求的最優解析解為:
而加上L2正則項後,其變為:
從而可以直接求逆,改善了condition number。
而對於無解析解,通過迭代優化的演算法,L2正則化通過將目標函數變為λ-strongly convex(λ強凸),有效的加快了其收斂速度。
4-2 貝葉斯先驗
正則化項從貝葉斯學習理論的角度來看,其相當於一種先驗函數。即當你訓練一個模型時,僅僅依靠當前的訓練集數據是不夠的,為了實現更好的預測(泛化)效果,我們還應該加上先驗項。而L1則相當於設置一個Laplacean先驗,去選擇MAP(maximum a posteriori)假設。而L2則類似於 Gaussian先驗。如下圖所示:
從上圖可以看出,L1先驗對大值和小值的tolerate都很好,而L2先驗則傾向於均勻化大值和小值。
4-3 特徵選擇與稀疏編碼
機器學習社區里通常把特徵選擇的方法分為三種。一種是基於統計學的一些方法,對特徵進行預篩選,選出子集作為模型輸入。如統計推理使用的假設檢驗,P值。另一種是採用某種成熟的學習演算法進行特徵選擇,如決策樹中採用信息增益來選擇特徵。還有一種便是在模型演算法中進行自動特徵選擇。而L1范數作為正則化項,其特徵選擇的圖譜傾向於spiky,實現了有效的特徵選擇。
稀疏編碼也是想通過尋找盡可能少的特徵表達某個輸入的向量X。
其中ϕiϕi是所要尋找的基向量,a(j)iai(j)是我們要優化的各個基向量的權重。最右邊的表達式便是其正則化懲罰項,在這里也稱Sparse Cost。實際中我們通常便用L1范數。
加入兩個題目
L1最優化問題的解是稀疏性的 , 其傾向於選擇很少的一些非常大的值和很多的insignificant的小值。而L2最優化則更多的非常少的特別大的值,卻又很多相對小的值,但其仍然對 最優化解有significant的貢獻。 但從最優化問題解的平滑性來看,L1范數的最優解相對於L2范數要少,但其往往是最優解,而L2的解很多,但更多的傾向於某種局部最優解。
5 參考
[1.] Wiki: Norm .
[2.] Rorasa's blog .
[3.] MaxJax .
[4.] 機器學習中的范數規范化 .
[5.] Difference between l1 and l2 .
[6.] gradient-descent-wolfe-s-condition-and-logistic-regression .
『玖』 什麼是正則化希望得到詳細定義和例子
圖像復原從數學角度考慮,它等價於第一類fredholm積分方程,是一種反問題,具有很大的病態性,因此,必須進行正則化處理。從統計的角度看,正則化處理其實就是一種圖像的先驗信息約束 。假設圖像退化過程用如下模型描述:
g=hf+n (1)
則圖像復原即根據觀測圖像g恢復原始圖像f。正則化圖像復原從貝葉斯角度來說,可以用map(最大後驗概率估計)方法實現,即:
f=argmax{p(f|g)=p(g|f)p(f)/p(g)} (2)
先驗分布函數 p(f)可以看成一正則化項。圖像復原關鍵問題是先驗模型p(f) 的選取,也可以說圖像建模在圖像復原中起者中心作用。早期的圖像復原方法假設 服從平穩高斯分布,從而導致約束最小二乘圖像復原方法;但許多統計試驗表明大部分自然圖像都不能用平穩高斯分布准確的描述,模型的不準確導致復原的圖像質量較差,圖像邊緣不能很好的保持。mrf (markov random field)在圖像復原中起很重要的作用,如果將原始圖像看作mrf的一次實現,根據mrf的局部性,可以用局部gmrf(gauss markov random field)對圖像進行建模,按照這種方式建立的模型比用平穩高斯分布更為准確,因此所復原的質量也較好。現代很多人熱衷於小波變換的圖像復原,其原因是圖像的小波系數可近似認為互相獨立,且能夠用簡單的統計模型描述(如廣義高斯分布等)。我認為小波在圖像復原中主要起工具的作用,現在關於小波方法進行圖像復原,研究重點應放在對小波系數的統計建模(如小波系數尺度間、尺度內、方向間的相關性等)。由於一般正交小波變換不具有平移不變性和方向較少的特點,基於這些不足,現在的發展是在其他變換域內建立模型,如(冗餘小波變換,復小波變換,脊波,曲波等)這仍是一個正在發展的課題,關於對這些變換域系數進行統計建模用於圖像復原能夠彌補正交小波變換的不足,然而重點仍是對變換系數的統計建模。
正如我們如上所說,圖像建模對圖像復原起很重要的作用。然而,從計算復雜度的角度考慮,一個好的模型常導致計算上的困難。因為一個好的模型最終導致一個(2)式有多個極值點,從而在計算上必須用一些全局優化演算法(如模擬退火等),這導致很大的計算量。
綜上分析,圖像復原需要兩方面的知識需要考慮:1統計建模的知識2計算方法的知識。
兩者任一方面的改進,都會推動圖像復原的發展。因此,必須懂得數理統計,貝葉斯分析,隨機場,優化演算法,矩陣論,小波分析等數學課程。
『拾』 正則化 到底指什麼
正則化是為了使用正則表達式用以在海量數據中迅速查找匹配的數據方法。