一、深度學習概念
1.什么是深度學習
深度學習(Deep Learning)是機器學習的一種形式,概念源於人工神經網絡的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發現數據的分布式特征表示。它是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據。

2.基本變換(層的概念)
神經網絡是由一層一層構建的,那么每層究竟在做什么?
- 數學式子:
,其中
是輸入向量,
是輸出向量,
是偏移向量,
是權重矩陣,
是激活函數。每一層僅僅是把輸入
經過如此簡單的操作得到
。 - 數學理解:通過如下5種對輸入空間(輸入向量的集合)的操作,完成 輸入空間 —> 輸出空間 的變換 (矩陣的行空間到列空間)。 注:用“空間”二字的原因是被分類的並不是單個事物,而是一類事物。空間是指這類事物所有個體的集合。
- 1. 升維/降維
- 2. 放大/縮小
- 3. 旋轉
- 4. 平移
- 5. “彎曲” 這5種操作中,1,2,3的操作由
完成,4的操作是由
完成,5的操作則是由
來實現。
每層神經網絡的數學理解:用線性變換跟隨着非線性變化,將輸入空間投向另一個空間。
線性可分視角:神經網絡的學習就是學習如何利用矩陣的線性變換加激活函數的非線性變換,將原始輸入空間投向線性可分/稀疏的空間去分類/回歸。
增加節點數:增加維度,即增加線性轉換能力。
增加層數:增加激活函數的次數,即增加非線性轉換次數。
3.模型訓練
學習過程就是學習控制着空間變換方式(物質組成方式)的權重矩陣后,接下來的問題就是如何學習每一層的權重矩陣 W 。通過比較當前網絡的預測值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣(比如,如果網絡的預測值高了,就調整權重讓它預測低一些,不斷調整,直到能夠預測出目標值)。因此就需要先定義“如何比較預測值和目標值的差異”,這便是損失函數或目標函數(loss function or objective function),用於衡量預測值和目標值的差異的方程。loss function的輸出值(loss)越高表示差異性越大。那神經網絡的訓練就變成了盡可能的縮小loss的過程。所用的方法是梯度下降(Gradient descent):通過使loss值向當前點對應梯度的反方向不斷移動,來降低loss。一次移動多少是由學習速率(learning rate)來控制的。
4.梯度下降
梯度下降的問題:
然而使用梯度下降訓練神經網絡擁有兩個主要難題。
其中之一:局部極小值
梯度下降尋找的是loss function的局部極小值,而我們想要全局最小值。如下圖所示,我們希望loss值可以降低到右側深藍色的最低點,但loss有可能“卡”在左側的局部極小值中。

試圖解決“卡在局部極小值”問題的方法分兩大類:
- 調節步伐:調節學習速率,使每一次的更新“步伐”不同。常用方法有:
- 隨機梯度下降(Stochastic Gradient Descent (SGD):每次只更新一個樣本所計算的梯度
- 小批量梯度下降(Mini-batch gradient descent):每次更新若干樣本所計算的梯度的平均值
- 動量(Momentum):不僅僅考慮當前樣本所計算的梯度;Nesterov動量(Nesterov Momentum):Momentum的改進
- Adagrad、RMSProp、Adadelta、Adam:這些方法都是訓練過程中依照規則降低學習速率,部分也綜合動量
- 優化起點:合理初始化權重(weights initialization)、預訓練網絡(pre-train),使網絡獲得一個較好的“起始點”,如最右側的起始點就比最左側的起始點要好。常用方法有:高斯分布初始權重(Gaussian distribution)、均勻分布初始權重(Uniform distribution)、Glorot 初始權重、He初始權、稀疏矩陣初始權重(sparse matrix)
第二個難題:梯度的計算
機器學習所處理的數據都是高維數據,該如何快速計算梯度、而不是以年來計算。 其次如何更新隱藏層的權重? 解決方法是:計算圖:反向傳播算法 需要知道的是,反向傳播算法是求梯度的一種方法。如同快速傅里葉變換(FFT)的貢獻。 而計算圖的概念又使梯度的計算更加合理方便。
二、前饋神經網絡
- 網絡結構:2維輸入

1維輸出

- 結構表達式:
- 正向傳遞:
(1)
用於表達隨機變量
的值,
表示隨機變量
的值,
是我們的神經網絡模型,等號右側是具體的表達。
- 損失函數:
- 該loss就是比較
和
中所有值的差別。
- 該loss就是比較
- 正向傳遞:
- 整體結構:左側的圖表示網絡結構。綠色方框表示操作,也叫作層(layer)。該結構中,輸入
經過hid_layer算出隱藏層的值
,再傳遞給out_layer,計算出預測值
,隨后與真實值
進行比較,算出損失
,再從反向求導得出梯度后對每一層的
和
進行更新。

- 正向傳遞:如果放大hid_layer內部,從下向上,會看到
先用truncated_normal的方法進行了初始化,隨后與輸入
進行矩陣相乘,加上
,又經過了activation后,送給了用於計算
的out_layer中。而
的計算方式和
完全一致,但用的是不同的權重
和偏移
。最后將算出的預測值
與真實值
一同求出 

- 反向傳遞:如果放大train的內部,再放大內部中的gradients,就可以看到框架是從
開始一步步反向求得各個層中
和
的梯度的。

- 權重更新:求出的各個層
和
的梯度,將會被用於更新對應的
和
,並用learning rate控制一次更新多大。(beta1_power和beta2_power是Adam更新方法中的參數,目前只需要知道權重更新的核心是各自對應的梯度。)

三、循環神經網絡(RNN)
前饋網絡:window size為3幀的窗處理后的前饋網絡
- 動態圖:左側是時間維度展開前,右側是展開后(單位時刻實際工作的只有灰色部分。)。前饋網絡的特點使不同時刻的預測完全是獨立的。我們只能通過窗處理的方式讓其照顧到前后相關性。

- 數學式子:
,concat表示將向量並接成一個更大維度的向量。 - 學習參數:需要從大量的數據中學習
和
。 - 要學習各個時刻(3個)下所有維度(39維)的關系(39*3個),就需要很多數據。
遞歸網絡:不再有window size的概念,而是time step
- 動態圖:左側是時間維度展開前,回路方式的表達方式,其中黑方框表示時間延遲。右側展開后,可以看到當前時刻的
並不僅僅取決於當前時刻的輸入
,同時與上一時刻的
也相關。

- 數學式子:
。
同樣也由
經
的變化后的信息決定, - 但這里多另一份信息:
,而該信息是從上一時刻的隱藏狀態
經過一個不同的
變換后得出的。 - 注:
的形狀是行為dim_input,列為dim_hidden_state,而
是一個行列都為dim_hidden_state的方陣。 - 學習參數:前饋網絡需要3個時刻來幫助學習一次
,而遞歸網絡可以用3個時刻來幫助學習3次
和
。換句話說:所有時刻的權重矩陣都是共享的。這是遞歸網絡相對於前饋網絡而言最為突出的優勢。
遞歸神經網絡是在時間結構上存在共享特性的神經網絡變體。
時間結構共享是遞歸網絡的核心中的核心。
