(一)深度學習基礎(基本概念、優化演算法、初始化、正則化等)

引言

深度學習目前已成為發展最快、最令人興奮的機器學習領域之一,許多卓有建樹的論文已經發表,而且已有很多高質量的開源深度學習框架可供使用。然而,論文通常非常簡明扼要並假設讀者已對深度學習有相當的理解,這使得初學者經常卡在一些概念的理解上,讀論文似懂非懂,十分吃力。另一方面,即使有了簡單易用的深度學習框架,如果對深度學習常見概念和基本思路不了解,面對現實任務時不知道如何設計、診斷、及調試網路,最終仍會束手無策。

本系列文章旨在直觀系統地梳理深度學習各領域常見概念與基本思想,使讀者對深度學習的重要概念與思想有一直觀理解,做到「知其然,又知其所以然」,從而降低後續理解論文及實際應用的難度。本系列文章力圖用簡練的語言加以描述,避免數學公式和繁雜細節。本文是該系列文章中的第一篇,旨在介紹深度學習基礎概念、優化演算法、 調參基本思路、正則化方式等,後續文章將關注深度學習在自然語言處理、語音識別、和計算機視覺領域的應用。本文首發於新智元。

基本概念

深度學習是為了解決表示學習難題而被提出的。本節,我們介紹這些深度學習相關的基本概念。

表示學習(representation learning) 機器學習旨在自動地學到從數據的表示(representation)到數據的標記(label)的映射。隨著機器學習演算法的日趨成熟,人們發現,在某些領域(如圖像、語音、文本等),如何從數據中提取合適的表示成為整個任務的瓶頸所在,而數據表示的好壞直接影響後續學習任務(所謂garbage in,garbage out)。與其依賴人類專家設計手工特徵(難設計還不見得好用),表示學習希望能從數據中自動地學到從數據的原始形式到數據的表示之間的映射。

深度學習(deep learning,DL) 表示學習的理想很豐滿,但實際中人們發現從數據的原始形式直接學得數據表示這件事很難。深度學習是目前最成功的表示學習方法,因此,目前國際表示學習大會(ICLR)的絕大部分論文都是關於深度學習的。深度學習是把表示學習的任務劃分成幾個小目標,先從數據的原始形式中先學習比較低級的表示,再從低級表示學得比較高級的表示。這樣,每個小目標比較容易達到,綜合起來我們就完成表示學習的任務。這類似於演算法設計思想中的分治法(divide-and-conquer)。

深度神經網路(deep neural networks,DNN) 深度學習目前幾乎唯一行之有效的實現形式。簡單的說,深度神經網路就是很深的神經網路。我們利用網路中逐層對特徵進行加工的特性,逐漸從低級特徵提取高級特徵。除了深度神經網路之外,有學者在探索其他深度學習的實現形式,比如深度森林。

深度神經網路目前的成功取決於三大推動因素。1. 大數據。當數據量小時,很難從數據中學得合適的表示,而傳統演算法+特徵工程往往能取得很好的效果;2. 計算能力。大的數據和大的網路需要有足夠的快的計算能力才能使得模型的應用成為可能。3. 演算法創新。現在很多演算法設計關注在如何使網路更好地訓練、更快地運行、取得更好的性能。

多層感知機(multi-layer perceptrons,MLP) 多層由全連接層組成的深度神經網路。多層感知機的最後一層全連接層實質上是一個線性分類器,而其他部分則是為這個線性分類器學習一個合適的數據表示,使倒數第二層的特徵線性可分。

激活函數(activation function)神經網路的必要組成部分。如果沒有激活函數,多次線性運算的堆疊仍然是一個線性運算,即不管用再多層實質只起到了一層神經網路的作用。一個好的激活函數應滿足以下性質。1. 不會飽和。sigmoid和tanh激活函數在兩側尾端會有飽和現象,這會使導數在這些區域接近零,從而阻礙網路的訓練。2. 零均值。ReLU激活函數的輸出均值不為零,這會影響網路的訓練。3. 容易計算

遷移學習(transfer learning) 深度學習下的遷移學習旨在利用源任務數據輔助目標任務數據下的學習。遷移學習適用於源任務數據比目標任務數據多,並且源任務中學習得到的低層特徵可以幫助目標任務的學習的情形。在計算機視覺領域,最常用的源任務數據是ImageNet。對ImageNet預訓練模型的利用通常有兩種方式。1. 固定特徵提取器。用ImageNett預訓練模型提取目標任務數據的高層特徵。2. 微調(fine-tuning)。以ImageNet預訓練模型作為目標任務模型的初始化初始化權值,之後在目標任務數據上進行微調。

多任務學習(multi-task learning) 與其針對每個任務訓練一個小網路,深度學習下的多任務學習旨在訓練一個大網路以同時完成全部任務。這些任務中用於提取低層特徵的層是共享的,之後產生分支,各任務擁有各自的若干層用於完成其任務。多任務學習適用於多個任務共享低層特徵,並且各個任務的數據很相似的情況。

端到端學習(end-to-end learning) 深度學習下的端到端學習旨在通過一個深度神經網路直接學習從數據的原始形式到數據的標記的映射。端到端學習並不應該作為我們的一個追求目標,是否要採用端到端學習的一個重要考慮因素是:有沒有足夠的數據對應端到端的過程,以及我們有沒有一些領域知識能夠用於整個系統中的一些模塊。

優化演算法

在網路結構確定之後,我們需要對網路的權值(weights)進行優化。本節,我們介紹優化深度神經網路的基本思想。

梯度下降(gradient descent,GD) 想像你去野足但卻迷了路,在漆黑的深夜你一個人被困住山谷中,你知道谷底是出口但是天太黑了根本看不清楚路。於是你確定採取一個貪心(greedy)演算法:先試探在當前位置往哪個方向走下降最快(即梯度方向),再朝著這個方向走一小步,重複這個過程直到你到達谷底。這就是梯度下降的基本思想。

梯度下降演算法的性能大致取決於三個因素。1. 初始位置。如果你初始位置就離谷底很近,自然很容易走到谷底。2. 山谷地形。如果山谷是「九曲十八彎」,很有可能你在裡面繞半天都繞不出來。3. 步長。你每步邁多大,當你步子邁太小,很可能你走半天也沒走多遠,而當你步子邁太大,一不小心就容易撞到旁邊的懸崖峭壁,或者錯過了谷底。

誤差反向傳播(error back-propagation,BP) 結合微積分中鏈式法則和演算法設計中動態規劃思想用於計算梯度。 直接用紙筆推導出中間某一層的梯度的數學表達式是很困難的,但鏈式法則告訴我們,一旦我們知道後一層的梯度,再結合後一層對當前層的導數,我們就可以得到當前層的梯度。動態規劃是一個高效計算所有梯度的實現技巧,通過由高層往低層逐層計算梯度,避免了對高層梯度的重複計算。

滑動平均(moving average) 要前進的方向不再由當前梯度方向完全決定,而是最近幾次梯度方向的滑動平均。利用滑動平均思想的優化演算法有帶動量(momentum)的SGD、Nesterov動量、Adam(ADAptive Momentum estimation)等。

自適應步長 自適應地確定權值每一維的步長。當某一維持續震蕩時,我們希望這一維的步長小一些;當某一維一直沿著相同的方向前進時,我們希望這一維的步長大一些。利用自適應步長思想的優化演算法有AdaGrad、RMSProp、Adam等。

學習率衰減 當開始訓練時,較大的學習率可以使你在參數空間有更大範圍的探索;當優化接近收斂時,我們需要小一些的學習率使權值更接近局部最優點。

深度神經網路優化的困難 有學者指出,在很高維的空間中,局部最優是比較少的,而大部分梯度為零的點是鞍點。平原區域的鞍點會使梯度在很長一段時間內都接近零,這會使得拖慢優化過程。

初始化

權值初始化對網路優化至關重要。早年深度神經網路無法有效訓練的一個重要原因就是早期人們對初始化不太重視。本節,我們介紹幾個適用於深度神經網路的初始化方法。

初始化的基本思想 方差不變,即設法對權值進行初始化,使得各層神經元的方差保持不變。

Xavier初始化 從高斯分布或均勻分布中對權值進行採樣,使得權值的方差是1/n,其中n是輸入神經元的個數。該推導假設激活函數是線性的。

He初始化/MSRA初始化 從高斯分布或均勻分布中對權值進行採樣,使得權值的方差是2/n。該推導假設激活函數是ReLU。因為ReLU會將小於0的神經元置零,大致上會使一半的神經元置零,所以為了彌補丟失的這部分信息,方差要乘以2。

批量規範化(batch-normalization,BN) 每層顯式地對神經元的激活值做規範化,使其具有零均值和單位方差。批量規範化使激活值的分布固定下來,這樣可以使各層更加獨立地進行學習。批量規範化可以使得網路對初始化和學習率不太敏感。此外,批量規範化有些許正則化的作用,但不要用其作為正則化手段。

偏差/方差(bias/variance)

優化完成後,你發現網路的表現不盡如人意,這時診斷網路處於高偏差/高方差狀態是對你下一步調參方向的重要指導。與經典機器學習演算法有所不同,因為深度神經網路通常要處理非常高維的特徵,所以網路可能同時處於高偏差/高方差的狀態,即在特徵空間的一些區域網路處於高偏差,而在另一些區域處於高方差。本節,我們對偏差/方差作一簡要介紹。

偏差 偏差度量了網路的訓練集誤差和貝葉斯誤差(即能達到的最優誤差)的差距。高偏差的網路有很高的訓練集誤差,說明網路對數據中隱含的一般規律還沒有學好。當網路處於高偏差時,通常有以下幾種解決方案。1. 訓練更大的網路。網路越大,對數據潛在規律的擬合能力越強。2. 更多的訓練輪數。通常訓練時間越久,對訓練集的擬合能力越強。3. 改變網路結構。不同的網路結構對訓練集的擬合能力有所不同。

方差 方差度量了網路的驗證集誤差和訓練集誤差的差距。高方差的網路學習能力太強,把訓練集中自身獨有的一些特點也當作一般規律學得,使網路不能很好的泛化(generalize)到驗證集。當網路處於高方差時,通常有以下幾種解決方案。1. 更多的數據。這是對高方差問題最行之有效的解決方案。2. 正則化3. 改變網路結構。不同的網路結構對方差也會有影響。

正則化(regularization)

正則化是解決高方差問題的重要方案之一。本節,我們將對常用正則化方法做一介紹。

正則化的基本思想 正則化的基本思想是使網路的有效大小變小。網路變小之後,網路的擬合能力隨之降低,這會使網路不容易過擬合到訓練集。

L2正則化 L2正則化傾向於使網路的權值接近0。這會使前一層神經元對後一層神經元的影響降低,使網路變得簡單,降低網路的有效大小,降低網路的擬合能力。L2正則化實質上是對權值做線性衰減,所以L2正則化也被稱為權值衰減(weight decay)。

隨機失活(dropout) 在訓練時,隨機失活隨機選擇一部分神經元,使其置零,不參與本次優化迭代。隨機失活減少了每次參與優化迭代的神經元數目,使網路的有效大小變小。隨機失活的作用有兩點。1. 降低神經元之間耦合。因為神經元會被隨機置零,所以每個神經元不能依賴於其他神經元,這會迫使每個神經元自身要能提取到合適的特徵。2. 網路集成。隨機失活可以看作在訓練時每次迭代定義出一個新的網路,這些網路共享權值。在測試時的網路是這些網路的集成。

數據擴充(data augmentation) 這實質是獲得更多數據的方法。當收集數據很昂貴,或者我們拿到的是第二手數據,數據就這麼多時,我們從現有數據中擴充生成更多數據,用生成的「偽造」數據當作更多的真實數據進行訓練。以圖像數據做分類任務為例,把圖像水平翻轉、移動一定位置、旋轉一定角度、或做一點色彩變化等,這些操作通常都不會影響這幅圖像對應的標記。並且你可以嘗試這些操作的組合,理論上講,你可以通過這些組合得到無窮多的訓練樣本。

早停(early stopping) 隨著訓練的進行,當你發現驗證集誤差不再變化或者開始上升時,提前停止訓練。

調參技巧

深度神經網路涉及很多的超參數,如學習率大小、L2正則化係數、動量大小、批量大小、隱層神經元數目、層數、學習率衰減率等。本節,我們介紹調參的基本技巧。

隨機搜索 由於你事先並不知道哪些超參數對你的問題更重要,因此隨機搜索通常是比網格搜索(grid search)更有效的調參策略。

對數空間搜索 對於隱層神經元數目和層數,可以直接從均勻分布採樣進行搜索。而對於學習率、L2正則化係數、和動量,在對數空間搜索更加有效。例如:

import randomnlearning_rate = 10 ** random.uniform(-5, -1) # From 1e-5 to 1e-1nweight_decay = 10 ** random.uniform(-7, -1) # From 1e-7 to 1e-1nmomentum = 1 - 10 ** random.uniform(-3, -1) # From 0.9 to 0.999n

實現技巧

圖形處理單元(graphics processing units, GPU) 深度神經網路的高效實現工具。簡單來說,CPU擅長串列、複雜的運算,而GPU擅長並行、簡單的運算。深度神經網路中的矩陣運算都十分簡單,但計算量巨大。因此,GPU無疑具有非常強大的優勢。

向量化(vectorization) 代碼提速的基本技巧。能少寫一個for循環就少寫一個,能少做一次矩陣運算就少做一次。實質是盡量將多次標量運算轉化為一次向量運算;將多次向量運算轉化為一次矩陣運算。因為矩陣運算可以並行,這將會比多次單獨運算快很多。

參考文獻

  1. Y. Bengio, N. Boulanger-Lewandowski, and R. Pascanu. Advances in optimizing recurrent networks. In proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing, pages 8624--8628, 2013.
  2. J. Bergstra and Y. Bengio. Random search for hyper-parameter optimization. Journal of Machine Learning Research, 13(12):281--305, 2012.
  3. A. Choromanska, M. Henaff, M. Mathieu, G. B. Arous, and Y. LeCun. The loss surfaces of multilayer networks. In proceedings of the International Conference on Artificial Intelligence and Statistics, pages 192--204, 2015.
  4. P. Domingos. A few useful things to know about machine learning. Communications of the ACM, 55(10):78--87, 2012.
  5. J. Duchi, E. Hazan, and Y. Singer. Adaptive subgradient methods for online learning and stochastic optimization. Journal of Machine Learning Research, 12(12):2121--2159, 2011.
  6. I. Goodfellow, Y. Bengio, and A. Courville. Deep learning. MIT press, 2016.
  7. K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers: Surpassing human-level performance on imagenet classification. In proceedings of the IEEE International Conference on Computer Vision, pages 1026--1034, 2015.
  8. S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. In proceedings of the International Conference on Machine Learning, pages 448-456, 2015.
  9. D. Kingma and J. Ba. Adam: A method for stochastic optimization. arXiv preprint arXiv:1412.6980, 2014.
  10. F.-F. Li, A. Karpathy, and J. Johnson. CS231n: Convolutional Neural Networks for Visual Recognition. Stanford, 2016.
  11. F.-F. Li, J. Johnson, and S. Yeung. CS231n: Convolutional Neural Networks for Visual Recognition. Stanford, 2017.
  12. A. Ng. Machine learning yearning. Draft, 2016.
  13. A. Ng. CS229: Machine learning. Stanford.
  14. A. Ng. Neural networks and deep learning. deeplearning.ai.
  15. A. Ng. Improving deep neural networks: Hyperparameter tuning, regularization and optimization. deeplearning.ai.
  16. A. Ng. Structuring machine learning projects. deeplearning.ai.
  17. S Ruder. An overview of multi-task learning in deep neural networks. arXiv preprint arXiv:1706.05098, 2017.
  18. N. Srivastava, G. E Hinton, A. Krizhevsky, I. Sutskever, and R. Salakhutdinov. Dropout: a simple way to prevent neural networks from overfitting. Journal of machine learning research, 15(1):1929--1958, 2014.
  19. T. Tieleman and G. Hinton. Lecture 6.5-RMSProp: Divide the gradient by a running average of its recent magnitude. COURSERA: Neural networks for machine learning, 4(2):26--31, 2012.
  20. G. Xavier and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In proceedings of the International Conference on Artificial Intelligence and Statistics, pages 249--256, 2010.
  21. J. Yosinski, J. Clune, Y. Bengio, and H. Lipson. How transferable are features in deep neural networks? In proceedings of Advances in neural information processing systems, pages 3320--3328, 2014.
  22. Z.-H. Zhou and J. Feng. Deep forest: Towards an alternative to deep neural networks. In Proceedings of the International Joint Conference on Artificial Intelligence, pages 3553--3559, 2017.
  23. 周志華. 機器學習. 清華大學出版社, 2016.

推薦閱讀:

科普:分散式深度學習系統(二)
樸素貝葉斯分類實例-單詞糾正問題

TAG:深度学习DeepLearning | 机器学习 | 神经网络 |