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

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

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

3天內不再提示

為什么SAM可以實現更好的泛化?如何在Pytorch中實現SAM?

深度學習自然語言處理 ? 來源:AI公園 ? 作者:Sean Benhur J ? 2021-04-03 14:48 ? 次閱讀

導讀 使用SAM(銳度感知最小化),優化到損失的最平坦的最小值的地方,增強泛化能力。

動機來自先前的工作,在此基礎上,我們提出了一種新的、有效的方法來同時減小損失值和損失的銳度。具體來說,在我們的處理過程中,進行銳度感知最小化(SAM),在領域內尋找具有均勻的低損失值的參數。這個公式產生了一個最小-最大優化問題,在這個問題上梯度下降可以有效地執行。我們提出的實證結果表明,SAM在各種基準數據集上都改善了的模型泛化。

深度學習中,我們使用SGD/Adam等優化算法在我們的模型中實現收斂,從而找到全局最小值,即訓練數據集中損失較低的點。但等幾種研究表明,許多網絡可以很容易地記住訓練數據并有能力隨時overfit,為了防止這個問題,增強泛化能力,谷歌研究人員發表了一篇新論文叫做Sharpness Awareness Minimization,在CIFAR10上以及其他的數據集上達到了最先進的結果。

在本文中,我們將看看為什么SAM可以實現更好的泛化,以及我們如何在Pytorch中實現SAM。

SAM的原理是什么?

在梯度下降或任何其他優化算法中,我們的目標是找到一個具有低損失值的參數。但是,與其他常規的優化方法相比,SAM實現了更好的泛化,它將重點放在領域內尋找具有均勻的低損失值的參數(而不是只有參數本身具有低損失值)上。

由于計算鄰域參數而不是計算單個參數,損失超平面比其他優化方法更平坦,這反過來增強了模型的泛化。

(左))用SGD訓練的ResNet收斂到的一個尖銳的最小值。(右)用SAM訓練的相同的ResNet收斂到的一個平坦的最小值。

注意:SAM不是一個新的優化器,它與其他常見的優化器一起使用,比如SGD/Adam。

在Pytorch中實現SAM

在Pytorch中實現SAM非常簡單和直接

import torch

class SAM(torch.optim.Optimizer):

def __init__(self, params, base_optimizer, rho=0.05, **kwargs):

assert rho 》= 0.0, f“Invalid rho, should be non-negative: {rho}”

defaults = dict(rho=rho, **kwargs)

super(SAM, self).__init__(params, defaults)

self.base_optimizer = base_optimizer(self.param_groups, **kwargs)

self.param_groups = self.base_optimizer.param_groups

@torch.no_grad()

def first_step(self, zero_grad=False):

grad_norm = self._grad_norm()

for group in self.param_groups:

scale = group[“rho”] / (grad_norm + 1e-12)

for p in group[“params”]:

if p.grad is None: continue

e_w = p.grad * scale.to(p)

p.add_(e_w) # climb to the local maximum “w + e(w)”

self.state[p][“e_w”] = e_w

if zero_grad: self.zero_grad()

@torch.no_grad()

def second_step(self, zero_grad=False):

for group in self.param_groups:

for p in group[“params”]:

if p.grad is None: continue

p.sub_(self.state[p][“e_w”]) # get back to “w” from “w + e(w)”

self.base_optimizer.step() # do the actual “sharpness-aware” update

if zero_grad: self.zero_grad()

def _grad_norm(self):

shared_device = self.param_groups[0][“params”][0].device # put everything on the same device, in case of model parallelism

norm = torch.norm(

torch.stack([

p.grad.norm(p=2).to(shared_device)

for group in self.param_groups for p in group[“params”]

if p.grad is not None

]),

p=2

return norm

代碼取自非官方的Pytorch實現。

代碼解釋:

首先,我們從Pytorch繼承優化器類來創建一個優化器,盡管SAM不是一個新的優化器,而是在需要繼承該類的每一步更新梯度(在基礎優化器的幫助下)。

該類接受模型參數、基本優化器和rho, rho是計算最大損失的鄰域大小。

在進行下一步之前,讓我們先看看文中提到的偽代碼,它將幫助我們在沒有數學的情況下理解上述代碼。

bf4472f8-92a2-11eb-8b86-12bb97331649.jpg

正如我們在計算第一次反向傳遞后的偽代碼中看到的,我們計算epsilon并將其添加到參數中,這些步驟是在上述python代碼的方法first_step中實現的。

現在在計算了第一步之后,我們必須回到之前的權重來計算基礎優化器的實際步驟,這些步驟在函數second_step中實現。

函數_grad_norm用于返回矩陣向量的norm,即偽代碼的第10行

在構建這個類后,你可以簡單地使用它為你的深度學習項目通過以下的訓練函數片段。

from sam import SAM

。。.

model = YourModel()

base_optimizer = torch.optim.SGD # define an optimizer for the “sharpness-aware” update

optimizer = SAM(model.parameters(), base_optimizer, lr=0.1, momentum=0.9)

。。.

for input, output in data:

# first forward-backward pass

loss = loss_function(output, model(input)) # use this loss for any training statistics

loss.backward()

optimizer.first_step(zero_grad=True)

# second forward-backward pass

loss_function(output, model(input)).backward() # make sure to do a full forward pass

optimizer.second_step(zero_grad=True)

。。.

總結

雖然SAM的泛化效果較好,但是這種方法的主要缺點是,由于前后兩次計算銳度感知梯度,需要花費兩倍的訓練時間。除此之外,SAM還在最近發布的NFNETS上證明了它的效果,這是ImageNet目前的最高水平,在未來,我們可以期待越來越多的論文利用這一技術來實現更好的泛化。

英文原文:https://pub.towardsai.net/we-dont-need-to-worry-about-overfitting-anymore-9fb31a154c81
編輯:lyn

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

    關注

    0

    文章

    113

    瀏覽量

    33645
  • 深度學習
    +關注

    關注

    73

    文章

    5527

    瀏覽量

    121892
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13512

原文標題:【過擬合】再也不用擔心過擬合的問題了

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    R&S?SAM100 系統放大器

    RS?SAM100 系統放大器是一種超寬帶固態微波放大器,頻率范圍為 2 GHz 至 20 GHz。RS?SAM100 還適用于替代電子管放大器和由窄帶單級放大器組成的多頻段組件。 主要特點 超寬
    的頭像 發表于 02-06 14:50 ?123次閱讀
    R&amp;S?<b class='flag-5'>SAM</b>100 系統放大器

    SAM IoT Wx v2硬件用戶指南

    電子發燒友網站提供《SAM IoT Wx v2硬件用戶指南.pdf》資料免費下載
    發表于 01-21 14:02 ?0次下載
    <b class='flag-5'>SAM</b> IoT Wx v2硬件用戶指南

    OpenAI 2025年新品預覽:Sam Altman揭曉多項技術創新

    在近期的一次公開活動,OpenAI的首席執行官Sam Altman向全球科技愛好者透露了公司即將在2025年發布的一系列令人期待的技術產品。 據悉,OpenAI將在明年重點推出AGI(通用
    的頭像 發表于 12-31 15:22 ?548次閱讀

    利用Arm Kleidi技術實現PyTorch優化

    Neoverse 平臺上的 PyTorch 推理表現。Kleidi 技術可以通過 Arm Compute Library (ACL) 和 KleidiAI 庫獲取。
    的頭像 發表于 12-23 09:19 ?544次閱讀
    利用Arm Kleidi技術<b class='flag-5'>實現</b><b class='flag-5'>PyTorch</b>優化

    R&amp;S?SAM100 系統放大器

    RS?SAM100 系統放大器是一種超寬帶固態微波放大器,頻率范圍為 2 GHz 至 20 GHz。RS?SAM100 還適用于替代電子管放大器和由窄帶單級放大器組成的多頻段組件。 綜述 1
    的頭像 發表于 11-22 17:30 ?257次閱讀
    R&amp;S?<b class='flag-5'>SAM</b>100 系統放大器

    何在 PyTorch 訓練模型

    Dataset Dataset 類需要我們實現 __init__ 、 __len__ 和 __getitem__ 三個方法。 __init__ 方法用于初始數據集, __len__ 返回數據集中的樣
    的頭像 發表于 11-05 17:36 ?604次閱讀

    Sam Altman的全球AI基礎設施建設計劃加速推進

    在科技日新月異的今天,人工智能(AI)作為最具顛覆性的技術之一,正以前所未有的速度改變著我們的世界。9月4日,一則來自業界的重磅消息再次將全球的目光聚焦于AI領域——OpenAI的首席執行官Sam
    的頭像 發表于 09-04 16:13 ?683次閱讀

    何在反激式拓撲實現軟啟動

    電子發燒友網站提供《如何在反激式拓撲實現軟啟動.pdf》資料免費下載
    發表于 09-04 11:09 ?0次下載
    如<b class='flag-5'>何在</b>反激式拓撲<b class='flag-5'>中</b><b class='flag-5'>實現</b>軟啟動

    何在FPGA實現隨機數發生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7實現4位偽隨機數發生器(PRNGs)。
    的頭像 發表于 08-06 11:20 ?866次閱讀
    如<b class='flag-5'>何在</b>FPGA<b class='flag-5'>中</b><b class='flag-5'>實現</b>隨機數發生器

    pytorch怎么在pycharm運行

    PyTorch。以下是安裝PyTorch的步驟: 打開終端或命令提示符。 根據你的系統和需求,選擇適當的安裝命令。例如,如果你使用的是Python 3.8和CUDA 10.2,可以使用以下命令: pip
    的頭像 發表于 08-01 16:22 ?1784次閱讀

    何在FPGA實現狀態機

    在FPGA(現場可編程門陣列)實現狀態機是一種常見的做法,用于控制復雜的數字系統行為。狀態機能夠根據當前的輸入和系統狀態,決定下一步的動作和新的狀態。這里,我們將詳細探討如何在FPGA設計
    的頭像 發表于 07-18 15:57 ?826次閱讀

    何在Tensorflow實現反卷積

    ,扮演著重要角色。以下將詳細闡述如何在TensorFlow實現反卷積,包括其理論基礎、TensorFlow實現方式、以及實際應用
    的頭像 發表于 07-14 10:46 ?799次閱讀

    PyTorch如何實現多層全連接神經網絡

    PyTorch實現多層全連接神經網絡(也稱為密集連接神經網絡或DNN)是一個相對直接的過程,涉及定義網絡結構、初始參數、前向傳播、損失計算和反向傳播等步驟。
    的頭像 發表于 07-11 16:07 ?1464次閱讀

    何在PyTorch實現LeNet-5網絡

    等人提出,主要用于手寫數字識別任務(如MNIST數據集)。下面,我將詳細闡述如何在PyTorch從頭開始實現LeNet-5網絡,包括網絡架構設計、參數初始
    的頭像 發表于 07-11 10:58 ?939次閱讀

    智芯公司自研聯網電子收費多邏輯通道OBE-SAM模塊通過權威機構檢測

    近日,智芯公司自研聯網電子收費多邏輯通道OBE-SAM模塊順利通過銀行卡檢測中心和北京交國通智能交通系統技術有限公司產品檢測,取得檢測報告,標志著智芯公司具備進入智能交通支付安全領域的資質。
    的頭像 發表于 04-30 10:01 ?846次閱讀
    智芯公司自研聯網電子收費多邏輯通道OBE-<b class='flag-5'>SAM</b>模塊通過權威機構檢測
    主站蜘蛛池模板: 国产精品白浆精子流水合集 | 亚洲欧洲日产国码久在线 | Chinesetube国产中文 | 午夜色情影院色a国产 | 99久久精品国产国产毛片 | 国产精品亚洲精品久久国语 | 国语自产拍大学生在线观看 | 丝瓜影院观看免费高清国际观察 | 男男女女爽爽爽视频免费 | 桥本有菜护士 | 最近中文字幕2019免费版日本 | 国内精品久久人妻无码HD浪潮 | 51国产偷自视频在线视频播放 | 免费看美女的网站 | 91国偷自产一区二区三区 | 欧美日韩国产码在线 | 欧美乱码伦视频免费66网 | 中文字幕欧美日韩VA免费视频 | 黄桃AV无码免费一区二区三区 | 欧美白人战黑吊 | 亚洲绝美精品一区二区 | 亚洲AV美女成人网站P站 | 99国产这里只有精品视频 | 9久久99久久久精品齐齐综合色圆 | 富婆找黑人老外泻火在线播放 | 老师你奶真大下面水真多 | 午夜福利免费体检区 | 久久成人国产精品一区二区 | 日本午夜精品一区二区三区电影 | 欧美三级黄色大片 | 四房播播开心五月 | 深夜释放自己在线观看 | 国产野外无码理论片在线观看 | 亚洲AV无码国产精品色午夜情 | 欧美三级aaa | 亚洲深夜在线 | 嫩草AV久久伊人妇女 | 国内精品九九视频 | 97在线精品视频 | 久久久久亚洲日日精品 | 免费韩伦影院在线观看 |