第二部分 基礎(chǔ)模型
第四章 前饋神經(jīng)網(wǎng)絡(luò)
激活函數(shù)
連續(xù)可導(dǎo)(允許少數(shù)點(diǎn)上不可導(dǎo))的非線性函數(shù)择示。
激活函數(shù)和其導(dǎo)函數(shù)簡單。
導(dǎo)函數(shù)的值域在一個合適的區(qū)間
Sigmoid 型函數(shù)
Sigmoid 型函數(shù)是指一類S型曲線函數(shù)嗽上,為兩端飽和函數(shù)(即)裳仆。常用的Sigmoid 型函數(shù)有Logistic 函數(shù)和Tanh 函數(shù)。
Hard-Logistic 函數(shù)和Hard-Tanh 函數(shù)
Logistic 函數(shù)和Tanh 函數(shù)都是Sigmoid 型函數(shù),具有飽和性秆撮,但是計算開銷較大四濒。因為這兩個函數(shù)都是在中間(0 附近)近似線性,兩端飽和职辨。因此盗蟆,這兩個函數(shù)可以通過分段函數(shù)來近似。
以Logistic 函數(shù)σ(x) 為例舒裤,其導(dǎo)數(shù)為σ′(x) = σ(x)(1 ? σ(x))喳资。Logistic 函數(shù)在0 附近的一階泰勒展開為:
這樣Logistic 函數(shù)可以用分段函數(shù)hard-logistic(x) 來近似。
同樣腾供,Tanh 函數(shù)在0 附近的一階泰勒展開為
這樣Tanh 函數(shù)也可以用分段函數(shù)hard-tanh(x) 來近似仆邓。
ReLU函數(shù)
ReLU(Rectified Linear Unit节值,修正線性單元),也叫Rectifier函數(shù)榜聂,是目前深度神經(jīng)網(wǎng)絡(luò)中經(jīng)常使用的激活函數(shù)搞疗。ReLU實際上是一個斜坡(ramp)函數(shù),定義為:
優(yōu)點(diǎn):
- 計算上更加高效(只要進(jìn)行加须肆、乘和比較的操作)匿乃。
- ReLU 函數(shù)被認(rèn)為有生物上的解釋性,比如單側(cè)抑制豌汇、寬興奮邊界(即興奮程度也可以非常高)幢炸。在生物神經(jīng)網(wǎng)絡(luò)中,同時處于興奮狀態(tài)的神經(jīng)元非常稀疏拒贱。人腦中在同一時刻大概只有1% ~ 4% 的神經(jīng)元處于活躍狀態(tài)宛徊。Sigmoid 型激活函數(shù)會導(dǎo)致一個非稀疏的神經(jīng)網(wǎng)絡(luò),而ReLU卻具有很好的稀疏性逻澳,大約50% 的神經(jīng)元會處于激活狀態(tài)岩调。
- 在優(yōu)化方面,相比于Sigmoid 型函數(shù)的兩端飽和赡盘,ReLU函數(shù)為左飽和函數(shù)号枕,且在x > 0 時導(dǎo)數(shù)為1,在一定程度上緩解了神經(jīng)網(wǎng)絡(luò)的梯度消失問題陨享,加速梯 度下降的收斂速度葱淳。
缺點(diǎn):
- ReLU函數(shù)的輸出是非零中心化的钝腺,給后一層的神經(jīng)網(wǎng)絡(luò)引入偏置偏移,會影響梯度下降的效率赞厕。
- ReLU 神經(jīng)元在訓(xùn)練時比較容易“死亡”艳狐。
為解決上述問題。ReLU有幾個變體:
-
帶泄露的ReLU
在輸入x < 0 時皿桑,保持一個很小的梯度λ毫目。這樣當(dāng)神經(jīng)元非激活時也能有一個非零的梯度可以更新參數(shù),避免永遠(yuǎn)不能被激活
-
帶參數(shù)的ReLU
引入一個可學(xué)習(xí)的參數(shù)刮便,不同神經(jīng)元可以有不同的參數(shù)。對于第i 個神經(jīng)元绽慈,其PReLU 的
定義為:
-
ELU 函數(shù)
ELU(Exponential Linear Unit,指數(shù)線性單元) 是一個近似的零中心化的非線性函數(shù)夭咬,其定義為
-
Softplus 函數(shù)
Softplus 函數(shù) 可以看作是Rectifier 函數(shù)的平滑版本南用,其定義為
Swish 函數(shù)
是一種自門控(Self-Gated)激活函數(shù)融击,定義為:
其中σ(·) 為Logistic 函數(shù)筑公,β 為可學(xué)習(xí)的參數(shù)或一個固定超參數(shù)。σ(·) ∈ (0, 1) 可以看作是一種軟性的門控機(jī)制尊浪。當(dāng)σ(βx) 接近于1 時匣屡,門處于“開”狀態(tài)封救,激活函數(shù)的輸出近似于x本身;當(dāng)σ(βx) 接近于0 時捣作,門的狀態(tài)為“關(guān)”誉结,激活函數(shù)的輸出近似于0。
Swish 函數(shù)
當(dāng)β = 0 時券躁,Swish 函數(shù)變成線性函數(shù)x/2惩坑。當(dāng)β = 1 時,Swish 函數(shù)在x > 0 時近似線性也拜,在x < 0 時近似飽和以舒,同時具有一定的非單調(diào)性。當(dāng)β → +∞時搪泳,σ(βx) 趨向于離散的0-1 函數(shù)稀轨,Swish 函數(shù)近似為ReLU函數(shù)。因此岸军,Swish 函數(shù)可以看作是線性函數(shù)和ReLU函數(shù)之間的非線性插值函數(shù)奋刽,其程度由參數(shù)β 控制。
高斯誤差線性單元(GELU)
和Swish 函數(shù)比較類似艰赞,也是一種通過門控機(jī)制來調(diào)整其輸出值的激活函數(shù):
其中P(X ≤ x) 是高斯分布
的累積分布函數(shù)佣谐,其中μ, σ 為超參數(shù),一般設(shè)μ = 0, σ = 1 即可方妖。由于高斯分布的累積分布函數(shù)為S 型函數(shù)狭魂,因此GELU可以用Tanh 函數(shù)或Logistic 函數(shù)來近似:
Maxout 單元
也是一種分段線性函數(shù)雌澄。Sigmoid 型函數(shù)、ReLU 等激活函數(shù)的輸入是神經(jīng)元的凈輸入z杯瞻,是一個標(biāo)量镐牺。而Maxout 單元的輸入是上一層神經(jīng)元的全部原始輸出,是一個向量
魁莉。
每個Maxout單元有K個權(quán)重向量
和偏置bk (1 ≤ k ≤ K)睬涧。對于輸入x,可以得到K 個凈輸入zk, 1 ≤ k ≤ K:
Maxout 單元的非線性函數(shù)定義為:
Maxout 單元不單是凈輸入到輸出之間的非線性映射畦浓,而是整體學(xué)習(xí)輸入到輸出之間的非線性映射關(guān)系。Maxout 激活函數(shù)可以看作任意凸函數(shù)的分段線性近似检疫,并且在有限的點(diǎn)上是不可微的讶请。
神經(jīng)網(wǎng)絡(luò)
目前常用的神經(jīng)網(wǎng)絡(luò)有三種
-
前饋網(wǎng)絡(luò)
可以看作一個函數(shù),通過簡單非線性函數(shù)的多次復(fù)合屎媳,實現(xiàn)輸入空間到輸出空間的復(fù)雜映射秽梅。這種網(wǎng)絡(luò)結(jié)構(gòu)簡單抹蚀,易于實現(xiàn)。
-
記憶網(wǎng)絡(luò)
也稱為反饋網(wǎng)絡(luò)企垦,網(wǎng)絡(luò)中的神經(jīng)元不但可以接收其它神經(jīng)元的信息环壤,也可以接收自己的歷史信息。和前饋網(wǎng)絡(luò)相比钞诡,記憶網(wǎng)絡(luò)中的神經(jīng)元具有記憶功能郑现,在不同的時刻具有不同的狀態(tài)。記憶神經(jīng)網(wǎng)絡(luò)中的信息傳播可以是單向
或雙向傳遞荧降,因此可用一個有向循環(huán)圖或無向圖來表示接箫。記憶網(wǎng)絡(luò)包括循環(huán)神經(jīng)網(wǎng)絡(luò)、Hopfield 網(wǎng)絡(luò)朵诫、玻爾茲曼機(jī)辛友、受限玻爾茲曼機(jī) 等。記憶網(wǎng)絡(luò)可以看作一個程序剪返,具有更強(qiáng)的計算和記憶能力废累。
為了增強(qiáng)記憶網(wǎng)絡(luò)的記憶容量,可以引入外部記憶單元和讀寫機(jī)制脱盲,用來保存一些網(wǎng)絡(luò)的中間狀態(tài)邑滨,稱為記憶增強(qiáng)神經(jīng)網(wǎng)絡(luò)。比如神經(jīng)圖靈機(jī)和記憶網(wǎng)絡(luò)钱反。
-
圖網(wǎng)絡(luò)
為處理圖結(jié)構(gòu)的數(shù)據(jù)(用向量表示會損失信息)而出現(xiàn)的網(wǎng)絡(luò)掖看。
圖網(wǎng)絡(luò)是定義在圖結(jié)構(gòu)數(shù)據(jù)上的神經(jīng)網(wǎng)絡(luò)。圖中每個節(jié)點(diǎn)都由一個或一組神經(jīng)元構(gòu)成面哥。節(jié)點(diǎn)之間的連接可以是有向的哎壳,也可以是無向的。每個節(jié)點(diǎn)可以收到來自相鄰節(jié)點(diǎn)或自身的信息尚卫。
圖網(wǎng)絡(luò)是前饋網(wǎng)絡(luò)和記憶網(wǎng)絡(luò)的泛化归榕,包含很多不同的實現(xiàn)方式,比如圖卷積網(wǎng)絡(luò)(GCN)焕毫、圖注意力
網(wǎng)絡(luò)(GAT)、消息傳遞網(wǎng)絡(luò)(MPNN) 等驶乾。
前饋神經(jīng)網(wǎng)絡(luò)(FNN)
也稱為多層感知器(MLP)邑飒。但多層感知器的叫法并不是十分合理,因為前饋神經(jīng)網(wǎng)絡(luò)其實是由多層的Logistic回歸模型(連續(xù)的非線性函數(shù))組成级乐,而不是由多層的感知器(不連續(xù)的非線性函數(shù))組成疙咸。
用以下記號描述一個前饋神經(jīng)網(wǎng)絡(luò):
通用近似定理
對于具有線性輸出層和至少一個使用“擠壓”性質(zhì)的激活函數(shù)的隱藏層組成的前饋神經(jīng)網(wǎng)絡(luò)慨菱,就是可以通過足夠多隱藏層神經(jīng)元的數(shù)量的前饋神經(jīng)網(wǎng)絡(luò)焰络,可以以任意的精度來近似任何一個定義在實數(shù)空間中的有界閉集函數(shù)。
通用近似定理只是說明了神經(jīng)網(wǎng)絡(luò)的計算能力可以去近似一個給定的連續(xù)函數(shù)符喝,但并沒有給出如何找到這樣一個網(wǎng)絡(luò)闪彼,以及是否是最優(yōu)的。此外协饲,當(dāng)應(yīng)用到機(jī)器學(xué)習(xí)時畏腕,真實的映射函數(shù)并不知道,一般是通過經(jīng)驗風(fēng)險最小化和正則化來
進(jìn)行參數(shù)學(xué)習(xí)囱稽。因為神經(jīng)網(wǎng)絡(luò)的強(qiáng)大能力郊尝,反而容易在訓(xùn)練集上過擬合。
應(yīng)用到機(jī)器學(xué)習(xí)
在機(jī)器學(xué)習(xí)中战惊,輸入樣本的特征對分類器的影響很大流昏。因此,要取得好的分類效果吞获,需要將樣本的原始特征向量x轉(zhuǎn)換到更有效的特征向量?(x)况凉,這個過程叫做特征抽取。
反向傳播算法
設(shè)用隨機(jī)梯度下降進(jìn)行參數(shù)更新各拷。給定一個樣本(x, y)刁绒,將其輸入到神經(jīng)網(wǎng)絡(luò)模型中,得到網(wǎng)絡(luò)輸出為?y烤黍。假設(shè)損失函數(shù)為L(y, ?y)知市,要進(jìn)行參數(shù)學(xué)習(xí)就需要計算損失函數(shù)關(guān)于每個參數(shù)的導(dǎo)數(shù)。
首先計算偏導(dǎo)數(shù) :
再計算偏導(dǎo)數(shù):
自動梯度計算
數(shù)值微分
是用數(shù)值方法來計算函數(shù)f(x) 的導(dǎo)數(shù)铣卡。實現(xiàn)簡單链韭,但實用性差,且時間復(fù)雜度高煮落。
符號微分
是一種基于符號計算的自動求導(dǎo)方法敞峭。
符號計算也叫代數(shù)計算,是指用計算機(jī)來處理帶有變量的數(shù)學(xué)表達(dá)式州邢。
和符號計算相對應(yīng)的概念是數(shù)值計算儡陨,即將數(shù)值代入 數(shù)學(xué)表示中進(jìn)行計算。
符號計算一般來講是對輸入的表達(dá)式量淌,通過迭代或遞歸使用一些事先定義的規(guī)則進(jìn)行轉(zhuǎn)換骗村。當(dāng)轉(zhuǎn)換結(jié)果不能再繼續(xù)使用變換規(guī)則時,便停止計算呀枢。
也就是符號微分可以在編譯時就計算梯度的數(shù)學(xué)表示胚股,并進(jìn)一步進(jìn)行優(yōu)化。此外裙秋,符號計算的一個優(yōu)點(diǎn)是符號計算和平臺無關(guān)琅拌,可以在CPU或GPU上運(yùn)行。
符號微分的缺點(diǎn):一是編譯時間較長摘刑,特別是對于循環(huán)进宝,需要很長時間進(jìn)行編譯;二是為了進(jìn)行符號微分枷恕,一般需要設(shè)計一種專門的語言來表示數(shù)學(xué)表達(dá)式党晋,并且要對變量(符號)進(jìn)行預(yù)先聲明;三是很難對程序進(jìn)行調(diào)試徐块。
自動微分
如對復(fù)合函數(shù)進(jìn)行自動微分未玻,可構(gòu)建計算圖:
是一種可以對一個(程序)函數(shù)進(jìn)行計算導(dǎo)數(shù)的方法。符號微分的處理對象是數(shù)學(xué)表達(dá)式胡控,而自動微分的處理對
象是一個函數(shù)或一段程序扳剿。自動微分可以直接在原始程序代碼進(jìn)行微分,因此自動微分成為目前大多數(shù)深度學(xué)習(xí)框架的首選昼激。
自動微分的基本原理是所有的數(shù)值計算可以分解為一些基本操作庇绽,包含+,?,×, / 和一些初等函數(shù)exp, log, sin, cos 等,然后利用鏈?zhǔn)椒▌t來自動計算一個復(fù)合函數(shù)的梯度癣猾。
按照計算導(dǎo)數(shù)的順序敛劝,自動微分可以分為兩種模式:前向模式和反向模式(類似反向傳播)。
靜態(tài)計算圖和動態(tài)計算圖計算圖按構(gòu)建方式可以分為靜態(tài)計算圖(Theano 和Tensorflow)和動態(tài)計算圖(PyTorch)纷宇。靜態(tài)計算圖是在編譯時構(gòu)建計算圖夸盟,計算圖構(gòu)建好之后在程序運(yùn)行時不能改變,而動態(tài)計算圖是在程序運(yùn)行時動態(tài)構(gòu)建像捶。兩種構(gòu)建方式各有優(yōu)缺點(diǎn)上陕。靜態(tài)計算圖在構(gòu)建時可以進(jìn)行優(yōu)化,并行能力強(qiáng)拓春,但靈活性比較差释簿。動態(tài)計算圖則不容易優(yōu)化,當(dāng)不同輸入的網(wǎng)絡(luò)結(jié)構(gòu)不一致時硼莽,難以并行計算庶溶,但是靈活性比較高。
優(yōu)化問題
神經(jīng)網(wǎng)絡(luò)的參數(shù)學(xué)習(xí)比線性模型要更加困難,主要原因有兩點(diǎn):(1)非凸優(yōu)化問題和(2)梯度消失問題偏螺。