昨天把自製訓練集從模型訓練到運用部分告一段落,接下來我們來以文字做接續,首先我們先來大致介紹Transformer,後面我們將以pytorch來建構Transformer並使用它來做應用。
Transformer是一種深度學習模型,特別適用於自然語言處理(NLP)
和其他序列建模任務,它在NLP領域的出現引發了巨大的關注,並在各種NLP任務中取得了優異的表現,如機器翻譯、語言建模和文本生成。
Transformer是由Google於2017年首次提出的深度學習模型,用於處理序列數據特別是自然語言文本,傳統的序列建模方法,如循環神經網絡(RNN)
和卷積神經網絡(CNN)
,存在一些限制,如難以處理長距離依賴關係和並行處理,Transformer通過引入自注意力機制(Self-Attention)
來解決這些問題,使得模型能夠在不同位置之間建立依賴關係,並實現高效的並行計算。
下面我們介紹關於Transformer模型幾個重要的部分
自注意力機制是Transformer的核心。它允許模型根據輸入序列中的不同位置來賦予不同的注意權重,這對於理解上下文和處理長序列非常重要,自注意力機制的計算過程可以簡單描述
注意力機制就像人在看一張圖片,如下圖我們可能會注意選手慶祝的表情,與壓過終點線的輪子(
或那一包)
圖片來源: https://udn.com/news/story/12393/7479594
為了更好地捕捉不同類型的關係,Transformer引入了多頭注意力機制。它允許模型在不同子空間中計算注意力,然後將它們組合在一起。多頭注意力可以增加模型的表達能力。
Transformer中的每個注意力子層之後都接了一個前向神經網絡,用於進一步處理特徵。這個簡單的全連接網絡有助於學習特徵的非線性映射。
由於Transformer沒有像RNN那樣的隱藏狀態,因此需要引入位置編碼,以區分不同位置的詞。位置編碼是一個固定的向量,添加到詞的嵌入表示中,以考慮詞的相對位置。
Transformer模型由多個堆疊的層組成,每個層都包括自注意力子層和前向神經網絡子層。層之間使用殘差連接,以確保梯度能夠順暢地反向傳播。
Transformer通常通過監督學習(Supervised learning)
進行訓練,例如機器翻譯任務中的原語言到目標語言的映射。訓練過程包括以下步驟:
我們來看看以Pytorch建立Transformer模型會長什麼樣子,以自注意力機制(self-attention mechanism)
模型為例,大致如下方所示
import torch
import torch.nn as nn
# 定義Transformer模型
class Transformer(nn.Module):
def __init__(self, vocab_size, d_model, nhead, num_encoder_layers, num_decoder_layers):
super(Transformer, self).__init__()
self.embedding = nn.Embedding(vocab_size, d_model)
self.transformer = nn.Transformer(d_model, nhead, num_encoder_layers, num_decoder_layers)
self.fc = nn.Linear(d_model, vocab_size)
nn.Embedding層
:用於將輸入的整數序列(詞嵌入)轉換為密集向量表示(d_model維度的向量表示)。nn.Transformer層
:這是Transformer模型的核心,它接受輸入的詞嵌入(src_embed和tgt_embed)並執行自注意力機制和位置編碼。nn.Linear層
:用於將模型的輸出映射到詞彙表大小(vocab_size)的向量,以生成模型的輸出預測。
forward定義了模型的前向計算過程,它接受兩個輸入序列src和tgt,將它們分別嵌入為密集向量(src_embed和tgt_embed),通過nn.Transformer層進行處理,最後經過nn.Linear層生成模型的輸出,輸出是對目標序列(tgt)的預測。
def forward(self, src, tgt):
src_embed = self.embedding(src)
tgt_embed = self.embedding(tgt)
output = self.transformer(src_embed, tgt_embed)
output = self.fc(output)
return output
# 創建模型
model = Transformer(vocab_size=10000, d_model=512, nhead=8, num_encoder_layers=6, num_decoder_layers=6)
括號當中分別為:
vocab_size=10000: 詞彙表的大小,指定了模型可以處理的詞彙數量,在這個模型中,詞彙表的大小為10,000,這表示模型將考慮最常見的10,000個詞彙。
d_model=512:模型的嵌入維度或特徵維度,決定了模型中詞彙的表示方式,以及內部運算的維度。(在這個模型中,每個詞彙將被表示為一個長度為512的向量)
nhead=8: 這是注意力機制中的注意力頭數量,Transformer模型使用多頭自注意力機制,每個頭都可以學習關注序列中不同位置的信息。
num_encoder_layers=6: **編碼器(Encoder)**的層數,Transformer模型包括一個編碼器和一個解碼器,編碼器用於處理輸入序列,解碼器用於生成輸出序列。
num_decoder_layers=6: **解碼器(Decoder)**層數,與編碼器類似,解碼器也有6層,用於生成目標序列。
以上就是對Transformer的大概介紹,明天我們先介紹上面提到的監督學習,之後來訓練一個Transformer模型做結尾,我們明天見。