在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

PyTorch教程-12.7。阿達格拉德

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

讓我們首先考慮具有不常出現的特征的學習問題。

12.7.1。稀疏特征和學習率

想象一下,我們正在訓練一個語言模型。為了獲得良好的準確性,我們通常希望在繼續訓練時降低學習率,通常為O(t?12)或更慢。現在考慮在稀疏特征(即不常出現的特征)上進行模型訓練。這在自然語言中很常見,例如,我們看到preconditioning一詞的可能性要小于learning 。然而,它在計算廣告和個性化協同過濾等其他領域也很常見。畢竟,有很多東西只是少數人感興趣的。

與不常見特征關聯的參數只有在這些特征出現時才會收到有意義的更新。如果學習率下降,我們可能會遇到這樣一種情況,即常見特征的參數會很快收斂到它們的最優值,而對于不常見的特征,在確定它們的最優值之前,我們仍然沒有足夠頻繁地觀察它們。換句話說,學習率要么對于頻繁出現的特征下降得太慢,要么對于不頻繁出現的特征下降得太快。

解決此問題的一種可能的破解方法是計算我們看到特定功能的次數,并將其用作調整學習率的時鐘。也就是說,而不是選擇形式的學習率η=η0t+c我們可以使用 ηi=η0s(i,t)+c. 這里s(i,t) 計算特征的非零數i我們觀察到時間t. 這實際上很容易實現,而且沒有任何有意義的開銷。然而,每當我們不太具有稀疏性而只是梯度通常非常小且很少大的數據時,它就會失敗。畢竟,尚不清楚人們會在哪里劃清是否符合觀察到的特征的界限。

Duchi等人的 Adagrad 。( 2011 )通過更換相當粗糙的計數器來解決這個問題s(i,t)通過先前觀察到的梯度的平方的集合。特別是,它使用 s(i,t+1)=s(i,t)+(?if(x))2作為調整學習率的手段。這有兩個好處:首先,我們不再需要決定梯度何時足夠大。其次,它會隨著梯度的大小自動縮放。通常對應于大梯度的坐標會顯著縮小,而其他具有小梯度的坐標會得到更溫和的處理。在實踐中,這導致了計算廣告和相關問題的非常有效的優化過程。但這隱藏了 Adagrad 固有的一些額外好處,這些好處最好在預處理的背景下理解。

12.7.2。預處理

凸優化問題有利于分析算法的特性。畢竟,對于大多數非凸問題來說,很難得出有意義的理論保證,但直覺和洞察力 往往會起作用。讓我們看看最小化問題 f(x)=12x?Qx+c?x+b.

正如我們在12.6 節中看到的,可以根據其特征分解來重寫這個問題 Q=U?ΛU得出一個大大簡化的問題,其中每個坐標都可以單獨求解:

(12.7.1)f(x)=fˉ(xˉ)=12xˉ?Λxˉ+cˉ?xˉ+b.

這里我們使用了xˉ=Ux因此cˉ=Uc. 修改后的問題具有最小值 xˉ=?Λ?1cˉ 和最小值 ?12cˉ?Λ?1cˉ+b. 這更容易計算,因為Λ是包含特征值的對角矩陣Q.

如果我們擾亂cslightly 我們希望在最小化器中找到微小的變化f. 不幸的是,這種情況并非如此。雖然略有變化c導致同樣輕微的變化cˉ,這不是最小化的情況f(和的fˉ分別)。每當特征值Λi很大,我們只會看到很小的變化xˉi并且至少 fˉ. 反之,對于小Λi 改變在xˉi可以是戲劇性的。最大和最小特征值之比稱為優化問題的條件數。

(12.7.2)κ=Λ1Λd.

如果條件數κ大,難以準確求解優化問題。我們需要確保我們謹慎地獲得正確的大動態值范圍。我們的分析引出了一個明顯但有些幼稚的問題:難道我們不能簡單地通過扭曲空間來“解決”問題,使得所有特征值都是 1. 理論上這很容易:我們只需要的特征值和特征向量Q從重新調整問題 x到一個 z=defΛ12Ux. 在新的坐標系中 x?Qx可以簡化為 ‖z‖2. las,這是一個相當不切實際的建議。計算特征值和特征向量通常 比解決實際問題要昂貴得多。

雖然精確計算特征值可能很昂貴,但猜測它們并對其進行近似計算可能已經比什么都不做要好得多。特別是,我們可以使用對角線項Q并相應地重新縮放它。這比計算特征值便宜得多。

(12.7.3)Q~=diag?12(Q)Qdiag?12(Q).

在這種情況下,我們有 Q~ij=Qij/QiiQjj 特別是Q~ii=1對全部i. 在大多數情況下,這會大大簡化條件數。例如,我們之前討論的情況,這將完全消除手頭的問題,因為問題是軸對齊的。

不幸的是,我們面臨另一個問題:在深度學習中,我們通常甚至無法訪問目標函數的二階導數:對于x∈Rd即使是小批量的二階導數也可能需要O(d2)空間和計算工作,因此實際上是不可行的。Adagrad 的巧妙想法是使用一個代理來表示 Hessian 的難以捉摸的對角線,它既計算成本相對低又有效——梯度本身的大小。

為了了解為什么會這樣,讓我們??看一下 fˉ(xˉ). 我們有那個

(12.7.4)?xˉfˉ(xˉ)=Λxˉ+cˉ=Λ(xˉ?xˉ0),

在哪里xˉ0是的最小值fˉ. 因此,梯度的大小取決于 Λ和最優的距離。如果 xˉ?xˉ0沒有改變,這將是所有需要的。畢竟,在這種情況下,梯度的大小?xˉfˉ(xˉ) 足夠了。由于 AdaGrad 是一種隨機梯度下降算法,即使在最優狀態下,我們也會看到具有非零方差的梯度。因此,我們可以安全地使用梯度的方差作為 Hessian 尺度的廉價代理。徹底的分析超出了本節的范圍(可能需要好幾頁)。詳情請讀者參考 ( Duchi et al. , 2011 ) 。

12.7.3。算法

讓我們將上面的討論正式化。我們使用變量 st如下累積過去的梯度方差。

(12.7.5)gt=?wl(yt,f(xt,w)),st=st?1+gt2,wt=wt?1?ηst+??gt.

這里的操作是按坐標應用的。那是, v2有條目vi2. 同樣地 1v有條目1vi和 u?v有條目uivi. 像之前一樣η是學習率和?是一個附加常數,確保我們不除以0. 最后,我們初始化s0=0.

就像在動量的情況下一樣,我們需要跟蹤一個輔助變量,在這種情況下允許每個坐標的單獨學習率。相對于 SGD,這不會顯著增加 Adagrad 的成本,因為主要成本通常是計算 l(yt,f(xt,w))及其衍生物。

請注意,在中累積平方梯度st意思是st基本上以線性速率增長(實際上比線性速率慢一些,因為梯度最初會減小)。這導致O(t?12) 學習率,盡管在每個坐標的基礎上進行了調整。對于凸問題,這已經足夠了。但是,在深度學習中,我們可能希望更慢地降低學習率。這導致了我們將在后續章節中討論的許多 Adagrad 變體。現在讓我們看看它在二次凸問題中的表現。我們使用與之前相同的問題:

(12.7.6)f(x)=0.1x12+2x22.

我們將使用之前相同的學習率來實現 Adagrad,即η=0.4. 可以看出,自變量的迭代軌跡更加平滑。然而,由于累積效應st,學習率不斷衰減,因此自變量在迭代的后期階段不會移動太多。

%matplotlib inline
import math
import torch
from d2l import torch as d2l

def adagrad_2d(x1, x2, s1, s2):
  eps = 1e-6
  g1, g2 = 0.2 * x1, 4 * x2
  s1 += g1 ** 2
  s2 += g2 ** 2
  x1 -= eta / math.sqrt(s1 + eps) * g1
  x2 -= eta / math.sqrt(s2 + eps) * g2
  return x1, x2, s1, s2

def f_2d(x1, x2):
  return 0.1 * x1 ** 2 + 2 * x2 ** 2

eta = 0.4
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

epoch 20, x1: -2.382563, x2: -0.158591

poYBAGR9Od2ATngMAACsFtU2tx8931.svg

%matplotlib inline
import math
from mxnet import np, npx
from d2l import mxnet as d2l

npx.set_np()

def adagrad_2d(x1, x2, s1, s2):
  eps = 1e-6
  g1, g2 = 0.2 * x1, 4 * x2
  s1 += g1 ** 2
  s2 += g2 ** 2
  x1 -= eta / math.sqrt(s1 + eps) * g1
  x2 -= eta / math.sqrt(s2 + eps) * g2
  return x1, x2, s1, s2

def f_2d(x1, x2):
  return 0.1 * x1 ** 2 + 2 * x2 ** 2

eta = 0.4
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

epoch 20, x1: -2.382563, x2: -0.158591

poYBAGR9OeCAYR7GAACs3f6UknE652.svg

%matplotlib inline
import math
import tensorflow as tf
from d2l import tensorflow as d2l

def adagrad_2d(x1, x2, s1, s2):
  eps = 1e-6
  g1, g2 = 0.2 * x1, 4 * x2
  s1 += g1 ** 2
  s2 += g2 ** 2
  x1 -= eta / math.sqrt(s1 + eps) * g1
  x2 -= eta / math.sqrt(s2 + eps) * g2
  return x1, x2, s1, s2

def f_2d(x1, x2):
  return 0.1 * x1 ** 2 + 2 * x2 ** 2

eta = 0.4
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

epoch 20, x1: -2.382563, x2: -0.158591

pYYBAGR9OeKABQ46AACr46-i06s188.svg

當我們將學習率提高到2我們看到了更好的行為。這已經表明學習率的降低可能相當激進,即使在無噪聲的情況下也是如此,我們需要確保參數適當收斂。

eta = 2
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

epoch 20, x1: -0.002295, x2: -0.000000

poYBAGR9OeWAGNjuAACqJUE_Ams997.svg

eta = 2
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

epoch 20, x1: -0.002295, x2: -0.000000

poYBAGR9OeeAN1RxAACryEk3Y3g000.svg

eta = 2
d2l.show_trace_2d(f_2d, d2l.train_2d(adagrad_2d))

epoch 20, x1: -0.002295, x2: -0.000000

pYYBAGR9OeqANMF-AACo9EOoXgU430.svg

12.7.4。從零開始實施

就像動量法一樣,Adagrad 需要維護一個與參數形狀相同的狀態變量。

def init_adagrad_states(feature_dim):
  s_w = torch.zeros((feature_dim, 1))
  s_b = torch.zeros(1)
  return (s_w, s_b)

def adagrad(params, states, hyperparams):
  eps = 1e-6
  for p, s in zip(params, states):
    with torch.no_grad():
      s[:] += torch.square(p.grad)
      p[:] -= hyperparams['lr'] * p.grad / torch.sqrt(s + eps)
    p.grad.data.zero_()

def init_adagrad_states(feature_dim):
  s_w = np.zeros((feature_dim, 1))
  s_b = np.zeros(1)
  return (s_w, s_b)

def adagrad(params, states, hyperparams):
  eps = 1e-6
  for p, s in zip(params, states):
    s[:] += np.square(p.grad)
    p[:] -= hyperparams['lr'] * p.grad / np.sqrt(s + eps)

def init_adagrad_states(feature_dim):
  s_w = tf.Variable(tf.zeros((feature_dim, 1)))
  s_b = tf.Variable(tf.zeros(1))
  return (s_w, s_b)

def adagrad(params, grads, states, hyperparams):
  eps = 1e-6
  for p, s, g in zip(params, states, grads):
    s[:].assign(s + tf.math.square(g))
    p[:].assign(p - hyperparams['lr'] * g / tf.math.sqrt(s + eps))

與12.5 節的實驗相比,我們使用更大的學習率來訓練模型。

data_iter, feature_dim = d2l.get_data_ch11(batch_size=10)
d2l.train_ch11(adagrad, init_adagrad_states(feature_dim),
        {'lr': 0.1}, data_iter, feature_dim);

loss: 0.242, 0.143 sec/epoch

pYYBAGR9OeyAfD_SAADyd8Cl1ZM609.svg

data_iter, feature_dim = d2l.get_data_ch11(batch_size=10)
d2l.train_ch11(adagrad, init_adagrad_states(feature_dim),
        {'lr': 0.1}, data_iter, feature_dim);

loss: 0.242, 23.515 sec/epoch

poYBAGR9Oe-AR4KvAADycxjpYvY246.svg

data_iter, feature_dim = d2l.get_data_ch11(batch_size=10)
d2l.train_ch11(adagrad, init_adagrad_states(feature_dim),
        {'lr': 0.1}, data_iter, feature_dim);

loss: 0.242, 1.183 sec/epoch

pYYBAGR9OfGAe_HhAADya6CIfXw019.svg

12.7.5。簡潔的實現

使用Trainer算法的實例adagrad,我們可以在 Gluon 中調用 Adagrad 算法。

trainer = torch.optim.Adagrad
d2l.train_concise_ch11(trainer, {'lr': 0.1}, data_iter)

loss: 0.242, 0.143 sec/epoch

poYBAGR9OfSAHabBAADb-bXKM94499.svg

d2l.train_concise_ch11('adagrad', {'learning_rate': 0.1}, data_iter)

loss: 0.242, 23.234 sec/epoch

pYYBAGR9OfeAYR9VAADyepdDPoM022.svg

trainer = tf.keras.optimizers.Adagrad
d2l.train_concise_ch11(trainer, {'learning_rate' : 0.1}, data_iter)

loss: 0.243, 1.159 sec/epoch

pYYBAGR9OfmAfsjlAADyauWIjtM859.svg

12.7.6。概括

Adagrad 在每個坐標的基礎上動態降低學習率。

它使用梯度的大小作為調整取得進展的速度的一種手段——具有大梯度的坐標用較小的學習率進行補償。

由于內存和計算限制,在深度學習問題中計算精確的二階導數通常是不可行的。梯度可以是一個有用的代理。

如果優化問題的結構相當不均勻,Adagrad 可以幫助減輕失真。

Adagrad 對于稀疏特征特別有效,在這些稀疏特征中,對于不常出現的術語,學習率需要更慢地降低。

在深度學習問題上,Adagrad 有時會過于激進地降低學習率。我們將在第 12.10 節的上下文中討論緩解這種情況的策略。

12.7.7。練習

證明對于正交矩陣U和一個向量 c以下內容成立: ‖c?δ‖2=‖Uc?Uδ‖2. 為什么這意味著在變量正交變化后擾動的大小不會改變?

試用 Adagradf(x)=0.1x12+2x22并且目標函數也旋轉了 45 度,即 f(x)=0.1(x1+x2)2+2(x1?x2)2. 它的行為是否不同?

證明Gerschgorin 的圓定理 ,該定理指出特征值λi矩陣的 M滿足 |λi?Mjj|≤∑k≠j|Mjk| 至少一個選擇j.

Gerschgorin 定理告訴我們關于對角線預處理矩陣的特征值的什么信息 diag?12(M)Mdiag?12(M)?

嘗試 Adagrad 以獲得適當的深度網絡,例如 應用于 Fashion-MNIST 時的第 7.6 節。

您需要如何修改 Adagrad 才能使學習率下降得不那么激進?

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

    關注

    2

    文章

    808

    瀏覽量

    13283
收藏 人收藏

    評論

    相關推薦

    直播-尋找懸浮山之旅-景區直播

    網頁直接觀看景區直播,無需安裝任何軟件,本頁面中的視頻為實時的直播視頻,如不能觀看直播請訪問:http://www.eshow8.com《》不僅僅是一部電影 中的懸浮山  
    發表于 02-03 10:34

    PyTorch如何入門

    PyTorch 入門實戰(一)——Tensor
    發表于 06-01 09:58

    科技便攜式節能速熱恒溫電烙鐵試用體驗】1、開箱測評

    ` 通過后沒幾天就收到這個電烙鐵了,有點小激動,之前我在華秋上也買了電烙鐵稍后可以進行一番對比,現在先來看看這個好東東:接下來看看里面都有什么東西 一份節能恒溫電烙鐵保修卡烙鐵芯更換方法與步驟
    發表于 02-28 15:09

    ADPT005芯片在遇到大干擾的情況下會死掉是為什么?怎么解決?

    ADPT005芯片在遇到大干擾的情況下會死掉是為什么?怎么解決?
    發表于 01-20 07:35

    H-30T恒溫電烙鐵試用體驗】H-30T恒溫電烙鐵試用體驗

    作為一名DIY愛好者,我非常喜歡嘗試各種新產品。最近,我有幸試用了H-30T高溫休眠版恒溫電烙鐵,并分享一下我的使用體驗。 首先,我要贊揚的設計,這款電烙鐵非常精致,手感非
    發表于 11-15 08:53

    2010年美國CES:實現《》的高科技

    2010年美國CES:實現《》的高科技 本屆美國消費電子展(CES)成為了未來技術的展示盛會,很多《》中出現的多種未來人類所使用的3D顯示、人機操作及通
    發表于 01-11 10:33 ?1381次閱讀

    南大教授新發明新技術 裸眼也能看3D《

    南大教授新發明新技術 裸眼也能看3D《》 從去年到現在,電影中的3D技術應用越來越多,《冰河世紀3》、《》…
    發表于 01-29 09:00 ?1407次閱讀

    變身求永生 將大腦植入機器

    最近,俄羅斯媒體大亨德米特里·伊茨科夫(Dmitry Itskov)公布了自己的“”項目,他想借助科技將自己的大腦意識轉移給虛擬的化身,實現永生。
    發表于 06-19 11:46 ?1439次閱讀

    Apple Watch系統剛有重大更新 卻遭開發者冷落

    公司產品副總裁蒂姆·安格拉德(Tim Anglade)。“單點登錄讓這個應用的使用體驗變得順暢得多,這讓應用開發者更加堅信,他們能為用戶帶來更具有吸引力的電視觀看體驗。”
    發表于 06-20 14:40 ?529次閱讀

    我們怎么做才能避開被人工智能和機器人取代的危險?

    據報道,美國著名暢銷書作家馬爾科姆·格拉德威爾指出,隨著人工智能逐漸向勞動力市場滲透,同時越來越多的機器人開始走上工作崗位,要想確保自己在公司中是“不可或缺”的員工,一條明路是:擅長做那些機器人不擅長做的事情。
    發表于 09-17 10:43 ?3894次閱讀

    新利體育宣布贊助德甲傳統勁旅門興格拉德巴赫足球俱樂部

    任何一個足球隊單純依靠自己的力量是很難擴大影響力的,尋求贊助是一種重要的助力方式。日前,新利體育宣布贊助德甲傳統勁旅門興格拉德巴赫足球俱樂部,這意味著新利體育正式成為門興官方合作伙伴。這樣的合作
    的頭像 發表于 12-24 10:22 ?3829次閱讀

    的紅外射頻遙控盒子(二)

    的紅外射頻遙控盒子(二)
    發表于 12-08 10:06 ?3次下載
    <b class='flag-5'>阿</b><b class='flag-5'>達</b>的紅外射頻遙控盒子(二)

    海信電視攜手《2》,探索視聽技術革新呈現美學盛宴

    12月16日《:水之道》(又名《2》)正式公映,截至12月17日,票房已破3億,點燃元春檔電影市場。正如13年前《
    發表于 12-20 16:13 ?312次閱讀

    RCU熱氣球體驗鳥瞰元宇宙中的黑格拉世界遺產

    格拉的利哈亞尼古墓的創新數字娛樂讓在線游客們可以從全球任何地方全面深入探索爾烏拉最著名的陵墓 游客們可以通過Decentraland訪問有趣的互動熱氣球體驗,翱翔在黑格拉上空,欣賞令人難以置信
    的頭像 發表于 02-21 22:01 ?612次閱讀
    RCU熱氣球體驗鳥瞰元宇宙中的黑<b class='flag-5'>格拉</b>世界遺產

    PyTorch教程12.7格拉德

    電子發燒友網站提供《PyTorch教程12.7格拉德.pdf》資料免費下載
    發表于 06-05 14:56 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>12.7</b>之<b class='flag-5'>阿</b><b class='flag-5'>達</b><b class='flag-5'>格拉德</b>
    主站蜘蛛池模板: 国产啊v在线观看| 俺去啦网婷婷| 日本aaaa视频| 男女免费网站| 精品国产免费人成高清| 国模久久| 77788色淫视频免费观看| 天天视频入口| 久热精品在线视频| 国内精品久久影视| 91久久人澡人人添人人爽| 成人欧美一区二区三区白人| 亚欧免费视频一区二区三区| 最近2018年在线中文字幕高清 | 国内精品伊人久久大香线焦| 国产单男| 天天做天天爱天天射| 二区久久国产乱子伦免费精品| 欧美极品一区| 久久国产99| 色噜噜狠狠成人中文小说| 免费色网址| 成人久久伊人精品伊人| 特污兔午夜影院| 成人黄色三级| 男人j进人女人j 的视频| 五月在线观看| 美女 免费 视频 黄的| 4虎影院永久地址www| 久久精品国产福利| 4hu四虎永久免在线视| 亚洲影视大全| 六月综合网| 天天做天天爱天天爽综合网 | 在线看3344免费视频| 男子扒开美女尿口做羞羞的事| 日本亚洲高清乱码中文在线观看| 国产尤物在线视频| 人与牲动交xxxxbbbb高清| 最近最新中文字幕在线第一页| 大黄一级片|