- 給定卷積神經網絡輸入,卷積核大小,padding,步長,求輸出的shape?
-
各個激活函數的優缺點
-
Sigmod
-
-
優點
- 輸出值0-1(很重大的優點)
- 其餘的和其他衆多激活函數比起來,感覺沒有什麼優點,方便入門理解
-
缺點
- 容易梯度消失
- x的可變值區域太小,極其容易陷入級值的狀況(-0.9~0.9)
- 指數exp計算複雜
-
-
-
Tanh
-
-
優點
- 和sigmod比起來,是零均值化處理。(零均值化可以加快模型的收斂)
-
缺點
- 和sigmod一樣的缺點
-
-
-
Relu
-
-
優點
- 計算複雜度低(只有一個if>0判斷,大於0則激活值爲1),部分區域線性遞增,沒有冪運算與指數運算
-
缺點
- x小於0時無法產生激活值
- 訓練到後期可能權重參數更新太大
-
-
-
Leakly ReLu
-
-
優點
- 相對於relu來說,激活值必然可以產生
-
缺點
- Relu的其他缺點一概繼承下來了
-
-
-
ELU
-
-
優點
- 相對於Leaky relu來說,激活值更平滑
-
缺點
- 其他的Leaky relu的缺點一併繼承下來了。
-
-
-
-
如何選擇激活函數?
-
Relu-小心設置learning
rate(因爲x>0的情況下,導數均爲1),最好是設置一個比較小的值。
- 不要使用sigmod(缺點太多,計算複雜)
-
-
如何初始化CNN?(理論)
-
不要全部把超參數設置爲0(單層網絡可以)
- 容易梯度消失
-
-
如何初始化CNN?(實踐)
-
Xavier-tanh(不太適合relu)
- fan_in輸出通道數
-
Fan_out輸出通道數
- 代碼Np.randon.rand(fan_in,fan_out)/np.sqrt(fan_in/2)
-
-
如何分析初始化參數結果好壞?
-
查看初始化後各層的激活值分佈
- 是否在固定的,穩定的,同一個區間的均勻分佈
-
比較好的初始化結果
-
均值爲0,方差爲0.02
- 如tanh,relu函數
-
-
-
什麼叫梯度消失,梯度爆炸
-
當網絡層數過多時,前面層由於求導過程乘積運算,出現weight與bias變得異常大與異常小的情況
-
左下角的內容清楚的說明了梯度爆炸和梯度消失的場景
-
-
-
BN是什麼,爲什麼能提高收斂速度
-
批歸一化是什麼?
- 標準化處理,特徵縮放的一個方式,將數據規整到一定範圍內。
-
如上圖所示,BN步驟主要分爲4步:
- 求每一個訓練批次數據的均值
- 求每一個訓練批次數據的方差
- 使用求得的均值和方差對該批次的訓練數據做歸一化,獲得0-1分佈。其中εε是爲了避免除數爲0時所使用的微小正數。
- 尺度變換和偏移:將xixi乘以γγ調整數值大小,再加上ββ增加偏移後得到yiyi,這裏的γγ是尺度因子,ββ是平移因子。這一步是BN的精髓,由於歸一化後的xixi基本會被限制在正態分佈下,使得網絡的表達能力下降。爲解決該問題,我們引入兩個新的參數:γγ,ββ。 γγ和ββ是在訓練時網絡自己學習得到的。
-
-
爲什麼能提高收斂速度?
- 解決internal covariate shift問題。
- 特徵沒有消失,而是歸一到一定範圍內,加快學習速度
- 因爲最終都是映射到歸一化範圍內,所以前一層的權重調整對後一層的影響程度都會降低,不用重新適應新的分佈,從而讓模型學的更快,避免完全從頭學習
-
Tips
- BN不用於輸入層和輸出層(經驗論)
-
BN(實踐)
- 每次batch傳入時都做BN
-
各個優化器的優缺點
-
優化器分兩種
-
固定學習率的優化算法
-
SGD隨機梯度下降
-
優點
- 只隨機採樣一個樣本來計算梯度,加快學習效率,並且避免了普通GD一次性參數更新的壞處(導致模型無法收斂)
-
缺點
- 選擇合適的學習率較爲困難
-
-
Momentum動量
-
優點
- 動量梯度下降,動力火車,慣性火車,這一次梯度下降的值,會影響下一次梯度下降的值,相對於簡單的梯度下降來說,Momentum動量帶有延續性相對於簡單的梯度下降來說,
- 減少梯度震盪
-
缺點
- 和SGD一樣,選擇合適的學習率較爲困難
-
-
-
自適應學習率的優化算法
-
Adagrad
-
優點
- 更新參數時,會針對原梯度值乘上一個變量,即其所有梯度歷史平均值總和的平方根(如上圖)
- 這樣在訓練初期,分母較小,學習率較大,學習比較快,後期時,學習會逐漸減慢
-
缺點
- 從訓練開始就積累梯度方差會導致有效學習率過早和過量的減小
- 只能解決凸問題,當應用於非凸函數訓練神經網絡時,學習可能會到達一個局部是凸碗的區域
-
RMSProp
-
優點
- 能夠解決凸問題
- 由累計平方梯度變成和平均梯度
-
缺點
- 缺少Momentum動量元素
-
-
Adam(結合了動量和RMSProp,通用方案)
- 結合了Momentum和RMSProp的優點
-
-
-
- 手畫一下LSTM
-
梯度裁剪
介紹一下殘差網絡
- ResNet 基於VGG沒解決深層網絡下出現性能[梯度消失,導致學不到東西]與效率下降[反向傳播運算成本大]的問題,優化出來的一個新的神經網絡結構,如圖所示,兩條路一起走,最終線性激活輸入值f(x)+x,然後將f(x)+x傳遞給激活函數[假設爲relu]。那麼在反向傳播的時候,後面層的梯度更加“無損”的直接傳遞到前面層,前面層的參數因此也能繼續更新。
-
爲什麼殘差網絡會有效果?
□ 先驗證明《深層網絡效果會比淺層網絡好》
- 只要有理想的訓練方式,更深的網絡肯定會比較淺的網絡效果要好。證明過程也很簡單:假設在一種網絡A的後面添加幾層形成新的網絡B,如果增加的層級只是對A的輸出做了個恆等映射(identity mapping),即A的輸出經過新增的層級變成B的輸出後沒有發生變化,這樣網絡A和網絡B的錯誤率就是相等的,也就證明了加深後的網絡不會比加深前的網絡效果差。
- 當層數比較多時,容易導致模型學不到東西,甚至出現反效果,然而deep layers又確實是能使模型效果變好的,所以出現殘差網絡。
-
效率不影響,層數增加,可以低成本高效率的學到更多非線性的特徵。
解決梯度瀰漫問題
- 如上所說,關鍵點在於反向傳播的時候,梯度可以沿着shortcut無損進行回傳,避免梯度瀰漫問題。
-
解決模型退化問題
- 避免了過渡訓練後,導致模型準確率反而降低的情況。paper中稱爲degration。經過實驗後發現確實能解決這個問題。
- 本人對於這個問題的確切原因並不清楚,但是猜測這個原因很可能是由於梯度消失以及衆多其他原因所造成的。
-
Q:既然說中間層是不必要的,那麼爲什麼不直接把這些層去掉呢?可事實上,ResNet的結果比淺層網絡的結果好的多,這應該怎麼解釋呢?
加入中間層主要是爲了說明會產生退化的效果。 ResNet效果好是因爲解決了退化問題,,梯度爆炸/梯度彌散,調節了網絡結構,簡化了反向傳播求導運算的流程。這和砍掉深一點的層是不一樣的思想
-
風格轉換的原理
-
- 由風格特徵與內容特徵共同計算得出
-
風格特徵
- 風格的抽象度(越往後層,加入了越多內容的元素,更加具像)
-
內容特徵
- 內容的相似度(越往後層,加入了越多風格的元素,和原圖越不像)
-
- ## 怎麼解決過擬合
- 簡化模型
- 正則化(包含dropout)
- 數據增強
- 集成學習
- 早停
- 減少特徵數或使用較少的特徵組合
- ## 怎麼解決欠擬合
- 增加特徵數或者使用較多的特徵組合
- 減小正則權重
- 增加模型複雜度
- 使用boosting集成學習
-
如何提高學習算法性能的指導方針
-
->低可擬合偏差
- 更大的模型,更深的層
- 更好的優化器方案
- 探索更合適的超參數
-
->低方差
- 找尋更多的數據
- 正則化,dropout
- 對抗神經網絡
- 探索更合適的超參數
-
->清晰的正交化方案
- ……
- 思路邏輯清晰的調試
-
-
數據預處理一般步驟有哪些?
- 指定原始數據的文件列表 -> 創建文件列表隊列 ->
從文件中讀取數據 -> 數據預處理 -> 整理成batch
作爲神經網絡輸入
- 指定原始數據的文件列表 -> 創建文件列表隊列 ->
-
如何用指標和方案去評判一個優秀的模型?
- train/Validation/Test 準確率/召回率
- 方差
- 偏差
- CNN模型加速與壓縮彙總
1. 合理設計模型2. 權值剪枝(編程稀疏矩陣)
3. 權值量化(聚類)
4. 二值化(BWN,XNorNet)
5. 霍夫曼編碼
6. 奇異值分解(projection層)
7. 1x1卷積的恰當使用減少通道量
8. 卷積分解爲deepwise Conv和pointwise
Conv可大幅度減小計算量和參數量1/(Dk^2)9. Group Conv(可節省1/g計算量)
10. Channel Shuffle
11. 蒸餾法
12. 低秩分解
13. 模型裁剪
- # 怎麼選擇超參數
神經網路中的超參數主要包括1. 學習率 η,
2. 正則化參數 λ,
3. 神經網絡的層數 L
4. 每一個隱層中神經元的個數 j
5. 學習的回合數Epoch
6. 小批量數據 minibatch 的大小
由神經網絡的機理進行選擇
7. 輸出神經元的編碼方式
8. 代價函數的選擇
9. 權重初始化的方法
10. 神經元激活函數的種類
11 . 寬泛策略的核心在於簡化和監控
12. 參加訓練模型數據的規模
如文章你已看懂,點個「喜歡」即可。
如若錯誤以及不清晰的地方,隨時提出。
歡迎掃一掃上面二維碼加入我的個人微信號進行技術交流。