最近在看深度學習時,一直很好奇,loss函數,激活函數,規範化到底是怎麼弄出來的。
一直以爲這個是固定不變的,然後收集了很多自戀,查看了很多博客。最後纔有點眉目。
以下是個人淺見,希望各位大神,各位大大門指正。
一般而言:機器學習可以分爲兩大類:迴歸、分類:
迴歸:根據離散樣本(xi,yi)歸納出一條平滑的曲線(或直線),並用這條曲線來預測事物的發展情況
分類:根據離散樣本(xi,yi)的某些性質,將該離散樣本分爲幾類,每類數據有不同的性質,並用分類的參數對新樣本進行分類預測:新樣本屬於哪個類別
我們要對未知情況進行預測,就必須建立一個切合實際的模型,用這樣的模型對新的數據進行預測。而要建立一個切合實際的模型,其實就是對樣本(xi,yi)進行處理的相關參數集的調試。即我們需要找到能夠使樣本(xi,yi)進行正確分類的最佳參數集,用另一句話說,就是使分類結果(實際輸出)和理想結果(我們的期望)的誤差越小越好(鑑於很多模型可能沒有最小值解,所以一般希望越小越好),而用來表示這個誤差的函數就是我們所謂的誤差函數/損失函數/成本函數
LOSS FUNCTION
一般而言,大多數神經網絡採用了3類損失函數:二次代價函數(均方差函數),交叉熵函數,softmax所用的函數
1 均方差損失函數:在UFLDL中採用的就是均方差損失函數,其模型爲:
其中 f( ) 是正個模型的的輸出函數,具體化即爲輸出層的函數,y 爲我們希望的輸出,或者說數據帶有的標籤;
這樣,二者之間的差值自然是越小越滿足我們的要求,所以均方差損失函數可以作爲代價函數。
2 交叉熵函數:熵起源於香農信息量的期望,可以參考下http://www.cnblogs.com/crackpotisback/p/6781872.html其模型爲:
同樣的,f( )表示輸出,y表示期望的輸出或者標籤。
我們可以計算,當 y 很接近 f( ) 時, 即表示模型對數據的預測很接近我們的期望時,此時 y = f( ) =1,或者y = f( ) = 0,代入上式均可以得到J = 0
當 y 不等於或者遠離 f( ) 時, 即表示模型對數據的預測很不符合我們的期望時,此時 y =0, f( ) =1;或者y =1, f( ) = 0,代入上式均可以得到 J 趨近於無窮
所以我們可以用交叉熵來判斷模型參數是否符合我們的期望,即作爲損失函數。
3 softmax分類器所用的函數: 可以參考:http://blog.csdn.net/ture_dream/article/details/54948518,softmax是一個多分類器,是有一種特殊的交叉熵方法進行判斷的。
softmax是個多分類器,其輸出層的函數爲:
其中 j = 1,2,3,...K,表示K個類別,也就是說softmax輸出層輸出的是測試樣本是第 j 類的概率;
此時採用的損失函數爲:(下面用 i 來代替 j 了)
這樣,當第 i 個樣本存在的概率越大,L 值越接近於0;相反。該概率越小,其值越大,表示和我們希望不符合
以上是我收集的損失函數。
THE ACTIVATION FUNCTION
激活函數是每個節點(不含輸入層)必須要有的功能,在這兒簡單地對激活函數做一個介紹: 1 sigmoid函數以其導數:
2 tanh函數:
3 softplus函數:
4 softsign:http://write.blog.csdn.net/postedit
5 ReLu:
、
此外,ReLu還有其他的類型:LReLu,PReLu,RReLu三種變形。
6 softmax的輸出層,如上述。
規範化:
規範化,也稱爲正則化:
1 L2正則化:在損失函數中加入1/2 * λω^2,L2正則化對大的權重有很高的懲罰度,以求讓權重分配的更均勻一些
2 L1正則化:在損失函數中加入 λ|ω| ,L1正則化會在模型訓練過程中讓權重向量逐漸的稀疏化,即就是到最後只留下了對結果影響最大的一部分權重
3 最大範數約束:限制了一個上行的權重邊界,然後約束每個神經元上的權重都要滿足這個約束,不添加懲罰項,要求每一個神經元的權重向量必須滿足:小於一給定的常數
4 dropout正則化:設置以參數p,就是在訓練過程中,對每個神經元,都以概率p保持它是激活狀態,1-p的概率直接關閉它
可以參考:http://blog.csdn.net/han_xiaoyang/article/details/50451460