1. 程式人生 > 其它 >L02_機器學習任務攻略

L02_機器學習任務攻略

目錄

Framework of ML

訓練模型的過程分為三個步驟

  • 寫出一個具有未知數的\(Function\)\(y=f_{\theta}(x)\)\(\theta\)表示模型中的所有的未知引數。
  • 定義損失函式\(L(\theta)\),函式的輸入就是一組引數,用來判斷這一組引數的好壞。
  • 進行最優化,尋找讓損失函式最小的引數\(\theta^{*}\)

怎樣將模型訓練的更好

情況一:在訓練資料集的Loss比較大

1. 模型過於簡單,相當於在大海撈針,但是針不在大海中。

解決方法:增加模型的彈性。

  • 增加輸入的\(Features\)

  • 使用深度學習,使用更多的neurons和layers。

  • Optimization Issue,最優化做的不夠好,雖然存在最優的\(\theta^{*}\),但是設計的最優化方法並不能找到,相當於針在海里,但是無法找到。

    解決方法:使用更加強大的優化技術。

2. 怎麼判斷是哪一個問題呢?

通過比較不同的模型,來得知自己的model夠不夠大。

  • 從一個彈性比較小的神經網路(或者其他模型)出發,因為這些模型比較容易進行最優化,一般不會出現失敗的情況。
  • 然後設計一個更深的神經網路,如果更深的彈性更大的神經網路還沒有彈性較小的神經網路得到的Loss小,那就說明是Optimization Issue。

情況二:在訓練集的Loss較小,但是在測試集的比較大

Overfitting

舉例說明原因

舉一個比較極端的例子:

\[Training\quad data :{(x^{1},\hat{y}^{2}),(x^{1},\hat{y}^{2}),\cdots,(x^{N},\hat{y}^{N})}\\ f(x) = \begin{cases} \hat{y}^{i}\quad \quad &\exists = x \\ random & otherwise \end{cases} \]

​ 這個函式在訓練集上的Loss為0,但是在測試集上的Loss比較大。

另一個比較可能的原因是訓練資料太少,出現了類似於插值函式中的龍格現象的問題。

解決方法:
  1. 對訓練資料集進行修改。

    • 增加訓練資料的量;

    • 進行Data augmentation,對原有的資料進行合理的修改;

  2. 對模型進行修改,選擇彈性較小的模型,給自己的模型進行限制(不能給出太大的限制)。

    • 使用更少的引數,共享相同的引數
    • 使用更少的features
    • Early stopping
    • Reguarization
    • Dropout