【群話題精華】五月集錦——機器學習和深度學習中一些值得思考的問題

【群話題精華】五月集錦——機器學習和深度學習中一些值得思考的問題

10 人贊了文章

原創聲明:本文為 SIGAI 原創文章,僅供個人學習使用,未經允許,不得轉,不能用於商業目的。

SIGAI微信技術交流群已經運營3周了,在這期間群友們對很多技術問題進行了熱烈的討論,在這裡,我們將精華的話題整理出來,做一個總結。以後在每個月我們都會有類似的總結,敬請期待。

神經網路參數初始化

神經網路一般用梯度下降法進行訓練,參數初始值的設定是一個需要考慮的問題。和logistic回歸,支持向量機等模型不同,神經網路的權重和偏置項不能用0或者1這樣簡單的固定值來初始化,而是用隨機數進行初始化。

在編程實現時,最常用的兩種隨機數是正態分布和均勻分布。前者用某一區間如[0,1]內的均勻分布隨機數初始化權重值。後者一般用0均值,單位方差的正態分布N(0, 1)產生隨機數來初始化權重。具體實現時,這些隨機分布的參數如均值和方差可以用更複雜的策略來確定。這有什麼理論依據嗎?哪種初始化方法更好?我們先來看幾個主要開源庫的實現。

OpenCV中實現了多層感知器模型,即多層全連接神經網路。它的初始化採用了均勻分布的隨機數,具體的,是Nguyen-Widrow演算法,使用的是均勻分布的隨機數,根據本層和前一層的神經元數量對隨機的權重值進行了縮放。具體做法如下:

1.生成[-1,1]內均勻分布的隨機數

2.對這個隨機數進行歸一化,歸一化係數由本層和前一層神經數,本層所有權重之和決定

3.將權重設置會歸一化後的隨機數

再來看Caffe中的實現。它提供了7種初始化策略:常量初始化(constant),高斯分布初始化(gaussian),positive_unitball初始化,均勻分布初始化(uniform),xavier初始化,MSRA初始化,雙線性初始化(bilinear)。

常量初始化把權值或著偏置初始化為一個常數,這常數由用戶自己定義。

均勻分布初始化用均勻分布的隨機數來初始化網路參數,均勻分布的上限和下限值由用戶自己定義。

高斯分布初始化用正態分布隨機數初始化網路參數。正態分布的均值和方差由用戶自己定義。

positive_unitball初始化也是用均勻分布的隨機數初始化,但保證每個神經元與前一層所有神經元的連接的權重值之和為1。

Xavier初始化採用了文獻[1]中提出的方法,也是用均勻分布的隨機數來初始化權重值。

MSRA初始化採用了文獻[2]提出的方法,使用的是正態分布的隨機數。

Bilinear使用的雙線程插值公式來初始化權重值。

TensorFlow中也使用了正態分布,均勻分布這些隨機數來初始化參數值,限於篇幅,我們不在這裡詳細介紹,感興趣的讀者可以閱讀文檔和源代碼。

如果讀者對神經網路權重初始化這一話題感興趣,可以閱讀上面的參考文獻以及源代碼。至於哪種初始化策略更好,這個至少目前小編還沒有找到非常嚴格的理論分析。在討論中,有群友指出:

均勻分布的隨機數能夠讓更多的權重接近於0

這和網路的結構,神經元的數量,激活函數的類型有關。到目前為止,小編至少沒有找到有理論說服力的文章來證明一種初始化方法一定比另外一種好,能支撐結論的大多還是一些實驗,而這些實驗的結論是否具有普適性是有爭議的。

深度神經網路的泛化能力

泛化能力是機器學習演算法核心的指標之一。在複雜問題如機器視覺,語音識別上,深度學習模型的泛化能力比之前的經典演算法要強。比如行人檢測,用HOG+SVM或者HOG+AdaBoost的方案在訓練集上能達到95%以上的準確率,但在測試集上可能只有70%多,在實際應用時更低。而卷積網路在測試集上也能達到80%多的準確率。從一般情況下看,深度學習演算法確實相對來說有更強的泛化能力。

但在實際使用時,同樣會有過擬合的問題。典型的例子是人臉識別,在LFW上準確率可以接近100%,實際使用時可能會非常糟糕。群友們對深度學習的泛化能力問題也展開了討論,有群友指出了文章[3],這篇文章分析了神經網路的泛化誤差,同時這篇文章也充滿了爭議,感興趣的讀者可以閱讀。

分類問題為什麼用交叉熵而不用歐氏距離做損失函數?

在用神經網路做分類時,我們一般選擇交叉熵作為損失函數,而不用歐氏距離,這是是為什麼?有群友提出了這個問題。其他群友給出了下面一些答案:

如果用交叉熵,能保證神經網路訓練時是一個凸優化問題。顯然這種回答是錯誤的,凸函數的複合並不一定是凸函數。

用交叉熵,如果當前值與目標值相差很遠,則梯度下降法迭代時收斂的更快一些。這個答案也站不住腳,仔細想想用歐氏距離和交叉熵作為損失函數時梯度下降法的迭代公式就知道了。

具體答案是什麼?小編找到了之前看過的一篇文獻[6],這篇文章既有理論分析,也有實驗結果比較,感興趣的讀者可以閱讀。在這裡我們不做過多的解釋。

Relu和dropout的區別

有群友問到了Relu和dropout的區別,Relu在輸入變數小於0時導數值為0,可以起到正則化的作用,而dropout也是一種正則化機制,二者有什麼區別?

下面我們匯總了各位群友的回答:

Relu的主要作用是減輕梯度消失問題,因為輸入變數大於0時到數值為1,和sigmoid,tanh相比,不容易產生飽和,如果想對Relu有跟深入的了解,可以閱讀文獻[8]。Dropout是一種正則化機制,在訓練時通過隨機讓一些神經元不起作用,使得模型更稀疏,關於Dropout還有更深的解釋,請閱讀文獻[7]。

某一群友的答案非常經典:

Relu是強制正則化,而Dropout是隨機正則化。

不同的激活函數在性能上到底有多大區別?

目前可供選擇的激活函數很多,究竟應該怎麼選擇,它們之間有沒有比較實驗?有群友提出了這個問題。對這個問題還沒有一個明確的答案。

sigmoid和tanh在早期用的比較多,現在ReLU以及它的改進型用的更多,相比之下更不容易出現飽和問題。對於各種激活函數的對比實驗,小編目前還沒有找到,理論分析比較的文章也沒有,如果有讀者找到了,歡迎和我們聯繫!

參考文獻

[1] X. Glorot, Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. AISTATS, 2010.

[2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. 2015, international conference on computer vision.

[3] Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals. Understanding deep learning requires rethinking generalization. 2017, international conference on learning representations.

[4] L. Bottou. Stochastic Gradient Descent Tricks. Neural Networks: Tricks of the Trade. Springer, 2012.

[5] I. Sutskever, J. Martens, G. Dahl, and G. Hinton. On the Importance of Initialization and Momentum in Deep Learning. Proceedings of the 30th International Conference on Machine Learning, 2013.

[6] Cross-Entropy vs. Squared Error Training: a Theoretical and Experimental Comparison.

[7] Yarin Gal, Zoubin Ghahramani. Dropout as a Bayesian Approximation: Insights and Applications. ICML 2015.

[8] Nair, V. and Hinton. Rectified linear units improve restricted Boltzmann machines. In L. Bottou and M. Littman, editors, Proceedings of the Twenty-seventh International Conference on Machine Learning (ICML 2010).

原創聲明:本文為 SIGAI 原創文章,僅供個人學習使用,未經允許,不能用於商業目的。

推薦閱讀

[1] 機器學習-波瀾壯闊40年 SIGAI 2018.4.13.

[2] 學好機器學習需要哪些數學知識?SIGAI 2018.4.17.

[3] 人臉識別演算法演化史 SIGAI 2018.4.20.

[4] 基於深度學習的目標檢測演算法綜述 SIGAI 2018.4.24.

[5] 卷積神經網路為什麼能夠稱霸計算機視覺領域? SIGAI 2018.4.26.

[6] 用一張圖理解SVM的脈絡 SIGAI 2018.4.28.

[7] 人臉檢測演算法綜述 SIGAI 2018.5.3.

[8] 理解神經網路的激活函數 SIGAI 2018.5.5.

[9] 深度卷積神經網路演化歷史及結構改進脈絡-40頁長文全面解讀 SIGAI 2018.5.8.

[10] 理解梯度下降法 SIGAI 2018.5.11

[11] 循環神經網路綜述—語音識別與自然語言處理的利器 SIGAI 2018.5.15

[12] 理解凸優化 SIGAI 2018.5.18

[13]【實驗】理解SVM的核函數和參數 SIGAI 2018.5.22

[14] ] [SIGAI綜述] 行人檢測演算法 SIGAI 2018.5.25

[15] 機器學習在自動駕駛中的應用—以百度阿波羅平台為例 SIGAI 2018.5.29

[16] 理解牛頓法 SIGAI 2018.5.31

原創聲明

本文為 SIGAI 原創文章,僅供個人學習使用,未經允許,不能用於商業目的。

更多乾貨請關注V X公眾號:SIGAI

推薦閱讀:

TAG:深度學習DeepLearning | 自然語言處理 | 機器學習 |