日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AWD-LSTM为什么这么棒?

發(fā)布時間:2024/8/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AWD-LSTM为什么这么棒? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AWD-LSTM是目前最優(yōu)秀的語言模型之一。在眾多的頂會論文中,對字級模型的研究都采用了AWD-LSTMs,并且它在字符級模型中的表現(xiàn)也同樣出色。

本文回顧了論文——Regularizing and Optimizing LSTM Language Models?,在介紹AWD-LSTM模型的同時并解釋其中所涉及的各項策略。該論文提出了一系列基于詞的語言模型的正則化和優(yōu)化策略。這些策略不僅行之有效,而且能夠在不改變現(xiàn)有LSTM模型的基礎(chǔ)上使用。

AWD-LSTM即ASGD Weight-Dropped LSTM。它使用了DropConnect及平均隨機梯度下降的方法,除此之外還有包含一些其它的正則化策略。我們將在后文詳細講解這些策略。本文將著重于介紹它們在語言模型中的成功應(yīng)用。

實驗代碼獲取:awd-lstm-lm GitHub repository

LSTM中的數(shù)學公式:

  • it = σ(Wixt + Uiht-1)
  • ft = σ(Wfxt + Ufht-1)
  • ot = σ(Woxt + Uoht-1)
  • c’t = tanh(Wcxt + Ucht-1)
  • ct = it ⊙ c’t + ft ⊙ c’t-1
  • ht = ot ⊙ tanh(ct)


其中,?Wi, Wf, Wo, Wc, Ui, Uf, Uo, Uc都是權(quán)重矩陣,xt表示輸入向量,ht表示隱藏單元向量,ct表示單元狀態(tài)向量,?表示element-wise乘法。
接下來我們將逐一介紹作者提出的策略:

權(quán)重下降的LSTM

RNN的循環(huán)連接容易導致過擬合問題,如何解決這一問題也成了一個較為熱門的研究領(lǐng)域。Dropouts的引入在前饋神經(jīng)網(wǎng)絡(luò)和卷積網(wǎng)絡(luò)中取得了巨大的成功。但將Dropouts引入到RNN中卻反響甚微,這是由于Dropouts的加入破壞了RNN長期依賴的能力。

研究學者們就此提出了許多解決方案,但是這些方法要么作用于隱藏狀態(tài)向量ht-1,要么是對單元狀態(tài)向量ct進行更新。上述操作能夠解決高度優(yōu)化的“黑盒”RNN,例如NVIDIA’s cuDNN LSTM中的過擬合問題。

但僅如此是不夠的,為了更好的解決這個問題,研究學者們引入了DropConnect。DropConnect是在神經(jīng)網(wǎng)絡(luò)中對全連接層進行規(guī)范化處理。Dropout是指在模型訓練時隨機的將隱層節(jié)點的權(quán)重變成0,暫時認為這些節(jié)點不是網(wǎng)絡(luò)結(jié)構(gòu)的一部分,但是會把它們的權(quán)重保留下來。與Dropout不同的是DropConnect在訓練神經(jīng)網(wǎng)絡(luò)模型過程中,并不隨機的將隱層節(jié)點的輸出變成0,而是將節(jié)點中的每個與其相連的輸入權(quán)值以1-p的概率變成0。


Regularization of Neural Networks using DropConnect

DropConnect作用在hidden-to-hidden權(quán)重矩陣(Ui、Uf、Uo、Uc)上。在前向和后向遍歷之前,只執(zhí)行一次dropout操作,這對訓練速度的影響較小,可以用于任何標準優(yōu)化的“黑盒”RNN中。通過對hidden-to-hidden權(quán)重矩陣進行dropout操作,可以避免LSTM循環(huán)連接中的過度擬合問題。

你可以在?awd-lstm-lm?中找到weight_drop.py?模塊用于實現(xiàn)。

作者表示,盡管DropConnect是通過作用在hidden-to-hidden權(quán)重矩陣以防止過擬合問題,但它也可以作用于LSTM的非循環(huán)權(quán)重。

使用非單調(diào)條件來確定平均觸發(fā)器

研究發(fā)現(xiàn),對于特定的語言建模任務(wù),傳統(tǒng)的不帶動量的SGD算法優(yōu)于帶動量的SGD、Adam、Adagrad及RMSProp等算法。因此,作者基于傳統(tǒng)的SGD算法提出了ASGD(Average SGD)算法。

Average SGD

ASGD算法采用了與SGD算法相同的梯度更新步驟,不同的是,ASGD沒有返回當前迭代中計算出的權(quán)值,而是考慮的這一步和前一次迭代的平均值。

傳統(tǒng)的SGD梯度更新:

w_t = w_prev - lr_t * grad(w_prev)

AGSD梯度更新:

avg_fact = 1 / max(t - K, 1) if avg_fact != 1:w_t = avg_fact * (sum(w_prevs) + (w_prev - lr_t * grad(w_prev))) else:w_t = w_prev - lr_t * grad(w_prev)

其中,k是在加權(quán)平均開始之前運行的最小迭代次數(shù)。在k次迭代開始之前,ASGD與傳統(tǒng)的SGD類似。t是當前完成的迭代次數(shù),sum(w_prevs)是迭代k到t的權(quán)重之和,lr_t是迭代次數(shù)t的學習效率,由學習率調(diào)度器決定。

你可以在這里找到AGSD的PyTorch實現(xiàn)。

但作者也強調(diào),該方法有如下兩個缺點:

  • 學習率調(diào)度器的調(diào)優(yōu)方案不明確
  • 如何選取合適的迭代次數(shù)k。值太小會對方法的有效性產(chǎn)生負面影響,值太大可能需要額外的迭代才能收斂。

基于此,作者在論文中提出了使用非單調(diào)條件來確定平均觸發(fā)器,即NT-ASGD,其中:

  • 當驗證度量不能改善多個循環(huán)時,就會觸發(fā)平均值。這是由非單調(diào)區(qū)間的超參數(shù)n保證的。因此,每當驗證度量沒有在n個周期內(nèi)得到改進時,就會使用到ASGD算法。通過實驗發(fā)現(xiàn),當n=5的時候效果最好。
  • 整個實驗中使用一個恒定的學習速率,不需要進一步的調(diào)整。

正則化方法

除了上述提及的兩種方法外,作者還使用了一些其它的正則化方法防止過擬合問題及提高數(shù)據(jù)效率。

長度可變的反向傳播序列

作者指出,使用固定長度的基于時間的反向傳播算法(BPTT)效率較低。試想,在一個時間窗口大小固定為10的BPTT算法中,有100個元素要進行反向傳播操作。在這種情況下,任何可以被10整除的元素都不會有可以反向支撐的元素。這導致了1/10的數(shù)據(jù)無法以循環(huán)的方式進行自我改進,8/10的數(shù)據(jù)只能使用到部分的BPTT窗口。

為了解決這個問題,作者提出了使用可變長度的反向傳播序列。首先選取長度為bptt的序列,概率為p以及長度為bptt/2的序列,概率為1-p。在PyTorch中,作者將p設(shè)為0.95。

base_bptt = bptt if np.random.random() < 0.95 else bptt / 2

其中,base_bptt用于獲取seq_len,即序列長度,在N(base_bptt, s)中,s表示標準差,N表示服從正態(tài)分布。代碼如下:

seq_len = max(5, int(np.random.normal(base_bptt, 5)))

學習率會根據(jù)seq_length進行調(diào)整。由于當學習速率固定時,會更傾向于對段序列而非長序列進行采樣,所以需要進行縮放。

lr2 = lr * seq_len / bptt

Variational Dropout

在標準的Dropout中,每次調(diào)用dropout連接時都會采樣到一個新的dropout mask。而在Variational Dropout中,dropout mask在第一次調(diào)用時只采樣一次,然后locked dropout mask將重復用于前向和后向傳播中的所有連接。

雖然使用了DropConnect而非Variational Dropout以規(guī)范RNN中hidden-to-hidden的轉(zhuǎn)換,但是對于其它的dropout操作均使用的Variational Dropout,特別是在特定的前向和后向傳播中,對LSTM的所有輸入和輸出使用相同的dropout mask。

點擊查看官方awd-lstm-lm GitHub存儲庫的Variational dropout實現(xiàn)。詳情請參閱原文。

Embedding Dropout

論文中所提到的Embedding Dropout首次出現(xiàn)在——《A Theoretically Grounded Application of Dropout in Recurrent Neural Networks》一文中。該方法是指將dropout作用于嵌入矩陣中,且貫穿整個前向和反向傳播過程。在該過程中出現(xiàn)的所有特定單詞均會消失。

Weight Tying(權(quán)重綁定)

權(quán)重綁定共享嵌入層和softmax層之間的權(quán)重,能夠減少模型中大量的參數(shù)。

Reduction in Embedding Size

對于語言模型來說,想要減少總參數(shù)的數(shù)量,最簡單的方法是降低詞向量的維數(shù)。即使這樣無法幫助緩解過擬合問題,但它能夠減少嵌入層的維度。對LSTM的第一層和最后一層進行修改,可以使得輸入和輸出的尺寸等于減小后的嵌入尺寸。

Activation Regularization(激活正則化)

L2正則化是對權(quán)重施加范數(shù)約束以減少過擬合問題,它同樣可以用于單個單元的激活,即激活正則化。激活正則化可作為一種調(diào)解網(wǎng)絡(luò)的方法。

loss = loss + alpha * dropped_rnn_h.pow(2).mean()

Temporal Activation Regularization(時域激活正則化)

同時,L2正則化能對RNN在不同時間步驟上的輸出差值進行范數(shù)約束。它通過在隱藏層產(chǎn)生較大變化對模型進行懲罰。

loss = loss + beta * (rnn_h[1:] - rnn_h[:-1]).pow(2).mean()

其中,alpha和beta是縮放系數(shù),AR和TAR損失函數(shù)僅對RNN最后一層的輸出起作用。

模型分析

作者就上述模型在不同的數(shù)據(jù)集中進行了實驗,為了對分分析,每次去掉一種策略。

圖中的每一行表示去掉特定策略的困惑度(perplexity)分值,從該圖中我們能夠直觀的看出各策略對結(jié)果的影響。

實驗細節(jié)

數(shù)據(jù)——來自Penn Tree-bank(PTB)數(shù)據(jù)集和WikiText-2(WT2)數(shù)據(jù)集。

網(wǎng)絡(luò)體系結(jié)構(gòu)——所有的實驗均使用的是3層LSTM模型。

批尺寸——WT2數(shù)據(jù)集的批尺寸為80,PTB數(shù)據(jù)集的批尺寸為40。根據(jù)以往經(jīng)驗來看,較大批尺寸(40-80)的性能優(yōu)于較小批尺寸(10-20)。

總結(jié)

該論文很好的總結(jié)了現(xiàn)有的正則化及優(yōu)化策略在語言模型中的應(yīng)用,對于NLP初學者甚至研究者都大有裨益。論文中強調(diào),雖然這些策略在語言建模中獲得了成功,但它們同樣適用于其他序列學習任務(wù)。


原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的AWD-LSTM为什么这么棒?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。