吳恩達深度學習筆記(Dropout正則化)

2021-09-29 10:58:49 字數 1818 閱讀 5769

1.dropout概念

dropout作為一種預防cnn過擬合的正則化方法被hinton等人在2023年的經典**《imagenet classification with deep convolutional》中提出。dropout的原理很簡單:在一次訓練時的迭代中,對每一層中的神經元(總數為n)以概率p隨機剔除,用餘下的(1-p)×n個神經元所構成的網路來訓練本次迭代中的資料(batchsize個樣本)。

關於dropout能夠較好減輕cnn過擬合的原因,看了一些**和部落格,目前有多種不同的解釋,大致整理如下。

在設計網路時,設定的每層神經元代表乙個學習到的中間特徵(即幾個權值的組合),網路所有神經元共同作用來表徵輸入資料的特定屬性(如影象分類中,表徵所屬類別)。當相對於網路的複雜程度(即網路的表達能力、擬合能力)而言資料量過小時,出現過擬合,顯然這時各神經元表示的特徵相互之間存在許多重複和冗餘。

dropout的直接作用是減少中間特徵的數量,從而減少冗餘,即增加每層各個特徵之間的正交性(資料表徵的稀疏性觀點也恰好支援此解釋)。

解釋到這裡,可能會問:要減少特徵冗餘,設計網路時直接減少神經元的數量就可以了,為什麼要有dropout?

針對乙個任務和擁有的資料集,一開始無法知道多大的網路才能充分地學習到我們需要資料特徵,考慮到通常網路越複雜對訓練資料的擬合效果越好(不代表泛化效能越好),因此一般都會設計乙個較大的通用網路來訓練。這樣一來,神經元數量就事先確定了,要想在出現過擬合時減少冗餘、盡可能地增加特徵正交性,當然可以嘗試簡化網路,但這樣可能會明顯降低網路擬合能力(而且簡化網路並不能直接增加特徵間的正交性)。乙個折中的辦法就是dropout,由於隨機性,使每一次迭代訓練時,整體來看都在更新不同的一些引數(因此這也可以看做是進行了資料擴增),使得各個特徵(權值)不用每一次迭代時都一起更新、互相產生關聯和影響,這樣也就弱化了各個特徵之間由於資料量太小導致產生的過多的相互作用,緩解了過擬合。

dropout帶來的缺點是可能減慢收斂速度:由於每次迭代只有一部分引數更新,可能導致梯度下降變慢。

原理簡介:

在沒有dropout時,正向傳播如下:

加入dropout後:

測試時,需要每個權值乘以p:

#dropout函式實現  

def dropout(x, level): # level為神經元丟棄的概率值,在0-1之間

if level < 0. or level >= 1:

raise exception('dropout level must be in interval [0, 1[.')

retain_prob = 1. - level

# 利用binomial函式,生成與x一樣的維數向量。

# 神經元x保留的概率為p,n表示每個神經元參與隨機實驗的次數,通常為1,。

# size是神經元總數。

sample=np.random.binomial(n=1,p=retain_prob,size=x.shape)

# 生成乙個0、1分布的向量,0表示該神經元被丟棄

# print sample

x *=sample

# print x

x /= retain_prob

return x

吳恩達深度學習筆記

2.02 紅色為小標題,藍色比較重要 第四講第二週 4.2.1 為什麼要進行例項 4.2.2 經典網路 lenet 5網路當時還沒有padding,所以在卷積過程當中越來越小 也沒有relu函式,當時這個例子用的是sigmoid函式。超級引數不是很多。這個典型的網路有padding,使用的是relu...

吳恩達深度學習筆記

目錄導數的細節 向量化python中的廣播 第二部分深度學習內容 吳恩達講深度學習 1.資料量更大 2.演算法越來越優 3.業務場景越來越多樣化 4.學術界or工業界越來越卷 私以為 邏輯回歸是最簡單的二分類模型,也可以說是後續深度神經網路的基礎框架.達叔的演算法知識第一課.邏輯回歸的引數是w和b,...

吳恩達 深度學習 學習筆記

第一周 卷積神經網路 第二週 深度卷積網路 例項 第三週 目標檢測 首先我們來看一下普通的滑動視窗,首先給一張14 14 3的影象用16個5 5 3過濾器處理之後變成10 10 16的特徵圖,經過2 2的池化操作後變成 5 5 16 的特徵圖,然後新增乙個連線400個單元的全連線層,再新增乙個全連線...