李巨集毅機器學習 P13 Brief Introduction of Deep Learning 筆記
deep learning的熱度增長非常快。
下面看看deep learning的歷史。
最開始出現的是1958年的單層感知機,1969年發現單層感知機有限制,到了1980年代出現多層感知機(這和今天的深度學習已經沒有太大的區別),1986年又出現了反向傳播演算法(通常超過3層就對出好的結果沒有什麼幫助)。
1986年有人提出了反向傳播演算法。
1989年有人提出只要有一層隱藏層就可以建立一個model用來模擬任何的function。
2006年有人提出受限玻爾茲曼機(Restricted Boltzmann Machine,簡稱RBM),實際上這與之前的多層感知機幾乎一樣
但是這種RBM尋找初值的方式其實對實際效果的幫助並不大,現在已經很少有人用了。
2009年時我們發現GPU可以加速神經網路的訓練過程。這大大提升了神經網路的計算速度。
2011年時有人開始將深度學習用於語音識別,2012年有人開始將深度學習用於影象識別。
Deep learning也一樣是3個step:
step1裡面我們必須定義一個function,這個function就是一個neural network。
neural network中的每一個neuron其實就是一個logistic regression。
不同的連線方式構成了不同的network結構。
有各種不同的連線方式,如Fully Connect Feedforward Network(全連線前饋網路)的結構:
如上圖,1X1+(-1)X(-2)+1(bias)=4,然後經過sigmoid函式,值為0.98。0.12的輸出值也類似。
類似地,我們可以得到後面幾層神經元的輸出值。
如果輸入是0和0的話,則各層的神經元的值如下:
一個neural network就可以把它看成是一個function。
我們可以把上面的神經網路表示成下面的形式:
因為每一層的每個神經元都會與下一層的所有神經元都有連線,所以叫全連線。
所謂的Deep就是有很多Hidden Layers。
如下面幾種著名的deep neural network結構:
neural network每層之間的運算我們經常用矩陣運算來表示。
如上圖輸入層與下一層的運算可以表示成圖上所示的矩陣。
我們把每層用的所有w和b按層形成矩陣w1,w2...wl和b1,b2...bl。
所以我們的神經網路模型代表的function y=f(x)可以表示為:
一般情況下我們用GPU來進行矩陣運算。
我們可以把所有隱藏層看成一個teature extracter,把輸出層看成一個Multi-class Classifier。
舉一個例子:
如下圖,一張灰度圖片有256個畫素,就看成一個256維的vector,可以看成有顏色的地方畫素值是1,否則是0;輸出層是一個10個類的分類器(一個10維的vector)。
中間的function可以有很多種,有些比較好,有些比較差。
你需要對你當前的網路結構找到一個好的function。
怎麼找一個好的function呢?經驗+直覺。
事實上,對於神經網路,我們決定一個好的network結構更容易,也更重要。
就目前來說,深度學習在語音和影象識別上進步很大,但在NLP方面的進步不太明顯。
step2:定義一個好的function。
舉例:
根據一組輸入資料,計算function的loss值(cross_entropy值)。
然後我們要一種方法來調整function的各個權重,使得loss值越小越好。
我們輸入的樣本往往是一組資料,我們可以得到一個total loss。
挑選最佳function,還是用梯度下降方法。
多次訓練,持續更新w和b引數。
就可以找到一個好的function。
這就是deep learning。
反向傳播演算法用在計算梯度並用梯度更新引數。
為什麼要用deep learning?
早年的一個研究資料:可以看到隱藏層越多,error值越小。
有一個理論是這樣說的:
任何一個連續函式,N維輸入,M維輸出,都可以用一個network實現。