如何求導 洛必達法則如何求導

雷鋒網按:本文作者章華燕,金橋智慧科技算法工程師,原文載于作者,雷鋒網已獲授權 。
本文將主要介紹 8 種深度神經網絡實現細節的技巧或tricks,包括:數據增廣、圖像預處理、網絡初始化、訓練過程中的技巧、激活函數的選擇、不同正則化方法、來自于數據的洞察、集成多個深度網絡的方法等 。
1. 數據增廣
在不改變圖像類別的情況下,增加數據量,能提高模型的泛化能力 。
自然圖像的數據增廣方式包括很多,如常用的水平翻轉(horizontally flipping),一定程度的位移或者裁剪和顏色抖動(color jittering) 。此外還可以嘗試多種操作的組合, 例如同時做旋轉和隨機尺度變換,此外還可以把每個patch中所有像素在HSV顏色空間中的飽和度和明度提升0.25-4次冪方,乘以0.7-1.4之間的一個因子,再加一個-0.1-0.1之間的值 。同樣你可以在色調通道(H)對每張圖片或patch的所有像素增加一個-0.1~0.1之間的值 。
2. 預處理2.1 較簡單的預處理方法:
零均值化
標準化
2.1.1 為什么要零均值化
數據有過大的均值可能導致參數的梯度過大,如果有后續的處理,可能要求數據零均值,比如PCA 。零均值化并沒有消除像素之間的相對差異,人們對圖像信息的攝取通常來自于像素之間的相對色差,而不是像素值的高低 。
2.1.2 為什么要歸一化
歸一化是為了讓不同維度的數據具有相同的分布 。假如二維數據(X1,X2)兩個維度都服從均值為零的正態分布,但是X1方差為100,X2方差為1 。那么對(X1,X2)進行隨機采樣在二維坐標系中繪制的圖像,應該是狹長的橢圓形 。
對這些數據做特征提取會用到以下形式的表達式:
S = w1*x1 + w2*x2 + b;
那么參數W1,W2的梯度為:
dS / dw1 = x1 ; dS / dw2 = x2
由于x1與x2在分布規模上的巨大差異,w1與w2的導數也會差異巨大 。此時繪制目標函數(不是S)的曲面圖,就像一個深邃的峽谷,沿著峽谷方向變化的是w2,坡度很小;在峽谷垂直方向變化的是w1,坡度非常陡峭,如圖1,而我們期望的目標函數是圖2這樣的 。
目標函數是非常難以優化的,因為w1和w2的梯度差異太大,所以在兩個維度上需要不同的迭代方案 。但在實際操作中,為了方便,我們通常為所有維度設置相同的步長,隨著迭代的進行,步長的縮減在不同維度也是同步的 。這就要求w不同緯度的分布規模大致相同,而這一切都始于數據的歸一化 。
展開全文
2.1.3 實現代碼
X-=numpy.mean(X,axis=0) # 即X的每一列都減去該列的均值

如何求導 洛必達法則如何求導

文章插圖
X-=numpy.mean(X,axis=0) # 即X的每一列都減去該列的均值
注:對于灰度圖像,零均值化也可以減去整張圖片的均值:X-=numpy.mean(X)
X/=numpy.std(X,axis=0) # 數據歸一化 。
X/=numpy.std(X,axis=0) # 數據歸一化 。
X是輸入數據,(圖片數目X圖片維度) 。另一種標準化(normalize)方式是標準化每個維度,保證每個維度的較大值和較小值是-1和1 。這種預處理的方式只在輸入的各個特征的尺度或者單位不同時才有意義 。以圖片像素作為輸入為例子,所有像素值尺度都在0-255這個尺度之間,所以沒必要嚴格的執行這種預處理操作 。在自然圖像上進行訓練時,可以不進行歸一化操作,因為理論上圖像任一部分的統計性質都應該和其他部分相同,圖像的這種特性被稱作平穩性(stationarity)
2.2 白化(Whitening)
白化相當于在零均值化和歸一化操作之間插入一個旋轉操作,將數據投影到主軸上 。一張圖片經過白化后,可以認為每個像素之間是統計獨立的 。然而白化很少在卷積神經網絡中使用,可能原因是圖像信息本來就是依靠像素之間的相對差異來體現的,白化讓像素間去相關,讓這種差異變得不確定,損失了信息 。