Deep Learning with Python(chapter 4)筆記

這一章標題爲機器學習的基本原理,其中有很詳細的討論。

4.1 機器學習的4個分支

4.1.1 監督學習

給定樣本集合,學習將輸入數據映射到已知目標。大部分的都屬於這種。

包括optical  character  recognition,  speech  recognition,  image classification, and language translation,Sequence  generation,Syntax tree prediction,Object detection,Image segmentation等。

4.1.2 無監督學習

不設定標籤,僅從輸入數據中找出有趣的轉換(原文interesting transformations)。目標是data visualization, data compression, or data
denoising,  or  to  better  understand  the  correlations  present  in  the  data  at  hand。經常在監督學習前使用無監督學習以更好地理解數據集。降維和聚類(dimensionality reduction and clustering)是其中著名的類別。

4.1.3 自監督學習

不使用人爲標籤,而是通過如啓發式算法,學習從輸入數據中推導出自己的分類。如自動編碼機和從之前視頻幀預測下一幀,從之前單詞預測下一單詞,監督來自於未來的輸入。

4.1.4 強化學習

從其環境中獲取信息並學習選擇使收益最大化的操作。自從Google DeepMind 成功應用開始獲得大量關注,暫時處於研究階段。

4.2 評估機器學習模型

機器學習中,核心目標是使得模型更爲通用,主要的阻礙是過擬合(在測試集上的表現不如訓練集)

4.2.1 訓練、驗證、測試集

我們的數據原始狀態爲一個集合,首先將其分成訓練數據和測試數據,驗證數據則是從訓練數據中分出部分得來的。

爲什麼需要驗證集?因爲模型的訓練必然伴隨着參數的優化,使用模型在驗證集上的表現作爲反饋信號,從而逐步將參數調優。

然而,每次由驗證集反饋後,就從驗證集上產生了信息泄露,即驗證集的信息泄露進模型中。經過一定次數(epochs)後,模型在驗證集上產生過擬合。

測試集則是用於模型訓練好後評估模型是否足夠好。

分出驗證集,有如下方法:

1.直接從訓練集分出

步驟:打亂訓練集、分出若干訓練集作爲驗證集

2.K-fold validation

將訓練集分出K份等大的部分,依次將一個部分作爲驗證集,其餘部分作爲訓練集,結果取平均。如果使用簡單分出部分策略時,你的模型隨着訓練-測試集的不同劃分而表現出巨大差異時,此方法可能很有幫助。

3.Iterated K-fold validation with shuffling

當你可使用的數據特別少時,此方法可以讓你更爲準備地評估模型。它包括使用K-fold validation——打亂數據——K-fold validation的若干循環,結果取平均。

4.2.2 需要牢記的事情

數據代表性:使數據在訓練集和測試集間保持均勻,打亂數據後再劃分。

時間因素:當你是一個基於時間的迴歸預測問題時,此時不能打亂數據。

數據冗餘:保持訓練集與驗證集的互斥性,即不能在2個區域出現同樣的數據。

4.3 數據預處理、特徵工程、特徵學習

4.3.1 神經網絡中的數據預處理

往往收集的數據五花八門,我們需要將其處理成適合神經網絡的格式。

向量化:所有的輸入和標籤都應該是浮點數或整型的張量。

標準化:你的數據應該滿足小值均勻的條件。更嚴格一點,你應該使某個特徵的數據具有平均值爲0標準差爲1的特性。這可以通過如下操作實現:

x -= x.mean(axis=0)
x /= x.std(axis=0)

處理丟失數據:你可以將丟失數據設置爲0,當你期望測試數據中出現丟失值時,你可以拷貝後丟失某些特徵。

4.3.2 特徵工程

神經網絡使得你不必費力去提取特徵,但是好的特徵不僅可以使你快速地訓練模型,還可以使用更少的數據。

4.4 過擬合與欠擬合

機器學習中的一個基本問題是優化與通用的平衡。優化代表模型在訓練集上的表現提升,通用代表模型在新數據上表現良好。

模型訓練開始時,訓練集上驗證集上的loss都在減少,此時處於欠擬合階段;當每個臨界點過去後,模型在訓練集上雖然loss持續減少,但在驗證集上的loss卻開始上升,此時出現過擬合。過擬合出現時,模型將學習到一些僅屬於訓練集的行爲方式,而這些行爲方式在新數據上並不存在。也就是說它開始學習了一些普遍性之外的特性。

最好的方法是獲得足夠大的訓練集,其次是限制模型允許存儲的信息種類和數量。過擬合從處理過程稱爲正則化。

4.4.1 減小網絡大小

這是抑制過擬合的最簡單方式。因爲越大的網絡,越容易學習到不必要的東西。

4.4.2 添加權重正則化

包括L1和L2正則化,我覺得不錯的解釋:L1與L2正則化解釋

4.4.3 添加dropout

訓練過程中,隨機地將謀layer的輸出特徵進行一些丟棄,一般在20%到50%之間。通過dropout引入噪音可以解決不重要的偶然行爲。

4.5 機器學習的普遍流程

4.5.1 定義問題與收集數據

這裏引用原文:

1,What will your input data be? What are you trying to predict? You can only learn to predict
something if you have available training data: for example, you can only learn to classify
the sentiment of movie reviews if you have both movie reviews and sentiment annotations
available. As such, data availability is usually the limiting factor at this stage (unless you
have the means to pay people to collect data for you)

2,What type of problem are you facing? Is it binary classification? Multiclass classification?
Scalar regression? Vector regression? Multiclass, multilabel classification? Something else,
like  clustering,  generation,  or  reinforcement  learning?  Identifying  the  problem  type  will
guide your choice of model architecture, loss function, and so on.

非穩定性問題:你不能根據股票的歷史價位預測出走勢,因爲信息不夠。也不能根據夏天衣物購買情況預測冬天的情況,因爲季節不同。預測的核心假設是未來的行爲表現和過去一致。

4.5.2 選擇衡量成功的標準

對於平衡分類問題,即每個分類的可能性一樣,通用的標準是ROC AUC(接收機工作特性曲線下的面積),對於非平衡問題,可以使用精度或recall,對於排序或多標籤問題,可以使用平均精度。

4.5.3 評價方案的選擇

如前所述

hold-out validation set:當你又大量數據時

K-fold cross-validation:少量數據時

iterated K-fold validation:少量數據時保持高精度

4.5.4 預準備數據

格式化爲張量;縮放到小值;標準化;特徵工程(特別是小量數據)

4.5.5 開發優於基線的模型

基線指的是隨機情況下的表現。構建模型的關鍵選擇:

最後層的激活函數:sigmod or none

損失函數:可在小批量數據上計算,可微。binary_crossentropy,mse or categorical_crossentropy...

優化器:rmsprop,adam等等

分類標準ROC AUC並不能直接被優化,一般以交叉熵替代。

如圖是一個簡單介紹:

 4.5.6 開發過擬合模型

只有經過過擬合,才能知道過擬合的臨界點在哪。方式:

添加layers;擴大layers;循環更多次數

4.5.7 正則化和調節超參數

這步是最花時間的。

1,Add dropout.

2,Try different architectures: add or remove layers.

3,Add L1 and/or L2 regularization.

4,Try different hyperparameters (such as the number of units per layer or the learning rate of
the optimizer) to find the optimal configuration.

5,Optionally, iterate on feature engineering: add new features, or remove features that don’t
seem to be informative.

超參數:一些預設的參數,而非學習調整優化的參數。如隱藏層數量及維度,學習率,batch_size,epochs等

完~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章