• <track id="oztn4"></track>
    <sup id="oztn4"><form id="oztn4"></form></sup>
    
    
    <mark id="oztn4"></mark>
  • <dfn id="oztn4"><samp id="oztn4"></samp></dfn>
      《地爆天星小姐》电影 ,麦子交换2免费观看2023年上映时间表 ,莫妮卡《爱我几何》,大牛影库战狼6欧式少女全部视频,三年大片国语版在线看,日本空姐电视剧,电影魔镜号中文字幕,和部长一起去出差旅是第几集
      全球「AI學術頂會」精華匯聚地
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給skura
      發送

      0

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      本文作者: skura 2020-02-25 09:18
      導語:讓我們在現有資源的基礎上,用代碼實現 GPT-2 吧~

      歡迎來到「帶注釋的 GPT-2」。              

      我讀過的最精彩、解釋最清楚的文章之一是「The Annotated Transformer」https://nlp.seas.harvard.edu/2018/04/03/attention.html 。它引起了前所未有的關注,一個簡單的想法就是用一個文件注釋你所需要的代碼。

      我在機器學習方面的經驗讓我意識到,當你將事情寫成代碼的時候,其實現和秘密會變得更清晰,而不再是魔法了。              

      魔法沒有什么神奇的。魔術師只是理解一些簡單的東西,而這些東西對未經訓練的觀眾來說似乎并不簡單。一旦你學會了操作魔術卡片,你也可以變魔術。 

      ——Jeffrey Friedl 在《Mastering Regular Expressions》一書中寫道              

      GPT-2 一開始看起來像是魔術,它的看起來太美麗了,但希望我能為你解釋魔術,在你讀完這篇文章時揭示所有的技巧,這是我的目標。使那些熱衷于理解 GPT-2 模型是如何工作的人更好理解。 

      注:幾乎所有代碼都是從Hugging Face(https://github.com/huggingface/transformers/blob/master/src/transformers/modeling_gpt2.py )的 GPT-2 實現中復制、啟發和引用的,只保留了簡單的基本要素。如果你想在并行 GPU 上訓練 GPT-2 模型,在微調時保存檢查點,在多個 CPU 上運行推理任務等等,我建議你使用 Hugging Face API。最近,Hugging Face 發布了一個簡單的教程,它教你如何做到這一點:https://huggingface.co/blog/how-to-train 。              

      在這篇文章中,我并不是在試圖重新發明輪子,而是僅僅把一系列已經存在的優秀資源放在一起,讓讀者更容易掌握 GPT-2。我讓讀者在他們所選擇的任何領域進一步建立這些基礎。              

      你不能在弱小的基礎上建造一座偉大的建筑。如果你要有一個強大的上層建筑,你必須有堅實的基礎。    

      ——Gordon B. Hinckley        

      學習本教程的先決條件              

      本文假設讀者對注意力機制和 tansformers 有著扎實的理解。GPT-2 采用 12 層的,僅有解碼器的 transformer 架構。如果你想復習一下或了解注意力機制和 transformers,這里有一個很好的資源列表:

      如果你剛剛開始你的 NLP 之旅,或者你是一個專家,我絕對會推薦 Rachel Thomas 和 Jeremy Howard 教授的 fast.ai NLP 課程(https://www.fast.ai/2019/07/08/fastai-nlp/ )。本課程從基礎開始,包括使用樸素貝葉斯和 Logistic 回歸進行語義分類,接著是 RNN,后面還討論了遷移學習、ULMFiT、Seq2Seq 翻譯和 transformers 等。它是 fast.ai 團隊免費提供的優秀資源。 

      另一個關于 GPT-2 本身的優秀資源,是 Jay Alammar 的 The Illustrated GPT-2(http://jalammar.github.io/illustrated-gpt2/ )。本文從語言模型的基本介紹開始,以一種非常容易理解的方式逐步解釋 GPT-2 模型。我強烈建議讀者閱讀這篇文章。              

      哈佛大學 The Annotated Transformer 使用 PyTorch 實現了完整的 transformer 架構,是深入理解 transformer 的好方法。 

      然后,讓我們在這些優秀的現有資源的基礎上,用代碼實現 GPT-2 吧~              

      摘要              

      自然語言處理任務,如問答、機器翻譯、閱讀理解等,通常是在特定任務的數據集上進行有監督的學習。我們證明,當語言模型在一個名為 WebText 的數百萬網頁的新數據集上訓練時,它開始學習這些任務,而不需要任何明確的監督。我們最大的模型,GPT-2,是一個 1.5B 參數的 transformer,它可以獲得最先進的語言建模成果,但仍然不適合 WebText。模型中的示例反映了這些改進,并包含連貫的文本段落。這些發現為構建語言處理系統提供了一條有希望的途徑,該系統可以從自然發生的演示中學習執行任務。              

      Zero-shot 設置是不微調語言模型并直接在目標數據集上運行推理的設置。例如,在 WebText 上預覽一個 LM,并直接嘗試預測 Amazon 影評數據集的下一個單詞。              

      模型架構(GPT-2)              

      我們的 LM 使用基于 transformer 的架構。該模型主要遵循 OpenAI GPT 模型的細節,并進行了一些修改。層規范化被移動到每個子塊的輸入,類似于預激活剩余網絡,并且在最終的自關注塊之后添加了額外的層規范化。我們在初始化時將剩余層的權重按 1/√N 的因子進行縮放,其中 N 是剩余層的數量。詞匯量擴大到 50257 個單詞。我們還將上下文大小從 512 增加到 1024 個,并使用更大的批大小——512。 

      模型規格(GPT)              

      我們的模型基本上遵循了最初 transformer 的工作原理。我們訓練了一個 12 層的只解碼的 transformer,它有隱藏的自注意力頭(768 維狀態和 12 個注意力頭)。對于位置前饋網絡,我們使用了 3072 維的內部狀態。我們使用 Adam 優化方案,最大學習速率為 2.5e-4。學習速率在前 2000 次更新中從零線性增加,并使用余弦調度將其退火為 0。我們在 64 個隨機抽樣的小批量、512 個令牌的連續序列上訓練了 100 個階段。由于 layernorm 在整個模型中廣泛使用,簡單的 N(0,0.02)權重初始化就足夠了。我們使用了一個 bytepair 編碼(BPE)詞匯表。我們還采用了在中提出的 L2 正則化的改進版本,在所有非偏倚或增益權重上的 w=0.01。對于激活函數,我們使用高斯誤差線性單位(GELU)。  

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      導入

      import torch
      import copy
      import torch.nn as nn
      import torch.nn.functional as F
      from torch.nn.modules import ModuleList
      from torch.nn.modules.normalization import LayerNorm
      import numpy as np
      import os
      from tqdm import tqdm_notebook, trange
      import logging
      logging.basicConfig(level = logging.INFO)
      logger = logging.getLogger()

      GPT-2 內部的 transformer 解碼器              

      要重用用于描述 transformer 的術語,注意是一個查詢(Q)和一組鍵(K)和值(V)對的函數。為了處理更長的序列,我們修改了 transformer 的多頭自注意力機制,通過限制 Q 和 K 之間的點積來減少內存使用:

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      注意力是查詢、鍵和值的組合

      class Conv1D(nn.Module):
          def __init__(self, nx, nf):        super().__init__()
              self.nf = nf
              w = torch.empty(nx, nf)
              nn.init.normal_(w, std=0.02)
              self.weight = nn.Parameter(w)
              self.bias = nn.Parameter(torch.zeros(nf))

          def forward(self, x):
              size_out = x.size()[:-1] + (self.nf,)
              x = torch.addmm(self.bias, x.view(-1, x.size(-1)), self.weight)
              x = x.view(*size_out)
              return x

      CONV1D 層解釋              

      CONV1D 層本身可以看作是一個線性層。本質上,它是投射一個初始張量 x(最終尺寸為 x.size(-1))并傳遞給它,最終尺寸為 self.nf。              

      下面是相同的輸出示例:

      d_model = 768
      conv1d  = Conv1D(d_model, d_model*3)
      x       = torch.rand(1,4,d_model) #represents a sequence of batch_size=1, seq_len=4 and embedding_sz=768, something like "Hello how are you"
      x       = conv1d(x)
      x.shape

      >> torch.Size([1, 4, 2304])

      如上例所示,CONV1D 返回的張量的最終維數是初始大小的 3 倍。我們這樣做是為了能夠將輸入轉換為查詢、鍵和值矩陣。              

      然后可以檢索查詢、鍵和值矩陣,如下所示:

      query, key, value = x.split(d_model, dim=-1)

      query.shape, key.shape, value.shape
      >> (torch.Size([1, 4, 768]), torch.Size([1, 4, 768]), torch.Size([1, 4, 768]))

      將輸入轉換為 Q、K 和 V 矩陣的另一種方法是必須有單獨的 Wq、Wk 和 Wv 矩陣。我已經在這篇文章底部的附加部分解釋了這一點。我發現這種方法更直觀、更具相關性,但在本文中我們使用了 CONV1D 層,因為我們重用了 Hugging Face 的 CONV1D 預訓練權重。              

      前向層解釋

      class FeedForward(nn.Module):
          def __init__(self, dropout, d_model=768, nx=768*4):
              super().__init__()
              self.c_fc    = Conv1D(d_model, nx)
              self.c_proj  = Conv1D(nx, d_model)
              self.act     = F.gelu
              self.dropout = nn.Dropout(dropout)
             
          def forward(self, x):
              return self.dropout(self.c_proj(self.act(self.c_fc(x))))

      在 Jay Alammar 的文章中有一個很好的解釋,也就是上面提到的,輸入是如何先經過注意力層,然后再進入前向層的。前饋網絡是一個正常的網絡,它接受來自注意力層(768)的輸出,將其投射到 nx(768×4)維,添加一個激活函數 self.act(GELU),將其投射回 d_model (768) 并添加 dropout(0.1)。            

      注意力層解釋              

      下面的摘錄是從論文上摘取的:https://arxiv.org/abs/1706.03762 。              

      標度點產品注意力              

      我們稱我們的注意力為「標度點產品注意力」。輸入包括維度 dk 的查詢和鍵以及維度 dv 的值。我們使用所有鍵計算查詢的點積,用√dk除以每個鍵,然后應用 softmax 函數獲得值的權重。

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      在實際應用中,我們同時計算一組查詢的注意力函數,將它們組合成一個矩陣 Q,并將鍵和值組合成矩陣 K 和 V。我們將輸出矩陣計算為:

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      輸出矩陣為 Q、K 和 V 的組合

      最常用的兩個注意力函數是加性注意力函數和點積(乘法)力函數注意。除了比例因子 1/√dk 外,點積注意力與我們的算法相同。附加注意力使用具有單個隱藏層的前饋網絡計算兼容性函數。雖然二者在理論復雜度上相似,但在實際應用中,點積注意力速度更快,空間效率更高,因為它可以使用高度優化的矩陣乘法碼來實現。當 dk 值較小時,兩種機制的表現相似,但在 dk 值較大時,加性注意力優于點積注意力。我們懷疑,對于 dk 的較大值,點積在數量上增長較大,將 softmax 函數推入具有極小梯度的區域。為了抵消這一影響,我們將網點產品縮放至 1/√dk。              

      為了在代碼中實現注意力層,我們首先利用 CONV1D 層,得到前面解釋的 Q、K 和 V 矩陣。              

      一旦我們有了 Q、K 和 V 矩陣,我們就可以使用函數 _attn 來執行注意力。此函數復制了上述注意力點積公式。

      class Attention(nn.Module):
          def __init__(self, d_model=768, n_head=12, n_ctx=1024, d_head=64, bias=True, scale=False):
              super().__init__()
              self.n_head  = n_head
              self.d_model = d_model
              self.c_attn  = Conv1D(d_model, d_model*3)
              self.scale   = scale
              self.softmax = nn.Softmax(dim=-1)
              self.register_buffer("bias", torch.tril(torch.ones(n_ctx, n_ctx)).view(1, 1, n_ctx, n_ctx))
              self.dropout = nn.Dropout(0.1)
              self.c_proj  = Conv1D(d_model, d_model)
             
          def split_heads(self, x):
              "return shape [`batch`, `head`, `sequence`, `features`]"
              new_shape = x.size()[:-1] + (self.n_head, x.size(-1)//self.n_head)
              x = x.view(*new_shape)
              return x.permute(0, 2, 1, 3)
         
          def _attn(self, q, k, v, attn_mask=None):
              scores  = torch.matmul(q, k.transpose(-2, -1))
              if self.scale: scores = scores/math.sqrt(v.size(-1))
              nd, ns  = scores.size(-2), scores.size(-1)
              if attn_mask is not None: scores = scores + attn_mask
              scores  = self.softmax(scores)
              scores  = self.dropout(scores)
              outputs = torch.matmul(scores, v)
              return outputs
         
          def merge_heads(self, x):
              x         = x.permute(0, 2, 1, 3).contiguous()
              new_shape = x.size()[:-2] + (x.size(-2)*x.size(-1),)
              return x.view(*new_shape)
             
          def forward(self, x):
              x        = self.c_attn(x) #new `x` shape - `[1,3,2304]`
              q, k, v  = x.split(self.d_model, dim=2)
              q, k, v  = self.split_heads(q), self.split_heads(k), self.split_heads(v)
              out      = self._attn(q, k, v)
              out      = self.merge_heads(out)
              out      = self.c_proj(out)
              return out

      另一種實現注意力的方法在本博客底部的附加部分進行了說明。我發現它更直觀,更容易與研究論文進行比較。它利用線性層而不是 CONV1D 將輸入轉換為 Q、K 和 V 矩陣。我們之所以沒有使用它,是因為我們使用了預訓練的權重,從 Hugging Face 轉換為一維層。              

      多頭注意力              

      下面一段是從論文「Attention is all you need」上摘取的。              

      我們發現,使用不同的、學習到的線性映射將查詢、鍵和值分別線性映射到 dk、dk 和 dv 維度更好。然后,在這些查詢、鍵和值的隱射版本中,我們并行地執行注意力函數,生成 dv 維輸出值。這些值被連接起來,然后再次進行映射,得到最終值,如下圖所示:

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      多頭注意力機制允許模型在不同的位置共同關注來自不同表示子空間的信息。

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      多頭注意力等式              

      在這項工作中,我們使用了 h=8 個平行的注意力層,或者說頭。其中,我們使用的都是 dk=dv=dmodel/h=64。由于每個頭的維數減少,總的計算成本與全維度的單頭部注意的計算成本相似。              

      不要被這個弄糊涂了,本質上,我們所做的就是給 Q,K 和 V 矩陣增加一個維數。也就是說,如果這些矩陣之前的大小是 [1, 4, 768],表示 [bs, seq_len, d_model],則這些矩陣被投影到[bs, n_head, seq_len, d_model//n_head],大小為 [1, 12, 4, 64]。GPT-2 使用 12 個平行頭。我們將 Q,K,V 矩陣分解到 split_heads 函數中。最后,當我們通過應用并行注意力得到一個輸出時,我們將它連接到合并頭中,返回到維度矩陣 [bs,seq_len,d_model]。              

      代碼中的 GPT-2 模型體系結構

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      到目前為止,我們已經實現了多頭注意和前饋層。如上圖所示,這兩層構成 transformer 解碼器塊的構建塊。GPT-2 由 12 個 transformer 組組成。              

      這在 Jay Alammar 的文章中顯示如下:

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      由 12 個解碼塊組成的 GPT 體系結構              

      transformer 解碼器塊說明

      class TransformerBlock(nn.Module):
          def __init__(self, d_model=768, n_head=12, dropout=0.1):
              super(TransformerBlock, self).__init__()
              self.attn        = Attention(d_model=768, n_head=12, d_head=64, n_ctx=1024, bias=True, scale=False)
              self.feedforward = FeedForward(dropout=0.1, d_model=768, nx=768*4)
              self.ln_1        = LayerNorm(d_model)
              self.ln_2        = LayerNorm(d_model)
                     
          def forward(self, x):
              x = x + self.attn(self.ln_1(x))
              x = x + self.feedforward(self.ln_2(x))
              return x

      transformer 組由注意力層和前饋層組成,如 GPT-2 架構模型規范所述:層規范化被移動到每個子塊的輸入,這里的子塊是注意力和前饋。              

      因此,在 transformer 解碼器塊中,我們首先將輸入傳遞給一個 LayerNorm,然后是第一個子注意力塊。接下來,我們將這個子塊的輸出再次傳遞給 LayerNorm,最后傳遞給前饋層。              

      GPT-2架構說明              

      如 GPT 論文所述:我們訓練了一個 12 層的只解碼的 transformer,它有隱藏的自注意力頭(768 個維度和 12 個注意力頭)。              

      因此,完整的 GPT-2 體系結構是經過 12 次復制的 TransformerBlock。

      def _get_clones(module, n):
          return ModuleList([copy.deepcopy(module) for i in range(n)])

      class GPT2(nn.Module):
          def __init__(self, nlayers=12, n_ctx=1024, d_model=768, vcb_sz=50257):
              super(GPT2, self).__init__()
              self.nlayers = nlayers
              block        = TransformerBlock(d_model=768, n_head=12, dropout=0.1)
              self.h       = _get_clones(block, 12)
              self.wte     = nn.Embedding(vcb_sz, d_model)
              self.wpe     = nn.Embedding(n_ctx, d_model)
              self.drop    = nn.Dropout(0.1)
              self.ln_f    = LayerNorm(d_model)
              self.out     = nn.Linear(d_model, vcb_sz, bias=False)
              self.loss_fn = nn.CrossEntropyLoss()
              self.init_weights()
         
          def init_weights(self):
              self.out.weight = self.wte.weight
              self.apply(self._init_weights)
         
          def _init_weights(self, module):
              if isinstance(module, (nn.Linear, nn.Embedding, Conv1D)):
                  module.weight.data.normal_(mean=0.0, std=0.02)
                  if isinstance(module, (nn.Linear, Conv1D)) and module.bias is not None:
                      module.bias.data.zero_()
              elif isinstance(module, nn.LayerNorm):
                  module.bias.data.zero_()
                  module.weight.data.fill_(1.0)
         
          def forward(self, src, labels=None, pos_ids=None):
              if pos_ids is None: pos_ids = torch.arange(0, src.size(-1)).unsqueeze(0)
              inp = self.drop((self.wte(src)+self.wpe(pos_ids)))
              for i in range(self.nlayers): inp = self.h[i](inp)
              inp     = self.ln_f(inp)
              logits  = self.out(inp)
              outputs = (logits,) + (inp,)
             
              if labels is not None:
                  shift_logits = logits[..., :-1, :].contiguous()
                  shift_labels = labels[..., 1:].contiguous()
                  loss = self.loss_fn(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))
                  outputs = (loss,) + outputs
                  return outputs
              return logits

      我還沒有提到的是位置編碼和標記嵌入。因為,我們不能將諸如「hey」或「hello」之類的詞直接傳遞給模型,所以我們首先將輸入標記化。接下來,我們使用嵌入將標記表示為數字。Jay Alammar 的這篇文章(http://jalammar.github.io/illustrated-word2vec/ )很好地解釋了嵌入。              

      此外,與按順序傳遞輸入詞的 RNN 不同,transformer 并行地接受輸入矩陣,從而失去了被輸入詞的位置感。為了彌補這一損失,在將標記嵌入處理到模型之前,我們添加了 Positional Encoding——一種指示序列中單詞順序的信號。如前所述,由于 GPT-2 的上下文大小是 1024,因此位置編碼的維度是 [1024, 768]。

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      從[The Illustrated GPT-2]引用的位置編碼(http://jalammar.github.io/Illustrated-gpt2/)              

      因此,GPT-2 體系結構的輸入是通過一個 Dropout 的標記嵌入和位置編碼的總和。一旦我們有了輸入矩陣,我們就讓其通過 GPT-2 架構的 12 層中的每一層,其中每一層都是一個由兩個子層組成的 transformer 譯碼器塊——注意力和前饋網絡。              

      語言建模或分類              

      當使用 GPT-2 作為語言模型時,我們將輸入傳遞到最終層形式,并通過最終大小為[768, vocab_sz](50257)的線性層,得到大小為[1,4,50257]的輸出。這個輸出表示下一個詞匯輸入,我們現在可以很容易地通過一個 softmax 層,并使用 argmax 以最大的概率獲得單詞在詞匯表中的位置。              

      對于分類任務,我們可以通過大小為 [768, n] 的線性層來傳遞從 GPT-2 架構接收到的輸出,以獲得每個類別的概率(其中 n 表示類別的數量),然后通過 softmax 傳遞,得到最高的預測類別,并使用 CrossEntropyLoss 來訓練架構進行分類。              

      這就是 GPT-2 背后的全部魔法。它是一種基于解碼器的 transformer 式結構,與 RNN 不同,它采用與位置編碼并行的輸入,通過 12 個 transformer 解碼器層(由多頭注意力和前饋網絡組成)中的每一層來返回最終輸出。   

      讓我們在語言模型任務中看看這個模型的實際作用。              

      使用 Hugging Face 預訓練權重生成示例文本              

      首先,讓我們用 Hugging Face 提供的預訓練權重初始化模型。

      model = GPT2()
      # load pretrained_weights from hugging face
      # download file https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-pytorch_model.bin to `.`

      model_dict = model.state_dict() #currently with random initialization
      state_dict = torch.load("./gpt2-pytorch_model.bin") #pretrained weights

      old_keys = []
      new_keys = []
      for key in state_dict.keys():
          if "mlp" in key: #The hugging face state dict references the feedforward network as mlp, need to replace to `feedforward` be able to reuse these weights
              new_key = key.replace("mlp", "feedforward")
              new_keys.append(new_key)
              old_keys.append(key)

      for old_key, new_key in zip(old_keys, new_keys):
          state_dict[new_key]=state_dict.pop(old_key)

      pretrained_dict = {k: v for k, v in state_dict.items() if k in model_dict}

      model_dict.update(pretrained_dict)
      model.load_state_dict(model_dict)
      model.eval() #model in inference mode as it's now initialized with pretrained weights

      現在讓我們生成文本。我們將使用 Hugging Face 的預訓練標記器將單詞轉換為輸入嵌入。

      from transformers import GPT2Tokenizer
      tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
      context   = torch.tensor([tokenizer.encode("The planet earth")])


      def generate(context, ntok=20):
          for _ in range(ntok):
              out = model(context)
              logits = out[:, -1, :]
              indices_to_remove = logits < torch.topk(logits, 10)[0][..., -1, None]
              logits[indices_to_remove] = np.NINF
              next_tok = torch.multinomial(F.softmax(logits, dim=-1), num_samples=1).squeeze(1)
              context = torch.cat([context, next_tok.unsqueeze(-1)], dim=-1)
          return context

      out = generate(context, ntok=20)
      tokenizer.decode(out[0])

      >> 'The planet earth is the source of all of all the light," says the study that the government will'

      附加內容              

      另一種實現注意力的方法,在 fast.ai 的 NLP 課程(https://github.com/fastai/course-nlp/blob/master/8-translation-transformer.ipynb )中有,我發現更直觀的方法如下:

      class Attention_FASTAI(nn.Module):
          def __init__(self, d_model=768, n_head=12, d_head=64, n_ctx=1024, bias=True, scale=False):
              super().__init__()
              self.n_head   = n_head
              self.d_head   = d_head
              self.softmax  = nn.Softmax(dim=-1)
              self.scale    = scale
              self.atn_drop = nn.Dropout(0.1)
              self.wq, self.wk, self.wv = [nn.Linear(d_model, n_head*d_head,
                                                     bias=bias) for o in range(3)]
         

          def split_heads(self, x, layer, bs):
              x = layer(x)
              return x.view(bs, x.size(1), self.n_head, self.d_head).permute(0,2,1,3)
             
          def _attn(self, q, k, v, attn_mask=None):
              scores  = torch.matmul(q, k.transpose(-2, -1))
              if self.scale: scores = scores/math.sqrt(v.size(-1))
              if attn_mask is not None:
                  scores = scores.float().masked_fill(attn_mask, -float('inf')).type_as(scores)
              attn_prob  = self.atn_drop(self.softmax(scores))
              attn_vec   = attn_prob @ v
              return attn_vec
         
          def merge_heads(self, x, bs, seq_len):
              x         = x.permute(0, 2, 1, 3).contiguous()
              return x.view(bs, seq_len, -1)
             
          def forward(self, q, k, v, mask=None):
              bs, seq_len = q.size(0), q.size(1)
              wq, wk, wv  = map(lambda o:self.split_heads(*o, bs),
                              zip((q,k,v), (self.wq, self.wk, self.wv)))
              attn_vec    = self._attn(wq, wk, wv)
              attn_vec    = self.merge_heads(attn_vec, bs, seq_len)
              return attn_vec

      上面的實現與我們采用的實現方法的關鍵區別在于,這個實現沒有使用 CONV1D,而是先將輸入 x 傳遞給 self.wq、self.wk 和 self.wv 線性層,得到 wq、wk 和 wv 矩陣,然后接下來和前面一樣。              

      寫在最后             

      特別感謝 Hugging Face 創建了一個開源的 NLP 庫,并提供了許多可使用的預訓練模型。如前所述,本文中的代碼直接來自 Hugging Face 庫。The Illustrated GPT-2(http://jalammar.github.io/illustrated-gpt2/ )是關于 GPT-2 知識最全的博客之一。最后,Harvard NLP 的 The Annotated Transformer(https://nlp.seas.harvard.edu/2018/04/03/attention.html )完成了一個很棒且易于學習的 PyTorch 中 Transformers 的實現。          

      via:https://amaarora.github.io/2020/02/18/annotatedGPT2.html

      雷鋒網雷鋒網雷鋒網 

      GPT-2沒什么神奇的,PyTorch 就可以復現代碼

      分享:
      相關文章
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 平凡的荣耀全集| 一家不说两家话| 开端一共多少集| 地心引力2神秘岛| 千金女神免费观看完整版| 女性私人监狱| 小菊的春天在线观看| 汉尼拔第四集| 泰剧在线观看| 《急诊护士》法国版电影在线播放 | 韩剧马医| 我和我的家乡免费观看高清| 隔壁女孩5中字id| 陈楚河曾把脚放在朱珠腿上| 《完美无瑕》| 台湾电影卖房的女肖信| 因为想你泰剧在线观看完整版免费| 嘘禁止想象| 《私人助理2》电影免费观看| 不汗党国语版| 《美丽妻子替弟还债》电影完整版在 | 禁忌电影免费观看电视剧| 奥拉星大电影1完整版| 贺军翔主演电视剧| 法版空姐2020免费观看电视剧| 飓风营救1电影| 给我免费观看片在线电影的| 墨西哥《瓜达卢佩的玫瑰》在线播放| 实地探访银川烧烤店爆炸事故现场| 高清《致命审判》在线观看| 年年柿柿红电视剧| 小蜜桃免费看| 刻晴大战史莱姆免费观看| 我的青春遇见你免费全集观看| 连续7天失去理智的日剧是第几集| 风姿影视| 火凤凰29| 乳糖不耐受po豆乳芝士| 劳拉迷宫1997免费观看| 徐一航42集电视剧免费观看| 卯月麻衣种子| 他带我去没人的地方吃我豆腐| 江湖奇侠传之龙凤恩仇录| 少女大人第16集| 黄景瑜冬至电视剧全集免费观看| 偏偏喜欢你电视剧免费观看| 德川幕府三部曲水月篇免费观看| 加藤鹰电影| 真实伦 乱| 日本厨房激情3| 我的朋友的瘦子4| 如果爱湖北卫视| 女律师的坠落日本电影全集免费观看 | 日本修理工艳遇| 许我荣耀电视剧更新| 高清尼诺未删减| 彭丹徐锦江电影《悟间道之奇缘》| 邻居的妻子在线观看| 军营女长官1984年意大利| 方子传 韩国完整版| 欢乐喜剧人第三期完整版| 下女在线免费观看| 战狼10免费完整电影在线观看高清| 上甘岭电影| 监狱战舰在线观看| 在姨母家的遗憾完整版播放| 时光与你都很甜电视剧免费| 冲出亚马逊| 雪烟追逐未删减| 新警事电视剧| 三只狐仙大战五通魔电影 | 斗牛要不要高清| 贝拉1980| 高清《在你眉梢种红豆》电视剧| 天龙八部13| 《军事不当行为》免费观看法国 | 篠田步美| 兔子先生免费全集在线观看| 中国好声音之为你转身| 高清《名欲场》结局| 法制频道现场直播| 韩剧妈妈爱上儿子同学剧情| 3d玉蒲完整版| 落翅女的黄昏在线观看完整版电影| 隔壁邻居很美味电影| 小森林冬春篇电影| 呕吐娃娃| 最高的爱人沼| 蜡笔小新1~9季恐怖剧集| 越狱 最后一越| 金银梅2008版电影尼姑| 时寒冰经济大棋局| 猛兽侠下载| 白嫖者联盟电影高清在| 《怦然与你》| 歌唱党的歌曲| 不正当军事行为2017| 张国荣天使之爱| 《漂亮男孩》动漫在线观看全集 | 色戒未删减版在线观看完整| 2013女超人| 非洲姑娘高清播放| 乡村爱情5部免费全集电视剧| 白峰电影84集免费播放| 电视剧怪侠欧阳德| 兄弟的老婆电视剧| 双食记百度影音| 黑帮大佬365天| 凯登克罗斯版《壮志凌云》完整版在| 冰冷少帅荒唐妻全文免费阅读| 于无声处电视剧下载| 金银悔1-5HD普通话| 律政新人王2国语| 新 还珠格格| 韩惠珍满天星三部曲免费阅读| 四叔把小莲叫到办公室| 菲梦少女第二季免费观看完整版| 美女在野外脱个精光| 房间里的二人世界原声中文版| 灰姑娘的玻璃手机2| 《农场保卫战2009》在线观看| 朱卫民推杆| 部长来家| 待到重逢时泰剧| 白雪公主H成 版伦理| 异形虫历险记| 街头霸王 暗杀拳| 木子檀檀子剧免费观看| 欢乐颂电视剧全集免费观看| 三个傻子| 凯帕克电影作品在线观看| 引诱我的巨乳女邻居| 《有用的鬼》| 播九公社在线观看| 憩园电影| 刀锋战士3免费完整版在线观看| 空蝉之森在线观看高清完整版| 陆贞传奇百度影音| 漂亮的妈妈中字开头7个字| 神医弃女全集免费| 播九公社在线观看| 甄嬛传在台湾| 牌坊下的女人| 《屠宰餐厅》在线观看完整版电影| 王者清风电视剧| 优酷 火影| 需要爸爸播种2在线观看| 烈火军校电视剧免费观看| 吊丝女士第二季全集| 插曲的痛60集全免费播放剧情介绍| 爱的释放电影完整版在线观看 | 默杀在线观看免费版| 柱训练篇| 禁忌4年转一代禁忌| 胡汉三小品| 保姆妈妈| 女机器人1980法国满天星| 演员请就位第二季第五期在线观看| 青盲电视剧全集50| 美容店的待遇5HD| 银魂138| 漆黑的追踪者国语| 女女女hd| 黄色仓库视频| 识骨寻踪第一季完整版在线观看 | 韩国电影隐身帽子| 赵本山相亲3高清| 擦枪走火电影完整版| 吴健版免费追农民伯伯| 0号宿舍.| 星克莱尔| 贤妻良母| 婆婆妈妈综艺| 《孽债》第二部视频,需要爸爸播种| 喜爱夜蒲国语版高清| 台湾片后宫春艳录hd| 高压监狱2法国1时43分| 电影《北纬三十八度》| 黑帮大佬和我的365天未删除版本 邻居也疯狂免费观看电视剧 | 优越的一天电视剧全集完整版| 小早川玲子A V电影| 和讨厌部长一起去出差旅是第几集| 灵与肉电视剧| 《花子vs倔强驱魔师2》动漫| 非卖品广播剧| 火影忍者剧场版全集| 荣益守则满天星| 倪大红版林海雪原免费观看 | 少妇与情人苹果园偷欢| 《零度暧昧》免费全集| 四周恋人第二季| 欧特曼大全| 宇宙面包店全集观看| 小凤新婚下集免费观看视频播放大全| 乙酰半胱氨酸泡腾片| 风火天下| 猎狼连线| 《Melody女超人》在线播放 | 少儿不宜的电影| 法国满天星《太太们》观看| 我是刑警40集在线观看| 阿勒泰市| 从结婚开始恋爱1-35集免费观看| 悬崖电视剧在线观看免费完整版| 电视剧内幕| 星克莱尔总统夫人1997| 高清菜肉馄饨未删减| 火影剧场版7| 维修人员的培训 中字视频| 苍井空演的电影| 《隔壁女邻居3》中文| 爱我几何未删减版在线观看| 郭晓冬郝蕾| 哀乐大全| 梦里水乡简谱| 涩涩屋在线观看| 高清正在缩小的男人| 仙逆59| 需要爸爸的种免费观看| 英雄虎胆免费完整版| 艳母动画| 墨西哥《瓜达卢佩的玫瑰》在线播放 | 蜜汁炖鱿鱼电视剧棉免费全集| 伦理《法国护士长》2006在线观看| 平安夜,杀人夜| 巴厘岛命案行凶动机公布| 西林县| 一路向西迅雷种子| 老公从外地回来一晚上不让我睡觉| 大江大河3完整50集免费 | 火凤凰传奇电视剧| 开心锤锤富二代假装穷人| 韩国控制女上司| 需要爸爸播种籽2中文版免费观看| 中国特警全集| 年经继拇中文版| 真假学园| 鬼影泰国版电影| 爱上特种兵全集| 潍坊科技学院是几本| 欧美3p两根一起进高清视频| 匹夫演员表| 私人女性监狱变态版在线观看| 电影《功夫》国语免费观看| 五道口宏楠怎么死的| 无敌僵尸王 电视剧| 恐龙时代:你不知道的故事未删减 | 生活中的马丽亚无删减在线观看免费| 一拳超人第二季在线观看免费| 仙逆动漫76集| 美国式忌讳第17集桥矿| 我的老婆是大神| 刚结婚陪部长出差的日子日剧电影| 性情中人中文网bt| 情迷假期| 熟睡的继拇HD| 无盐之月动漫免费全| 我的女婿太逆天电视剧| 京香| 亢奋电影原版完整版| 三上翔子| 交换一天| v酒店在线| 杀破狼贪狼免费观看| 张碧晨 红玫瑰| 美国灭火宝贝电影| 电影生化危机5| 江湖男装:女扮侠义短剧全集| 正在播放: 美丽寡妇偿还债务,巨乳少女葵司献身还债 - 91n | 婚姻向左浪漫向右全集| 美国禁忌结局- 5芭芭拉| 辛德勒的名单电影| 3d肉蒲团蓝燕| 执法女先锋在线| 巜性刑房3捆绑凌虐电影| 电影网在线观看| 玄学少女全集免费| 男生和女生在一起愁愁愁在线观看30集| 高清《未婚男女的效率恋爱》电视剧 | 小凤新婚电影手机在线免费观看| 间谍过家家樱花动漫| 商务旅行戴绿帽在线观看| 好男人在线电视剧在线观看免费高清 | 花鼓戏哭灵| 巢湖市| 好兄弟 黑龙| 小太妹免费| 牛鞭擦女人| 南家三姐妹第一季| 爱你命中注定泰剧免费观看泰剧网 | 金马奖2018完整版晚会| 牙医赤板栗完整版在线观看| 月球正在冷却收缩| 终极追捕电视剧全集免费观看| 美丽小辣椒| 人生之路电视剧全集免费观看| 宾利欧陆gtc| 浮世风清绘完整版| 私人助理在线看完整版电影| 斗罗大陆207集在线观看| 鼠来宝3电影完整版| 电影《牙医姐妹》在线观看| 高清《人世间》| 陆小凤与花满楼结局| 王冰冰说自己不是一个自信的人| 电影商务旅行戴绿帽在线观看| 恰似你的温柔原唱| 叶罗丽第一季免费观看全集 | 《想入非非》台湾电影| 火口的两人| 斗破苍穹年番免费动漫| 三级片替夫还债的家庖妇女| 湖南卫视风云| 风月变电视剧免费观看| 盗墓风云| 无间道风云下载| 上海少妇黑人3P完整版BD| 河南豫剧全场戏| 变形金刚4枪版| 高清【我推的孩子】 第三季未删减| 小沈阳 不差钱| 天使快播| 台版1987渔夫荒野史记免费观广告| 恶作剧之吻电视剧| 亲爱的完整版免费观看| 方言版唐伯虎点秋香| 二十一世纪爱情指南免费观看全| 电影未来警察| 雷军自曝37岁已财务自由| 公之浮之6| 罗克星克莱尔在线观看| 鬼吹灯之精绝古城在线| 我要和你在一起电视剧全集完整版| 危险关系未删减版电影完整版| 法国女超人无删减| 女虐女胯下变态调教| 吞噬星空202集完整版| 宁陵县| 神奇的眼镜韩国免费观看完整版| 命运交响曲剧情| 空巢姥爷电视剧| xl司令第一季全集在线观看漫画 | 雪在烧电视剧| 酒店第1-100集免费观看| 雾山五行第二季樱花动漫| 樊振东爆冷出局事件| 卓帕卡布拉| 《高压监狱2》HD无删减| 九零创业:商业巨头全集免费| 需要爸爸播种在线观看免费高清完整泰剧 | 女婿回乡全集免费看| 王蓉蓉龙凤呈祥| 美式忌保罗讳1-4是合法的吗| 天海翼种子迅雷下载 | 大丫鬟结局| 侄女的开发日期| 五号特工组第一部30集电视剧| 大神同学想被吃掉未增删有翻译 | 风水讲座| 冲上云霄2大结局是什么| 《闪婚老伴是豪门》免费观看| 水润女人韩剧免费观看| 云南虫谷| 田连元评书下载| 酒店1-100集全集免费| 大明风华多少集| 人犬兽人第1集免费观看| 甜蜜惩罚未增删带翻译不打马| 《八尺夫人意大利满天星》在线观看| 《金花瓶》完整版西门庆| 《火花》电影| 石正丽简介| 酒店视频1-3集免费播放| 武林女大生| 白峰美羽主演的为父报仇在线观看视| 突围在哪个台播放| 一路向西百度影音下载| 战狼6免费观看全集高清版| 色戒在线无删减| 流浪汉电影| 潘霜霜个人资料| 《麦乐迪女超人》完整版在线观看电影 | 欢天喜地七公主| 喜羊羊和灰太狼之决战次时代| 总统夫人星克莱尔1997| 醉酒迷奸在线免费观看| 古见同学有交流障碍症第二季| 斗罗大陆第113集| 屠宰呕吐娃娃高清完整版观看| 我是特种兵3全集| 无极 预言| 姐姐韩国电影免费观看 电视剧| 女儿的男朋友av| 电锯人蕾塞篇剧场版观看| rerese| 唐山市| 抽曲的痛高清免费视频| 济公免费| 村里来了个洋媳妇免费观看全集| 浪漫女家教在线播放全集免费观看中| 赖小子完整版| 泰剧4分钟在线观看| 拜托请爱我动漫在线观看| 站着再来一次第48集更新时间| 天美星空mv在线观看| 金牌保镖| 武藤兰合集| 《法国护士长》在线| 锦鲤空间好运:爆棚挡不住短剧全集| 猎罪图鉴电视剧| 红色假期黑色婚礼国语版| 新加坡战争2011很差导演:彭禺厶主演:金九拉 金利娜 李硕薰 GREE简介:主角Sara | 在线维修工的艳遇| 电视剧破冰行动48集免费完整版| 活佛济公3迅雷下载| 菁菁和公公| 星克莱尔《总统夫人》完整版在线播放| 记忆的静物| 你的欲梦裸身在线播放| 《美姐妹牙医》完整版| 电影《越南女兵》免费观看| 老家有喜| 猪哥亮与朱慧珍| 花与蛇2电影全集免费播放| 课中坏事 高清完整| 远大前程2011| 最近韩国电影免费观看高清版| 日剧修理工的艳遇| 白嫩丰满大屁股BBBBB肥波婆| 车水马龙电影免费版| 厨房激情| 阿部夏树的电影| 斗罗大陆在线全集免费看| 最终幻想电影| 《地爆天星小姐》电影| 我的巴比伦恋人在线观看| 沙漠女王1983意大利| 人体自燃之谜| 和部长出差日韩电影| 情逆三世缘电视剧| 哈尔的移动城堡免费完整版| 电影无赦之仇免费观看| 金银梅日本| 黑袍纠察队 第五季全集观看| 幸福到万家电视剧在线观看21| 归路电视剧免费观看完整版| 越南电影《暴行》| 善良美丽女邻居4| 老板强脱我的内裤| 延禧攻略电视剧全集免费观看| 《疯狂老师》全集观看| 红墨坊电视剧| 南充属于几线城市| 人蛇大战 电影| 商务旅行戴绿色帽子电影迅雷在线观| 皇太子的初恋| 农奴电影| 美好的时光电视剧在线播放| 战狼6免费观看在线成人版| 睫毛膏2美国1| 风语者高清| 甜性涩爱全集在线观看| 战狼6免费高清完整版下载| 在我消失前| 保姆用废弃尿垫给老人擦嘴被判刑| 警察锅哥40集电视剧免费完整版| 落魄贵族琉璃川动漫全集免费| 我的老爸不简单短剧| 碧血蓝天电影免费观看完整版| 劫中劫分集剧情介绍| 97免费在线观看| 电影《韩国财阀》免费观看| 赤焰战场2高清下载| 电影三不管| 麦乐迪家庭矛盾完整版| 整容电影| 樱桃电影| 勇者传说粤语| 《家庭矛盾》melody| 无理的同居| 澳门风云1| 需要爸爸播种在线观看免费| 水浒传2011| 失忆的劳拉电影| 分手的决心在线观看| 坎贝奇无憾免费| 左右剧情| 行尸走肉第三集| 巡回检察组免费看| 杨敏思1-5集免费观看电视连续剧| 裸体免费看| 热力四射2下载| 女人何苦为难女人演员表| 换拌5| 甄嬛传39| 师生畸恋下载| 伦敦奥运会开幕式高清下载| 重蓬:丈夫的部下是初恋| 古惑仔7之绝义升天| 浪漫的办公室电影| 动动广场舞奢香夫人| 播放安斋拉拉的电影叫什么 | 红十字:女人们的入伍通知单| 二连浩特吧| 《飞机上特殊服务5》电影| 金瓶梅1-5电影观看完整版丿| hodv-21134| 刑侦12国语免费观看| R片| 李佳琦回应参加披哥 | 高清《朋友年轻的妈妈| 出差被讨厌的部长侵犯| 特殊的美容院| 一起来看流星雨36| 封总,太太想跟你离婚| 爱我几何删减版在线观看高清| 爱情公寓3电视剧| 牌坊下的女人插曲| 妈妈需要播种日本电影吗| 《出轨的女人2》| 新还珠格格51| 有兽焉第三季动画免费观看| 妓院里的中国姑娘在线观看| 埃及艳后 电影国语| 康熙密史| 院人全年无休计划免费观看| 《和讨厌的部长出差旅》| 爱我几何免费完整版多长| 何所冬暖 何所夏凉电视剧| 父辈的荣耀电视剧| 泰迪熊之玩具大战 电影| 《落魄贵族琉璃》在线观看 | 都市狂少:纵横都市无人敌全集免费 | 晚娘全集在线观看| 强者风范| 泰兴市| 日本维修工艳遇| 香澄果穗| 传闻中的陈芊芊电视剧在线观看| 霸王行动| 满天星麦乐迪电影在线观看完整免费| 少林七十二绝技| 铡美案免费| 战狼4高清免费999| 连诗雅三级| 亲密敌人高清下载| 日本牙医姐妹电影完整版| star409| 功夫姐妹电视剧全集在线观看| 插曲痛30分钟全集免费看| 旖旎婚色短剧大结局免费观看全集 | 我家有喜80集全免费播放| 新上门女婿电视剧完整版免费| 19岁大学生免费看电视剧| rio ed2k| 当年明月难寻短剧免费观看| 特殊家政服务电视剧在线观看 | 浪漫满屋泰国版11| 加勒比海盗女版| 人人都爱雷蒙德第九季| 年轻人 高清在线观看| 娱乐百分百20130221| 女超人麦乐迪在线完整版2013| 永不回头剧情介绍| 机械女仆| 美乃雀免费观看| 风流老板俏秘书豆瓣| 祝你好运在线观看完整版电影| 塔日酒店| 匹夫百度影音| 扫黄先锋国语| 角斗英雄| 女超人麦乐迪迅雷下载| 家庭教师之| 索尼克音爆| 义子乱的电影在线| 小巷人家40集全部播放目录| 《灭火宝贝| 女子寄快递丢失4800元手镯| 需要爸爸播种子第二季免费观看| 我女朋友的母亲1完整视频有翻译| 国家宝藏1在线观看| 混血儿的摇篮曲1973| 香草美人在线观看| 百妖谱第二季| 你妈妈也一样| 女主替父母还债的韩剧| 见好就收电视剧免费完整版| 东游记电视剧| 大奶按摩电影| 跳进地理书的旅行第二季| 纯情罗曼史第一季全集在线| 侄女的开发日记动漫第12集在线观看 | 误杀3 电影 在线观看| 丁·度的《妇产科》| 天堂日落电影| 眷思量免费观看全集| 烈火街头| 意大利《女子护卫队》| 插曲的痛30集全集在线观看免费下载 | 雾蓝色的雨后晴天| 插曲的痛30集全播放免费高清| 她唇之下电影无删减资源| 向风而行电视剧免费播放19集| 《常盘贵子恶魔之吻》| 电影《749局》| 王琦 九种体质| 球爱酒吧| 电影《姐妹牙医》正片视频| 《需要爸爸播种美国》在线观看| 新春去春又回| 美洲杯决赛| 少年派第二季电视剧免费观看全集| 3对1:三人一次性体检什么电影| 东京复仇者动漫| 《牙医诊所》中字| 丽塔海华丝| 好雨时节在线观看| 私人航空 电影免费看全集| 花样少年少女未删减| 刘老根第三部| 麻雀电视剧全集| 关于女主与园丁的电影| 八戒八戒8在线看免费观看完整版 涩涩屋视频黄色在线观看 | 麦乐迪父亲和女儿| 被最想拥抱的男人威胁了动漫免费| 娘王 下载| 特殊的游泳教练在线观看| 网民发布辱国等不当言论被刑拘| 要爸爸播种美国电影在线观看免费| 一路向西完整版在线播放| 简言的夏冬在线观看| 漂亮的保姆免费中文版| 女超人完整版| 谁是凶手免费观看完整版| 完 陈奕迅| 木子檀电影免费观看2023| 古惑仔5龙争虎斗国语高清版免费| 桃恋者未删减| 禹州电视台| 高压监控2法国版播放| 香港仔粤语免费观看完整版 | 无与伦比的美丽电视剧在线观看| 金庸的籍贯| 禁忌之女2| 怎么辨别玉的好坏?| 牙医姐妹高清完整版在线观看| 来自喵喵星的你| 隔世相逢| 花开如梦电视剧免费播放40集| 周秀娜的电影| 空蝉之森有人看过没有| 伦韩国理论片在线观看| 房奴试爱韩剧免费| 匆匆那年:好久不见2015王萌黎 | 金鱼影视| 爱情公寓3第21集| 369你懂得电影| 樱花动漫石之海| 红壳的潘多拉| 葡萄姐姐| 电视剧今生无悔| overflower第一季全集下载 | 湘西诡事电影在线观看| 古惑仔少年激斗片| 爆操老妈46集| 超级校长| 和亲公主:敌国战神短剧全集| 青梅竹马是消防员第2季在线观看| 叶玉卿 卿本佳人| 夫妻换房在线观看| 茶杯狐foxcup| 老阿姨2免费播放电视剧大全| 酒井法子电影| 家有一老全集| 八尺夫人满天星英语翻译版| 春天在线观看| 天火传说| 我的父亲母亲高清| 爱情公寓3在线| 美国式禁忌保罗讳1-4| 斗罗大陆动画片| 情感背后| 他年她日电影| 苍井空色欲迷墙全集| xl司令第一季全集在线观看完整版免费 | 过气明星:复出即顶流全集免费| 双女任务在线观看完整版高清电影免费| 下属的妻子2020韩国女演员| 原来是老师啊动漫| 平凡职业造就世界最强第二季| 又见逍遥电视剧免费观看 | 法证先锋1粤语免费观看全集| 名侦探柯南日语版免费观看| 33d蜜桃成熟时| 美国式保罗2原版电影| 369你懂得电影在线观看| 禁止想象韩国电影| 梅西遭巴黎停赛停薪| 朱音落语| 息烽县| 明星换脸电影高清在线观看完整版 | 兰陵王电视剧全集下载| 好事多磨19楼| 箭在弦上全集下载| 《混血的摇篮曲》完整版| 男按摩师吸乳房HD中字| gogo高清视频在线观看| 《没关系 是爱情啊》电视剧| 六扇门系列电影| 小东西逃跑是要受到惩罚的| 那夜上错床| 部长来家里做客电影在线观看| 台湾修理工工艳遇| 夜蒲团3完整版高清| 金钱帝国 电影| 不文女学堂 蒙嘉慧| 吴健版《农民伯伯2》播放常青 | 蓝色隐形帽子| 风骚岳母| 巾帼枭雄2| 第三类法庭粤语| 法国空乘11未删减版在线观看| 蝴蝶飞飞在线观看| 吸血鬼检察官| 嘿真不是闹着玩的电视剧| 美国版武则天惊艳版演员表| 男女愁愁免费| 夜班经理 迅雷下载| 无敌风火轮在线观看| 邵氏电影《风月奇谭》免费观看| 与讨厌的部长一起去出差旅| 欲情之屋2014甜美情事尹大麦为什么播| 两世欢免费观看全集| 有女不愁嫁| 大唐好男人电视剧| 高清恶魔搬进来了| 变形金刚7免费完整版在线观看| 肉浦团 在线观看| 旋风管家 电视剧| 《花间提壶方大厨第二季》电视剧| 官方:严禁用日本水产品制作餐食| 电影《香醇的绣感》演员温彩玉| 刚结婚陪部长出差的日剧免费观看第一季 | 绝密飞行国语| 花与罪电影正版观看平台| 《女朋友的真实容貌》动漫1~2集| 女超人麦乐迪在线观看| 法国女版《壮志凌云》在线观看| 女儿朋友| 三级日本高清完整版热播| 斗罗大陆173集免费观看完整版| 新白娘子传奇免费50集| 女子护卫队在线观看| 需要爸爸播种子HD-云播免费在线观看-西瓜影院 | 小小诊所完整版| 给你我的喜欢电视剧| 看电影免费观看完整版| 回响42集电视连续剧免费观看| 丈夫的上司来家拜访 电影| 金牌销售的秘密2中字女主角是谁| 为防导弹攻击 东京都修地下掩体 爱你心跳难触摸短剧免费观看 | 电视剧冒牌英雄| 约会大作战h| 水浒传全集高清| 刚结婚和部长一起去出差旅| 张警官三部曲在线播放哪里看| 哈利波特与消失的密室电影免费版| 最佳爱情国语版全集| 童话村手机在线观| 日本电影《偿还》完整版| 外卖员的特殊待遇在线观看| 男技师伦理片| 陆小凤全集| 电影《长征》免费观看| 喜迎20手抄报一等奖| 憎侣之夜| 丽卡驯服2普通话版| 大风杀电影完整版在线播放免费| 你若安好便是晴天电视剧| 沧元图动漫60| 电影《二十条》| 牙医姐妹完整版视频| 色播九月| 身价过亿:打脸拜金女短剧全集| 1984年经典电影| 乡村兵法| 迷人的保姆hd| 歼灭天际线1-62集免费| 尺度较大的外国爱情电影和女部长一起出差 | 爱是你我 刀郎| 品味人生无憾坎贝奇完整版免费| 特殊游泳课| 紧急行动40集免费观看| 爱在初春惊变时| 生物股长yell| 《销售的秘密2》在线观看 | 《激战丛林》完整版在线播放| 落地秀才| 《高压监狱3》法国版版| 岁末一过举世欢打一四字祝福语| 黑人开发妻子张艳| 《入室暴行3被蹂躏电影理论| 雷玛根大桥| 燃烧大地| 他母亲的房子| 电视剧刁蛮公主| 新营市| 落魄的贵族琉璃川在线观看免费完整版 | 台湾电影《越南妹》免费观看 | 美国惊悚片无人生还2012| 直到黎明| xl司令动漫全集在线观看免费播放 | 情陷夜中环2粤语| 天与地在线| 摩登原始人1994满天星版| 白峰电影高清全集免费看 | 战狼6免费观看全部下载高清| 三年大片大全免费观看国语电影 | 法国女版《壮志凌云》在线观看| 新手包粽子的简易方法| 亲爱的在线观看| 芭比时尚童话| 白峰电影在线播放| 19岁在线播放免费观看电视剧| 我如此爱你 王凯琪| 野店百度影音| 缘之空第11集| 电影《六个瑞典女孩》| 《和讨厌的部长出差》日本电影| 破苞流血疼叫视频视频| 礼物电影完整版在线看| 小猪佩奇最新季全集| 致命玩笑3| 爱我几何在线视频| 郝板栗千金小姐在线观看| 上游电视剧免费观看全集完整版| 睫毛膏4美版免费观看| 猎狼刀电视剧01集播放| 天后手册短剧免费观看| abo成结模拟动画演示| XL司令在线观看完整版动漫 | oneday在线完整版观看免费 | 加里森敢死队| 陷入我们的热恋| xl司令全集免费观看| 东京塔之越南女兵俘虏营免费完整在 | 小小诊所完整版| 一不小心爱上你歌曲| 经典兔子舞曲| 暧昧失温短剧全集在线观看|