色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyTorch教程-19.1. 什么是超參數優化?

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:44 ? 次閱讀

正如我們在前幾章中所見,深度神經網絡帶有大量在訓練過程中學習的參數或權重。除此之外,每個神經網絡都有額外的 超參數需要用戶配置。例如,為了確保隨機梯度下降收斂到訓練損失的局部最優(參見第 12 節),我們必須調整學習率和批量大小。為了避免在訓練數據集上過度擬合,我們可能必須設置正則化參數,例如權重衰減(參見第 3.7 節)或 dropout(參見 第 5.6 節)). 我們可以通過設置層數和每層單元或過濾器的數量(即權重的有效數量)來定義模型的容量和歸納偏差。

不幸的是,我們不能簡單地通過最小化訓練損失來調整這些超參數,因為這會導致訓練數據過度擬合。例如,將正則化參數(如 dropout 或權重衰減)設置為零會導致較小的訓練損失,但可能會損害泛化性能。

pYYBAGR9PUqAbQbSAAB0OkZMfC0966.svg

圖 19.1.1機器學習中的典型工作流程,包括使用不同的超參數多次訓練模型。

如果沒有不同形式的自動化,就必須以反復試驗的方式手動設置超參數,這相當于機器學習工作流程中耗時且困難的部分。例如,考慮在 CIFAR-10 上訓練 ResNet(參見第 8.6 節g4dn.xlarge),這需要在 Amazon Elastic Cloud Compute (EC2)實例上訓練 2 個多小時。即使只是依次嘗試十個超參數配置,這也已經花費了我們大約一天的時間。更糟糕的是,超參數通常不能直接跨架構和數據集傳輸 (Bardenet等人,2013 年,Feurer等人,2022 年,Wistuba等人,2018 年),并且需要針對每個新任務重新優化。此外,對于大多數超參數,沒有經驗法則,需要專業知識才能找到合理的值。

超參數優化 (HPO)算法旨在以一種有原則的和自動化的方式解決這個問題 (Feurer 和 Hutter,2018 年),將其定義為一個全局優化問題。默認目標是保留驗證數據集上的錯誤,但原則上可以是任何其他業務指標。它可以與次要目標結合或受其約束,例如訓練時間、推理時間或模型復雜性。

最近,超參數優化已擴展到神經架構搜索 (NAS) (Elsken等人,2018 年,Wistuba等人,2019 年),目標是找到全新的神經網絡架構。與經典 HPO 相比,NAS 在計算方面的成本更高,并且需要額外的努力才能在實踐中保持可行性。HPO 和 NAS 都可以被視為 AutoML 的子領域 ( Hutter et al. , 2019 ),旨在自動化整個 ML 管道。

在本節中,我們將介紹 HPO 并展示我們如何自動找到第 4.5 節介紹的邏輯回歸示例的最佳超參數。

19.1.1. 優化問題

我們將從一個簡單的玩具問題開始:搜索第 4.5 節SoftmaxRegression中 的多類邏輯回歸模型的學習率,以最小化 Fashion MNIST 數據集上的驗證錯誤。雖然批量大小或輪數等其他超參數也值得調整,但為簡單起見,我們只關注學習率。

import numpy as np
import torch
from scipy import stats
from torch import nn
from d2l import torch as d2l

在運行 HPO 之前,我們首先需要定義兩個要素:目標函數和配置空間。

19.1.1.1。目標函數

學習算法的性能可以看作是一個函數 f:X→R從超參數空間映射x∈X到驗證損失。對于每一個評價f(x),我們必須訓練和驗證我們的機器學習模型,對于在大型數據集上訓練的深度神經網絡,這可能是時間和計算密集型的。鑒于我們的標準f(x)我們的目標是找到 x?∈argminx∈Xf(x).

沒有簡單的方法來計算的梯度f關于 x,因為它需要在整個訓練過程中傳播梯度。雖然最近有工作 (Franceschi等人,2017 年,Maclaurin等人,2015 年)通過近似“超梯度”驅動 HPO,但現有方法中沒有一種與最先進的方法具有競爭力,我們將不在這里討論它們。此外,評估的計算負擔f 要求 HPO 算法以盡可能少的樣本接近全局最優。

神經網絡的訓練是隨機的(例如,權重是隨機初始化的,mini-batches 是隨機采樣的),因此我們的觀察結果會很嘈雜:y~f(x)+?,我們通常假設?~N(0,σ) 觀察噪聲呈高斯分布。

面對所有這些挑戰,我們通常會嘗試快速識別一小組性能良好的超參數配置,而不是準確地達到全局最優值。然而,由于大多數神經網絡模型的大量計算需求,即使這樣也可能需要數天或數周的計算時間。我們將在19.4 節中探討如何通過分布搜索或使用目標函數的評估成本更低的近似值來加快優化過程。

我們從計算模型驗證誤差的方法開始。

class HPOTrainer(d2l.Trainer): #@save
  def validation_error(self):
    self.model.eval()
    accuracy = 0
    val_batch_idx = 0
    for batch in self.val_dataloader:
      with torch.no_grad():
        x, y = self.prepare_batch(batch)
        y_hat = self.model(x)
        accuracy += self.model.accuracy(y_hat, y)
      val_batch_idx += 1
    return 1 - accuracy / val_batch_idx

我們優化了關于超參數配置的驗證錯誤config,由learning_rate. 對于每個評估,我們訓練我們的模型max_epochsepochs,然后計算并返回其驗證錯誤:

def hpo_objective_softmax_classification(config, max_epochs=8):
  learning_rate = config["learning_rate"]
  trainer = d2l.HPOTrainer(max_epochs=max_epochs)
  data = d2l.FashionMNIST(batch_size=16)
  model = d2l.SoftmaxRegression(num_outputs=10, lr=learning_rate)
  trainer.fit(model=model, data=data)
  return trainer.validation_error().detach().numpy()

19.1.1.2。配置空間

隨著目標函數f(x),我們還需要定義可行集x∈X優化過來,稱為配置空間或搜索空間。對于我們的邏輯回歸示例,我們將使用:

config_space = {"learning_rate": stats.loguniform(1e-4, 1)}

這里我們使用loguniformSciPy 中的對象,它表示對數空間中 -4 和 -1 之間的均勻分布。這個對象允許我們從這個分布中抽樣隨機變量。

每個超參數都有一個數據類型,例如floatfor learning_rate,以及一個封閉的有界范圍(即下限和上限)。我們通常為每個超參數分配一個先驗分布(例如,均勻分布或對數均勻分布)以從中進行采樣。一些正參數(例如learning_rate)最好用對數標度表示,因為最佳值可能相差幾個數量級,而其他參數(例如動量)則采用線性標度。

下面我們展示了一個配置空間的簡單示例,該配置空間由多層感知器的典型超參數組成,包括它們的類型和標準范圍。

表 19.1.1多層感知機配置空間示例

姓名 類型 超參數范圍 對數刻度
學習率 漂浮 [10?6,10?1] 是的
批量大小 整數 [8,256] 是的
勢頭 漂浮 [0,0.99]
激活函數 明確的 {tanh,relu}
單位數 整數 [32,1024] 是的
層數 整數 [1,6]

一般來說,配置空間的結構X 可能很復雜,也可能與Rd. 在實踐中,一些超參數可能取決于其他超參數的值。例如,假設我們嘗試調整多層感知器的層數,以及每一層的單元數。的單位數目l?th只有當網絡至少有l+1層。這些高級 HPO 問題超出了本章的范圍。我們建議感興趣的讀者參閱 (Baptista 和 Poloczek,2018 年,Hutter等人,2011 年,Jenatton等人,2017 年)。

配置空間對于超參數優化起著重要作用,因為沒有算法可以找到不包含在配置空間中的東西。另一方面,如果范圍太大,找到性能良好的配置的計算預算可能變得不可行。

19.1.2. 隨機搜索

隨機搜索是我們將考慮的第一個超參數優化算法。隨機搜索的主要思想是從配置空間中獨立采樣,直到用盡預定義的預算(例如最大迭代次數),并返回最佳觀察到的配置。所有評估都可以并行獨立執行(請參閱第 19.3 節),但這里我們為簡單起見使用順序循環。

errors, values = [], []
num_iterations = 5

for i in range(num_iterations):
  learning_rate = config_space["learning_rate"].rvs()
  print(f"Trial {i}: learning_rate = {learning_rate}")
  y = hpo_objective_softmax_classification({"learning_rate": learning_rate})
  print(f"  validation_error = {y}")
  values.append(learning_rate)
  errors.append(y)

  validation_error = 0.17659997940063477

poYBAGR9PU2AYNJAAAFM5HW03FQ313.svg

poYBAGR9PU-AYAcXAAE2nbZDPhQ206.svg

poYBAGR9PVGANmRCAAFEigFCM54326.svg

pYYBAGR9PVSAdLGuAAFCIuXR1vQ537.svg

pYYBAGR9PVaAc6TBAAFAqt6D-Ec669.svg

最好的學習率就是驗證錯誤率最低的那個。

best_idx = np.argmin(errors)
print(f"optimal learning rate = {values[best_idx]}")

optimal learning rate = 0.24202220709278127

由于其簡單性和通用性,隨機搜索是最常用的 HPO 算法之一。它不需要任何復雜的實現,并且可以應用于任何配置空間,只要我們可以為每個超參數定義一些概率分布。

不幸的是,隨機搜索也有一些缺點。首先,它沒有根據迄今為止收集的先前觀察結果調整抽樣分布。因此,與性能較好的配置相比,同樣可能對性能較差的配置進行采樣。其次,所有配置都花費了相同數量的資源,即使有些配置可能顯示出較差的初始性能并且不太可能勝過之前看到的配置。

在接下來的部分中,我們將研究更多樣本高效的超參數優化算法,這些算法通過使用模型來指導搜索來克服隨機搜索的缺點。我們還將研究自動停止對性能不佳配置的評估過程以加快優化過程的算法。

19.1.3. 概括

在本節中,我們介紹了超參數優化 (HPO) 以及如何通過定義配置空間和目標函數將其表述為全局優化。我們還實現了我們的第一個 HPO 算法,隨機搜索,并將其應用于簡單的 softmax 分類問題。

雖然隨機搜索非常簡單,但它是網格搜索的更好替代方案,后者只評估一組固定的超參數。隨機搜索在某種程度上減輕了維數災難 ( Bellman, 1966 ),并且如果標準最強烈地依賴于超參數的一小部分,則它可以比網格搜索更有效。

19.1.4。練習

在本章中,我們優化了在不相交的訓練集上訓練后模型的驗證錯誤。為簡單起見,我們的代碼使用 Trainer.val_dataloader,它映射到 周圍的加載器 FashionMNIST.val。

說服自己(通過查看代碼)這意味著我們使用原始 FashionMNIST 訓練集(60000 個示例)進行訓練,并使用原始測試集(10000 個示例)進行驗證。

為什么這種做法會有問題?提示:重新閱讀 第 3.6 節,尤其是關于模型選擇的內容。

我們應該怎么做呢?

我們在上面說過,通過梯度下降進行超參數優化是很難做到的。考慮一個小問題,例如在 FashionMNIST 數據集(第 5.2 節)上訓練一個批量大小為 256 的雙層感知器。我們想調整 SGD 的學習率,以便在一個訓練周期后最小化驗證指標.

為什么我們不能為此目的使用驗證錯誤?您將使用驗證集的什么指標?

在訓練一個時期后(粗略地)繪制驗證指標的計算圖。您可以假設初始權重和超參數(例如學習率)是該圖的輸入節點。提示:重新閱讀 第 5.3 節中有關計算圖的內容。

粗略估計在此圖的前向傳遞過程中需要存儲的浮點值的數量。提示:FashionMNIST 有 60000 個案例。假設所需的內存由每層之后的激活決定,并在第 5.2 節中查找層寬度。

除了需要大量的計算和存儲之外,基于梯度的超參數優化還會遇到哪些其他問題?提示:重新閱讀 第 5.4 節中關于梯度消失和爆炸的內容。

進階:閱讀(Maclaurin等人,2015 年),了解基于梯度的 HPO 的優雅(但仍然有些不切實際)方法。

網格搜索是另一個 HPO 基線,我們在其中為每個超參數定義一個等距網格,然后迭代(組合)笛卡爾積以建議配置。

我們在上面說過,如果標準最強烈地依賴于超參數的一小部分,那么在大量超參數上隨機搜索比網格搜索 HPO 更有效。為什么是這樣?提示:閱讀 (Bergstra等人,2011 年)。

Discussions

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4774

    瀏覽量

    100899
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13250
收藏 人收藏

    評論

    相關推薦

    Pytorch模型訓練實用PDF教程【中文】

    ?模型部分?還是優化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對癥下藥,才能訓練出一個較滿意的模型。本教程內容及結構:本教程內容主要為在 PyTorch 中訓練一個模型所可能涉及到的方法及函數,并且
    發表于 12-21 09:18

    改善深層神經網絡--參數優化、batch正則化和程序框架 學習總結

    《深度學習工程師-吳恩達》02改善深層神經網絡--參數優化、batch正則化和程序框架 學習總結
    發表于 06-16 14:52

    pytorch模型轉換需要注意的事項有哪些?

    ,并且可以更積極地進行優化。 支持什么格式的pytorch模型? 答:Sophon的PyTorch模型編譯工具BMNETP只接受PyTorch的JIT模型JIT模型(TorchScri
    發表于 09-18 08:05

    調參心得:如何優化參數的,如何證實方法是有效的

    自動化參數優化及其工具最主要的問題之一,是你常常偏離原本的工作方式。預測任務無關的參數優化
    的頭像 發表于 08-31 09:53 ?2w次閱讀

    PerferredNetworks發布了其參數優化框架的beta版本

    Optuna作為參數優化框架可以和PFN自己的深度學習框架Chainer充分結合使用。只需要在Chainer中寫接受來自Optuna的參數
    的頭像 發表于 12-14 09:47 ?3114次閱讀

    PyTorch教程6.2之參數管理

    電子發燒友網站提供《PyTorch教程6.2之參數管理.pdf》資料免費下載
    發表于 06-05 15:24 ?0次下載
    <b class='flag-5'>PyTorch</b>教程6.2之<b class='flag-5'>參數</b>管理

    PyTorch教程12.1之優化和深度學習

    電子發燒友網站提供《PyTorch教程12.1之優化和深度學習.pdf》資料免費下載
    發表于 06-05 15:08 ?0次下載
    <b class='flag-5'>PyTorch</b>教程12.1之<b class='flag-5'>優化</b>和深度學習

    PyTorch教程13.7之參數服務器

    電子發燒友網站提供《PyTorch教程13.7之參數服務器.pdf》資料免費下載
    發表于 06-05 14:22 ?0次下載
    <b class='flag-5'>PyTorch</b>教程13.7之<b class='flag-5'>參數</b>服務器

    PyTorch教程19.1之什么是參數優化

    電子發燒友網站提供《PyTorch教程19.1之什么是參數優化.pdf》資料免費下載
    發表于 06-05 10:25 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>19.1</b>之什么是<b class='flag-5'>超</b><b class='flag-5'>參數</b><b class='flag-5'>優化</b>

    PyTorch教程19.2之參數優化API

    電子發燒友網站提供《PyTorch教程19.2之參數優化API.pdf》資料免費下載
    發表于 06-05 10:27 ?0次下載
    <b class='flag-5'>PyTorch</b>教程19.2之<b class='flag-5'>超</b><b class='flag-5'>參數</b><b class='flag-5'>優化</b>API

    PyTorch教程19.4之多保真超參數優化

    電子發燒友網站提供《PyTorch教程19.4之多保真超參數優化.pdf》資料免費下載
    發表于 06-05 10:45 ?0次下載
    <b class='flag-5'>PyTorch</b>教程19.4之多保真超<b class='flag-5'>參數</b><b class='flag-5'>優化</b>

    PyTorch教程-19.2. 參數優化 API

    19.2. 參數優化 API? Colab [火炬]在 Colab 中打開筆記本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的頭像 發表于 06-05 15:44 ?360次閱讀
    <b class='flag-5'>PyTorch</b>教程-19.2. <b class='flag-5'>超</b><b class='flag-5'>參數</b><b class='flag-5'>優化</b> API

    PyTorch教程-19.4. 多保真超參數優化

    SageMaker Studio Lab 中打開筆記本 即使在中等規模的數據集上,訓練神經網絡也可能很昂貴。根據配置空間(第 19.1.1.2 節),參數優化需要數十到數百次函數評估才能找到性能
    的頭像 發表于 06-05 15:44 ?448次閱讀
    <b class='flag-5'>PyTorch</b>教程-19.4. 多保真超<b class='flag-5'>參數</b><b class='flag-5'>優化</b>

    2.0優化PyTorch推理與AWS引力子處理器

    2.0優化PyTorch推理與AWS引力子處理器
    的頭像 發表于 08-31 14:27 ?630次閱讀
    2.0<b class='flag-5'>優化</b><b class='flag-5'>PyTorch</b>推理與AWS引力子處理器

    利用Arm Kleidi技術實現PyTorch優化

    PyTorch 是一個廣泛應用的開源機器學習 (ML) 庫。近年來,Arm 與合作伙伴通力協作,持續改進 PyTorch 的推理性能。本文將詳細介紹如何利用 Arm Kleidi 技術提升 Arm
    的頭像 發表于 12-23 09:19 ?205次閱讀
    利用Arm Kleidi技術實現<b class='flag-5'>PyTorch</b><b class='flag-5'>優化</b>
    主站蜘蛛池模板: 色狠狠色狠狠综合天天| 亚洲国产欧美日本大妈| 免费啪视频观试看视频| 美女脱了内裤张开腿让男人桶到爽| 另类重口bdsm日本tv| 免费看国产曰批40分钟| 欧美性色生活片天天看99顶级| 彭丹吃奶门| 特黄特色大片免费播放器9| 亚洲 自拍 欧洲 视频二区| 亚洲人成www在线播放| 在线观看免费av网| 99热在线视频| 国产69精品久久久熟女| 国产精品VIDEOSSEX久久发布| 国产亚洲精品V在线观看一| 精品视频网站| 蜜芽一区二区国产精品| 飘雪在线观看免费高清完整版韩国 | 肉奴隷 赤坂丽在线播放| 小寡妇好紧进去了好大看视频| 亚洲永久精品AV在线观看| 999久久久国产| 调教美丽的白丝袜麻麻视频| 国产人成高清在线视频99| 九九免费的视频| 欧美精品成人一区二区在线观看| 色丁香婷婷综合缴情综| 亚洲精品不卡视频| 2021国产精品视频| 公主纯肉高H文| 娇妻让壮男弄的流白浆| 美娇妻的性奴史1一4| 日韩免费一级毛片| 亚洲欧洲一级| FREEXXX性乌克兰XXX| 国产乱码伦人偷精品视频| 久拍国产在线观看| 日日噜噜噜夜夜爽爽狠狠| 亚洲精品卡2卡3卡4卡5卡区| 91欧美秘密入口|