【連載】深度學(xué)習(xí)筆記5:正則化與dropout

????? 在筆記 4 中敢茁,詳細(xì)闡述了機(jī)器學(xué)習(xí)中利用正則化防止過擬合的基本方法格遭,對 L1 和 L2 范數(shù)進(jìn)行了通俗的解釋。為了防止深度神經(jīng)網(wǎng)絡(luò)出現(xiàn)過擬合夺饲,除了給損失函數(shù)加上 L2 正則化項(xiàng)之外健芭,還有一個很著名的方法——dropout.

????? 廢話少說县钥,咱們單刀直入正題。究竟啥是 dropout ? dropout 是指在神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過程中慈迈,對所有神經(jīng)元按照一定的概率進(jìn)行消除的處理方式魁蒜。在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時,dropout 能夠在很大程度上簡化神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)吩翻,防止神經(jīng)網(wǎng)絡(luò)過擬合兜看。所以,從本質(zhì)上而言狭瞎,dropout 也是一種神經(jīng)網(wǎng)絡(luò)的正則化方法细移。

????? 假設(shè)我們要訓(xùn)練了一個 4 層(3個隱層)的神經(jīng)網(wǎng)絡(luò),該神經(jīng)網(wǎng)絡(luò)存在著過擬合熊锭。于是我們決定使用 dropout 方法來處理弧轧,dropout 為該網(wǎng)絡(luò)每一層的神經(jīng)元設(shè)定一個失活(drop)概率雪侥,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,我們會丟棄一些神經(jīng)元節(jié)點(diǎn)精绎,在網(wǎng)絡(luò)圖上則表示為該神經(jīng)元節(jié)點(diǎn)的進(jìn)出連線被刪除速缨。最后我們會得到一個神經(jīng)元更少、模型相對簡單的神經(jīng)網(wǎng)絡(luò)代乃,這樣一來原先的過擬合情況就會大大的得到緩解旬牲。這樣說似乎并沒有將 dropout 正則化原理解釋清楚,我們繼續(xù)深究一下:為什么 dropout 可以可以通過正則化發(fā)揮防止過擬合的功能搁吓?

????? 因?yàn)?dropout 可以隨時隨機(jī)的丟棄任何一個神經(jīng)元原茅,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練結(jié)果不會依賴于任何一個輸入特征,每一個神經(jīng)元都以這種方式進(jìn)行傳播堕仔,并為神經(jīng)元的所有輸入增加一點(diǎn)權(quán)重擂橘,dropout 通過傳播所有權(quán)重產(chǎn)生類似于 L2 正則化收縮權(quán)重的平方范數(shù)的效果,這樣的權(quán)重壓縮類似于 L2 正則化的權(quán)值衰減摩骨,這種外層的正則化起到了防止過擬合的作用通贞。

????? 所以說,總體而言恼五,dropout 的功能類似于 L2 正則化昌罩,但又有所區(qū)別。另外需要注意的一點(diǎn)是唤冈,對于一個多層的神經(jīng)網(wǎng)絡(luò),我們的 dropout 某層神經(jīng)元的概率并不是一刀切的银伟。對于不同神經(jīng)元個數(shù)的神經(jīng)網(wǎng)絡(luò)層你虹,我們可以設(shè)置不同的失活或者保留概率,對于含有較多權(quán)值的層彤避,我們可以選擇設(shè)置較大的失活概率(即較小的保留概率)傅物。所以,總結(jié)來說就是如果你擔(dān)心某些層所含神經(jīng)元較多或者比其他層更容易發(fā)生過擬合琉预,我們可以將該層的失活概率設(shè)置的更高一些董饰。

????? 說了這么多,總算大致把 dropout 說明白了圆米。那 dropout 這種操作在實(shí)際的 python 編程中該如何實(shí)現(xiàn)呢卒暂?以一個三層的神經(jīng)網(wǎng)絡(luò)為例,首先我們需要定義一個 3 層的 dropout 向量娄帖,然后將其與保留概率 keep-prob 進(jìn)行比較生成一個布爾值向量也祠,再將其與該層的神經(jīng)元激活輸出值進(jìn)行乘積運(yùn)算,最后擴(kuò)展上一步的計算結(jié)果近速,將其除以 keep-prob 即可诈嘿。但在實(shí)際編程中就沒說的這么容易了堪旧,我們需要對整個神經(jīng)網(wǎng)絡(luò)的計算過程進(jìn)行重新定義,包括前向傳播和反向傳播的計算定義奖亚。

????? 含 dropout 的前向計算定義如下:

defforward_propagation_with_dropout(X, parameters, keep_prob =0.5): ? ?np.random.seed(1)# retrieve parameters

W1 = parameters["W1"] ? ?

b1 = parameters["b1"] ? ?

W2 = parameters["W2"] ? ?

b2 = parameters["b2"] ? ?

W3 = parameters["W3"] ? ?

b3 = parameters["b3"]# LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID

Z1 = np.dot(W1, X) + b1 ? ?

A1 = relu(Z1) ? ?

D1 = np.random.rand(A1.shape[0], A1.shape[1]) ? ? ? ?

D1 = D1 < keep_prob ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?

A1 = np.multiply(D1, A1) ? ? ? ? ? ? ? ? ? ? ? ?? ? ?

A1 = A1 / keep_prob ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?

Z2 = np.dot(W2, A1) + b2 ? ?

A2 = relu(Z2) ? ?

D2 = np.random.rand(A2.shape[0], A2.shape[1]) ? ?? ? ?

D2 = D2 < keep_prob ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??

?A2 = np.multiply(D2, A2) ? ? ? ? ? ? ? ? ? ? ?? ? ?

A2 = A2 / keep_prob ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?

Z3 = np.dot(W3, A2) + b3 ? ?

A3 = sigmoid(Z3) ? ?

cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)

returnA3, cache

????? 以上代碼基本體現(xiàn)了 dropout 的實(shí)現(xiàn)的四步流程淳梦。

????? 含 dropout 的反向傳播計算定義如下:

def backward_propagation_with_dropout(X, Y, cache, keep_prob):

? ?m = X.shape[1]

? ?(Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3) = cache

? ?dZ3 = A3 - Y

? ?dW3 = 1./m * np.dot(dZ3, A2.T)

? ?db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)

? ?dA2 = np.dot(W3.T, dZ3)

? ?dA2 = np.multiply(dA2, D2) ?

? ?dA2 = dA2 / keep_prob ? ? ? ?

? ?dZ2 = np.multiply(dA2, np.int64(A2 > 0))

? ?dW2 = 1./m * np.dot(dZ2, A1.T)

? ?db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)

? ?dA1 = np.dot(W2.T, dZ2)

? ?dA1 = np.multiply(dA1, D1) ?

? ?dA1 = dA1 / keep_prob ? ? ? ? ?

? ?dZ1 = np.multiply(dA1, np.int64(A1 > 0))

? ?dW1 = 1./m * np.dot(dZ1, X.T)

? ?db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)

? ?gradients = {"dZ3": dZ3, "dW3": dW3, "db3": db3,"dA2": dA2, ? ? ? ? ? ? ? ? "dZ2": dZ2, "dW2": dW2, "db2": db2, "dA1": dA1,

? ? ? ? ? ? ? ? "dZ1": dZ1, "dW1": dW1, "db1": db1} ? ?

? ?return gradients

在定義反向傳播計算函數(shù)時,我們必須丟棄和執(zhí)行前向傳播時一樣的神經(jīng)元昔字。

最后帶有 dropout 的分類效果如下所示:

????? 所以爆袍,總結(jié)而言,dropout 就是在正常的神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上給每一層的每一個神經(jīng)元加了一道概率流程來隨機(jī)丟棄某些神經(jīng)元以達(dá)到防止過擬合的目的李滴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末螃宙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子所坯,更是在濱河造成了極大的恐慌谆扎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芹助,死亡現(xiàn)場離奇詭異堂湖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)状土,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門无蜂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒙谓,你說我怎么就攤上這事斥季。” “怎么了累驮?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵酣倾,是天一觀的道長。 經(jīng)常有香客問我谤专,道長躁锡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任置侍,我火速辦了婚禮映之,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜡坊。我一直安慰自己杠输,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布秕衙。 她就那樣靜靜地躺著抬伺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灾梦。 梳的紋絲不亂的頭發(fā)上峡钓,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天妓笙,我揣著相機(jī)與錄音,去河邊找鬼能岩。 笑死寞宫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拉鹃。 我是一名探鬼主播辈赋,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膏燕!你這毒婦竟也來了钥屈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤坝辫,失蹤者是張志新(化名)和其女友劉穎篷就,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體近忙,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竭业,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了及舍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未辆。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锯玛,靈堂內(nèi)的尸體忽然破棺而出咐柜,到底是詐尸還是另有隱情,我是刑警寧澤攘残,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布拙友,位于F島的核電站,受9級特大地震影響肯腕,放射性物質(zhì)發(fā)生泄漏献宫。R本人自食惡果不足惜钥平,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一实撒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涉瘾,春花似錦知态、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秘蛇,卻和暖如春其做,著一層夾襖步出監(jiān)牢的瞬間顶考,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工妖泄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹沿,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓蹈胡,卻偏偏與公主長得像渊季,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子罚渐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容