方法 機器學習 深度學習 通用工作流程

2022-07-16 06:51:12 字數 2823 閱讀 4116

deep learning with python 4.5節

首先,你必須定義你手頭的問題:

當然,這僅僅只是假設,直到你有乙個確切的模型,這些假設才能被驗證或者被否定。並非所有問題都能解決。只是因為你僅僅收集了一些輸入x和目標y,這並不意味著x包含足夠的資訊去**y。舉個例子,如果你試圖通過**的歷史**去****的**,那麼你不可能成果,因為**的歷史**不包含太多的**資訊。

非平穩問題是一種不可解決的問題,你應該注意此類問題。假設你正在嘗試建立乙個衣服的推薦引擎,你在某乙個月的資料上進行訓練(比如說,8月),你希望能夠在冬天的開始的時候推送你的推薦。這裡有乙個很大的問題:人們購買的衣服型別會根據季節的變化而變化。衣服的購買在幾個月的時間跨度中是一種非平衡現象。在這種情況下,正確的做法是不斷地對過去的資料訓練新的模型,或者在問題處於靜止的時間範圍內收集資料。對於想購買衣服這樣的週期性問題,幾年內的資料足以捕捉到季節的變化,但是記住要讓一年中的時間成為你模型的輸入。

請記住,機器學習只能記住訓練資料中存在的模式。你只能認識你已經看到過的東西。利用機器學習對過去的資料進行訓練,用於**未來,這樣的做法假設未來的行為將於過去類似。但是,通常並非如此。

要控制某些東西,你需要能夠觀察到它。為了取得成功,你必須定義成功是什麼,是正確率?精度或者召回率?還是客戶保留率?你的成功指標的定義將會指導你選擇損失函式,損失函式就是你模型將要優化的內容。損失函式應該能夠直接與你的目標保持一致,例如你業務的成功。

對於均衡分類問題,這類問題中每個類別都有相同的可能性,準確率和roc auc是常用的指標。對於類不平衡問題,你可以用精度和召回。對於排名問題或者多標籤問題,你可以用平均精度。定義你自己的評價指標並不罕見。要了解機器學習成功指標的多樣性以及它們是如何關係不同的問題域,有必要去了解kaggle上的資料科學競賽,這些競賽展示了廣泛的問題和評價指標。

一旦你知道你的目標是什麼,你必須確定你將如何衡量你當前的進度。我們之前已經了解了三種常用的驗證策略:

選擇其中乙個。在大多數情況下,第一種方法工作得很好。

一旦你知道你在訓練什麼,你正在優化什麼,如何評估你的方法,你幾乎已經準備好開始訓練模型。但是首先,你應該將資料格式化為機器學習模型所能接受的形式。這裡,我們假設這個模型是乙個深度學習模型,那麼:

在這個階段,你的目標是做到statistical power(不會翻譯),也就是開發乙個能夠擊敗基線的模型。在mnist數字分類示例中,任何達到大於0.1精度都可以說是具有statistical power; 在imdb的例子中,大於0.5就可以了。

請注意,達到statistical power並不總是可能的。如果在嘗試了多個合理的體系構架之後,仍然無法打敗乙個隨機基線,那麼可能是你要求的問題的答案無法從輸入資料中獲得。記住你提出的兩個假設:

這些假設有可能是錯誤的,在這種情況下你必須重新開始。

假設目前為止一切都很順利,你需要作出三個關鍵的選擇來建立你的第乙個工作模型:

關於損失函式的選擇,請注意,並不總是可以直接優化metric。有時候,沒有簡單的方法可以將metric轉換為損失函式;損失函式畢竟只需要乙個小批量的資料就能計算(理想情況下,損失函式只需要乙個資料就能計算),並且損失函式必須是可微分的(否則,你不能使用反向傳播來訓練你的網路)。例如,廣泛使用的分類度量roc auc就不能直接優化。因此,在分類問題中,通常針對roc auc的**指標(例如,交叉熵)進行優化,一般來說,你希望如果越低的交叉熵,你就能獲得更高的roc auc。

下面的**可以幫助為幾種常見的問題選擇最後一層啟用函式和損失函式

問題型別

最後一層啟用函式

損失函式

二元分類

sigmoid

binary_crossentropy

多類別,單標籤分類

softmax

categorical_crossentropy

多類別,多標籤分類

sigmoid

binary_crossentropy

任意值的回歸問題

none

mse[0,1]之間的回歸問題

sigmoid

mse 或者 binary_crossentropy

一旦你的模型達到了statistical power,那麼問題就變成了:你的模型是否足夠強大?你是否有足夠多的網路層和引數來正確建模你的問題?例如,具有兩個神經元的單層網路在mnist具有statistical power,但是不能很好的解決mnist分類問題。

請記住,機器學習中最困難的就是在優化和泛華之間取得平衡;理想的模型就是站在欠擬合與過擬合之間。要弄清楚這個邊界在**,你必須先穿過它。

要弄清楚你需要多大的模型,你必須先開發乙個過擬合的模型。這很容易:

增加網路層

讓網路層變大

訓練更多次

始終監視著訓練誤差和驗證誤差,以及你所關心的metrics。當你看到模型在驗證集上效能開始下降,就達到了過擬合。下個階段是開始正則化和調整模型,盡可能的接近既不是欠擬合又不是過擬合的理想模型。

這一步將花費大量時間,你將重複修改你的模型,並對其進行訓練,在驗證集上進行評估,再次修改,如此重複,知道模型達到所能達到的最佳效果。以下是你應該嘗試做的一些事情:

請注意以下幾點:每次使用驗證集來調整模型引數時,都會將有關驗證的資訊洩露在模型中。重複幾次是無害的;但是如果重複了很多很多次,那麼最終會導致你的模型在驗證集上過擬合(即使沒有直接在驗證集上進行訓練),這使得驗證過程不太可靠。

一旦你開發出令人滿意的模型,你可以根據所有可用的資料(訓練集和驗證集)來訓練你最終的模型。如果測試集的結果明顯低於驗證集上結果,那麼可能意味著你的驗證過程不太可靠,或者你的模型在驗證集中已經過擬合了。在這種情況下,你可能需要更為靠譜的驗證策略(例如迭代k-fold驗證)

機器學習的通用工作流程

1.定義問題,收集資料集首先,你必須定義所面對的問題,只有擁有可用的訓練資料,你才能學習 某件事情。因此,資料可用性通常是這 階段的限制因素。其次,你面對的是什麼型別的問題?是二分類問題 多分類問題 標量回歸問題 向量回歸問題,還是多分類 多標籤問題?或者是其他問題,比如聚類 生成或強化學習?確定問...

機器學習中的通用工作流程

想 什麼?有哪些資料可用?是否需要收集更多的資料?是否需要人工標註?尋找能夠可靠評估目標成功的方法。為任務設計不同的評價指標,如針對簡單任務,可以用 精度。準備用於評估模型的驗證過程,即定義訓練集 驗證集 測試集。驗證集和測試集的標籤不應洩露到訓練資料中。如針對時序 驗證資料和測試資料的時間都應在訓...

構建機器學習工作流

匯入相關庫 from pyspark import sparkcontext from pyspark.sql import sparksession from pyspark.ml import pipeline from pyspark.ml.classification import logi...