冒泡~二月啦!一年的十二分之一就過啦鴨 接下來該收收心 過春節(jié)啦!
于是來個年前最后一更~
局部響應(yīng)歸一化層(Local Response Normalization)
局部響應(yīng)歸一化層簡稱LRN,是在深度學(xué)習(xí)中提高準(zhǔn)確度的技術(shù)方法。一般是在激活、池化后進(jìn)行的一中處理方法,因在Alexnet中運用到,故做一下整理。
為什么要引入LRN層?
首先要引入一個神經(jīng)生物學(xué)的概念:側(cè)抑制(lateral inhibitio),即指被激活的神經(jīng)元抑制相鄰的神經(jīng)元。歸一化(normaliazation)的目的就是“抑制”,LRN就是借鑒這種側(cè)抑制來實現(xiàn)局部抑制,尤其是我們使用RELU的時候,這種“側(cè)抑制”很有效 ,因而在alexnet里使用有較好的效果。
歸一化有什么好處?
1.歸一化有助于快速收斂;
2.對局部神經(jīng)元的活動創(chuàng)建競爭機(jī)制,使得其中響應(yīng)比較大的值變得相對更大,并抑制其他反饋較小的神經(jīng)元,增強(qiáng)了模型的泛化能力。
【補充:神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過程本質(zhì)就是為了學(xué)習(xí)數(shù)據(jù)分布,一旦訓(xùn)練數(shù)據(jù)與測試數(shù)據(jù)的分布不同,那么網(wǎng)絡(luò)的泛化能力也大大降低;另外一方面,一旦每批訓(xùn)練數(shù)據(jù)的分布各不相同(batch 梯度下降),那么網(wǎng)絡(luò)就要在每次迭代都去學(xué)習(xí)適應(yīng)不同的分布,這樣將會大大降低網(wǎng)絡(luò)的訓(xùn)練速度,這也正是為什么我們需要對數(shù)據(jù)都要做一個歸一化預(yù)處理的原因。
深度網(wǎng)絡(luò)的訓(xùn)練是復(fù)雜的過程,只要網(wǎng)絡(luò)的前面幾層發(fā)生微小的改變,那么后面幾層就會被累積放大下去。一旦網(wǎng)絡(luò)某一層的輸入數(shù)據(jù)的分布發(fā)生改變,那么這一層網(wǎng)絡(luò)就需要去適應(yīng)學(xué)習(xí)這個新的數(shù)據(jù)分布,所以如果訓(xùn)練過程中,訓(xùn)練數(shù)據(jù)的分布一直在發(fā)生變化,那么將會影響網(wǎng)絡(luò)的訓(xùn)練速度?!?/p>
LRN的公式

公式的解釋
首先這個公式中的a表示卷積層(包括卷積操作和池化操作)后的輸出結(jié)果,這個輸出結(jié)果的結(jié)構(gòu)是一個四維數(shù)組[batch,height,width,channel],
【batch:批次數(shù)(每一批為一張圖片)
height:圖片高度,
width:圖片寬度,
channel:通道數(shù)可以理解成一批圖片中的某一個圖片經(jīng)過卷積操作后輸出的神經(jīng)元個數(shù)(或是理解成處理后的圖片深度)。】
ai(x,y)表示在這個輸出結(jié)構(gòu)中的一個位置[a,b,c,d],可以理解成在某一張圖中的某一個通道下的某個高度和某個寬度位置的點,即第a張圖的第d個通道下的高度為b寬度為c的點。
a,n/2,k,α,β分別表示函數(shù)中的input,depth_radius,bias,alpha,beta,其中n/2,k,α,β都是自定義的,特別注意一下∑疊加的方向是沿著通道方向的,即每個點值的平方和是沿著a中的第3維channel方向的,也就是一個點同方向的前面n/2個通道(最小為第0個通道)和后n/2個通道(最大為第d-1個通道)的點的平方和(共n+1個點)。而函數(shù)的英文注解中也說明了把input當(dāng)成是d個3維的矩陣,說白了就是把input的通道數(shù)當(dāng)作3維矩陣的個數(shù),疊加的方向也是在通道方向。
公式看上去比較復(fù)雜,但理解起來并不難。
i表示第i個核在位置(x,y)運用激活函數(shù)ReLU后的輸出,n是同一位置上臨近的kernal map的數(shù)目,N是kernal的總數(shù)。
參數(shù)K,n,alpha,belta都是超參數(shù)
一般設(shè)置k=2,n=5,alpha=1Xe-4,beta=0.75。
來個示意圖:
補充一下代碼:
import tensorflow as tf
import numpy as np
x = np.array([i for i in range(1,33)]).reshape([2,2,2,4])
y = tf.nn.lrn(input=x,depth_radius=2,bias=0,alpha=1,beta=1)
with tf.Session() as sess:
print(x)
print('#############')
print(y.eval())
結(jié)果:

結(jié)果解釋:

具體參考(https://blog.csdn.net/yangdashi888/article/details/77918311)
參考資料(https://blog.csdn.net/hduxiejun/article/details/70570086)
今天又是一個合格的搬運工啦
Ending~
提前的過年愉快!
諸事順利鴨!

