機器學習 面試常見問題&答案 ①

  • 給定卷積神經網絡輸入,卷積核大小,padding,步長,求輸出的shape?

    image

  • 各個激活函數的優缺點算法

    • Sigmod編程

      • image

        • 優勢微信

          • 輸出值0-1(很重大的優勢)
          • 其他的和其餘衆多激活函數比起來,感受沒有什麼優勢,方便入門理解
        • 缺點網絡

          • 容易梯度消失
          • x的可變值區域過小,極其容易陷入級值的情況(-0.9~0.9)
          • 指數exp計算複雜
    • Tanhapp

      • image

        • 優勢ide

          • 和sigmod比起來,是零均值化處理。(零均值化能夠加快模型的收斂)
        • 缺點函數

          • 和sigmod同樣的缺點
    • Relu性能

      • image

        • 優勢學習

          • 計算複雜度低(只有一個if>0判斷,大於0則激活值爲1),部分區域線性遞增,沒有冪運算與指數運算
        • 缺點優化

          • x小於0時沒法產生激活值
          • 訓練到後期可能權重參數更新太大
    • Leakly ReLu

      • image

        • 優勢

          • 相對於relu來講,激活值必然能夠產生
        • 缺點

          • Relu的其餘缺點一律繼承下來了
    • ELU

      • image

        • 優勢

          • 相對於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變得異常大與異常小的狀況

      • 左下角的內容清楚的說明了梯度爆炸和梯度消失的場景

        • image
        • image
  • BN是什麼,爲何能提升收斂速度

    • 批歸一化是什麼?

      • 標準化處理,特徵縮放的一個方式,將數據規整到必定範圍內。image
      • 如上圖所示,BN步驟主要分爲4步:

        • 求每個訓練批次數據的均值
        • 求每個訓練批次數據的方差
        • 使用求得的均值和方差對該批次的訓練數據作歸一化,得到0-1分佈。其中εε是爲了不除數爲0時所使用的微小正數。
        • 尺度變換和偏移:將xixi乘以γγ調整數值大小,再加上ββ增長偏移後獲得yiyi,這裏的γγ是尺度因子,ββ是平移因子。這一步是BN的精髓,因爲歸一化後的xixi基本會被限制在正態分佈下,使得網絡的表達能力降低。爲解決該問題,咱們引入兩個新的參數:γγ,ββ。 γγ和ββ是在訓練時網絡本身學習獲得的。
  • 爲何能提升收斂速度?

    • 解決internal covariate shift問題。
    • 特徵沒有消失,而是歸一到必定範圍內,加快學習速度
    • 由於最終都是映射到歸一化範圍內,因此前一層的權重調整對後一層的影響程度都會下降,不用從新適應新的分佈,從而讓模型學的更快,避免徹底從頭學習
  • Tips

    • BN不用於輸入層和輸出層(經驗論)
  • BN(實踐)

    • 每次batch傳入時都作BN
  • 各個優化器的優缺點

    • 優化器分兩種

      • 固定學習率的優化算法

        • SGD隨機梯度降低

          • 優勢

            • 只隨機採樣一個樣原本計算梯度,加快學習效率,而且避免了普通GD一次性參數更新的壞處(致使模型沒法收斂)
          • 缺點

            • 選擇合適的學習率較爲困難
        • Momentum動量

          • 優勢

            • 動量梯度降低,動力火車,慣性火車,這一次梯度降低的值,會影響下一次梯度降低的值,相對於簡單的梯度降低來講,Momentum動量帶有延續性相對於簡單的梯度降低來講,
            • 減小梯度震盪
          • 缺點

            • 和SGD同樣,選擇合適的學習率較爲困難
      • 自適應學習率的優化算法

        • Adagrad

          • image
          • 優勢

            • 更新參數時,會針對原梯度值乘上一個變量,即其全部梯度歷史平均值總和的平方根(如上圖)
            • 這樣在訓練初期,分母較小,學習率較大,學習比較快,後期時,學習會逐漸減慢
          • 缺點

            • 從訓練開始就積累梯度方差會致使有效學習率過早和過量的減少
            • 只能解決凸問題,當應用於非凸函數訓練神經網絡時,學習可能會到達一個局部是凸碗的區域
        • RMSProp

          • 優勢

            • 可以解決凸問題
            • 由累計平方梯度變成和平均梯度
          • 缺點

            • 缺乏Momentum動量元素
        • Adam(結合了動量和RMSProp,通用方案)

          • 結合了Momentum和RMSProp的優勢
  • 手畫一下LSTM
  • 梯度裁剪

    • image
  • 介紹一下殘差網絡
    image

    • 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. 參加訓練模型數據的規模

大菌微信1二維碼

如文章你已看懂,點個「喜歡」便可。如若錯誤以及不清晰的地方,隨時提出。歡迎掃一掃上面二維碼加入個人我的微信號進行技術交流。

相關文章
相關標籤/搜索