【課程筆記】神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)與學(xué)習(xí)


1. 多層感知機
a. 能夠進行復(fù)雜的表示
b. 權(quán)重設(shè)定的工作需要人工來執(zhí)行 → 解決方法,利用神經(jīng)網(wǎng)絡(luò)自動地從數(shù)據(jù)中學(xué)習(xí)到合適的權(quán)重參數(shù)
2. 前饋神經(jīng)網(wǎng)絡(luò)
a. 神經(jīng)元之間的連接只能單向連接,不能反饋(連成一個回環(huán))
b. 層與層之間是全連接
3. 激活函數(shù)
a. sigmoid函數(shù):階躍函數(shù)的平滑版本,定義域上處處可導(dǎo) → 為神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)提供了數(shù)學(xué)上的便利
i. 缺點,在x很大時,導(dǎo)數(shù)趨近于0。這在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時是不希望看到的(w←w-eta(dL/dw),梯度下降法),如果梯度變到0,意味著w一直固定在這里,訓(xùn)練不動了。
ii. 深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練:涉及到大量梯度的連乘。而對于大量梯度的連乘來說,很可能出現(xiàn)中間有很小的梯度導(dǎo)數(shù),導(dǎo)致網(wǎng)絡(luò)訓(xùn)練不動了。這也是以前深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練不出來的原因之一。
b. ReLU函數(shù)(Rectified Linear Unit):缺點,有一個點不可導(dǎo);優(yōu)點,>0時導(dǎo)數(shù)恒為1
i. 非線性激活函數(shù),大量使用
ii. 斷點問題,Tensorflow或者Pytorch都處理好了。早期還有人考慮不同的激活函數(shù),現(xiàn)在基本上沒有人考慮這方面的問題了。
c. 輸出層的非線性激活函數(shù),一般不用ReLU函數(shù)
i. 回歸函數(shù):identity函數(shù),恒等函數(shù)y=sigma(x)=x
ii. 分類問題:softmax函數(shù),y=sigma(x)=exp(ak)/sum_i(exp(ai));取值范圍,0<y<1,sum(yi)=1;意味著輸出了離散的概率分布【←概率化的輸出的解釋,不意味著得到了數(shù)據(jù)的分布?。?!】
4. 符號約定:
a. 輸入:x1,x2,…
b. 層:
i. 凈輸入a:a^(1)_(2),上標(biāo)是層級,下標(biāo)是層級下的索引號
ii. 權(quán)重w:w^(1)_(12),下標(biāo)前一個表示輸入,后一個表示輸出作用于的神經(jīng)元
iii. 非線性輸出z:z^(2)_(1)=h(a^(2)_1),凈輸入經(jīng)過非線性激活函數(shù)激活之后,得到了非線性輸出
c. 輸出層:
非線性激活函數(shù)需要根據(jù)需求來設(shè)計
1. 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)
a. 向量nabla(y)所指示的方向,是函數(shù)增長最快的方向;反之,往nabla(y)的反方向走,則是函數(shù)減小最快的方向
i. 注意,nabla(y)不一定是歸一化的?。?!
b. w' ← w-lambda·(dL/dw),其中d表示partial(偏導(dǎo)數(shù))
i. L:損失函數(shù),定義為預(yù)測值和真實值的某種差距,L(y,t),其中y表示預(yù)測量,t表示真實量
ii. -(dL/dw),負梯度方向在w軸上的投影系數(shù)
iii. lambda,步長
2. 理解學(xué)習(xí)概念的三個角度:數(shù)據(jù)驅(qū)動的學(xué)習(xí);基于數(shù)值微分的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí);基于反向傳播的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)(BP,神經(jīng)網(wǎng)絡(luò)中最重要的算法)
a. 數(shù)據(jù)驅(qū)動的學(xué)習(xí):網(wǎng)絡(luò)架構(gòu)非常成熟(模型到處都是,model zoo);數(shù)據(jù)是制約瓶頸(找不到足夠能夠把網(wǎng)絡(luò)訓(xùn)練出來的合適的數(shù)據(jù))
i. 數(shù)據(jù)→人想到的算法→答案
ii. 數(shù)據(jù)→人想到的特征量(SIFT、HOG等)→機器學(xué)習(xí)(SVM,KNN等)→答案 (2012年以前的范式)
iii. 數(shù)據(jù)→神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))→答案 (2012年以后,不再去區(qū)分哪個部分是特征提取器,哪個部分是分類器;也被稱為端到端機器學(xué)習(xí)end-to-end machine learning)
b. 基于數(shù)值微分的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí):(劃分mini-batch→計算梯度→更新參數(shù)→重復(fù))
i. 沿著網(wǎng)絡(luò)的方向,以負梯度方向更新網(wǎng)絡(luò)
ii. 初始的參數(shù)分布:
1) 一種方式:隨機猜出來的 → 很可能導(dǎo)致較大的Loss → 利用梯度更新參數(shù)分布
iii. 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中所用的指標(biāo)稱為損失函數(shù),L=L(y,t)
1) 損失函數(shù)可以使用任意函數(shù),但一般用均方誤差和交叉熵誤差等等
a) 均方誤差:回歸問題(輸出是一個實數(shù),有大小之分)常用!!
b) 交叉熵誤差:E=-sum(tk·logyk)
i) 由于t是獨熱向量(正確的是1,不對的都是0),因此最小化交叉熵損失函數(shù),等價于極大似然
ii) 分類問題(輸出是一個標(biāo)簽,沒有大小之分)常用??!
2) 通常不使用識別的精度作為損失函數(shù):(相對于參數(shù)的變化)不敏感,有跳躍
3) Mini-batch學(xué)習(xí)
a) 如果以全部數(shù)據(jù)為對象求損失函數(shù)的和,耗時長甚至算不了
b) 受到計算電視節(jié)目收視率的啟發(fā),取mini-batch進行計算
c) 分批次進行訓(xùn)練、更新參數(shù)。batch的規(guī)模取決于顯卡(顯存的大小決定了一個batch有多大)
d) 一個epoch:把所有的batch過了一遍
i) 不同的epoch,batch的劃分通常會不一樣
iv. 計算梯度的方法:前項差分,后向差分,中心差分
c. 基于反向傳播的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí):可以用反向傳播方法對神經(jīng)網(wǎng)絡(luò)進行學(xué)習(xí),也可以用數(shù)值微分方法進行學(xué)習(xí)。但是反向傳播方法效率高很多
i. 符號約定:連接權(quán),偏置(激活閾值)→凈輸入,非線性輸出
ii. BP算法:
1) 前向計算:Forward Calculation,輸入樣本x,沿著網(wǎng)絡(luò)一直計算到輸出y(預(yù)測值)
2) (獲得損失函數(shù))
3) 反向傳播:Back Propagation
a) 如何算損失函數(shù)J相對于模型參數(shù)的導(dǎo)數(shù)?【兩層網(wǎng)絡(luò)示例】
i) J對w的導(dǎo)數(shù):鏈?zhǔn)椒▌t(復(fù)合函數(shù)求導(dǎo))
One. 先考慮輸出層對應(yīng)的w:w變化,首先影響的是輸出層節(jié)點的凈輸入beta;輸出層節(jié)點的凈輸入beta變化,影響的是輸出層非線性輸出y^hat;輸出層非線性輸出y^hat變化,導(dǎo)致?lián)p失函數(shù)J變化
First. dJ/dy^hat:根據(jù)J的表達式,可以給出來(用當(dāng)前已有的值即可,可以不需要數(shù)值的微分)
Second. dy^hat/dbeta:根據(jù)激勵函數(shù)的表達式,可以給出來(用當(dāng)前已有的值即可,可以不需要數(shù)值的微分)
Third. dbeta/domega:根據(jù)線性求和函數(shù)(仿射變換)的表達式,可以給出來(用當(dāng)前已有的值即可,可以不需要數(shù)值的微分)
Two. 再考慮隱藏層-輸入層的權(quán)重v:v變化,首先影響的是隱藏層的凈輸入alpha;alpha變化,影響的是隱藏層非線性輸出b;b變化,影響的是輸出層每一個節(jié)點的凈輸入beta;beta變化,y^hat變化,導(dǎo)致導(dǎo)致J變化
First. 注意,dJ/db=sum(dJ/dbeta·dbeta/db),這里有sum的原因在于,不止一個變量跟b有函數(shù)關(guān)系
Three. 再考慮激活閾值的更新量:很簡單,可以直接寫出來
First. 可以直接從J對權(quán)重的導(dǎo)數(shù),給出J相對于激活閾值的導(dǎo)數(shù)
Second. 原因在于,theta也可以認為是和-1相乘的連接權(quán),它更新的公式應(yīng)該和權(quán)重更新的公式結(jié)構(gòu)一樣,只不過需要把輸入取成-1
ii) 注意,在推導(dǎo)BP算法的時候,是基于一個樣本輸入的推導(dǎo)。
One. 實際過程中,往往是算一個batch對應(yīng)的一個損失值(推導(dǎo)時不這么做,是為了避免角標(biāo)復(fù)雜)
b) 缺點:鏈?zhǔn)椒▌t公式的乘子數(shù)擴張速度特別大,網(wǎng)絡(luò)深了之后,上述求導(dǎo)的分析方法非人力可為
i) 怎么解決?采用計算圖
One. 計算圖解題的一般流程:構(gòu)建計算圖;在計算圖上,從左向右進行計算(類似于正向傳播)
First. 正向傳播:從左向右進行計算;反向傳播:從右向左進行計算
Second. 計算圖的好處:屏蔽一些很復(fù)雜的計算,只需要計算輸出的結(jié)果就可以了;在各個計算節(jié)點上,只有一些簡單的計算
1. 消耗:中間計算的結(jié)果需要保存下來:“快”的實質(zhì)——用空間換時間
Third. 如何用計算圖求導(dǎo)數(shù)?(示例)