結構化機器學習專案
將你可以調整的引數設定在不同的正交的維度上,調整其中乙個引數,不會或幾乎不會影響其他維度上的引數變化,這樣在機器學習專案中,可以讓你更容易更快速地將引數調整到乙個比較好的數值
是重複反饋過程的活動,其目的通常是為了逼近所需目標或結果。每一次對過程的重複稱為一次"迭代",而每一次迭代得到的結果會作為下一次迭代的初始值。
加速改進機器學習演算法的迭代過程
f1分數:查全率p查準率r的平均值(調和平均數)
優化指標:準確率,盡可能好
滿足指標:需要滿足該指標
權衡n個不同的準則,你可能需要考慮將其中n-1個作為滿足指標,需要這n-1個滿足乙個特定值。然後定義最後乙個為優化指標
訓練集(training set)用於執行你的學習演算法。
開發集(保留交叉驗證集)用於調整引數,選擇特徵,以及對學習演算法做出其他決定。
測試集(test set)用於評估演算法的效能,但不會據此決定使用什麼學習演算法或引數。
訓練集是用來訓練模型的,通過嘗試不同的方法和思路使用訓練集來訓練不同的模型,再通過驗證集使用交叉驗證來挑選最優的模型,通過不斷的迭代來改善模型在驗證集上的效能,最後再通過測試集來評估模型的效能。
如果開發集和測試集來自不同的分布,可能導致:
1.過擬合開發集;
2.測試集比開發集更難識別。所以你的演算法可能已經做得和預期一樣很好,也沒有可能進一步顯著得改進;
3.測試集不一定更難識別,但是和開發集(的分布)不同。所以在開發集表現很好,不一定在測試集上表現很好。在這種情況下,提高開發集效能的工作可能都是一種浪費;
建議選擇**於相同分布的開發集和測試集,這會讓你的團隊更有效。
一般,60%訓練集,20%開發集,20%測試集,70/30不再適用
但在現代機器學習中,我們更習慣操作規模大得多的資料集,比如說你有1百萬個訓練樣本,這樣分可能更合理,98%作為訓練集,1%開發集,1%測試集,我們用d和t縮寫來表示開發集和測試集。
修改評估指標的方法:加個權重項
如果不是色情,則。如果是色情,可能就是10甚至100,這樣你賦予了色情更大的權重,讓演算法將色情圖分類為貓圖時,錯誤率這個項快速變大
如果你希望得到歸一化常數,在技術上,就是對所有求和,這樣錯誤率仍然在0和1之間
、嘗試定義乙個新的指標,如果你對舊的錯誤率指標不滿意,那就不要一直沿用你不滿意的錯誤率指標
(用實際應用定義指標)
貝葉斯最優錯誤率:理論上可能達到的最優錯誤率,就是說沒有任何辦法設計出乙個x到y的函式,讓它能夠超過一定的準確度
對於人類擅長的任務,只要你的機器學習演算法比人類差,你就可以從讓人幫你標記資料,你可以讓人幫忙或者花錢請人幫你標記例子,這樣你就有更多的資料可以餵給學習演算法
可避免偏差:貝葉斯錯誤率或者說貝葉斯錯誤率的估計和訓練錯誤率直接的差值
人類水平錯誤率比貝葉斯錯誤率高一點,因為貝葉斯錯誤率是理論上限,但人類水平錯誤率離貝葉斯錯誤率不會太遠
接近貝葉斯錯誤率,你就知道沒有太多改善的空間了,不能繼續減少你的訓練錯誤率了,你也不會希望它比貝葉斯錯誤率好得多,因為這種目標只能通過可能需要提供更進一步的訓練
如果有更多的改進空間,可以將這個距縮小一點,使用減少方差的手段應該可行,比如正則化,或者收集更多的訓練資料
你到貝葉斯錯誤率估計值的差距,告訴你可避免偏差問題有多大,可避免偏差問題有多嚴重,而訓練錯誤率和開發錯誤率之間的差值告訴你方差上的問題有多大,你的演算法是否能夠從訓練集泛化推廣到開發集
效能上限:最好能到**,改善演算法效能的上限
進行錯誤分析:你應該找一組錯誤樣本,可能在你的開發集裡或者測試集裡,觀察錯誤標記的樣本,看看假陽性(false positives)和假陰性(false negatives),統計屬於不同錯誤型別的錯誤數量。在這個過程中,你可能會得到啟發,歸納出新的錯誤型別。
如果標記錯誤嚴重影響了你在開發集上評估演算法的能力,那麼就應該去花時間修正錯誤的標籤
開發集的主要目的是,你希望用它來從兩個分類器a和b中選擇乙個
不管用什麼修正手段,都要同時作用到開發集和測試集上
搭建全新的機器學習程式,就是快速搭好你的第乙個系統,然後開始迭代
初始系統的全部意義在於,有乙個學習過的系統,有乙個訓練過的系統,讓你確定偏差方差的範圍,就可以知道下一步應該優先做什麼,讓你能夠進行錯誤分析,可以觀察一些錯誤,然後想出所有能走的方向,哪些是實際上最有希望的方向
讓你的訓練集資料來自和開發集、測試集不同的分布,這樣你就可以有更多的訓練資料
如果開發集和測試集來自相同的分布,但訓練集來自不同的分布。我們要做的是隨機打散訓練集,然後分出一部分訓練集作為訓練-開發集,就像開發集和測試集來自同一分布,訓練集、訓練-開發集也來自同一分布
訓練誤差是1%,訓練-開發集上的誤差是9%,演算法存在方差問題
假設訓練誤差為1%,訓練-開發誤差為1.5%,但當你開始處理開發集時,錯誤率上公升到10%當你轉到開發集時,錯誤率就大大上公升了,所以這是資料不匹配的問題
開發集表現和測試集表現有很大差距,那麼你可能對開發集過擬合了,需要乙個更大的開發集
偏差度量了學習演算法的期望**與真實結果的偏離程式, 即 刻畫了學習演算法本身的擬合能力 .
方差度量了同樣大小的訓練集的變動所導致的學習效能的變化, 即 刻畫了資料擾動所造成的影響
資料不匹配問題:做錯誤分析,或者看看訓練集,或者看看開發集,試圖找出,試圖了解這兩個資料分布到底有什麼不同,然後看看是否有辦法收集更多看起來像開發集的資料作訓練。
人工資料合成,有可能從所有可能性的空間只選了很小一部分去模擬資料
起作用的場合是,在遷移**問題中你有很多資料,但遷移目標問題你沒有那麼多資料
如果你想從任務a學習並遷移一些知識到任務b,那麼當任務a和任務b都有同樣的輸入x時(都是影象/音訊),遷移學習是有意義的。當任務a的資料比任務b多得多時,遷移學習意義更大
做法:資料集換成新的對,現在這些變成放射科影象,而是你想要**的診斷,你要做的是初始化最後一層的權重,讓我們稱之為和隨機初始化。
預訓練:重新訓練神經網路中的所有引數,那麼這個在影象識別資料的初期訓練階段稱為預訓練
微調:更新所有權重
果你可以訓練乙個足夠大的神經網路,那麼多工學習肯定不會或者很少會降低效能
端到端深度學習就是忽略所有這些不同的階段,用單個神經網路代替它,需要大量資料才能讓系統表現良好
弊端之一是它把可能有用的人工設計的元件排除在外
讓乙個監督學習演算法達到實用:1、你的演算法對訓練集的擬合很好,這可以看成是你能做到可避免偏差很低。2、在訓練集中做得很好,然後推廣到開發集和測試集也很好,這就是說方差不是太大。
減少可避免偏差:1、使用規模更大的模型,這樣演算法在訓練集上的表現會更好,或者訓練更久。2、使用更好的優化演算法,比如說加入momentum或者rmsprop,或者使用更好的演算法,比如adam。3、你還可以試試尋找更好的新神經網路架構,或者說更好的超引數。
方差出現問題:你可以收集更多資料,因為收集更多資料去訓練可以幫你更好地推廣到系統看不到的開發集資料。你可以嘗試正則化,包括正則化,dropout正則化。同時你也可以試用不同的神經網路架構,超引數搜尋,看看能不能幫助你,找到乙個更適合你的問題的神經網路架構。
吳恩達神經網路和深度學習筆記(廣播,啟用函式).
神經網路與深度學習筆記彙總一.
神經網路與深度學習筆記彙總二.
神經網路與深度學習筆記彙總三.
神經網路與深度學習筆記彙總四.
神經網路與深度學習筆記彙總五.
神經網路與深度學習筆記
1 代價函式 在當前小批量資料中的所有訓練樣本 2 改進神經網路的學習方法 更好的代價函式的選擇 交叉熵代價函式 四種 規範化 方法 l1和l2規範化,棄權和訓練資料的人為擴充套件,讓我們的網路在訓練集之外的資料上更好地泛化。3 在錯誤不是很好地定義時,學習過程會變得很緩慢。但在犯錯時也存在學習緩慢...
深度神經網路 筆記(二)
cnn比多層感知器 mlp 表現更好,原因為 cnn 輸入層 隱含層 全連線層 mlp存在兩個問題 cnn可以接收矩陣作為輸入,卷積層儲存了空間結構。定義乙個卷積視窗,即濾波器或卷積核,在影象上滑動卷積核。影象為乙個從 彩色影象是乙個函式。每個 dropout在前向傳播時隨機關閉節點,從而避免權重收...
神經網路與深度學習筆記 3 2神經網路表示
隱藏層 訓練集中可以看到輸入輸出值,但看不到隱藏層值。將輸入輸出用a表示也可以,a表示啟用的意思,意味著網路不同層的值會傳遞給後一層。上述神經網路雖然包含輸入層 隱藏層 輸出層三層,但在文獻中我們稱之為雙層神經網路,其中隱藏層是第一層,輸出層是第二層。隱藏層 輸出層是有引數的,隱藏層有兩個引數w 1...