Machine Learning Handbook(3)

4 卷積神經網路

  • 卷積:在泛函分析中,卷積是通過兩個函數f和g生成第三個函數的一種數學運算元,表徵函數f與g經過翻轉和平移的重疊部分的面積。

連續函數:

s(t) = (x * omega)(t) = int_{-infty}^{infty} x(a) omega (t-a) da

離散函數:

s(t) = (x * omega)(t) = sum_{a=-infty}^{infty} x(a) omega (t-a)

在卷積神經網路中,卷積的第一個參數(x)通常叫作輸入,第二個參數(ω)通常叫作核函數。輸出有時候被稱作特徵映射。

在機器學習應用中,輸入通常是多維數組的數據,而核通常是由學習演算法優化得到的多維數組的參數。我們把這些多維數組叫作張量(Tensor)

S(i, j) = (I * K)(i, j) = sum_m sum_n I(m, n) K(i - m, j - n)

卷積是可交換的

S(i, j) = (K * I)(i, j) = sum_m sum_n I(i - m, j - n) K(m, n)

互相關函數(cross-correlation):和卷積運算幾乎一樣,但沒有對核進行翻轉

S(i, j) = (I * K)(i, j) = sum_m sum_n I(i + m, j + n) K(m, n)

許多機器學習的庫實現的就是互相關函數但稱之為卷積。

為什麼卷積網路在圖像識別任務中表現很好?

1. 參數共享:在圖像某一部分有效的特徵檢測器對另一部分可能也有效。例如,邊緣檢測器可能對圖像的很多部分都有用。參數共享需要較少的參數數量並且具有較魯棒的平移不變性。

2. 稀疏連接:每個輸出層只是少量輸入的函數(尤其是,濾波器的尺寸)。這大幅降低了網路的參數數量,加快了訓練速度。

  • 池化:使用某一位置的相鄰輸出的總體統計特徵來代替網路在該位置的輸出。實證研究表明最大池化在卷積神經網路中非常有效。通過對圖像進行下採樣,我們可以減少參數數量,使特徵在縮放或方向變化時保持不變。

1. 一般池化(generic pooling),即作用於圖像中不重疊區域,通常有平均池化最大池化以及隨機池化(stochastic pooling)等方法。其中,隨機池化來自Zeiler等人ICLR 2013的論文Stochastic pooling for regularization of deep convolutional neural networks。

2. 重疊池化(overlapping pooling),來自Hinton等人的論文Imagenet classification with deep convolutional neural networks。

3. 空間金字塔池化(spatial pyramid pooling),來自Kaiming He等人的論文Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition。

  • 填充(Padding):通常用於保證卷積過程中輸入和輸出張量的維度是一樣的。它還可以使圖像邊緣附近的幀對輸出的貢獻和圖像中心附近的幀一樣。
  • 步幅(Stride):步幅控制著過濾器圍繞輸入內容進行卷積計算的方式。例如,過濾器通過每次移動一個單元的方式對輸入內容進行卷積。過濾器移動的距離就是步幅。在該例子中,步幅被默認設置為1。步幅的設置通常要確保輸出內容是一個整數而非分數。
  • 殘差網路(ResNet):從LeNet-5,AlexNet,VGG-16到最新的網路架構設計來看,高效網路架構中層的通道規模不斷擴大,寬度和高度不斷下降。

為什麼殘差網路如此有效?

對於普通的網路來說,由於梯度下降或梯度爆炸,訓練誤差並不是隨著層數增加而單調遞減的。而殘差網路具備前饋跳過連接(Feed-Forward Skipped Connection),可以在性能不出現下降的情況下訓練大型網路。

  • NIN:指的是一個使用了 1 x 1 尺寸的過濾器的卷積層。

來自Min Lin等人的論文Network In Network。

  • Inception:將1x1,3x3,5x5的conv和3x3的pooling,堆疊在一起,一方面增加了網路的寬度,另一方面增加了網路對尺度的適應性。

  • 數據擴充:隨機裁剪水平翻轉垂直軸對稱調換等。

詳細描述見上面第3部分正則化。

  • 遷移學習:即所謂的有監督預訓練(Supervised Pre-training)。使用GPU從頭開始訓練大型神經網路,如Inception可能需要數周時間。因此,我們需要下載預訓練網路中的權重,僅僅重訓練最後的softmax層(或最後幾層),以減少訓練時間。原因在於相對靠前的層傾向於和圖像中更大的概念相關——如邊緣和曲線。

比如你已經有一大堆標註好的人臉年齡分類的圖片數據,訓練了一個CNN,用於人臉的年齡識別。然後當你遇到新的項目任務是:人臉性別識別,那麼這個時候你可以利用已經訓練好的年齡識別CNN模型,去掉最後一層,然後其它的網路層參數就直接複製過來,繼續進行訓練。這就是所謂的遷移學習,說的簡單一點就是把一個任務訓練好的參數,拿到另外一個任務,作為神經網路的初始參數值,這樣相比於你直接採用隨機初始化的方法,精度可以有很大的提高。圖片分類標註好的訓練數據非常多,但是物體檢測的標註數據卻很少,如何用少量的標註數據,訓練高質量的模型,比如我們先對ImageNet圖片數據集先進行網路的圖片分類訓練。這個資料庫有大量的標註數據。

  • 目標定位
  • 特徵點檢測
  • 動態識別

1. 滑動窗口(sliding windows):每一幅靜態的圖片里,定義一個像濾鏡一樣的窗口,在這個窗口從左到右,從上到下不斷的掃描,每個窗口都會做一個判斷,每個小窗口都有對應的圖片,來判斷這裡面有沒有我想要的物品。

2. YOLO(You Only Look Once):把圖片按照網格(Grid)分析,分成了很多小網格,在每個網格里判斷物品的重心(Center)會在哪裡。同樣它也會判斷小網格裡面有沒有目標物體,如果有的話就會提供一個很高的概率。當把這些發現有物品的小窗口全部合在一起,變成一個大的窗口時,就需要設一個相應的域值,域值超過一定數值,說明物品確實存在於小窗口中。把小窗口全部連接起來,就會得到大一點的圖片,同樣再通過CNN做一次判斷,判斷這是不是對概率有所提高或者降低,這樣就可以知道通過每個小圖拼湊起來的大圖應該是個完整的物品。

  • Bounding Box預測
  • 非極大值抑制
  • Anchor Boxes
  • RPN網路
  • 人臉識別:人臉識別是one-shot學習問題,通常,你只有一張圖像來識別這個人。解決的辦法是學習一個相似性函數,給出兩個圖像之間的差異程度。所以,如果圖像是同一個人,函數的輸出值較小,而不同的人則相反。
  • 零次學習(Zero-Shot Learning):也被稱為零數據學習,指的是沒有標註樣本的遷移任務。
  • 一次學習(One-Shot Learning):指的是只有一個標註樣本的遷移任務。
  • Siamese網路:人臉識別中的一種方法,該神經網路的訓練目標是:如果輸入圖像是同一個人的,則編碼距離相對較小。具體來說,Siamese網路使用二元或三元(++-)輸入,訓練模型使相似樣本之間的距離儘可能小,而不相似樣本之間的距離儘可能大。該方法將兩個人的圖像輸入到同一個網路中,然後比較它們的輸出。如果輸出類似,則是同一個人。
  • Triplet損失:這個想法的核心在於圖片的三個維度,即Anchor(A)、Positive(P)和Negative(N)在訓練過後,A和P的輸出距離大大小於A和N的輸出距離。

5 序列模型

序列模型(如RNN和LSTM)極大地改變了序列學習,序列模型可通過注意力機制獲得增強。序列模型在語音識別、音樂生成、情感分類、DNA序列分析、機器翻譯、視頻活動識別、命名實體識別等方面有很多應用。

  • 循環神經網路(RNN):出現於上世紀80年代,最近由於網路設計的推進和GPU計算能力的提升,循環神經網路變得越來越流行。這種網路尤其對序列數據非常有用,因為每個神經元或者單元能用它的內部存儲來保存之前輸入的相關信息。在語言的案例中,"I had washed my house"這句話的意思與"I had my house washed"大不相同。這就能讓網路獲取對該表達更深的理解。RNN有很多應用,在自然語言處理(NLP)領域表現良好。

下面舉一個例子:

a^{(t)} = b + Wh^{(t-1)} + Ux^{(t)}

h^{(t)} = tanh(a^{(t)})

o^{(t)} = c + Vh^{(t)}

hat{y}^{(t)} = softmax(o^{(t)})

L({x^{(1)}, ..., x^{(	au)}}, {y^{(1)}, ..., y^{(	au)}}) = sum_t L^{(t)} = -sum_t log p_{model}(y^{(t)} | {x^{(1)}, ..., x^{(t)}})

  • 雙向RNN:雙向RNN和深度RNN是構建強大序列模型的有效方法。缺點是在處理之前需要整個序列。
  • LSTM:使用傳統的通過時間反向傳播(BPTT)實時循環學習(Real Time Recurrent Learning, RTRL),在時間中反向流動的誤差信號往往會爆炸(explode)或者消失(vanish)。但LSTM可以通過遺忘和保留記憶的機制減少這些問題。LSTM單元一般會輸出兩種狀態到下一個單元,即單元狀態和隱藏狀態。記憶塊負責記憶各個隱藏狀態或前面時間步的事件,這種記憶方式一般通過三種門控機制來實現,即輸入門、遺忘門和輸出門。

f_t = sigma(W_f cdot [h_{t-1}, x_t] + b_f)

i_t = sigma(W_i cdot [h_{t-1}, x_t] + b_i)

	ilde{C}_t = tanh(W_C cdot [h_{t-1}, x_t] + b_C)

C_t = f_t * C_{t-1} + i_t * 	ilde{C}_t

o_t = sigma(W_o [h_{t-1}, x_t] + b_o)

h_t = o_t * tanh(C_t)

  • 通過時間反向傳播(BPTT):與前饋神經網路類似,LSTM網路的訓練同樣採用的是誤差的反向傳播演算法(BP),不過因為LSTM處理的是序列數據,所以在使用BP的時候需要將整個時間序列上的誤差傳播回來。

  • GRU:旨在解決標準RNN中出現的梯度消失問題。GRU有兩個門,即一個重置門(reset gate)和一個更新門(update gate)。從直觀上來說,重置門決定了如何將新的輸入信息與前面的記憶相結合,更新門定義了前面記憶保存到當前時間步的量。如果我們將重置門設置為1,更新門設置為0,那麼我們將再次獲得標準RNN模型。

z = sigma(x_t U^z + s_{t-1} W^z)

r = sigma(x_t U^r + s_{t-1} W^r)

h = tanh(x_t U^h + (s_{t-1} circ r) W^h)

s_t = (1 - z) circ h + z circ s_{t-1}

  • 詞表徵(Word Representation):詞表徵在自然語言處理中是必不可少的部分,從早期的獨熱編碼到現在流行的詞嵌入,研究者一直在尋找高效的詞表徵方法。
  • Word2Vec:Word2Vec方法由兩部分組成。首先是將高維one-hot形式表示的單詞映射成低維向量。例如將10,000列的矩陣轉換為300列的矩陣,這一過程被稱為詞嵌入。第二個目標是在保留單詞上下文的同時,從一定程度上保留其意義。Word2Vec實現這兩個目標的方法有Skip-GramCBOW等,Skip-Gram會輸入一個詞,然後嘗試估計其它詞出現在該詞附近的概率。還有一種與此相反的被稱為連續詞袋模型(Continuous Bag Of Words,CBOW),它將一些上下文詞語作為輸入,並通過評估概率找出最適合(概率最大)該上下文的詞。
  • 負採樣(Negative Sampling):通過使每一個訓練樣本僅僅改變一小部分的權重而不是所有權重,常用於Word2Vec模型中。
  • GloVeJeffrey Pennington等人在GloVe: Global Vectors for Word Representation一文中提出的另一種詞表徵方法。

J = sum_{i=1}^N sum_{j=1}^N f(X_{i, j})(v_i^T v_j + b_i + b_j -log(X_{i, j}))^2

  • 注意力機制(Attention Mechanism):旨在解決編碼器-解碼器架構的缺陷。我們通常是使用基於上下文的注意力生成注意力分布。參與的RNN會生成一個描述它想關注內容的查詢。每一個條目和這個查詢做點乘來產生一個分數,這個分數描述這個條目與查詢的匹配程度。這些分數被輸入一個softmax來生成注意力分布。

  • Self-Attention:來自Google團隊NIPS 2017的論文Attention is All You Need。
  • 概率圖模型(Probabilistic Graphical Model, PGM):由圖靈獎得主Judea Pearl提出。PGM利用圖來表示與模型有關的變數的聯合概率分布。基本的概率圖模型包括貝葉斯網路、馬爾可夫網路和隱馬爾可夫網路(HMM)。這裡推薦Daphne Koller的專著Probabilistic Graphical Models: Principles and Techniques
  • Hidden Markov Model(HMM):是一種generative model。HMM可以描述為一條隱藏的馬爾可夫鏈生成的狀態隨機序列(state sequence)Q=( q_1, q_2, ..., q_T)是不可觀測的,並記所有可能狀態的集合為 S={ S_1, S_2, ..., S_N};由它們產生一個可觀測的觀測隨機序列(observation sequence)O=( o_1, o_2, ..., o_T),並記所有可能觀測的集合為 V={ v_1, v_2, ..., v_M}。因此,實際上HMM是個雙重隨機過程(doubly embedded stochastic process),一個是狀態轉移,另一個是由狀態釋放出觀測值。在序列標註(Sequence labelling)任務中,模型就是需要對狀態序列進行標註。

貝葉斯公式

P(Q|O) = frac{P(O, Q)}{P(O)} = frac{P(O|Q) P(Q)}{P(O)}

對於給定序列O來說,P(O)是確定的,所以HMM的任務是建模P(O, Q)。

一階馬爾可夫鏈:

P(q_t|q_1, o_1, ..., q_{t-1}, o_{t-1}) = P(q_t|q_{t-1})

P(q_1, q_2, ..., q_t) = P(q_1)P(q_2|q_1)P(q_3|q_1, q_2) ... P(q_t|q_1, ..., q_{t-1}) = P(q_1)P(q_2|q_1)P(q_3|q_2) ... P(q_t|q_{t-1})

狀態轉移概率矩陣A = [a_{ij}]_{N 	imes N}初始狀態概率向量 pi = (pi_1, ..., pi_N)

a_{ij} = P(q_t = S_j|q_{t-1} = S_i), sum_{j=1}^N a_{ij} = 1, 1 le i le N

pi_i = P(q_1 = S_i), sum_{i=1}^N pi_i = 1

觀測序列服從觀測獨立性假設,也就是說每一時刻的觀測值o_T只依賴於該時刻的狀態值q_T:

P(o_t|q_1, o_1, ..., q_T, o_T) = P(o_t|q_t)

由此引出釋放概率矩陣B = [b_j(k)]_{N 	imes M}:

b_j(k) = P(o_t = v_k|q_t = S_j), sum_{k=1}^M b_j(k) = 1, q le j le N

從上可以看出,HMM有三組參數,即π,A以及B。所以我們可以用λ = (π, A, B)來表示一個HMM。

P(O|Q, lambda) = b_{q_1}(o_1)b_{q_2}(o_2)...b_{q_T}(o_T)

P(Q|lambda) = pi_{q_1}a_{q_1q_2}a_{q_2q_3}...a_{q_{T-1}q_T}

推出

P(O, Q|lambda) = pi_{q_1}b_{q_1}(o_1)a_{q_1q_2}b_{q_2}(o_2)a_{q_2q_3}...a_{q_{T-1}q_T}b_{q_T}(o_T) = pi_{q_1}b_{q_1}(o_1)prod_{t=2}^Ta_{q_{t-1}q_t}b_{q_t}(o_t)

  • Latent Dirichlet Allocation(LDA):來自David M. Blei,Andew Y. Ng and Michael I. Jordan 發表於NIPS 2001的文章Latent Dirichlet Allocation。目前在文本挖掘領域包括文本主題識別、文本分類以及文本相似度計算方面都有應用。

LDA是一種典型的詞袋模型,即它認為一篇文檔是由一組詞構成的一個集合,詞與詞之間沒有順序以及先後的關係。一篇文檔可以包含多個主題,文檔中每一個詞都由其中的一個主題生成。

它是一種主題模型,它可以將文檔集中每篇文檔的主題按照概率分布的形式給出;同時是一種無監督學習演算法,在訓練時不需要手工標註的訓練集,需要的僅僅是文檔集以及指定主題的數量k即可;此外LDA的另一個優點則是,對於每一個主題均可找出一些詞語來描述它。

  • Matrix Decomposition:包括特徵分解,Jordan分解,Schur分解,SVD;LU分解,Cholesky分解,QR分解等。矩陣分解(matrix factorization)技術常用於推薦系統等問題中,Probabilistic Matrix Factorization(PMF)便是其中一種重要的技術。
  • Conditional Random Field(CRF):應該是機器學習領域比較難的一個演算法模型了,難點在於其定義之多(涉及到概率圖模型、團、最大團等)以及數學上近乎完美(涉及到概率、期望計算、最優化等),但其在自然語言處理方面應用效果還是比較好的。

設X與Y是隨機變數,P(Y|X)是在給定X的條件下Y的條件概率分布。若隨機變數Y構成一個由無向圖G=(V, E)表示的馬爾可夫隨機場,即

P(Y_{
u}|X, Y_{omega}, omega 
e 
u) = P(Y_{
u}|X, Y_{omega}, omega sim 
u)

對任意結點ν成立,則稱條件概率分布P(Y|X)為條件隨機場。式中ω~ν表示在圖G=(V, E)中與結點ν有邊連接的所有結點ω,ω≠ν表示結點ν以外的所有結點, Y_{
u}, Y_u與Y_{omega} 為結點ν,u與ω對應的隨機變數。

李軍

04/03/2018 寫於上海

推薦閱讀:

機器學習導論——Day6、7
Tensorflow入門教程(7)
機器學習數學:拉格朗日對偶問題
基於信息瓶頸的空間聚類(一)
Tensorflow VS PMML

TAG:機器學習 | 深度學習DeepLearning |