簡體   English   中英

使用前饋神經網絡進行超參數調整和過擬合 - Mini-Batch Epoch 和交叉驗證

[英]Hyper-parameter tuning and Over-fitting with Feed-Forward Neural Network - Mini-Batch Epoch and Cross Validation

我正在考慮為使用PyTorch實現的前饋神經網絡 (FNN) 實現超參數調整方法。 我最初的 FNN 模型名為net ,已使用具有 epochs 的小批量學習方法實現:

#Parameters
batch_size = 50 #larger batch size leads to over fitting
num_epochs = 1000 
learning_rate = 0.01 #was .01-AKA step size - The amount that the weights are updated during training
batch_no = len(x_train) // batch_size 

criterion = nn.CrossEntropyLoss()  #performance of a classification model whose output is a probability value between 0 and 1
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)

for epoch in range(num_epochs):
    if epoch % 20 == 0:
        print('Epoch {}'.format(epoch+1))
    x_train, y_train = shuffle(x_train, y_train)
    # Mini batch learning - mini batch since batch size < n(batch gradient descent), but > 1 (stochastic gradient descent)
    for i in range(batch_no):
        start = i * batch_size
        end = start + batch_size
        x_var = Variable(torch.FloatTensor(x_train[start:end]))
        y_var = Variable(torch.LongTensor(y_train[start:end]))
        # Forward + Backward + Optimize
        optimizer.zero_grad()
        ypred_var = net(x_var)
        loss =criterion(ypred_var, y_var)
        loss.backward()
        optimizer.step()

我最后在一個單獨的測試集上測試我的模型。

我遇到了一種使用隨機搜索來調整超參數以及實現 K 折交叉驗證 ( RandomizedSearchCV ) 的方法。

我的問題是雙重的(沒有雙關語!)首先是理論上的:k 折驗證是必要的還是可以為小批量前饋神經網絡增加任何好處? 據我所知,小批量方法應該做大致相同的工作,停止過度擬合。

我也在這里找到了一個很好的答案但我不確定這是否專門解決了小批量方法。

其次,如果不需要k-fold, PyTorch是否有另一個超參數調整功能來避免手動創建一個?

  • 當數據集非常小時,k 折交叉驗證通常很有用。 因此,如果您在像 CIFAR10(很大,60000 張圖像)這樣的數據集上進行訓練,那么您不需要 k 折交叉驗證。
  • k 折交叉驗證的想法是查看模型性能(泛化)如何隨着不同的數據子集用於訓練和測試而變化。 當您的數據非常少時,這變得很重要。 但是,對於大型數據集,測試數據集上的度量結果足以測試模型的泛化性。
  • 因此,是否需要 k 折交叉驗證取決於數據集的大小。 這與您使用的型號無關。
  • 如果你看一下深度學習這本書的這一章(這是在這個鏈接中第一次引用的):

小批量可以提供正則化效果(Wilson 和 Martinez,2003),這可能是由於它們添加到學習過程中的噪音。 泛化誤差通常最適合批量大小為 1 的情況。使用如此小的批量大小進行訓練可能需要很小的學習率來保持穩定性,因為梯度估計的差異很大。 由於需要執行更多步驟,因此總運行時間可能非常高,這既是因為學習率降低,又是因為需要更多步驟來觀察整個訓練集。

  • 所以,是的,小批量訓練在一定程度上會產生正則化效果(減少過擬合)。
  • 沒有內置的超參數調整(至少在撰寫此答案時),但許多開發人員為此目的開發了工具(例如)。 您可以通過搜索找到更多此類工具。 這個問題的答案列出了很多這樣的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM