一,數(shù)學(xué)基礎(chǔ)1.1,概率密度函數(shù)隨機(jī)變量(random variable)是可以隨機(jī)地取不同值的變量,。隨機(jī)變量可以是離散的或者連續(xù)的,。簡單起見,本文用大寫字母X 表示隨機(jī)變量,,小寫字母x 表示隨機(jī)變量能夠取到的值,。例如,x1 和x2? 都是隨機(jī)變量X 可能的取值,。隨機(jī)變量必須伴隨著一個(gè)概率分布來指定每個(gè)狀態(tài)的可能性,。 概率分布(probability distribution)用來描述隨機(jī)變量或一簇隨機(jī)變量在每一個(gè)可能取到的狀態(tài)的可能性大小。我們描述概率分布的方式取決于隨機(jī)變量是離散的還是連續(xù)的,。 當(dāng)我們研究的對象是連續(xù)型隨機(jī)變量時(shí),,我們用概率密度函數(shù)(probability density function, PDF)而不是概率質(zhì)量函數(shù)來描述它的概率分布。
1.2,正態(tài)分布
實(shí)數(shù)上最常用的分布就是正態(tài)分布(normal distribution),,也稱為高斯分布 (Gaussian distribution),。 如果隨機(jī)變量X ,服從位置參數(shù)為μ,、尺度參數(shù)為σ 的概率分布,,且其概率密度函數(shù)為: 則這個(gè)隨機(jī)變量就稱為正態(tài)隨機(jī)變量,正態(tài)隨機(jī)變量服從的概率分布就稱為正態(tài)分布,,記作: 如果位置參數(shù)μ=0,,尺度參數(shù)σ=1 時(shí),則稱為標(biāo)準(zhǔn)正態(tài)分布,,記作: 此時(shí),,概率密度函數(shù)公式簡化為: 正太分布的數(shù)學(xué)期望值或期望值μ 等于位置參數(shù),決定了分布的位置;其方差σ2 的開平方或標(biāo)準(zhǔn)差σ 等于尺度參數(shù),,決定了分布的幅度,。正太分布的概率密度函數(shù)曲線呈鐘形,常稱之為鐘形曲線,,如下圖所示: 可視化正態(tài)分布,,可直接通過 np.random.normal 函數(shù)生成指定均值和標(biāo)準(zhǔn)差的正態(tài)分布隨機(jī)數(shù),然后基于 matplotlib + seaborn 庫 kdeplot函數(shù)繪制概率密度曲線,。示例代碼如下所示: import seaborn as snsx1 = np.random.normal(0, 1, 100)x2 = np.random.normal(0, 1.5, 100) x3 = np.random.normal(2, 1.5, 100) plt.figure(dpi = 200)sns.kdeplot(x1, label='μ=0, σ=1')sns.kdeplot(x2, label='μ=0, σ=1.5')sns.kdeplot(x3, label='μ=2, σ=2.5')#顯示圖例plt.legend()#添加標(biāo)題plt.title('Normal distribution')plt.show() 以上代碼直接運(yùn)行后,,輸出結(jié)果如下圖: 當(dāng)然也可以自己實(shí)現(xiàn)正太分布的概率密度函數(shù),代碼和程序輸出結(jié)果如下:
二,,背景訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的復(fù)雜性在于,,因?yàn)榍懊娴膶拥膮?shù)會發(fā)生變化導(dǎo)致每層輸入的分布在訓(xùn)練過程中會發(fā)生變化。這又導(dǎo)致模型需要需要較低的學(xué)習(xí)率和非常謹(jǐn)慎的參數(shù)初始化策略,,從而減慢了訓(xùn)練速度,并且具有飽和非線性的模型訓(xùn)練起來也非常困難,。 網(wǎng)絡(luò)層輸入數(shù)據(jù)分布發(fā)生變化的這種現(xiàn)象稱為內(nèi)部協(xié)變量轉(zhuǎn)移,BN 就是來解決這個(gè)問題,。 2.1,,如何理解 Internal Covariate Shift在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過程中,由于網(wǎng)絡(luò)中參數(shù)變化而引起網(wǎng)絡(luò)中間層數(shù)據(jù)分布發(fā)生變化的這一過程被稱在論文中稱之為內(nèi)部協(xié)變量偏移(Internal Covariate Shift),。 那么,,為什么網(wǎng)絡(luò)中間層數(shù)據(jù)分布會發(fā)生變化呢? 在深度神經(jīng)網(wǎng)絡(luò)中,,我們可以將每一層視為對輸入的信號做了一次變換(暫時(shí)不考慮激活,,因?yàn)榧せ詈瘮?shù)不會改變輸入數(shù)據(jù)的分布): 其中W 和B 是模型學(xué)習(xí)的參數(shù),這個(gè)公式涵蓋了全連接層和卷積層,。 隨著 SGD 算法更新參數(shù),,和網(wǎng)絡(luò)的每一層的輸入數(shù)據(jù)經(jīng)過公式5的運(yùn)算后,其Z 的分布一直在變化,,因此網(wǎng)絡(luò)的每一層都需要不斷適應(yīng)新的分布,,這一過程就被叫做 Internal Covariate Shift。 而深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的復(fù)雜性在于每層的輸入受到前面所有層的參數(shù)的影響—因此當(dāng)網(wǎng)絡(luò)變得更深時(shí),,網(wǎng)絡(luò)參數(shù)的微小變化就會被放大,。 2.2,Internal Covariate Shift 帶來的問題
飽和問題和由此產(chǎn)生的梯度消失通常通過使用修正線性單元激活 更好的參數(shù)初始化方法和小的學(xué)習(xí)率來解決,。然而,如果我們能保證非線性輸入的分布在網(wǎng)絡(luò)訓(xùn)練時(shí)保持更穩(wěn)定,,那么優(yōu)化器將不太可能陷入飽和狀態(tài),,進(jìn)而訓(xùn)練也將加速。 2.3,,減少 Internal Covariate Shift 的一些嘗試
三,,批量歸一化(BN)3.1,BN 的前向計(jì)算論文中給出的 Batch Normalizing Transform 算法計(jì)算過程如下圖所示,。其中輸入是一個(gè)考慮一個(gè)大小為m 的小批量數(shù)據(jù)B,。 論文中的公式不太清晰,下面我給出更為清晰的 Batch Normalizing Transform 算法計(jì)算過程,。 設(shè)m 表示 batch_size 的大小,,n 表示 features 數(shù)量,即樣本特征值數(shù)量,。在訓(xùn)練過程中,,針對每一個(gè) batch 數(shù)據(jù),BN 過程進(jìn)行的操作是,,將這組數(shù)據(jù) normalization,,之后對其進(jìn)行線性變換,具體算法步驟如下: 以上公式乘法都為元素乘,,即 element wise 的乘法,。其中,,參數(shù)γ,β 是訓(xùn)練出來的,? 是為零防止σB2? 為0 ,,加的一個(gè)很小的數(shù)值,,通常為1e-5。公式各個(gè)符號解釋如下: 其中: 可以看出 BN 本質(zhì)上是做線性變換,。 3.2,,BN 層如何工作在論文中,訓(xùn)練一個(gè)帶 BN 層的網(wǎng)絡(luò),, BN 算法步驟如下圖所示: 在訓(xùn)練期間,,我們一次向網(wǎng)絡(luò)提供一小批數(shù)據(jù)。在前向傳播過程中,,網(wǎng)絡(luò)的每一層都處理該小批量數(shù)據(jù),。 BN 網(wǎng)絡(luò)層按如下方式執(zhí)行前向傳播計(jì)算: 注意,圖中計(jì)算均值與方差的無偏估計(jì)方法是吳恩達(dá)在 Coursera 上的 Deep Learning 課程上提出的方法:對 train 階段每個(gè) batch 計(jì)算的 mean/variance 采用指數(shù)加權(quán)平均來得到 test 階段 mean/variance 的估計(jì),。 在訓(xùn)練期間,,它只是計(jì)算此 EMA,但不對其執(zhí)行任何操作,。在訓(xùn)練結(jié)束時(shí),,它只是將該值保存為層狀態(tài)的一部分,以供在推理階段使用,。 如下圖可以展示BN 層的前向傳播計(jì)算過程數(shù)據(jù)的 shape ,紅色框出來的單個(gè)樣本都指代單個(gè)矩陣,,即運(yùn)算都是在單個(gè)矩陣運(yùn)算中計(jì)算的,。 BN 的反向傳播過程中,會更新 BN 層中的所有β 和γ 參數(shù),。 3.3,,訓(xùn)練和推理式的 BN 層批量歸一化(batch normalization)的“批量”兩個(gè)字,表示在模型的迭代訓(xùn)練過程中,,BN 首先計(jì)算小批量( mini-batch,,如 32)的均值和方差。但是,,在推理過程中,,我們只有一個(gè)樣本,而不是一個(gè)小批量,。在這種情況下,,我們該如何獲得均值和方差呢? 第一種方法是,,使用的均值和方差數(shù)據(jù)是在訓(xùn)練過程中樣本值的平均,,即: 這種做法會把所有訓(xùn)練批次的μ 和σ 都保存下來,然后在最后訓(xùn)練完成時(shí)(或做測試時(shí))做下平均。 第二種方法是使用類似動量的方法,,訓(xùn)練時(shí),,加權(quán)平均每個(gè)批次的值,權(quán)值α 可以為0.9: 推理或測試時(shí),,直接使用模型文件中保存的μmovi?? 和σmovi?? 的值即可,。 3.4,實(shí)驗(yàn)BN 在 ImageNet 分類數(shù)據(jù)集上實(shí)驗(yàn)結(jié)果是 SOTA 的,,如下表所示: 3.5,,BN 層的優(yōu)點(diǎn)
參考資料
|
|