1. 程式人生 > >關於深度學習的小知識點

關於深度學習的小知識點

正則化 oftp speech 連接 尺寸 圖片 整體 map 多層

  Q:CNN最成功的應用是在CV,那為什麽NLP和Speech的很多問題也可以用CNN解出來?為什麽AlphaGo裏也用了CNN?這幾個不相關的問題的相似性在哪裏?CNN通過什麽手段抓住了這個共性?

  以上幾個不相關問題的相關性在於,都存在局部與整體的關系,由低層次的特征經過組合,組成高層次的特征,並且得到不同特征之間的空間相關性。

  CNN抓住此共性的手段主要有四個:局部連接/權值共享/池化操作/多層次結構。

  局部連接使網絡可以提取數據的局部特征;權值共享大大降低了網絡的訓練難度,一個Filter只提取一個特征,在整個圖片(或者語音/文本) 中進行卷積;池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特征組合成為較高層次的特征,從而對整個圖片進行表示。

  卷積神經網絡有三個結構上的特性:局部連接,權重共享以及空間或時間上的次采樣。這些特性使得卷積神經網絡具有一定程度上的平移、縮放和扭曲不變性。

  

  

  Q:如何防止過擬合問題?

  1、 從簡單模型開始嘗試;

  2、 進行數據清洗(去除掉噪聲比較大的數據);

  3、 數據集擴增(利用已有資料人工生成一些相似數據);

  4、 加正則項;

  5、 做交叉驗證;

  6、 如果是深度學習,可以使用dropout層;

  7、提前終止(當驗證集上的效果變差的時候);

  

  Q:如何解決欠擬合:

  1、 添加其他特征項,有時候我們模型出現欠擬合的時候是因為特征項不夠導致的,可以添加其他特征項來很好地解決。

  2、 添加多項式特征,這個在機器學習算法裏面用的很普遍,例如將線性模型通過添加二次項或者三次項使模型泛化能力更強。

  3、 減少正則化參數,正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化參數。

  

  Q:什麽造成梯度消失?

  梯度消失會造成權值更新緩慢,模型訓練難度增加。造成梯度消失的一個原因是,許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大範圍的定義域內梯度為0。造成學習停止。

  減輕梯度消失問題的一個方法是使用線性激活函數(比如rectifier函數,即ReLu激活函數)或近似線性函數(比如softplus函數)。這樣,激活函數的導數為1,誤差可以很好地傳播,訓練速度得到了很大的提高。

  

  Q:L1範數和L2範數的區別:

  L1範數是指向量中各個元素絕對值之和,L1範數會使權值稀疏。

  L2範數是指向量各元素的平方和然後求平方根。L2範數在回歸裏面,有人把有它的回歸叫“嶺回歸”(Ridge Regression),有人也叫它“權值衰減“weight decay”。我們讓L2範數的規則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0。

  

  卷積神經網絡的一些準則:

  1、 避免表達瓶頸,特別是在網絡靠前的地方。信息流前向傳播過程中顯然不能經過高度壓縮的層,即表達瓶頸。從input到output,feature map的寬和高基本都會逐漸變小。比如一開始就來個kernel=7,stride=5,這樣顯然不合適。另外輸出的維度channel,一般來說會逐漸增多(每層的num_output),否則網絡會很難訓練。(特征維度並不代表信息的多少,只是作為一種估計的手段)

  2、 高維特征更易處理。高維特征更易區分,會加快訓練。

  3、 可以在低維嵌入上進行空間匯聚而無需擔心丟失很多信息。比如在進行3*3卷積之前,可以對輸入先進行降維而不會產生嚴重的後果。假設信息可以被簡單壓縮,那麽訓練就會加快。

  這些並不能直接用來提高網絡質量,而僅用來在大環境下指導。

  大尺寸的卷積核可以帶來更大的感受野,但也意味著更多的參數,比如5*5卷積核的參數是3*3卷積核的25/9=2.78倍。為此,可以用2個連續的3*3卷積層(stride=1)組成的小網絡來代替單個5*5卷積層(保持感受野範圍的同時又減少參數量)

關於深度學習的小知識點