本章包括:
- 超越分類和回歸的機器學習形式
- 機器學習模型的正式評估程序
- 為深度學習準備數據
- 特征工程
- 解決過度擬合問題
- 接近機器學習問題的通用工作流程
一、機器學習的四個分支
機器學習算法通常分為四大類:
1、監督學習
??監督學習主要包括分類和回歸,但也有更多的外來變種,包括以下(有例子):
??1) 序列生成 - 給定圖片,預測描述它的標題。 序列生成有時可以重新表述為一系列分類問題(例如重復預測序列中的單詞或標記)。
??2) 語法樹預測 - 給定一個句子,將其分解預測為語法樹。
??3) 物體檢測 - 給定圖片,在圖片內的某些對象周圍繪制一個邊界框。 這也可以表示為分類問題(給定許多候選邊界框,對每個邊界框的內容進行分類)或者作為聯合分類和回歸問題,其中邊界框坐標是通過矢量回歸預測。
??4) 圖像分割 - 給定圖片,在特定對象上繪制像素級蒙版。
2、無監督學習
??機器學習的這個分支包括在沒有任何目標幫助的情況下發現輸入數據的有趣變換,用于數據可視化,數據壓縮或數據去噪,或者更好地理解手頭數據中存在的相關性。
??無監督學習是數據分析的基礎,而且在嘗試解決監督學習問題之前,通常是更好地理解數據集的必要步驟。維度降低和聚類是無人監督學習的眾所周知的類別。
3、自主學習
??自我監督學習是一種沒有人工注釋標簽的監督學習,仍然涉及標簽(因為學習必須由某些東西監督),但它們是從輸入數據生成的,通常使用啟發式算法。 例如,自動編碼器。
4、強化學習
??強化學習中,代理人會收到有關其環境的信息,并學會選擇最大化某些獎勵的行動。 例如,可以通過強化學習來訓練“觀察”視頻游戲屏幕并輸出游戲動作以最大化其得分的神經網絡。
5、分類和回歸詞匯表
- Sample or input(樣本或輸入)
- Prediction or output(預測或輸出)
- Target(目標)
- Prediction error or loss value(預測誤差或損失值 - 衡量你的距離模型的預測和目標) Classes(類 - 在分類問題中可供選擇的一組可能標簽。例如,在對貓和狗圖片進行分類時,“dog”和“cat”是兩個類)
- Label(標簽 - 分類問題中類注釋的特定實例。例如,如果圖片#1234注釋為包含類“dog”,則“dog”是圖片#1234的標簽)
- Ground-truth or annotations(實況或注釋 - 數據集的所有目標,通常由人收集
- Binary classification(二分分類 - 每個輸入樣本應分為兩個獨有的類別)
- Multiclass classification(多類分類 - 每個輸入樣本應分為兩類以上:例如,對手寫數字進行分類)
- Multilabel classification(多標簽分類 - 每個輸入樣本可以分配多個標簽。例如,給定的圖像可能包含貓和狗,并且應該使用“cat”標簽和“dog”標簽進行注釋。每個圖像的標簽數量通常是可變的)
- Scalar regression(標量回歸 - 目標是連續標量值的任務。預測房價就是一個很好的例子:不同的目標價格形成了一個連續的空間)
- Vector regression(向量回歸 - 目標是一組連續值的任務:例如,連續向量。對多個值(例如圖像中的邊界框的坐標)進行回歸)
- Mini-batch or batch(小批量或批量 - 由模型同時處理的一小組樣品(通常在8到128之間)。 樣本數通常是2的冪,以便于在GPU上進行內存分配。訓練時,使用小批量計算應用于模型權重的單個梯度下降更新。)
二、評估機器學習模型
查看GitHub源碼
1、訓練、驗證和測試集
??三個經典的評估方法:
??1) Hold-out validation(保留驗證)
??將一部分數據分開作為測試集。訓練剩余數據,并在測試集上進行評估。為了防止信息泄漏,不應該根據測試集調整模型,因此還應該保留驗證集。
??2)K-fold cross-validation(交叉檢驗)
??可以將數據拆分為相同大小的K個分區。 對于每個分區i,在剩余的K-1分區上訓練模型,并在分區i上進行評估。最終得分是獲得的K得分的平均值。
??當模型的性能根據traintest分割顯示出顯著差異時,此方法很有用。 與Hold-out validation一樣,此方法不會免除使用不同的驗證集進行模型校準。
??3)iterated K-fold validation with shuffling(帶有改組的迭代K-fold驗證)
2、要記住的事情
??1)在將數據拆分為訓練集和測試集之前,通常應該隨機隨機地重新調整數據。
??2)時間的箭頭 - 試圖預測過去的未來(例如,明天的天氣,股票走勢等),不應該在拆分數據之前隨機進行數據清洗,應始終確保測試集中的所有數據都位于訓練集中的數據之后。
??3)確保您的訓練集和驗證集不相交。
三、數據預處理,特征工程和特征學習
1、神經網絡的數據預處理
??數據預處理旨在使手頭的原始數據更適合神經網絡。 這包括矢量化,標準化,處理缺失值和特征提取。
??神經網絡中的所有輸入和目標必須是浮點數據的張量(或者,在特定情況下,是整數的張量)。 無論需要處理什么數據 - 聲音,圖像,文本 - 必須首先轉變為張量,這一步稱為數據矢量化。
??一般來說,輸入采用相對較大值的神經網絡數據(例如,多位數整數,比網絡權重所采用的初始值大得多)或異構數據(對于例如,一個特征在0-1范圍內而另一個特征在100-200范圍內的數據。這樣做會觸發大的梯度更新,從而阻止網絡收斂。為了使網絡更容易學習,數據應具有以下特征:
- Take small values - 通常,大多數值應在0-1范圍內。
- Be homogenous - 也就是說,所有特征都應該在大致相同的范圍內取值
??此外,以下更嚴格的規范化實踐很常見并且可以提供幫助,但并不總是必要的(例如,您沒有在數字分類示例中執行此操作):
- 單獨標準化每個特征,使其平均值為0。
-
單獨標準化每個特征以使標準偏差為1。
??注意,如果你期望測試數據中缺少值,但網絡已經過數據訓練而沒有任何缺失值,則網絡將不會學會忽略缺失值! 在這種情況下,應該人為地生成缺少條目的訓練樣本:多次復制一些訓練樣本,并刪除測試數據中可能缺少的一些功能。
2、特征工程
??特征工程是使用自己的數據知識和手頭的機器學習算法的過程,通過在數據進行之前對數據應用硬編碼(非學習)轉換,使算法更好地工作進入模型。在許多情況下,期望機器學習模型能夠從完全任意的數據中學習是不合理的。需要以一種使模型工作更容易的方式將數據呈現給模型。
四、過度擬合和欠擬合
查看GitHub源碼
??機器學習的根本問題是優化和泛化之間的緊張關系。優化是指調整模型以在訓練數據(機器學習中的學習)上獲得最佳性能的過程,而泛化是指訓練模型對之前從未見過的數據的執行情況。
??在訓練開始時,優化和泛化是相關的:訓練數據的損失越低,測試數據的損失越低。在對訓練數據進行了一定數量的迭代之后,泛化停止了改進,驗證指標停滯了然后開始降級:模型開始過度擬合。
??最好的解決方案是獲得更多的訓練數據。如果無法做到這一點,調整允許模型存儲的信息量,或者為允許存儲的信息添加約束。以這種方式對抗過度擬合的處理稱為正則化。回顧一些最常見的正則化技術,并在實踐中應用它們來改進前面的電影分類模型。
??減少過度擬合的四種方法:
- Getting more training data
- Reducing the capacity of the network
- Adding weight regularization
- Adding dropout.
1、 縮小網絡的大小
??防止過度擬合的最簡單方法是減小模型的大小:模型中可學習參數的數量(由層數和每層單元數決定)。在深度學習中,模型中可學習參數的數量通常被稱為模型的容量。具有更多參數的模型具有更多的記憶能力,因此可以容易地在訓練樣本和它們的目標之間學習完美的字典式映射 - 沒有任何泛化能力的映射。始終牢記這一點:深度學習模型傾向于擅長擬合訓練數據,但真正的挑戰是泛化,而不是擬合。模型不應該缺乏記憶資源,在容量過大和容量不足之間存在折衷。
??但是,沒有確定的公式來確定每層的正確數量或正確的大小。必須評估一組不同的體系結構(當然不在測試集上,在驗證集上),以便為數據找到正確的模型大小。查找適當模型大小的一般工作流程是從相對較少的圖層和參數開始,并增加圖層的大小或添加新圖層,直到看到有關驗證丟失的收益遞減。
電影評論分類網絡的例子試一試:
??1)原始網絡和較小網絡的驗證loss的比較:
??結果:較小的網絡開始過度擬合的時間晚于原網絡(在6個時期之后而不是4個時期),并且一旦開始過度擬合,其性能就會降低得慢得多。
??具有更高容量的模型版本:
??在一個epoch之后,更大的網絡幾乎立即開始過度擬合,并且更嚴重地過度擬合。它的驗證loss也更加嘈雜。
??較大的網絡很快就會使其訓練loss接近于零。網絡容量越大,能夠越快地對訓練數據進行建模(導致訓練loss低),但過度擬合的可能性越大(導致訓練loss和驗證loss之間的差異很大)。
2、 加權正則化
??給定一些訓練數據和網絡架構,有多組權重值(多個模型)可以解釋數據,而簡單模型比復雜模型更不容易過度擬合。“簡單模型”是一個具有較少參數的模型。因此,減輕過度擬合的常見方法是通過強制其權重僅采用較小的值來對網絡的復雜性施加約束,這使得權重值的分布更“規則”。這被稱為“權重正則化”,并且通過向網絡的損失函數添加與具有大權重相關聯的cost來完成。這個cost有兩種:
- L1正則化,其中所添加的成本與權重系數的絕對值成比例。
- L2正則化,其中所添加的成本與權重系數的值的平方成比例。L2正則化在神經網絡的背景下也稱為權重衰減。
??在Keras中,通過將權重正則化實例作為關鍵字參數傳遞給層來添加權重正則化。
??以電影評論分類網絡中添加L2權重正則化為例:
??結果:具有L2正則化(點)的模型已經變得比參考模型(交叉)更能抵抗過度擬合,即使兩個模型具有相同數量的參數。作為L2正規化的替代方案,可以使用以下Keras重量正則化器之一:
3、 添加dropout
??dropout應用于層,包括在訓練期間隨機“退出”(即設置為零)該層的多個輸出特征。假設一個給定的層通常會在訓練期間為給定的輸入樣本返回一個向量[0.2,0.5,1.3,0.8,1.1]; 在應用了丟失之后,該向量將具有隨機分布的幾個零條目,例如:[0,0.5,1.3,0,1.1]。
??"dropout rate” 是被淘汰的特征的一部分; 它通常設置在0.2和0.5之間。在測試時,圖層的輸出值按照等于dropout rate的因子按比例縮小。
??在IMDB網絡中添加兩個Dropout圖層,看看它們在減少過度擬合方面做得如何:
五、機器學習的通用工作流程
1、定義問題并組裝數據集
??1)輸入數據是什么? 想要預測什么?
??2) 面臨什么類型的問題? 是二元分類嗎? 多類分類? 標量回歸? 矢量回歸? 多類,多標簽分類?識別問題類型將指導我們去選擇模型體系結構,損失函數等。
2、選擇成功的衡量標準
??對于balanced-classification問題,每個類別同樣可能,接收器操作特性曲線(ROC AUC)下的準確度和面積是常見的度量標準。
??對于class-imbalanced的問題,可以使用precision and recall。
??對于ranking問題或multilabel classification分類,可以使用average precision。
??或者定義自己的自定義指標,Kaggle(https://kaggle.com)瀏覽數據科學競賽展示了廣泛的問題和評估指標。
3、決定評估方案
??三種常見的評估協議:
- Maintaining a hold-out validation set:擁有大量數據時的方法。
- Doing K-fold cross-validation:樣本太少時的方法。
- Doing iterated K-fold validation:當有少量數據可用時,執行高度精確的模型評估只需選擇其中一個即可。 在大多數情況下,第一個將足夠好。
4、準備數據
- 數據應格式化為張量。
- 這些張量所取的值通常應縮放為較小的值:例如,在[-1,1]范圍或[0,1]范圍內。
- 如果不同的特征采用不同范圍的值(異構數據),則應對數據進行標準化。
- 可能需要進行一些特征工程,尤其是小數據問題。
??一旦輸入數據和目標數據的張量準備就緒,就可以開始訓練模型。
5、開發一個比baseline更好的模型
??需要做出三個關鍵選擇來構建第一個工作模型:
- Last-layer activation:例如,IMDB分類示例在最后一層使用了sigmoid; 回歸示例沒有使用任何最后一層激活; 等等。
- Loss function:例如,IMDB示例使用binary_crossentropy,回歸示例使用mse,依此類推。
-
Optimization configuration:在大多數情況下,使用rmsprop及其默認學習速率是安全的。
6、擴大規模:開發一個過度擬合的模型
??要弄清楚你需要多大的模型,你必須開發一個過度擬合的模型。方法: - Add layers.
- Make the layers bigger.
- Train for more epochs.
??當看到模型在驗證數據上的性能開始下降時,就已經實現了過度擬合。下一階段是開始正規化和調整模型,以盡可能接近理想的模型,既不欠擬合也不過度擬合。
7、調整模型和超參數
??方法:
- Add dropout.
- Try different architectures: add or remove layers.
- Add L1 and/or L2 regularization.
- Try different hyperparameters(例如每層的單位數或優化程序的學習率)以找到最佳配置
- Optionally, iterate on feature engineering:添加新功能,或刪除似乎沒有提供信息的功能。
本章總結
- 定義手頭上的問題和要訓練的數據。收集這些數據,或者在需要時用標簽對其進行注釋。
- 選擇如何衡量問題的成功。將監控驗證數據的哪些指標?
- 確定評估方案:hold-out驗證?K-fold驗證?應該使用數據的哪個部分進行驗證?
- 開發比基本baseline更好的第一個模型:具有統計能力的模型。
- 開發一個過度擬合的模型。
- 根據驗證數據的性能調整模型并調整其超參數。很多機器學習研究傾向于只關注這一步,但要記住大局。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
