1. 程式人生 > >UFLDL教程筆記(二)

UFLDL教程筆記(二)

一、Softmax迴歸

Softmax是邏輯迴歸在多分類問題上的擴充套件,適合有k類情況下的分類任務。

1.1 Softmax迴歸的期望函式和代價函式

首先看下邏輯迴歸的假設函式:

hθ=11+eθTx

有上面可以看出hθeθTx是正相關的,而Softmax迴歸和logistic 迴歸的在形式上也很類似,其中Softmax將x分類為類別j的概率為:

p(yi=j|x(i);θ)=eθTjx(i)kl=1eθTlx(i)

所以Softmax迴歸的期望函式為:
這裡寫圖片描述

同樣的,也可以知道Softmax迴歸的代價函式:
這裡寫圖片描述

1 { 值為真的表示式}=1,也就是1{

2+2=4}的值為1,1{2+2=5}的值為0

上式代價函式的意思是說如果預測預測為類別j的概率越小,分類的錯誤就越大。

1.2 Softmax迴歸引數的特點

Softmax 迴歸有一個不尋常的特點,就是給引數加/減一個數,分類的概率不變:
這裡寫圖片描述

這就說我們設其中某個引數為0,也不影響最終的概率值,而且Softmax 迴歸的代價函式是一個凸函式,所以也不存區域性最優解,但是 Hessian 矩陣是奇異的/不可逆的,這會直接導致採用牛頓法優化就遇到數值計算的問題。

實際應用中為了使演算法實現更簡單清楚,不任意地將某一引數設定為 0。但此時我們需要對代價函式做一個改動:加入權重衰減。權重衰減可以解決 softmax 迴歸的引數冗餘所帶來的數值問題。

通過下圖的權重衰減項懲罰過大的引數值,此時代價函式就變成了嚴格的凸函式,這樣就可以保證得到唯一的解了。 此時的 Hessian矩陣變為可逆矩陣。
這裡寫圖片描述

1.3 Softmax迴歸與Logistic 迴歸的關係

當類別數 \textstyle k = 2 時,softmax 迴歸退化為 logistic 迴歸。這表明 softmax 迴歸是 logistic 迴歸的一般形式。
這裡寫圖片描述

Q:什麼時候用softmax迴歸,什麼時候用k個二元分類器呢?

A:這一選擇取決於你的類別之間是否互斥

  • 四個類別的音樂,分別為:古典音樂、鄉村音樂、搖滾樂和爵士樂,那麼你可以假設每個訓練樣本只會被打上一個標籤,此時選擇softmax迴歸
  • 四個類別如下:人聲音樂、舞曲、影視原聲、流行歌曲,那麼這些類別之間並不是互斥的,使用4個二分類的 logistic 迴歸分類器更為合適。

二、自我學習

用機器學習演算法訓練模型,模型的好壞往往取決於是否有足夠的資料,但不是每種應用場景中都有標記好的資料,實際上,大規模的標記資料給演算法訓練是很耗費人力物力的一件事情,那有沒有什麼方法讓演算法自己學習呢?

這就涉及到無監督學習和自我學習了,常見的無監督學習方式有兩種:

1.自我學習:

目標是區分汽車和摩托車影象;哪裡可以獲取大量的未標註資料呢?最簡單的方式可能是從網際網路上下載一些隨機的影象資料集,在這些資料上訓練出一個稀疏自編碼器,從中得到有用的特徵。

這個例子裡,未標註資料完全來自於一個和已標註資料不同的分佈(未標註資料集中,或許其中一些影象包含汽車或者摩托車,但是不是所有的影象都如此)。這種情形被稱為自學習。

2.半監督學習:

如果有大量的未標註影象資料,要麼是汽車影象,要麼是摩托車影象,僅僅是缺失了類標號(沒有標註每張圖片到底是汽車還是摩托車)。也可以用這些未標註資料來學習特徵。

這種方式,即要求未標註樣本和帶標註樣本服從相同的分佈,有時候被稱為半監督學習。在實踐中,常常無法找到滿足這種要求的未標註資料(到哪裡找到一個每張影象不是汽車就是摩托車,只是丟失了類標號的影象資料庫?)因此,自學習在無標註資料集的特徵學習中應用更廣。

三、建立分類用的深度網路

這裡寫圖片描述

在自我學習中,我們首先利用未標註資料訓練一個稀疏自編碼器。隨後,給定一個新樣本 x,我們通過隱含層提取出特徵a。

考慮利用這個方法所學到的分類器(輸入-輸出對映)。它描述了一個把測試樣本 x 對映到預測值 p(y=1|x) 的函式。將此前的兩張圖片結合起來,就得到該函式的圖形表示。

這個最終分類器整體上顯然是一個大的神經網路。因此,在訓練獲得模型最初引數(利用自動編碼器訓練第一層,利用 logistic/softmax 迴歸訓練第二層)之後,我們可以進一步修正模型引數,進而降低訓練誤差。具體來說,我們可以對引數進行微調,在現有引數的基礎上採用梯度下降或者 L-BFGS 來降低已標註樣本集 上的訓練誤差。

但這還是一個非常淺層的神經網路,因為隱層只有一個,深度神經網路,即含有多個隱藏層的神經網路。通過引入深度網路,我們可以計算更多複雜的輸入特徵。因為每一個隱藏層可以對上一層的輸出進行非線性變換,因此深度神經網路擁有比“淺層”網路更加優異的表達能力(例如可以學習到更加複雜的函式關係)。

值得注意的是當訓練深度網路的時候,每一層隱層應該使用非線性的啟用函式 ,這是因為多層的線性函式組合在一起本質上也只有線性函式的表達能力(例如,將多個線性方程組合在一起僅僅產生另一個線性方程)。因此,在啟用函式是線性的情況下,相比於單隱藏層神經網路,包含多隱藏層的深度網路並沒有增加表達能力。

2.1 深層神經網路的優勢

  • 當處理物件是影象時,我們能夠使用深度網路學習到“部分-整體”的分解關係。例如,第一層可以學習如何將影象中的畫素組合在一起來檢測邊緣(正如我們在前面的練習中做的那樣)。第二層可以將邊緣組合起來檢測更長的輪廓或者簡單的“目標的部件”。在更深的層次上,可以將這些輪廓進一步組合起來以檢測更為複雜的特徵。

  • 大腦皮層同樣是分多層進行計算的。例如視覺影象在人腦中是分多個階段進行處理的,首先是進入大腦皮層的“V1”區,然後緊跟著進入大腦皮層“V2”區,以此類推。

2.2 深層神經網路的困難

  • 資料獲取問題
    有標籤的資料通常是稀缺的,因此對於許多問題,我們很難獲得足夠多的樣本來擬合一個複雜模型的引數。例如,考慮到深度網路具有強大的表達能力,在不充足的資料上進行訓練將會導致過擬合。

  • 區域性極值問題
    使用監督學習方法來對淺層網路(只有一個隱藏層)進行訓練通常能夠使引數收斂到合理的範圍內。但是當用這種方法來訓練深度網路的時候,並不能取得很好的效果。特別的,使用監督學習方法訓練神經網路時,通常會涉及到求解一個高度非凸的優化問題,種非凸優化問題的搜尋區域中充斥著大量“壞”的區域性極值,因而使用梯度下降法(或者像共軛梯度下降法,L-BFGS等方法)效果並不好。

  • 梯度彌散問題
    梯度下降法(以及相關的L-BFGS演算法等)在使用隨機初始化權重的深度網路上效果不好的技術原因是:梯度會變得非常小。具體而言,當使用反向傳播方法計算導數的時候,隨著網路的深度的增加,反向傳播的梯度(從輸出層到網路的最初幾層)的幅度值會急劇地減小。結果就造成了整體的損失函式相對於最初幾層的權重的導數非常小。這樣,當使用梯度下降法的時候,最初幾層的權重變化非常緩慢,以至於它們不能夠從樣本中進行有效的學習。這種問題通常被稱為“梯度的彌散”.

2.2 逐層貪婪訓練

有什麼好的辦法可以訓練深層神經網路的嗎?

逐層貪婪訓練會是一個不錯的辦法。

簡單來說,逐層貪婪演算法的主要思路是每次只訓練網路中的一層,即我們首先訓練一個只含一個隱藏層的網路,僅當這層網路訓練結束之後才開始訓練一個有兩個隱藏層的網路,以此類推。

在每一步中,我們把已經訓練好的前 k-1 層固定,然後增加第 k 層(也就是將我們已經訓練好的前 k-1 的輸出作為輸入)。每一層的訓練可以是有監督的(例如,將每一步的分類誤差作為目標函式),但更通常使用無監督方法(例如自動編碼器)。

舉個栗子

假設訓練一個識別MNIST手寫數字分類的任務

這裡寫圖片描述

首先,需要用原始輸入訓練一個自編碼器,它能夠學習得到原始輸入的一階特徵表示h(1)

接著,你需要把原始資料輸入到上述訓練好的稀疏自編碼器中,對於每一個輸入都可以得到它對應的一階特徵表示h(1),然後你再用這些一階特徵作為另一個稀疏自編碼器的輸入,使用它們來學習二階特徵h(2)

再把一階特徵輸入到剛訓練好的第二層稀疏自編碼器中,你可以把這些二階特徵作為softmax分類器的輸入,訓練得到一個能將二階特徵對映到數字標籤的模型。

如果網路的輸入資料是影象,網路的第一層會學習如何去識別邊,第二層一般會學習如何去組合邊,從而構成輪廓、角等。更高層會學習如何去組合更形象且有意義的特徵。例如,如果輸入資料集包含人臉影象,更高層會學習如何識別或組合眼睛、鼻子、嘴等人臉器官。