深度學習相關問題

  • 深度學習

  • 數據降維(特徵提取)

    • 對高緯度特徵數據進行預處理,保留重要特徵,取出噪點和不重要特徵,提高數據處理速度
    • 優點
      • 數據集更易使用
      • 降低算法的計算開銷
      • 取出噪聲
      • 使得結果更易理解
    • 算法
      • 奇異值分解(SVD)
      • 主成分分析(PCA)
      • 因子分析(FA)
      • 獨立成分分析(ICA)
  • 激活函數

    • 作用
      • 現實中的數據往往不是線性可分的,所以我們需要引入非線性函數(【引入非線性函數】即在每一層輸出後面添加一個激活函數)或者線性變換(【線性變換】從當前特徵空間通過一定的線性映射轉換到另一個空間,使數據更好的分類)
    • sigmoid
      • 以0.5作爲閾值,劃分等價的0-0.5和0.5-1兩塊
      • 缺點
        • 梯度消失(gradient vanishing)問題,即當輸入非常大或者非常小的時候,會使得這些神經元的梯度接近於0
        • sigmoid的output是非零均值,導致下一層神經元會接收到一個非零均值的信號作爲輸入
    • 雙曲正切函數(tanh)
      • 以0作爲閾值,分爲了-1-0和0-1;output爲零均值;但還是存在梯度消失
    • 線性修正單元(relu)
      • f(x)=max(0,x),當輸入信號小於0時,輸出0,當輸入信號大於0時,輸出即輸入
      • 優點
        • 使用relu得到的SGD的速度比sigmoid和tanh快,不需要大量的計算,只需要一個閾值即可
      • 缺點
        • 比較脆弱,當一個非常大的梯度流過relu神經元,更新參數後將不會對數據有激活現象,learning rate過高會導致這種問題(【注】若不幸出現這種情況,可以使用Xavier初始方法,避免)
    • softmax
  • 損失函數

    • 均方差
  • 優化器

    • 梯度下降
      • 批量梯度下降(Batch Gradient Descent,BGD)
        • 每一次迭代時使用全部的樣本進行梯度更新
        • 對目標函數求偏導,對每次迭代對象對參數進行更新,更新時存在一個求和函數,對所有的樣本進行計算處理
        • 優點
          • 一次迭代是所有樣本進行計算,利用矩陣操作,實現了並行操作
          • 全數據集確定的方向更能代表樣本整體,更準確的走向極值的方向,當目標函數爲凸函數時,BGD最優
        • 缺點
          • 樣本數量大的時候,需要對每個樣本進行計算,訓練速度慢
        • 從迭代次數上看,BGD的迭代次數較少
      • 隨機梯度下降(Stochastic Gradient Descent,SGD)
        • 每次迭代使用單獨樣本進行參數更新,訓練速度加快
        • 對目標函數求偏導,對每個迭代對象對參數進行更新,沒有求和操作
        • 優點
          • 不是全部訓練集上的損失函數,而是在每輪迭代中,隨機優化某一條訓練集上的損失函數,這樣每一輪的參數更新速度加快
        • 缺點
          • 準確度下降,可能會收斂到局部最優,單個樣本不能表示全體樣本,不易並行實現
        • 迭代次數較多,搜索過程是盲目的
      • 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)
        • 每次迭代使用batch_size個樣本進行參數更新
        • 優點
          • 每一個batch上優化神經網絡參數並不比單個數據慢
          • 每次使用一個batch可以大大減少收斂所需要的迭代次數,同時可以使收斂到的結果更加接近梯度下降的效果
          • 可實現並行化
        • 缺點
          • 不當選擇batch_size會帶來一定問題
        • 合理的batch_size
          • 內存率提高,並行化效率提高
          • 跑完整個數據集的迭代次數下降
          • 在一定範圍內,增大bath_size,其下降的方向越準,引起的訓練震盪越小
        • 盲目增大batch_size
          • 內存容易撐不住
          • 增加到一定程度,下降方向基本不再改變
          • 跑完全數據集迭代次數少,要想達到相同的精度,花費的時間大大增加,對參數的修正速度慢
    • 動量梯度下降法(Momentum)
    • Adagrad(【注】學習率和梯度有關,也就是自適應學習率)
  • BP算法(back propagation)

    • 神經網絡組成:網絡架構,激活函數,找出最優權重值的參數學習算法
    • 學習過程由信號正向傳播求損失與誤差回傳兩個過程組合
    • 過程
      • 正向傳播(FP,求損失),該過程根據輸入的樣本,給定初始權重和偏置項,計算輸出值與實際值之間的損失值,若不在給定的範圍內,則啓動反向傳播過程;否則停止w和b更新
      • 反向傳播(BP,回傳誤差),將輸出以某種形式從隱層逐漸反饋到輸入層,並將誤差反攤到各層的所有單元,獲得各單元的誤差信號,此誤差信號作爲修正各單元權重的依據
    • 優化
      • 增加動量項
      • 自適應調節學習率
      • 引入抖動因子
      • 從梯度方面進行優化
  • 超參數

    • 普通參數可以不斷地學習得到,即訓練模型的過程;超參數無法學習得來,如學習率
  • 過擬合問題

    • 過擬合是因爲模型的學習能力太強,除了學習了樣本空間的共有特性外,還學習到了訓練集中的噪聲,噪聲的存在導致模型泛華性能下降
    • 數據增強,增加訓練樣本
      • 圖像處理函數
        • tf.image.resize_images(img,[size,size],method)【圖像縮放,插值】
        • tf.image.resize_image_with_crop_or_pad(img,[size,size])【樣本裁剪】
        • tf.image.flip_left_right(image)【水平翻轉】
        • tf.image.flip_up_down(image)【豎直翻轉】
        • tf.image.adjust_contrast(image,rate)【修改對比度】
        • tf.image.per_image_standardization(image)【白化處理】
    • droupout,隨機失活,隨機丟棄部分神經元,主要作用於全連接層
      • 通過droupout可以降低節點之間的耦合度,這樣節點對其他節點就沒那麼敏感了
      • 每一層上的每個節點都沒有得到充分的訓練,這樣就可以避免節點過度學習
    • 正則化
      • 正則化越強,能夠容忍更多的錯誤,關心模型的複雜度,不關心每個樣本的錯誤,可以很好地做到過擬合
      • 正則化越弱,更加關注樣本點,容易造成過擬合
      • 當訓練集和測試集相差比較大的時候,要注意使用正則項進行懲罰,避免過擬合
      • 當訓練集和測試集相差不大的時候,沒必要使用,否則可能會造成欠擬合
  • 欠擬合問題

    • 訓練的模型在訓練集上面的表現很差,驗證集上也表現很差,原因:模型訓練的過於簡單,通用特徵模型未學習到
    • 措施
      • 做特徵工程
      • 減少正則化參數
      • 使用更深或者更廣的模型進行訓練
      • 使用集成方法(boost或bagging算法)
  • CNN

    • 輸入層
    • 卷積層
      • 提取特徵值,對原信號特徵增強,並降低噪音
    • 池化層
      • 對輸入的特徵圖進行壓縮,進行降採樣,選擇一塊區域的最大值(平均值)代替該區域
      • 最大池化(max pooling)
        • 提高空間不變性,不管像素最大值在池化框哪個位置,都可以取得最大值
      • 均值池化(average pooling)
        • 將池化框中的值求平均,能夠減小池化框大小帶來的誤差
    • 全連接層
      • 將學習到的分佈式特徵表示映射到樣本標記空間,起到“分類器”的作用
      • 第一層全連接
        • 池化層到全連接層,中間做卷積,將前面卷積提取的抽象特徵展開,映射到標記好的樣本空間
      • 第二層全連接
        • 標記的樣本空間,最後用softmax做分類即可
          【注】ResNet和GoogleNet取消了全連接層,換成了1*1卷積核做的卷積,最後進行分類
    • 輸出層
  • 經典模型

    • AlexNet模型(激活函數使用relu)
      • 輸入層爲2242243
      • 第一層:卷積層,卷積核爲11*11,滑動步數爲4,池化層使用最大池化
      • 第二層:卷積層,卷積核爲5*5,池化層使用最大池化
      • 第三層:卷積層,卷積核3*3
      • 第四層同第三層
      • 第五層:卷積層,卷積核3*3,池化層使用最大池化
      • 第六層+第七層:全連接層,4096神經元
      • 第八層:softmax層,進行分類
    • VGG-16模型(激活函數使用relu)
      • 輸入層
      • 第一層:兩個卷積層和一個最大池化層,卷積核3*3
      • 第二層:兩個卷積層和一個最大池化層,卷積核3*3
      • 第三層:三個卷積層和一個最大池化層,卷積核3*3
      • 第四層:三個卷積層和一個最大池化層,卷積核3*3
      • 第五層:三個卷積層和一個最大池化層,卷積核3*3
      • 第六層,七層,八層:全連接層,4096個神經元
    • GoogleNet
    • RestNet
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章