動手學深度學習12 模型選擇,欠擬合和過擬合

2021-10-01 14:25:17 字數 4871 閱讀 1280

小結模型選擇、欠擬合和過擬合

前幾節給予fashion_mnist資料集的實驗中,我們評價了機器學習模型在訓練集合測試集上的表現。通常得到的結果都是訓練資料集上更準確時,它在測試集上表現不一定更好,這就涉及到了模型的選擇以及擬合程度的選擇。

訓練誤差和泛化誤差

模型選擇

從嚴格意義上講,測試集只能在所有的超引數和模型引數選定後使用一次,不可以使用測試集選擇模型,如調參。由於無法從訓練誤差估計泛化誤差,因此也不應該依賴訓練資料選擇模型。鑑於此,我們可以預留一部分在訓練資料集和測試資料集以外的資料來進行模型選擇。這部分資料被稱為驗證資料集(validation set)。例如,我們可以從給定的訓練集中隨機選取一部分作為驗證集,而剩餘部分作為真正的訓練集。

k折交叉驗證

欠擬合和過擬合

欠擬合:模型無法得到較低的訓練誤差 過擬合:模型的訓練誤差遠小於它在測試集上的誤差 討論一下兩個因素:模型複雜度和訓練資料集大小

模型複雜度

為了解釋模型複雜度,我們以多項式函式擬合為例。給定乙個由標量資料特徵x和對應的標量標籤y組成的訓練資料集,多項式函式擬合的目標是找乙個k階多項式函式 \(\hat = b+ \sum_^x^w_\) 來近似y。在上式中,\(w_是模型的權重引數,b為偏置引數\)。與線性回歸相同,多項式函式擬合也是用平方損失函式。特別的一階多項式函式擬合又叫做線性函式擬合。

因為告誡多項式函式模型引數更多,模型函式的選擇空間更大,所以告誡多項式函式比低階多項式函式的複雜程度高。高階多項式函式比低階多項式函式更容易在相同的訓練集上得到更低的訓練誤差。給定訓練集,如果模型的複雜度過低,會讓你容易出現欠擬合,如果模型複雜度過高,很容易出現過擬合。選擇合適複雜度的模型可以有效應對欠擬合和過擬合

訓練資料集大小

在計算資源允許的情況下,通常希望訓練資料集大一些,特別是在模型複雜度較高的時候,例如層數較多的深度學習模型。

多項式函式擬合實驗

%matplotlib inline

import torch

import numpy as np

import sys

import d2lzh_pytorch as d2l

我們將生成乙個人工資料集。在訓練資料集和測試資料集中,給定樣本特徵x,我們使用如下的三階多項式生成該樣本的標籤: \(y = 1.2x-3.4x^+5.6x^+5+\epsilon\) 其中雜訊項$\epsilon$服從均值為0,標準差為0.01的正態分佈。 訓練資料集和測試資料集的樣本數都設為100。

n_train,n_test,true_w,true_b = 100,100,[1.2,-3.4,5.6],5

features = torch.randn((n_train+n_test,1))

ploy_features = torch.cat((features,torch.pow(features,2),torch.pow(features,3)),1)

# 組成三維tensor,與numpy中的concentrate,pandas裡面的concat相似

labels = (true_w[0]*ploy_features[:,0]+true_w[1]*ploy_features[:,1]+true_w[2]*ploy_features[:,2]+true_b)

labels +=torch.tensor(np.random.normal(0,0.01,size=labels.size()),dtype=torch.float32)

features[:2],ploy_features[:2],labels[:2]

# 前兩個樣本名

(tensor([[0.0698],

[0.8801]]), tensor([[6.9778e-02, 4.8690e-03, 3.3975e-04],

[8.8014e-01, 7.7465e-01, 6.8180e-01]]), tensor([5.0629, 7.2319]))

定義、訓練和測試模型
#定義作圖函式 semiplgy 其中y軸使用了對數尺度

def semilogy(x,y,x_label,y_label,x2=none,y2=none,legend=none,figsize=(3.5,2.5)):

d2l.set_figsize(figsize)

d2l.plt.xlabel(x_label)

d2l.plt.ylabel(y_label)

d2l.plt.semilogy(x,y)

if x2 and y2:

d2l.plt.semilogy(x2,y2,linestyle=':')

d2l.plt.legend(legend)

和線性回歸一樣,多項式函式擬合也是用平方損失函式,因為我們嘗試使用不同的複雜度的模型來擬合生成的資料集,所以我們把模型定義部分放在fit_and_plot函式中。多項式函式擬合的訓練和測試步驟與softmax回歸中的步驟相似。

num_epochs,loss = 100,torch.nn.mseloss()

def fit_and_plot(train_features,test_features,train_labels,test_labels):

net = torch.nn.linear(train_features.shape[-1],1)

# linear文件中lpytorch已經將引數初始化了,所以不必再手動初始化

欠擬合

fit_and_plot(features[:n_train,:],features[n_train:,:],

過擬合

fit_and_plot(features[:20,:],features[n_train:,:],

小結

深度學習 動手學深度學習筆記 12

g是乙個生成的網路,它接收乙個隨機的雜訊z,通過這個雜訊生成,記做g z d是乙個判別網路,判別一張是不是 真實的 它的輸入引數是x,x代表一張,輸出d x 代表x為真實的概率,如果為1,就代表100 是真實的,而輸出為0,就代表不可能是真實的。在訓練過程中,生成網路g的目標就是盡量生成真實的去欺騙...

過擬合與欠擬合(動手學深度學習)

方法 權重衰減等價於 l2 範數正則化 regularization 正則化通過為模型損失函式新增懲罰項使學出的模型引數值較小,是應對過擬合的常用手段。l2 範數正則化 regularization l2 範數正則化在模型原損失函式基礎上新增 l2 範數懲罰項,從而得到訓練所需要最小化的函式。l2 ...

動手學深度學習 語言模型

語言模型 一段自然語言文字可以看作是乙個離散時間序列,給定乙個長度為t tt的詞的序列 1,2,t,omega omega 1 2 t 語言模型的目標就是評估該序列是否合理,即計算該序列的概率。假設序列的每個詞是依次生成的,則 p 1,2 t t 1tp t 1,t 1 p 1 p 2 1 p t ...