Machine Learning Yearning 要點筆記
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中不同子集上的表現做出判斷
人工合成數據:疊加(混音),剪接,加噪等
優化驗證:判斷問題出在優化過程還是目標函數上
強化學習的通常模式(略)
端到端學習的缺點:小數據上表現差,無法應對過於複雜的系統(應分模塊)
構建管道:按功能,按特性,按效率。從簡單到複雜,從底層到高層
分模塊的錯誤檢查
定位錯誤所在:逐個環節檢查輸入輸出。設定「完美」的輸入/輸出以檢查某環節上的錯誤
每個環節的表現與人類水平比較,逐步提升
有時每個環節工作良好,但整體表現差:跟管道的設計有關。整合模塊/環節的方式也可能有問題。
※正則表達式教程:實例速查
※《程序員的數學》輕鬆掌握「數學思維」
TAG:AI研習社 |