-
深度學習
-
數據降維(特徵提取)
- 對高緯度特徵數據進行預處理,保留重要特徵,取出噪點和不重要特徵,提高數據處理速度
- 優點
- 數據集更易使用
- 降低算法的計算開銷
- 取出噪聲
- 使得結果更易理解
- 算法
- 奇異值分解(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
- 內存容易撐不住
- 增加到一定程度,下降方向基本不再改變
- 跑完全數據集迭代次數少,要想達到相同的精度,花費的時間大大增加,對參數的修正速度慢
- 批量梯度下降(Batch Gradient Descent,BGD)
- 動量梯度下降法(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卷積核做的卷積,最後進行分類
- 標記的樣本空間,最後用softmax做分類即可
- 輸出層
-
經典模型
- 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
- AlexNet模型(激活函數使用relu)
深度學習相關問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.