国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    118

    瀏覽量

    34397
  • 深度學習
    +關注

    關注

    73

    文章

    5599

    瀏覽量

    124400
  • pytorch
    +關注

    關注

    2

    文章

    813

    瀏覽量

    14853

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鈣鈦礦/硅疊層電池首次通過IEC濕凍測試:基于pH調控的共SAM策略

    自組裝單分子層(SAM)作為空穴傳輸層(HTL)廣泛應用于高效鈣鈦礦太陽能電池,尤其是在鈣鈦礦-硅疊層器件。然而,SAM前驅體分子在溶液容易自組裝形成膠體聚集體,嚴重影響了所制備H
    的頭像 發表于 03-06 09:03 ?45次閱讀
    鈣鈦礦/硅疊層電池首次通過IEC濕凍測試:基于pH調控的共<b class='flag-5'>SAM</b>策略

    PyTorch RuntimeError分析

    原生實現。這是一個已知的 PyTorch 限制,常見于 Stable Diffusion、ComfyUI 等使用 interpolate(..., mode=\'nearest\') 的模型
    發表于 03-06 06:02

    《Altium Designeder 25電路設計精講實踐》SAM V71章節有感

    全篇讀完,作為軟件的配套教程十分的得心應手,每級菜單都配有圖文并茂,實操方便,理解也能到位。其中 閱讀《AD25電路設計精進實踐》SAM V71仿真開發板章節,對照書本實際操作一番,對AD25從
    發表于 02-27 15:52

    Atmel SAM C20系列微控制器:工業自動的理想之選

    Atmel SAM C20系列微控制器:工業自動的理想之選 在工業自動、家電及其他5V應用領域,微控制器的性能和功能至關重要。Atmel推出的SAM C20系列微控制器,憑借其強大
    的頭像 發表于 02-26 15:50 ?101次閱讀

    Atmel SAM3S系列32位Flash微控制器深度剖析

    Atmel SAM3S系列32位Flash微控制器深度剖析 在當今的電子世界,高性能、低功耗的微控制器是眾多電子設備的核心。Atmel的SAM3S系列32位Flash微控制器,憑借其卓越的性能和豐
    的頭像 發表于 02-25 11:40 ?193次閱讀

    Atmel | SMART SAM3S系列MCU:高集成與低功耗的完美結合

    Atmel | SMART SAM3S系列MCU:高集成與低功耗的完美結合 在電子設計領域,一款性能卓越、功能豐富且功耗低的微控制器(MCU)往往是工程師們的理想之選。Atmel | SMART
    的頭像 發表于 02-11 16:30 ?375次閱讀

    深入解析AT91SAM7SE512/256/32:強大的ARM基Flash MCU

    深入解析AT91SAM7SE512/256/32:強大的ARM基Flash MCU 在嵌入式系統設計領域,選擇一款性能卓越、功能豐富且穩定可靠的微控制器(MCU)至關重要。AT91SAM
    的頭像 發表于 02-09 17:30 ?344次閱讀

    SAM(通用圖像分割基礎模型)丨基于BM1684X模型部署指南

    前言SAM是Meta提出的一個分割一切的提示型模型,其在1100萬張圖像上訓練了超過10億個掩碼,實現了強大的零樣本,突破了分割界限。本例程對S
    的頭像 發表于 01-12 16:17 ?307次閱讀
    <b class='flag-5'>SAM</b>(通用圖像分割基礎模型)丨基于BM1684X模型部署指南

    水浸超聲掃描顯微鏡(C-SAM)與其他無損檢測技術對比分析

    (C-SAM)以其高分辨率與成像清晰度著稱,尤其適合對微小缺陷的精確檢測。水浸超聲掃描顯微鏡(C-SAM)水浸超聲掃描顯微鏡基于高頻超聲波在介質的傳播特性進行檢測。其
    的頭像 發表于 12-04 14:08 ?306次閱讀
    水浸超聲掃描顯微鏡(C-<b class='flag-5'>SAM</b>)與其他無損檢測技術對比分析

    ?SAM G55音頻開發板技術解析與應用指南

    Microchip Technology SAM G55音頻Curiosity開發板(EV78Y10A)是一款用于基于SAM G55微控制器的音頻應用的演示和開發平臺。SAM G55 MCU是高性能
    的頭像 發表于 10-13 15:11 ?626次閱讀
    ?<b class='flag-5'>SAM</b> G55音頻開發板技術解析與應用指南

    SAM9X60-Curiosity評估板:高性能嵌入式開發的理想起點

    優化的MCP16501電源管理IC。它設計用于評估所有SAM9X60 MPU,包括系統級封裝 (SIP) 型號和模塊系統 (SOM)。
    的頭像 發表于 10-13 14:04 ?740次閱讀
    <b class='flag-5'>SAM</b>9X60-Curiosity評估板:高性能嵌入式開發的理想起點

    Microchip SAM9X7 系列:面向高性能嵌入式系統的超低功耗 Arm? MPU

    加速器(SHA、AES和TDES)、防篡改引腳和PUF。MIcrochip提供不同的供應配置,并經過全面測試的電源管理解決方案,遵守產品規范引用的SAM9X70電源排序規范。
    的頭像 發表于 10-11 10:44 ?696次閱讀
    Microchip <b class='flag-5'>SAM</b>9X7 系列:面向高性能嵌入式系統的超低功耗 Arm? MPU

    Zettabyte任命Sam Lawn為全球首席財務官

    專注于GPU基礎設施、AIDC優化軟件與Neo-Cloud計算的全棧AI解決方案提供商Zettabyte已任命Sam Lawn為全球首席財務官,該任命即刻生效。
    的頭像 發表于 08-30 15:12 ?1175次閱讀

    橢偏儀與DIC系統聯用測量半導體超薄圖案SAM薄膜厚度與折射率

    高對比度圖像指導測量位置,結合改進的橢偏分析模型,實現對圖案SAM薄膜厚度與折射率的高精度無損表征。費曼儀器薄膜厚度測量技術貫穿于材料研發、生產監控到終端應用的全流程
    的頭像 發表于 08-11 18:02 ?821次閱讀
    橢偏儀與DIC系統聯用測量半導體超薄圖案<b class='flag-5'>化</b><b class='flag-5'>SAM</b>薄膜厚度與折射率

    超聲波T-SAM與C-SAM模式的區別

    本文介紹了超聲波的T-SAM與C-SAM兩種模式的區別。
    的頭像 發表于 05-21 15:26 ?1599次閱讀
    超聲波T-<b class='flag-5'>SAM</b>與C-<b class='flag-5'>SAM</b>模式的區別