深度學習中的網絡設計技術(一) ——理論概述

一、網絡設計

(1) 網路設計要點

網絡設計考慮重點:1. 精度 2.容量 3. 效率
精度:網絡預測樣本的精度(TP / (TP +FP))
容量:容納數據量的多少,神經元越多,容量越大。
效率:網絡運行的效率,這是一個很重要的指標。

總結:層次要深,信息要充分融合,計算量要足夠小。

(2)、網絡計算成本

在這裏插入圖片描述

H x W 表示輸出特徵圖的空間大小,N代表輸入通道數,K x K 代表卷積核的大小,M代表輸出通道數,那麼標準卷積的計算成本就變成了H * W * N * K * K * M
這裏重要的一點就是,標準卷積的計算成本與以下因素成比例:
(1) 輸出特徵圖的空間大小 H * W
(2) 卷積核的大小 K * K
(3)輸入通道和輸出通道的數量N x M

從以上幾個因素對網絡的性能進行改進。

(3) 高效的卷積網絡

高效的網絡應該具備以下特點:

  1. 參數量小,佔用內存低
  2. 效率高
  3. 計算量低
  4. 並行化程度高
  5. 性能與大的網絡模型相當

二、網絡設計技術

(1) 網絡深度的設計

爲什麼加深網絡可以提升性能?
答:1. 更深的網絡模型具有更好的非線性表達能力。2. 網絡更深每一層要做的事情更加簡單,各個深度的網絡各司其職。

具體設計怎樣的深度?
答:一般常見的深度是5~8層,不超過30層。

加深網絡容易出現的問題?
答:

  1. 達到一定深度後性能反而下降,難以優化。
  2. 更加容易過擬合。
  3. PLD (processing level deprivation )現象,網絡無法學到簡單但是必要的函數來描述數據
  4. PLS (processing level saturation)現象,網絡的淺層飽和,無法發揮網絡的性能。
(2) 網絡寬度的設計

寬度:一般都指輸出的通道數。

網絡寬度變大有什麼作用?
答:網絡寬度變大會提取更加豐富的不同顏色和紋理信息。如:AlexNet 第一個卷積層輸出96個通道,使它提取更加豐富的特徵信息。

一般網絡寬度怎麼設置?
答: 1. 第一層輸出通道32 即可,此後逐漸增加,計算量隨通道數的增加爲O(N ^2)。 但提高網絡寬度可以提高性能,在達到一定臨界點後飽和。

網絡寬度設計的原則?
答:

  1. 主流模型第一個卷積層寬度不超過64,加寬後參數的增長量比較塊。
  2. 增加網絡寬度比增加網絡深度更有利於性能的提升,但是計算量也增加的較快。
  3. 多使用1 * 1 卷積、分組卷積、 跨層連接等技術。
(3) Dropout 和 BN 設計
  1. Dropout基本結構

它的主要思想就是:在訓練神經網絡的每一輪迭代中,隨機地關閉一些神經元,以此降低神經網絡的複雜程度
Dropout可以有效的緩解過擬合的發生,在一定程度上達到正則化的效果,它能夠提高模型的泛化能力。
在這裏插入圖片描述對於一個有n個節點的神經網絡,有了dropout後,就可以看作是2^n個模型的集合了,消除或者減弱了神經元節點間的聯合,降低了網絡對單個神經元的依賴,從而增強泛化能力。

  1. Dropout的優點
  1. 使用dropout正則化的神經網絡,不會過分依賴於某個或某些特徵,使得權重分散。因爲在每一輪迭代中隱藏層的任何一個結點都有可能被刪除,那麼原本屬於它的權重就會被分配到其他結點上,多次迭代平均下來,就能降低對某個特徵或者是某個結點的依賴了。
  2. 緩解Relu的dead issue 。dead issue 是指:一個非常大的梯度流過一個 ReLU 神經元,更新過參數之後,這個神經元再也不會對任何數據有激活現象了,那麼這個神經元的梯度就永遠都會是 0.
  1. Dropout 使用的注意事項
  1. Dropout降低了模型的性能,所以對於原本需要容量爲N的網絡才能解決的問題,現在需要N/p, p表示保留該節點的概率,這個概率一般是0.5~0.9之間,在測試的時候需要乘以p。
  2. Dropout 相當於增加了噪聲,造成梯度的損失,所以需要更大的學習率和動量項,訓練更久才能收斂。
  1. BN 概述
    BN(Batch Normalization), 歸一化分佈,增強梯度有效性。
    在這裏插入圖片描述
  1. Batch Normalization的作用是他適用的歸一化過程不只是輸入層,甚至同樣適用於神經網絡的深度隱藏層。
  2. 在用於隱藏層時,我們也許不想隱藏單元值必須是平均值0和方差1(比如使用sigmoid函數的時候)。
  3. 有了γ和β兩個參數後,我們可以確保所有Z(i)的值是我們想賦予的任意值(均值和方差由兩個參數γ和β控制)。
  4. 它的真正作用是保證隱藏的單元均已使用均值和方差標準化(即:Z(i)有固定的均值和方差)
  1. BN 的優點
  1. 調整了數據的分佈,不考慮激活函數,它讓每一層的輸出歸一化到均值爲0,方差爲1的分佈,這保證了梯度的有效性,減輕了對參數初始化的依賴。
  2. 訓練更快,可以使用更高的學習率。
  3. 使得損失平面更加平滑。
  1. BN 使用注意事項
  1. 小的Batchsize不穩定
  2. 嘗試Layer Normalization、group Normalization、instance Normalization等變種。
(4) 卷積核、步長、池化的設計

1、 卷積核設計

大型卷積核比較少用,3 * 3 卷積核用的較多。
爲什麼要使用3 * 3 卷積核:1. 使用多個較小的卷積核代替大的卷積核,使得網絡層數增加,所以非線性表達能力增強。2. 小的卷積核使得網絡參數量減少,更加容易訓練。

2、步長設計

  1. 保證輸出分辨率的情況下,分類任務中網絡低層的分辨率很重要,對於目標檢測/圖像分割等任務,需要同時保證最後特在圖的分辨率。所以一般第一個卷積層步長不超過2,如果步長過大就會影響圖片的分辨率,進而影響後續特徵的提取。
  2. 建議: a. 使用帶步長的卷積代替池化 b. 前兩個卷積層不要超過2倍的下采樣率。
  3. 高性能網絡可以採用大卷積核+大采樣率。

3、池化設計

  1. 剛開始訓練網絡的時候,池化確實有利於提高抗變形能力,不管池不池化,模型最後學習完都能獲得同樣的抗變形能力。
  2. 初始化的時候不同的池化方法是有差異的,但是學習完之後不管什麼池化方法效果都差不多。

(5)卷積方式的使用和設計

  1. 卷積拆分(分組卷積)
  2. 通道補償和特徵重用:
    a. 提升單層通道利用率:特徵通道補償
    b. 提升多層通道利用率:密集連接網絡
  3. 分數 + 整數的分組卷積

(6) 剪枝

剪枝發生在模型訓練完之後。它的步驟:

  1. 訓練一個網絡
  2. 刪除權重小於一定閾值的連接,得到稀疏網絡。
  3. 對稀疏網絡再訓練

(7) 量化

量化:從高精度(位寬)轉化成低精度(位寬),如32位浮點數到8位。
量化分爲:權重量化 輸入量化 激活值量化 誤差量化
量化優點:a. 更小的模型尺寸 b.更低的內存和緩存 c.更快的計算d. 更低的功耗

(8) 通道混洗

import torch
x = torch.randn(1, 6, 6, 6)
x = x.reshape(1, 2, 3, 6, 6)# 分組,每組3個通道
x = x.permate(0, 2, 1, 3, 4)# 交換軸
x = x.reshape(1, 6, 6, 6)# 重新變爲1,6,6,6
print(x)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章