1. 程式人生 > >李巨集毅機器學習 P13 Brief Introduction of Deep Learning 筆記

李巨集毅機器學習 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方式找初值,那麼就是deep learning;如果不是用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實現。