一、什么是神經(jīng)網(wǎng)絡(luò) 我們這里講解的神經(jīng)網(wǎng)絡(luò),就是在Logistic regression的基礎(chǔ)上增加了一個(gè)或幾個(gè)隱層(hidden layer),下面展示的是一個(gè)最最最簡單的神經(jīng)網(wǎng)絡(luò),只有兩層: 兩層神經(jīng)網(wǎng)絡(luò): 需要注意的是,上面的圖是“兩層”,而不是三層或者四層,輸入和輸出不算層! 這里,我們先規(guī)定一下記號(hào)(Notation):
另外,有一點(diǎn)經(jīng)常搞混: - 上圖中的x1,x2,x3,x4不是代表4個(gè)樣本!而是一個(gè)樣本的四個(gè)特征(4個(gè)維度的值)! 你如果有m個(gè)樣本,代表要把上圖的過程重復(fù)m次: 神經(jīng)網(wǎng)絡(luò)的“兩個(gè)傳播”:
每經(jīng)過一次前向傳播和反向傳播之后,參數(shù)就更新一次,然后用新的參數(shù)再次循環(huán)上面的過程。這就是神經(jīng)網(wǎng)絡(luò)訓(xùn)練的整個(gè)過程。 二、前向傳播 如果用for循環(huán)一個(gè)樣本一個(gè)樣本的計(jì)算,顯然太慢,看過我的前幾個(gè)筆記的朋友應(yīng)該知道,我們是使用Vectorization,把m個(gè)樣本壓縮成一個(gè)向量X來計(jì)算,同樣的把z、a都進(jìn)行向量化處理得到Z、A,這樣就可以對(duì)m的樣本同時(shí)進(jìn)行表示和計(jì)算了。 這樣,我們用公式在表示一下我們的兩層神經(jīng)網(wǎng)絡(luò)的前向傳播過程: Layer 1: Z[1] = W[1]·X + b[1]A[1] = σ(Z[1]) Layer 2: Z[2] = W[2]·A[1] + b[2]A[2] = σ(Z[2]) 而我們知道,X其實(shí)就是A[0],所以不難看出:每一層的計(jì)算都是一樣的: Layer i: Z[i] = W[i]·A[i-1] + b[i]A[i] = σ(Z[i]) (注:σ是sigmoid函數(shù)) 因此,其實(shí)不管我們神經(jīng)網(wǎng)絡(luò)有幾層,都是將上面過程的重復(fù)。 對(duì)于 損失函數(shù),就跟Logistic regression中的一樣,使用 “交叉熵(cross-entropy)”,公式就是二分類問題:L(y^,y) = -[y·log(y^ )+(1-y)·log(1-y^ )]- 多分類問題:L=-Σy(j)·y^(j) 這個(gè)是每個(gè)樣本的loss,我們一般還要計(jì)算整個(gè)樣本集的loss,也稱為cost,用J表示,J就是L的平均: J(W,b) = 1/m·ΣL(y^(i),y(i)) 上面的求Z、A、L、J的過程就是正向傳播。 三、反向傳播 反向傳播說白了根據(jù)根據(jù)J的公式對(duì)W和b求偏導(dǎo),也就是求梯度。因?yàn)槲覀冃枰锰荻认陆捣▉韺?duì)參數(shù)進(jìn)行更新,而更新就需要梯度。 但是,根據(jù)求偏導(dǎo)的鏈?zhǔn)椒▌t我們知道,第l層的參數(shù)的梯度,需要通過l+1層的梯度來求得,因此我們求導(dǎo)的過程是“反向”的,這也就是為什么叫“反向傳播”。 具體求導(dǎo)的過程,這里就不贅述了,有興趣的可以自己推導(dǎo),雖然我覺得多數(shù)人看到這種東西都不想推導(dǎo)了。。。(主要還是我懶的打公式了T_T') 而且,像各種 深度學(xué)習(xí)框架TensorFlow、Keras,它們都是 只需要我們自己構(gòu)建正向傳播過程, 反向傳播的過程是自動(dòng)完成的,所以大家也確實(shí)不用操這個(gè)心。 進(jìn)行了反向傳播之后,我們就可以根據(jù)每一層的參數(shù)的梯度來更新參數(shù)了,更新了之后,重復(fù)正向、反向傳播的過程,就可以不斷訓(xùn)練學(xué)習(xí)更好的參數(shù)了。 四、深層神經(jīng)網(wǎng)絡(luò)(Deep Neural Network) 前面的講解都是拿一個(gè)兩層的很淺的神經(jīng)網(wǎng)絡(luò)為例的。 深層神經(jīng)網(wǎng)絡(luò)也沒什么神秘,就是多了幾個(gè)/幾十個(gè)/上百個(gè)hidden layers罷了。 可以用一個(gè)簡單的示意圖表示: 深層神經(jīng)網(wǎng)絡(luò): 注意,在深層神經(jīng)網(wǎng)絡(luò)中,我們?cè)谥虚g層使用了 “ReLU”激活函數(shù),而不是sigmoid函數(shù)了,只有在最后的輸出層才使用了sigmoid函數(shù),這是因?yàn)?ReLU函數(shù)在求梯度的時(shí)候更快,還可以一定程度上防止梯度消失現(xiàn)象,因此在深層的網(wǎng)絡(luò)中常常采用。關(guān)于激活函數(shù)的問題,可以參閱:【DL碎片3】神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)及其對(duì)比 關(guān)于深層神經(jīng)網(wǎng)絡(luò),我們有必要再詳細(xì)的觀察一下它的結(jié)構(gòu),尤其是 每一層的各個(gè)變量的維度,畢竟我們?cè)诖罱P偷臅r(shí)候,維度至關(guān)重要。 我們?cè)O(shè): 總共有m個(gè)樣本,問題為二分類問題(即y為0,1); 網(wǎng)絡(luò)總共有L層,當(dāng)前層為l層(l=1,2,...,L); 第l層的單元數(shù)為n[l];那么下面參數(shù)或變量的維度為:
可能有人問,為什么 W和b的維度里面沒有m? 因?yàn)?W和b對(duì)每個(gè)樣本都是一樣的,所有樣本采用同一套參數(shù)(W,b), 而Z和A就不一樣了,雖然計(jì)算時(shí)的參數(shù)一樣,但是樣本不一樣的話,計(jì)算結(jié)果也不一樣,所以維度中有m。 深度神經(jīng)網(wǎng)絡(luò)的正向傳播、反向傳播和前面寫的2層的神經(jīng)網(wǎng)絡(luò)類似,就是多了幾層,然后中間的激活函數(shù)由sigmoid變?yōu)镽eLU了。 |
|