1. 程式人生 > >深度學習深理解(八)- 結構化機器學習專案

深度學習深理解(八)- 結構化機器學習專案

總結一下今天的學習過程

昨天由於裝雙系統,耽誤了一天,打斷這周暫時學習結束吳恩達老師的前三部分的課程(因為後期兩部分沒有開課)

幸運的是,今天學習比較努力 哈哈哈,將計劃兩天的課程今天一天學習完了

機器學習的策略:

  1. 收集更多的資料
  2. 增加訓練集的多樣性
  3. 增加使用梯度下降法的訓練時間
  4. 嘗試其他優化演算法:比如Adam演算法等
  5. 擴大或者縮小神經網路的規模
  6. 嘗試dropout或者L2正則化
  7. 修改神經網路的架構:如啟用函式、隱藏單元的數目、層數等

正交化

  1. 在訓練集上表現不錯,損失函式最小:4,5
  2. 在開發集有很好的表現:1,6
  3. 在測試集上有很好的表現:由於過擬合了,需要更大的開發集
  4. 在開發集或者測試集上有很好的表現:改變開發集或者改變成本函式

設定一個單實數評估指標

  1. 查準率
  2. 查全率
  3. FI score:調和平均數

訓練集、開發集、測試集的設定

  1. 開發集和測試集來自於統一分佈
  2. 使用開發集+單實數評估指標來固定目標
  3. 訓練集則會影響逼近的速度
  4. 規模:
  5. 早起:100~10000:7/3或者6/2/2
  6. 現在:100萬:98/1/1
  7. 測試集的目的:評估投產系統的效能,足夠大,能以高置信度評估系統整體效能

可避免的偏差、方差、誤差

偏差:訓練集與人類誤差偏大

辦法:

  1. 訓練更大的網路
  2. 更長時間得網路
  3. 更好的優化演算法
  4. 改成RNN、CNN
  5. 更好的神經網路架構

方差:訓練集中抽取的開發集表現不好

辦法:

  1. 正則化:L2正則化、Dropout正則化
  2. 資料增強
  3. 不同的神經網路架構

誤差:開發集表現不好

辦法:

  1. 收集更多的錯誤例子
  2. 手動檢測,檢視各個分類造成錯誤的比例
  3. 嘗試瞭解訓練集和開發測試集的具體差異
  4. 將訓練集變得更像開發集、測試集

擬合程度:測試集表現不好

快速搭建一個深度學習系統

  1. 設立開發集合測試集還有評估指標
  2. 搭好一個機器學習系統模型,進行訓練、迭代,檢視演算法表現、評估指標表現
  3. 進行偏差分析、方差分析、誤差分析、確定下一步優化前進方向
  4. 將你要關注的資料分佈作為開發集和測試集

遷移學習

神經網路可以從一個任務中習得知識、或者部分知識、並將這些知識應用到另一個獨立的任務中

做法:將最後一層的輸出以及相關權重w、b刪除。重新生成一層或者幾層輸入輸出,如果資料量大,就將前面的權重一起重新生成

作用:用更少的資料,將一些能力能做其他應用中做的更好、更快,比如:低層次的特徵:邊緣檢測、曲線檢測、陽性物件檢測、結構資訊、圖形形狀資訊、圖形識別、學到的點、線、面等

意義:

  1. 在A、B有同樣的型別資料時,比如音訊、影象等,想從任務A中學習並遷移一下知識到到任務B中
  2. A比B資料多
  3. A中的低層次特徵可以幫助B的學習

多工學習:並行的

同時開始學習,試圖讓單個神經網路同時做幾件事情,然後希望是每個任務都能幫助其他所有任務

例如在無人駕駛領域

與softmax不同:softmax是將單個標籤分配給單個樣本

意義:

  1. 訓練一組任務,可以共用低層次特徵
  2. 每個任務的資料量很接近
  3. 你可以訓練一個足夠大的神經網路,同時做好所有工作

端到端的學習

優點:

真的只是讓資料說話

所需手工設計的元件更少

缺點:

需要大量的資料

排除了可能有用的手工設計的元件

訪談:

CS231n課程等一些我現在只能聽聽看看而不知道涵義的名詞

美好的一天,明天加油!