當下深度學習技術已經運用到很多領域和任務中,筆者也是一個初學者,主要研究方向是自然語言處理,接觸時間大概一年左右,也不算深入,在這里寫下一些讀書筆記吧,和大家一起學習。鑒於筆者水平有限,難免有些不正確的地方,還望看到的朋友不吝賜教。
我個人在學習中,應用深度學習技術到自然語言處理任務中,取得了一些較好的效果,比如中文分詞、機器翻譯、基於生成式的對話系統、情感分析、文本分類、關系模板等等。由於經常在小組內討論和介紹一些神經網絡、深度學習方面的內容,我決定把這些工作記錄下來,以便個人學習。
今年是人工智能60年,從早起基於規則的方法,到基於統計的方法,再到今天的深度學習。深度學習主要運用人工神經網絡模擬人的思維決策過程,在無數的實驗和應用中已經取得了突破性的進展,比如語音識別、圖像分類等。
(一):人工智能、機器學習、神經網絡和深度學習的關系
(1):artificial intelligence && artificial general intelligence (人工智能和通用人工智能)
AI: Artificial intelligence (AI) is the intelligence exhibited by machines or software. It is also the name of the academic field of study on how to create computers and computer software that are capable of intelligent behavior.
AGI: Artificial general intelligence (AGI) is the intelligence of a (hypothetical) machine that could successfully perform any intellectual task that a human being can. It is a primary goal of artificial intelligence research and an important topic for science fiction writers and futurists. Artificial general intelligence is also referred to as strong AI.
人工智能就是讓計算機擁有智能行為,比如機器翻譯,給與計算機一句中文,計算機可以自動幫你翻譯為英語,這本來是人不斷學習才能擁有的能力,現在假如計算機也可以做到,我們就可以說這台計算機擁有了一定的智能水平。我們知道一個普通人要達到一定的智力水平就需要不斷地進化和學習,而且學習到各種能力,寫作、演講、駕駛、算術等等,這其實是一個十分復雜的問題,如何讓計算機擁有這樣的能力,始終是一個巨大的挑戰,對人腦的這種學習方法和能力的研究將有助於我們對人工智能的不斷探索。通用人工智能,也叫作強人工智能,就是要計算機模擬人類這種復雜的學習能力,在不同知識和領域之間的融會貫通,共同學習和進步。
計算機的智能應該從兩個方面來談論,一是智能行為,二是智能思考。當前主要停留在智能行為方面,如何讓計算機不斷和環境交互,智能進化、學習和思考將是未來研究的一個重要挑戰。我們知道人腦是處於實時學習和進化中,是一個雙向的動態過程,你看到一個新物體,根據已有經驗來判斷,如果經驗判斷錯誤,我們就會知道,並改正錯誤,這就是一個學習過程。在機器學習的過程中,對於生數據、新的情況,機器會根據已有經驗作出判斷,但判斷的正誤的能力很難再通過自學習來調整或優化,其在應用中通常是一個單向的過程,難以更新。
較早人工智能的測試就是圖靈測試(Turing Testing),我們常把這個測試看作是計算機是否真正具有人工智能的試金石。“計算機科學之父”及“人工智能之父”英國數學家阿蘭·圖靈(1912—1954)在1950年的一篇著名論文《機器會思考嗎?》里,提出圖靈測試的設想。即把一個人和一台計算機分別隔離在兩間屋子,然后讓屋外的一個提問者對兩者進行問答測試。如果提問者無法判斷哪邊是人,哪邊是機器,那就證明計算機已具備人的智能。直到深度學習(Deep Learning)的出現,讓人們看到了一絲曙光,圖靈測試已不再是那么遙不可及了。2013年4月,《麻省理工學院技術評論》雜志將深度學習列為2013年十大突破性技術(Breakthrough Technology)之首。
(2)machine learning(機器學習)
“…the design and development of algorithms that allow computers to evolve behaviors based on empirical data, …”
機器學習最基本的做法,是使用算法來解析數據、從中學習,然后對真實世界中的事件做出決策和預測。與傳統的為解決特定任務、硬編碼的軟件程序不同,機器學習是用大量的數據來“訓練”,通過各種算法從數據中學習如何完成任務。
(3)artificial neural network(人工神經網絡)
Artificial neural networks (ANNs) are a family of models inspired by biological neural networks (the central nervous systems of animals, in particular the brain).
Artificial neural networks are generally presented as systems of interconnected neurons which exchange messages between each other.
人工神經網絡就是模擬生物神經元的學習過程,將神經元作為最小的學習單元,神經元之間用權重連接,權重的大小代表了神經元之間的關聯強弱。學習的過程就是對權重的優化,使得學習的網絡可以更好的預測和分析整個決策過程。
(4)deep learning(深度學習)
The focus of deep architecture learning is to automatically discover abstractions, from the lowest level features to the highest level concepts.
Automatically learning features at multiple levels of abstraction allow a system to learn complex functions mapping the input to the output directly from data, without depending completely on human-crafted features.
- use a cascade of many layers of nonlinear processing
- are part of the broader machine learning field of learning
- representations of data facilitating end-to-end optimization
- learn multiple levels of representations that correspond to hierarchies of concept abstraction
深度學習是在神經網絡的基礎上構建多層網絡來學習復雜的決策過程,其深度組成了復雜的擬合模型,這種模型可以自動發現隱藏在數據中的特征,這些特征是逐層更加抽象的,比如在人臉識別中,底層網絡可以學習到鼻子、耳朵這些基本的人臉特征,在多層以后,通過不斷的特征學習和抽象,這些高層特征將可以用來判定是不是人臉。這樣多層的非線性映射和表示使得學習能力非常強大,同時深度學習通常是一個端到端(end-to-end)的學習過程,直接在輸入與輸出之間建立復雜的擬合,比如機器翻譯給出一句中文,我們輸出一句英文,我們的優化准則是直接基於這兩句話翻譯的好不好,通不通順,然后整體做優化,而不是局部的。
(二)artificial neuron (人工神經元)
在神經網絡中,神經元是最基本的構成單元之一,和連接神經元之間的權重組成了整個神經網絡,互聯的神經元將會實現信號的傳遞,權重的大小和連接方式(GRU、LSTM、CNN等)控制了整個網絡的信息流向和強度。一個神經元會接收到來自多個其他神經元的信號,這些信號經過線性或非線性變換作為神經元的輸出。
(三)activation function(激活函數)
一個神經元神經元只有其量能達到一定的值域的時候,才會處於激活激活,激活函數就是用來估量神經元量能的。
常用的激活函數:
1.sigmoid
函數表達式: 導函數:
函數圖形:
從圖中我們可以看到Sigmoid 的軟飽和性,主要在於求導數值較小,在兩端數值接近於0,常常會出現梯度消失問題。Sigmoid 的飽和性使得深度神經網絡在二三十年里一直難以有效的訓練,是阻礙神經網絡發展的重要原因。具體來說,由於在后向傳遞過程中,sigmoid向下傳導的梯度包含了一個f'(x) 因子(sigmoid關於輸入的導數),因此一旦輸入落入飽和區,f'(x) 就會變得接近於0,導致了向底層傳遞的梯度也變得非常小。此時,網絡參數很難得到有效訓練。這種現象被稱為梯度消失。一般來說, sigmoid 網絡在 5 層之內就會產生梯度消失現象。Sigmoid 的飽和性雖然會導致梯度消失,但也有其有利的一面。例如它在物理意義上最為接近生物神經元。 (0, 1) 的輸出還可以被表示作概率,或用於輸入的歸一化,代表性的如Sigmoid交叉熵損失函數。
2. tanh
函數表達式: 函數導函數:
函數圖像:
tanh(x)=2sigmoid(2x)-1,也具有軟飽和性。tanh 網絡的收斂速度要比sigmoid快。因為 tanh 的輸出均值比 sigmoid 更接近 0,SGD會更接近 natural gradient,從而降低所需的迭代次數。
(3)maxout
Maxout網絡能夠近似擬合任意凸函數函數,且當w2,b2,…,wn,bn為0時,退化為ReLU。
(4) Relu
與傳統的sigmoid激活函數相比,ReLU能夠有效緩解梯度消失問題,從而直接以監督的方式訓練深度神經網絡,無需依賴無監督的逐層預訓練。ReLU 在x<0 時硬飽和。由於 x>0時導數為 1,所以,ReLU 能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。但隨着訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為“神經元死亡”。ReLU還經常被“詬病”的一個問題是輸出具有偏移現象,即輸出均值恆大於零。偏移現象和 神經元死亡會共同影響網絡的收斂性。