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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Pytorch神经网络理论篇】 20 神经网络中的注意力机制

發布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络理论篇】 20 神经网络中的注意力机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


? ? 注意力機制可以使神經網絡忽略不重要的特征向量,而重點計算有用的特征向量。在拋去無用特征對擬合結果于擾的同時,又提升了運算速度。

1 注意力機制

所謂Attention機制,便是聚焦于局部信息的機制,比如圖像中的某一個圖像區域。隨著任務的變化,注意力區域往往會發生變化。

?面對上面這樣的一張圖,如果你只是從整體來看,只看到了很多人頭,但是你拉近一個一個仔細看就了不得了,都是天才科學家。

圖中除了人臉之外的信息其實都是無用的,也做不了什么任務,Attention機制便是要找到這些最有用的信息,可以想見最簡單的場景就是從照片中檢測人臉了。

1.1 注意力機制的實現

? ? 神經網絡中的注意力機制主要是通過注意力分數來實現的。注意力分數是一個0-1的值,注意力機制作用下的所有分數和為1。每個注意力分數代表當前項被分配的注意力權重。
? ? 任意力分激常由神經網絡的權重參數在模型的訓練中學習得來,并最終使用Softmax函數進計算。這種機制可以作用在任何神經網絡模型中。
? ? (1)注意力機制可以作用在RNN模型中的每個序列上,令RNN模型對序列中的單個樣本給予不同的關注度, 這種方式常用在RNN層的輸出結果之后。

(2)注意力機制也可以作用在模型輸出的特征向量上,這種針對特征向量進行注意力計算的方式適用范圍更為廣泛。該方式不但可以應用于循環神經網絡,而且可以用于卷積神經網絡,甚至圖神經網絡。

1.2 注意力控制的兩種形式

1.2.1 軟模式

所有數據均被主注意,計算相應的權重值,不設置篩選條件。

1.2.2 硬模式

在生成注意力權重之后刪除一部分不符合條件的注意力,使其注意力權值為0,即不再注意不符合條件的部分。

1.3 注意力機制模型的原理

? ? 注意力機制模型是指完全使用注意力機制搭建起來的模型。注意力機制可以輔助其他神經網絡,本身也具有擬合能力

1.3.1 數學模型的推導

?1.3.2注意力機制模型的應用

? ? 注意力機制模型非常適合序列到序列(Sq2Sg)的擬合任務。例如,在實現文字閱讀理解任務中,可以把文章當成Q。閱讀理解的問題和答案當成K和V(形成鍵值對)。下面以個翻譯任務為例,詳細介紹其擬合過程。

1.4 多頭注意力機制

? ? 注意力機制因2017年谷歌公司發表的一篇論文Attention is All You Need而受到廣泛關注。多頭注意力機制就是這篇論文中使用的主要技術之一。多頭注意力機制是對原始注意力機制的改進。多頭注意力機制可以表示為:Y=MultiHead(Q,K,V),Y代表多頭注意力結果,其原理如圖所示。

多頭注意力機制的工作原理介紹如下。

  • 把Q、K、V通過參數矩陣進行全連接層的映射轉化。
  • 對第(1)步中所轉化的3個結果做點積運算。
  • 將第(1)步和第(2)步重復運行h次,并且每次進行第(1)步操作時,都使用全新的參數矩陣(參數不共享)。
  • 用concat()函數把計算h次之后的最終結果拼接起來。操作與多分支卷積技術非常相似,其理論可以解釋為:每一次的注意力機制運算,都會使原數據中某個方面的特征發生注意力轉化(得到部分注意力特征);當發生多次注意力機制運算之后,會得到更多方向的局部注意力特征;將所有的局部注意力特征合并起來,再通過神經網絡將其轉化為整體的特征,從達到擬合效果。
  • 1.5 自注意力機制

    自注意力機制,又稱內部注意力機制,用于發現序列數據的內部特征。其具體做法是將Q、K、V都變成X,即計算Attention(X,X,X),這里的X代表待處理的輸入數據。
    ? ? 使用多頭注意力機制訓練出的自注意力特征可以用于Seq2Seq模型(輸入和輸出都是序列數據的模型)、分類模型等各種任務,并能夠得到很好的效果,即Y=MultiHead(X,X,X),Y代表多頭注意力結果。

    2 擴展

    2.1?使用梯度剪輯技巧優化訓練過程

    2.1.1 梯度抖動的原因

    梯度剪輯是一種訓練模型的技巧,用來改善模型訓練過程中抖動較大的問題:在模型使用反向傳播訓練的過程中,可能會出現梯度值劇烈抖動的情況。而某些優化器的學習率是通過策略算法在訓練過程中自學習產生的。當參數值在較為“平坦”的區域進行更新時,由于該區域梯度值比較小,學習率一般會變得較大,如果突然到達了“陡峭”的區域,梯度值陡增,再與較大的學習率相乘,參數就有很大幅度的更新,因此學習過程非常不穩定。

    2.1.2?梯度剪輯的具體做法

    將反向求導的梯度值控制在一定區間之內,將超過區間的梯度值按照區間邊界進行截斷,這樣,在訓練過程中,權重參數的更新幅度就不會過大,使得模型更容易收斂。

    2.1.3 在PyTorch中,實現梯度剪輯的三種方式

    1.簡單方式直接使用cclip_grad_value_()函數即可實現簡單的梯度剪輯。

    torch.nn.utils.clip_grad_value_(parameters=network.parameters(),clip_value=1.0)

    該代碼可以將梯度按照[-1,1]區間進行剪輯。這種方法能設剪輯區間的上限和下限,且絕對值必須一致。如果想對區間的上限和下限設置不同的值,那么需要使用其他方法。

    2.自定義方式可以使用鉤子函數,為每一個參數單獨指定剪輯區間。

    for param in network.parameters():param.register_hook(lambda gradient:torch.clamp(gradient,-0.1,1.0))

    該代碼為實例化后的模型權重添加了鉤子函數,并在鉤子函數內部實現梯度剪輯的設置。
    ? ? 這種方式最為靈活。在訓練時,每當執行完反向傳播(loss.backward)之后,所計算的梯度會觸發鉤子函數進行剪輯處理。

    3.使用范數的方式

    直接使用clip_grad_norm_()函數即可以范數的方式對梯度進行剪輯。

    torch.nn.utils.clip_grad_norm_(network.parameters(),max_norm=1,norm_type=2)

    函數clip_grad_norm_()會迭代模型中的所有參數,并將它們的梯度當成向量進行統的范數處理。第2個參數值1表示最大范數,第3個參數值2表示使用L2范數的計算方法。

    2.2 使用JANET單元完成RNN

    在GitHub網站中,搜索pytorch-janet關鍵詞,在使用時,只需要將pytorch-janet項目中的源碼復制到本地,并在代碼中導入。

    在pytorch-janet項目中,JANET類的實例化參數與torch.nn.LSTM類完全一致,可以直接替換。如果要將LSTM模型替換成JANET,那么需要如下3步實現。
    (1)將pytorch-janet項目中的源碼復制到本地。
    (2)在代碼文件LSTMModel.py的開始處添加如下代碼,導入JANET類。

    from pytorch_janet import JANET

    (3)將代碼文件LSTMModel.py中的torch.nn.LSTM替換成JANET。

    2.3 使用indRNN單元實現RNN

    在GitHub網站中,搜索indrnn-pytorch關鍵詞,該項目中實現了兩個版本的IndRNN單元。這兩個版本的IndRNN接口分別為IndRNN、IndRNNv2類,可以直接替換torch.nn.LSTM類。

    總結

    以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 20 神经网络中的注意力机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。