国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼

這篇具有很好參考價值的文章主要介紹了《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在注意力機(jī)制中,每個查詢都會關(guān)注所有的鍵-值對并生成一個注意力輸出。由于查詢、鍵和值來自同一組輸入,因此被稱為 自注意力(self-attention),也被稱為內(nèi)部注意力(intra-attention)。本節(jié)將使用自注意力進(jìn)行序列編碼,以及使用序列的順序作為補(bǔ)充信息。

import math
import torch
from torch import nn
from d2l import torch as d2l

10.6.1 自注意力

《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼,《動手學(xué)深度學(xué)習(xí) Pytorch版》學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,人工智能

給定一個由詞元組成的輸入序列 x 1 , … , x n \boldsymbol{x}_1,\dots,\boldsymbol{x}_n x1?,,xn?,其中任意 x i ∈ R d ( 1 ≤ i ≤ n ) \boldsymbol{x}_i\in\R^d\quad(1\le i\le n) xi?Rd(1in) 。該序列的自注意力輸出為一個長度相同的序列 y 1 , … , y n \boldsymbol{y}_1,\dots,\boldsymbol{y}_n y1?,,yn?,其中:

y i = f ( x i , ( x 1 , x 1 ) , … , ( x n , x n ) ) ∈ R d \boldsymbol{y}_i=f(\boldsymbol{x}_i,(\boldsymbol{x}_1,\boldsymbol{x}_1),\dots,(\boldsymbol{x}_n,\boldsymbol{x}_n))\in\R^d yi?=f(xi?,(x1?,x1?),,(xn?,xn?))Rd

num_hiddens, num_heads = 100, 5
attention = d2l.MultiHeadAttention(num_hiddens, num_hiddens, num_hiddens,  # 基于多頭注意力對一個張量完成自注意力的計算
                                   num_hiddens, num_heads, 0.5)
attention.eval()
MultiHeadAttention(
  (attention): DotProductAttention(
    (dropout): Dropout(p=0.5, inplace=False)
  )
  (W_q): Linear(in_features=100, out_features=100, bias=False)
  (W_k): Linear(in_features=100, out_features=100, bias=False)
  (W_v): Linear(in_features=100, out_features=100, bias=False)
  (W_o): Linear(in_features=100, out_features=100, bias=False)
)
batch_size, num_queries, valid_lens = 2, 4, torch.tensor([3, 2])
X = torch.ones((batch_size, num_queries, num_hiddens))  # 張量的形狀為(批量大小,時間步的數(shù)目或詞元序列的長度,d)。
attention(X, X, X, valid_lens).shape  # 輸出與輸入的張量形狀相同
torch.Size([2, 4, 100])

10.6.2 比較卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)和自注意力

《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼,《動手學(xué)深度學(xué)習(xí) Pytorch版》學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,人工智能

  • 卷積神經(jīng)網(wǎng)絡(luò)

    • 計算復(fù)雜度為 O ( k n d 2 ) O(knd^2) O(knd2)

      • k k k 為卷積核大小

      • n n n 為序列長度是

      • d d d 為輸入和輸出的通道數(shù)量

    • 并行度為 O ( n ) O(n) O(n)

    • 最大路徑長度為 O ( n / k ) O(n/k) O(n/k)

  • 循環(huán)神經(jīng)網(wǎng)絡(luò)

    • 計算復(fù)雜度為 O ( n d 2 ) O(nd^2) O(nd2)

      d × d d\times d d×d 權(quán)重矩陣和 d d d 維隱狀態(tài)的乘法計算復(fù)雜度為 O ( d 2 ) O(d^2) O(d2),由于序列長度為 n n n,因此循環(huán)神經(jīng)網(wǎng)絡(luò)層的計算復(fù)雜度為 O ( n d 2 ) O(nd^2) O(nd2)

    • 并行度為 O ( 1 ) O(1) O(1)

      O ( n ) O(n) O(n) 個順序操作無法并行化。

    • 最大路徑長度也是 O ( n ) O(n) O(n)

  • 自注意力

    • 計算復(fù)雜度為 O ( n 2 d ) O(n^2d) O(n2d)

      查詢、鍵和值都是 n × d n\times d n×d 矩陣

    • 并行度為 O ( n ) O(n) O(n)

      每個詞元都通過自注意力直接連接到任何其他詞元。因此有 O ( 1 ) O(1) O(1) 個順序操作可以并行計算

    • 最大路徑長度也是 O ( 1 ) O(1) O(1)

總而言之,卷積神經(jīng)網(wǎng)絡(luò)和自注意力都擁有并行計算的優(yōu)勢,而且自注意力的最大路徑長度最短。但是因為其計算復(fù)雜度是關(guān)于序列長度的二次方,所以在很長的序列中計算會非常慢。

10.6.3 位置編碼

在處理詞元序列時,循環(huán)神經(jīng)網(wǎng)絡(luò)是逐個的重復(fù)地處理詞元的,而自注意力則因為并行計算而放棄了順序操作。為了使用序列的順序信息,通過在輸入表示中添加 位置編碼(positional encoding) 來注入絕對的或相對的位置信息。位置編碼可以通過學(xué)習(xí)得到也可以直接固定得到。

基于正弦函數(shù)和余弦函數(shù)的固定位置編碼的矩陣第 i i i 行、第 2 j 2j 2j 列和 2 j + 1 2j+1 2j+1 列上的元素為:

p i , 2 j = sin ? ( i 1000 0 2 j / d ) p i , 2 j + 1 = cos ? ( i 1000 0 2 j / d ) \begin{align} p_{i,2j}&=\sin{\left(\frac{i}{10000^{2j/d}}\right)}\\ p_{i,2j+1}&=\cos{\left(\frac{i}{10000^{2j/d}}\right)} \end{align} pi,2j?pi,2j+1??=sin(100002j/di?)=cos(100002j/di?)??

#@save
class PositionalEncoding(nn.Module):
    """位置編碼"""
    def __init__(self, num_hiddens, dropout, max_len=1000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(dropout)
        # 創(chuàng)建一個足夠長的P
        self.P = torch.zeros((1, max_len, num_hiddens))
        X = torch.arange(max_len, dtype=torch.float32).reshape(
            -1, 1) / torch.pow(10000, torch.arange(
            0, num_hiddens, 2, dtype=torch.float32) / num_hiddens)
        self.P[:, :, 0::2] = torch.sin(X)
        self.P[:, :, 1::2] = torch.cos(X)

    def forward(self, X):
        X = X + self.P[:, :X.shape[1], :].to(X.device)
        return self.dropout(X)

在位置嵌入矩陣 P \boldsymbol{P} P 中,行代表詞元在序列中的位置,列代表位置編碼的不同維度。從下面的例子中可以看到位置嵌入矩陣的第 6 列和第 7 列的頻率高于第 8 列和第 9 列。第 6 列和第 7 列之間的偏移量(第 8 列和第 9 列相同)是由于正弦函數(shù)和余弦函數(shù)的交替。

encoding_dim, num_steps = 32, 60
pos_encoding = PositionalEncoding(encoding_dim, 0)
pos_encoding.eval()
X = pos_encoding(torch.zeros((1, num_steps, encoding_dim)))
P = pos_encoding.P[:, :X.shape[1], :]
d2l.plot(torch.arange(num_steps), P[0, :, 6:10].T, xlabel='Row (position)',
         figsize=(6, 2.5), legend=["Col %d" % d for d in torch.arange(6, 10)])

?
《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼,《動手學(xué)深度學(xué)習(xí) Pytorch版》學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,人工智能

?

10.6.3.1 絕對位置信息

打印出 0 , 1 , … , 7 0,1,\dots,7 0,1,,7 的二進(jìn)制表示形式即可明白沿著編碼維度單調(diào)降低的頻率與絕對位置信息的關(guān)系。

每個數(shù)字、每兩個數(shù)字和每四個數(shù)字上的比特值在第一個最低位、第二個最低位和第三個最低位上分別交替。

for i in range(8):
    print(f'{i}的二進(jìn)制是:{i:>03b}')
0的二進(jìn)制是:000
1的二進(jìn)制是:001
2的二進(jìn)制是:010
3的二進(jìn)制是:011
4的二進(jìn)制是:100
5的二進(jìn)制是:101
6的二進(jìn)制是:110
7的二進(jìn)制是:111

在二進(jìn)制表示中,較高比特位的交替頻率低于較低比特位,與下面的熱圖所示相似,只是位置編碼通過使用三角函數(shù)在編碼維度上降低頻率。由于輸出是浮點數(shù),因此此類連續(xù)表示比二進(jìn)制表示法更節(jié)省空間。

P = P[0, :, :].unsqueeze(0).unsqueeze(0)
d2l.show_heatmaps(P, xlabel='Column (encoding dimension)',
                  ylabel='Row (position)', figsize=(3.5, 4), cmap='Blues')

?
《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼,《動手學(xué)深度學(xué)習(xí) Pytorch版》學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,人工智能

?

10.6.3.2 相對位置信息

除了捕獲絕對位置信息之外,上述的位置編碼還允許模型學(xué)習(xí)得到輸入序列中相對位置信息。這是因為對于任何確定的位置偏移 δ \delta δ,位置 i + δ i+\delta i+δ 處的位置編碼可以線性投影位置 i i i 處的位置編碼來表示。

這種投影的數(shù)學(xué)解釋是,令 ω j = 1 / 1000 0 2 j / d \omega_j=1/10000^{2j/d} ωj?=1/100002j/d,對于任何確定的位置偏移 δ \delta δ,上個式子中的任何一對 ( p i , 2 j , p i , 2 j + 1 ) (p_{i,2j},p_{i,2j+1}) (pi,2j?,pi,2j+1?) 都可以線性投影到 ( p i + δ , 2 j , p i + δ , 2 j + 1 ) (p_{i+\delta,2j},p_{i+\delta,2j+1}) (pi+δ,2j?,pi+δ,2j+1?)

[ cos ? ( δ ω j ) sin ? ( δ ω j ) ? sin ? ( δ ω j ) cos ? ( δ ω j ) ] [ p i , 2 j p i , 2 j + 1 ] = [ cos ? ( δ ω j ) sin ? ( i ω j ) + sin ? ( δ ω j ) cos ? ( i ω j ) ? sin ? ( δ ω j ) sin ? ( i ω j ) + cos ? ( δ ω j ) cos ? ( i ω j ) ] = [ sin ? ( ( i + δ ) ω j ) cos ? ( ( i + δ ) ω j ) ] = [ p i , 2 j p i , 2 j + 1 ] \begin{align} &\begin{bmatrix} \cos{(\delta\omega_j)} & \sin{(\delta\omega_j)}\\ -\sin{(\delta\omega_j)} & \cos{(\delta\omega_j)} \end{bmatrix} \begin{bmatrix} p_{i,2j}\\ p_{i,2j+1} \end{bmatrix}\\ =&\begin{bmatrix} \cos{(\delta\omega_j)}\sin{(i\omega_j)}+\sin{(\delta\omega_j)}\cos{(i\omega_j)}\\ -\sin{(\delta\omega_j)}\sin{(i\omega_j)}+\cos{(\delta\omega_j)}\cos{(i\omega_j)} \end{bmatrix}\\ =&\begin{bmatrix} \sin{((i+\delta)\omega_j)}\\ \cos{((i+\delta)\omega_j)} \end{bmatrix}\\ =&\begin{bmatrix} p_{i,2j}\\ p_{i,2j+1} \end{bmatrix} \end{align} ===?[cos(δωj?)?sin(δωj?)?sin(δωj?)cos(δωj?)?][pi,2j?pi,2j+1??][cos(δωj?)sin(iωj?)+sin(δωj?)cos(iωj?)?sin(δωj?)sin(iωj?)+cos(δωj?)cos(iωj?)?][sin((i+δ)ωj?)cos((i+δ)ωj?)?][pi,2j?pi,2j+1??]??

2 × 2 2\times 2 2×2 投影矩陣不依賴于任何位置的索引 i i i。

練習(xí)

(1)假設(shè)設(shè)計一個深度架構(gòu),通過堆疊基于位置編碼的自注意力層來表示序列??赡軙嬖谑裁磫栴}?


(2)請設(shè)計一種可學(xué)習(xí)的位置編碼方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-734599.html

到了這里,關(guān)于《動手學(xué)深度學(xué)習(xí) Pytorch版》 10.6 自注意力和位置編碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【深度學(xué)習(xí)注意力機(jī)制系列】—— CBAM注意力機(jī)制(附pytorch實現(xiàn))

    【深度學(xué)習(xí)注意力機(jī)制系列】—— CBAM注意力機(jī)制(附pytorch實現(xiàn))

    CBAM(Convolutional Block Attention Module) 是一種用于增強(qiáng)卷積神經(jīng)網(wǎng)絡(luò)(CNN)性能的注意力機(jī)制模塊。它由Sanghyun Woo等人在2018年的論文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主要目標(biāo)是 通過在CNN中引入通道注意力和空間注意力 來提高模型的感知能力,從

    2024年02月13日
    瀏覽(22)
  • 【深度學(xué)習(xí)注意力機(jī)制系列】—— SKNet注意力機(jī)制(附pytorch實現(xiàn))

    【深度學(xué)習(xí)注意力機(jī)制系列】—— SKNet注意力機(jī)制(附pytorch實現(xiàn))

    SKNet(Selective Kernel Network) 是一種用于圖像分類和目標(biāo)檢測任務(wù)的深度神經(jīng)網(wǎng)絡(luò)架構(gòu),其核心創(chuàng)新是 引入了選擇性的多尺度卷積核(Selective Kernel)以及一種新穎的注意力機(jī)制 ,從而在不增加網(wǎng)絡(luò)復(fù)雜性的情況下提升了特征提取的能力。SKNet的設(shè)計旨在 解決多尺度信息融合的

    2024年02月13日
    瀏覽(43)
  • 【深度學(xué)習(xí)注意力機(jī)制系列】—— SENet注意力機(jī)制(附pytorch實現(xiàn))

    【深度學(xué)習(xí)注意力機(jī)制系列】—— SENet注意力機(jī)制(附pytorch實現(xiàn))

    深度學(xué)習(xí)中的注意力機(jī)制(Attention Mechanism)是一種模仿人類視覺和認(rèn)知系統(tǒng)的方法,它允許神經(jīng)網(wǎng)絡(luò)在處理輸入數(shù)據(jù)時集中注意力于相關(guān)的部分。通過引入注意力機(jī)制,神經(jīng)網(wǎng)絡(luò)能夠自動地學(xué)習(xí)并選擇性地關(guān)注輸入中的重要信息,提高模型的性能和泛化能力。 卷積神經(jīng)網(wǎng)絡(luò)

    2024年02月14日
    瀏覽(26)
  • 機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——注意力提示、注意力池化(核回歸)

    機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——注意力提示、注意力池化(核回歸)

    ?????作者簡介:一位即將上大四,正專攻機(jī)器學(xué)習(xí)的保研er ??上期文章:機(jī)器學(xué)習(xí)深度學(xué)習(xí)——常見循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(RNN、LSTM、GRU) ??訂閱專欄:機(jī)器學(xué)習(xí)深度學(xué)習(xí) 希望文章對你們有所幫助 之前講過的CNN和RNN模型,容易發(fā)現(xiàn)的一個點是,他們并沒有刻意的、主觀的

    2024年02月13日
    瀏覽(21)
  • 【深度學(xué)習(xí)】注意力機(jī)制

    注意力機(jī)制(Attention Mechanism)是一種在計算機(jī)科學(xué)和機(jī)器學(xué)習(xí)中常用的技術(shù),可以使模型在處理序列數(shù)據(jù)時更加準(zhǔn)確和有效。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,每個神經(jīng)元的輸出只依賴于前一層的所有神經(jīng)元的輸出,而在注意力機(jī)制中,每個神經(jīng)元的輸出不僅僅取決于前一層的所有神經(jīng)

    2024年02月02日
    瀏覽(39)
  • 深度學(xué)習(xí)——常見注意力機(jī)制

    深度學(xué)習(xí)——常見注意力機(jī)制

    SENet屬于通道注意力機(jī)制。2017年提出,是imageNet最后的冠軍 SENet采用的方法是對于特征層賦予權(quán)值。 重點在于如何賦權(quán) 1.將輸入信息的所有通道平均池化。 2.平均池化后進(jìn)行兩次全連接,第一次全連接鏈接的神經(jīng)元較少,第二次全連接神經(jīng)元數(shù)和通道數(shù)一致 3.將Sigmoid的值固定

    2024年02月14日
    瀏覽(30)
  • 深度學(xué)習(xí)(5)---自注意力機(jī)制

    深度學(xué)習(xí)(5)---自注意力機(jī)制

    ?1. 一般情況下在簡單模型中我們輸入一個向量,輸出結(jié)果可能是一個數(shù)值或者一個類別。但是在復(fù)雜的模型中我們一般會輸入一組向量,那么輸出結(jié)果可能是一組數(shù)值或一組類別。 ?2. 一句話、一段語音、一張圖等都可以轉(zhuǎn)換成一組向量。 ?3. 輸入一組向量,一般輸出結(jié)

    2024年01月23日
    瀏覽(23)
  • 【深度學(xué)習(xí)實驗】注意力機(jī)制(一):注意力權(quán)重矩陣可視化(矩陣熱圖heatmap)

    【深度學(xué)習(xí)實驗】注意力機(jī)制(一):注意力權(quán)重矩陣可視化(矩陣熱圖heatmap)

    ? ?? 注意力機(jī)制 作為一種模擬人腦信息處理的關(guān)鍵工具,在深度學(xué)習(xí)領(lǐng)域中得到了廣泛應(yīng)用。本系列實驗旨在通過理論分析和代碼演示,深入了解注意力機(jī)制的原理、類型及其在模型中的實際應(yīng)用。 本文將介紹將介紹 注意力權(quán)重矩陣可視化 (矩陣熱圖heatmap) ??本系

    2024年02月05日
    瀏覽(30)
  • 深度學(xué)習(xí)CV方向?qū)W習(xí)筆記5 —— 通道注意力機(jī)制

    深度學(xué)習(xí)CV方向?qū)W習(xí)筆記5 —— 通道注意力機(jī)制

    目錄 1 問題:MobileNet 中的注意力機(jī)制 2 SE 通道注意力機(jī)制 2.1 SE 通道注意力機(jī)制的定義與作用 2.2 SE過程: Squeeze + Excitation + Scale 3 其他通道注意力機(jī)制 4 參考鏈接 問題描述: MobileNet 中使用了通道注意力機(jī)制,是如何實現(xiàn)的?CNN中還有哪些 Attention? 2.1 SE 通道注意力機(jī)制的定義

    2024年02月08日
    瀏覽(20)
  • 深入理解深度學(xué)習(xí)——注意力機(jī)制(Attention Mechanism):注意力匯聚與Nadaraya-Watson 核回歸

    分類目錄:《深入理解深度學(xué)習(xí)》總目錄 相關(guān)文章: ·注意力機(jī)制(AttentionMechanism):基礎(chǔ)知識 ·注意力機(jī)制(AttentionMechanism):注意力匯聚與Nadaraya-Watson核回歸 ·注意力機(jī)制(AttentionMechanism):注意力評分函數(shù)(AttentionScoringFunction) ·注意力機(jī)制(AttentionMechanism):Bahda

    2024年02月08日
    瀏覽(44)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包