Andrew Ng. 的新書終於出完了。薄薄一百多頁的小冊子,翻下來其實是一堆實操經驗集合。感覺還是有一定借鑑意義的,按照我自己的理解簡單地整理如下,也不展開說了。有過實際經驗的肯定心裏有數。
- 新成果的驅動因素:數據,算力
- 數據集的劃分:val & test
- val & test 應當來自相同的分佈
- how large? 足夠區分算法之間的(精度)差異
- 建立單一的評估指標,並通過不斷迭代以優化和滿足之
- 初始化 val & test 數據並建立 metrics,但要逐漸完善它
- 快速建立系統並迭代而不是一開始精心準備“完美”的東西
- 錯誤分析:查看 val 集中的錯誤樣例,評估提升性能的所需,並行地嘗試所有 ideas(節省時間,評估改進的作用)
- val 集糾錯——隨系統改善決定是否糾錯
- val 集較大時,分成兩部分:一部分用來查錯(較小的)(eyeball),一部分用來調參(blackbox),二者不能重合(防止對後者過擬合。eyeball
- 集應該大到讓你瞭解主要的錯誤類別(所以必須隨機)
- 偏差和方差:對訓練集的擬合程度和在測試集上的表現
- 過擬合和欠擬合
- 對比最優錯誤率(貝葉斯錯誤率,如以人爲基準的系統)/進行偏差&方差分解,找到當前需要側重解決的問題
- 可避免偏差較大,則增加模型的容量;方差大則增加訓練數據集規模
- 偏差-方差權衡通常是困難的
- 減小偏差的方法:增加模型規模,基於錯誤分析改進輸入(特徵),減少正則化,修改模型架構
- 對訓練集的錯誤分析:如何提升模型的表現/擬合能力(通過改進輸入)
- 減小方差的方法:增加數據,正則化,早停,特徵選擇,減少模型規模(慎用),基於錯誤分析改善輸入(同上),修改模型架構(同上)
- 方差&偏差診斷:觀察 learning curve(侷限:新增數據難以用於評估)
- learning curve 使用:對比 dev error,train error 和期望 error
- 對小樣本數據需要極其謹慎
- 與人類水平的表現比較的意義:人類標籤容易獲取數據,可以利用人類的直覺/知識,以人類的性能去評估最優錯誤率和設置期望
- 計算機超過人類的任務的特點:難以獲得標籤,人類的直覺/知識不管用,難以獲得最佳錯誤率和合理的期望錯誤率
- 如何定義人類的表現:設定專家級別的錯誤率爲期望錯誤率。理由參考22:獲得專家標註的數據;獲取專家的直覺和知識;作爲最優準確率是合理的。也可根據系統的提升進度逐步設置更高的人類參考基準(使用標註數據的成本不同)
- 超越人類的表現:算法不如人類時提升較快,超過人類後提升變慢。算法超過人類後仍可繼續發展,如從人類處獲得比算法轉換質量更高的數據、利用人的知識和直覺加強對處理方法的理解、將人的最佳表現作爲研發的期望,以及,“智能”系統的開發是沒有止境的,輸入變化任務隨之變化,人能適應這些變化而機器不能。因此仍需將人作爲開發中重要的參考基準
- 何時需在不同分佈的數據上進行訓練和測試:將額外獲得的大量數據加入訓練集作爲輔助訓練樣本(但不要期待過高的提升)
- 是否使用全部數據?根據使用的模型做出決定,以及“外部”數據是否與任務相關、是否與基礎訓練集“高度”一致
- 加權數據:爲不同數據設置不同的訓練權重
- 訓練集到驗證集的泛化問題:欠擬合(通常可避免),過擬合,數據不匹配(train vs. val/test)。可設定四個數據集用於評估:訓練集,訓練子集,開發集,驗證集。後兩者應來自相同分佈,用於評估泛化能力。訓練子集用於跟蹤訓練進度
- 確定偏差、方差和不匹配錯誤:根據29中不同子集上的表現做出判斷
- 人工合成數據:疊加(混音),剪接,加噪等
- 優化驗證:判斷問題出在優化過程還是目標函數上
- 強化學習的通常模式(略)
- 端到端學習的缺點:小數據上表現差,無法應對過於複雜的系統(應分模塊)
- 構建管道:按功能,按特性,按效率。從簡單到複雜,從底層到高層
- 分模塊的錯誤檢查
- 定位錯誤所在:逐個環節檢查輸入輸出。設定“完美”的輸入/輸出以檢查某環節上的錯誤
- 每個環節的表現與人類水平比較,逐步提升
- 有時每個環節工作良好,但整體表現差:跟管道的設計有關。整合模塊/環節的方式也可能有問題。