深度學習深理解(八)- 結構化機器學習專案
阿新 • • 發佈:2019-01-03
總結一下今天的學習過程
昨天由於裝雙系統,耽誤了一天,打斷這周暫時學習結束吳恩達老師的前三部分的課程(因為後期兩部分沒有開課)
幸運的是,今天學習比較努力 哈哈哈,將計劃兩天的課程今天一天學習完了
機器學習的策略:
- 收集更多的資料
- 增加訓練集的多樣性
- 增加使用梯度下降法的訓練時間
- 嘗試其他優化演算法:比如Adam演算法等
- 擴大或者縮小神經網路的規模
- 嘗試dropout或者L2正則化
- 修改神經網路的架構:如啟用函式、隱藏單元的數目、層數等
正交化
- 在訓練集上表現不錯,損失函式最小:4,5
- 在開發集有很好的表現:1,6
- 在測試集上有很好的表現:由於過擬合了,需要更大的開發集
- 在開發集或者測試集上有很好的表現:改變開發集或者改變成本函式
設定一個單實數評估指標
- 查準率
- 查全率
- FI score:調和平均數
訓練集、開發集、測試集的設定
- 開發集和測試集來自於統一分佈
- 使用開發集+單實數評估指標來固定目標
- 訓練集則會影響逼近的速度
- 規模:
- 早起:100~10000:7/3或者6/2/2
- 現在:100萬:98/1/1
- 測試集的目的:評估投產系統的效能,足夠大,能以高置信度評估系統整體效能
可避免的偏差、方差、誤差
偏差:訓練集與人類誤差偏大
辦法:
- 訓練更大的網路
- 更長時間得網路
- 更好的優化演算法
- 改成RNN、CNN
- 更好的神經網路架構
方差:訓練集中抽取的開發集表現不好
辦法:
- 正則化:L2正則化、Dropout正則化
- 資料增強
- 不同的神經網路架構
誤差:開發集表現不好
辦法:
- 收集更多的錯誤例子
- 手動檢測,檢視各個分類造成錯誤的比例
- 嘗試瞭解訓練集和開發測試集的具體差異
- 將訓練集變得更像開發集、測試集
擬合程度:測試集表現不好
快速搭建一個深度學習系統
- 設立開發集合測試集還有評估指標
- 搭好一個機器學習系統模型,進行訓練、迭代,檢視演算法表現、評估指標表現
- 進行偏差分析、方差分析、誤差分析、確定下一步優化前進方向
- 將你要關注的資料分佈作為開發集和測試集
遷移學習
神經網路可以從一個任務中習得知識、或者部分知識、並將這些知識應用到另一個獨立的任務中
做法:將最後一層的輸出以及相關權重w、b刪除。重新生成一層或者幾層輸入輸出,如果資料量大,就將前面的權重一起重新生成
作用:用更少的資料,將一些能力能做其他應用中做的更好、更快,比如:低層次的特徵:邊緣檢測、曲線檢測、陽性物件檢測、結構資訊、圖形形狀資訊、圖形識別、學到的點、線、面等
意義:
- 在A、B有同樣的型別資料時,比如音訊、影象等,想從任務A中學習並遷移一下知識到到任務B中
- A比B資料多
- A中的低層次特徵可以幫助B的學習
多工學習:並行的
同時開始學習,試圖讓單個神經網路同時做幾件事情,然後希望是每個任務都能幫助其他所有任務
例如在無人駕駛領域
與softmax不同:softmax是將單個標籤分配給單個樣本
意義:
- 訓練一組任務,可以共用低層次特徵
- 每個任務的資料量很接近
- 你可以訓練一個足夠大的神經網路,同時做好所有工作
端到端的學習
優點:
真的只是讓資料說話
所需手工設計的元件更少
缺點:
需要大量的資料
排除了可能有用的手工設計的元件
訪談:
CS231n課程等一些我現在只能聽聽看看而不知道涵義的名詞
美好的一天,明天加油!