
JSON 文件在線打開指南
Transformer的架構(gòu)由編碼器和解碼器兩個(gè)部分組成。編碼器將輸入序列轉(zhuǎn)換為中間表示,解碼器則從中間表示生成輸出序列。每個(gè)編碼器和解碼器都由多個(gè)層組成,每一層包括多頭自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)。
編碼器的每一層由兩個(gè)子層組成:多頭自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)。解碼器在編碼器的基礎(chǔ)上增加了一個(gè)用于獲取編碼器輸出的注意力層。每個(gè)子層后都附有殘差連接和歸一化操作,確保信息流在網(wǎng)絡(luò)中順暢傳遞。
Transformer的輸入由單詞嵌入和位置嵌入相加而成。單詞嵌入可以通過預(yù)訓(xùn)練獲得,位置嵌入則用于保留序列的位置信息。位置編碼的設(shè)計(jì)讓模型可以處理任意長度的序列,并保持對相對位置的敏感性。
Transformer的核心是注意力機(jī)制,尤其是自注意力。注意力機(jī)制可以看作是從輸入到輸出的全局依賴建模,允許模型在不使用循環(huán)結(jié)構(gòu)的情況下捕獲序列間的依賴關(guān)系。
自注意力機(jī)制通過對輸入序列的每個(gè)位置計(jì)算查詢、鍵和值,然后通過點(diǎn)積計(jì)算注意力權(quán)重,最后加權(quán)求和得到輸出。這個(gè)過程不僅提高了并行計(jì)算能力,還使得模型能夠捕獲長程依賴關(guān)系。
import torch
import torch.nn.functional as F
class SelfAttention(torch.nn.Module):
def __init__(self, embed_size, heads):
super(SelfAttention, self).__init__()
self.embed_size = embed_size
self.heads = heads
self.head_dim = embed_size // heads
assert (
self.head_dim * heads == embed_size
), "Embedding size needs to be divisible by heads"
self.values = torch.nn.Linear(self.head_dim, self.head_dim, bias=False)
self.keys = torch.nn.Linear(self.head_dim, self.head_dim, bias=False)
self.queries = torch.nn.Linear(self.head_dim, self.head_dim, bias=False)
self.fc_out = torch.nn.Linear(heads * self.head_dim, embed_size)
def forward(self, values, keys, query, mask):
N = query.shape[0]
value_len, key_len, query_len = values.shape[1], keys.shape[1], query.shape[1]
values = values.reshape(N, value_len, self.heads, self.head_dim)
keys = keys.reshape(N, key_len, self.heads, self.head_dim)
queries = query.reshape(N, query_len, self.heads, self.head_dim)
energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])
if mask is not None:
energy = energy.masked_fill(mask == 0, float("-1e20"))
attention = torch.nn.functional.softmax(energy / (self.embed_size ** (1 / 2)), dim=3)
out = torch.einsum("nhql,nlhd->nqhd", [attention, values]).reshape(
N, query_len, self.heads * self.head_dim
)
out = self.fc_out(out)
return out
多頭注意力機(jī)制是自注意力的擴(kuò)展。通過并行計(jì)算多個(gè)注意力頭,模型可以關(guān)注到不同的特征子空間,從而增強(qiáng)信息提取能力。每個(gè)頭的輸出經(jīng)過拼接和線性變換,最終得到多頭注意力的結(jié)果。
Transformer在機(jī)器翻譯任務(wù)中取得了顯著的成功,其優(yōu)越的并行性和高效的訓(xùn)練使得它在大規(guī)模數(shù)據(jù)集上表現(xiàn)出色。尤其是在WMT2014英語到德語和英語到法語的翻譯任務(wù)中,Transformer模型創(chuàng)造了新的基準(zhǔn)。
在WMT2014英語-德語翻譯任務(wù)中,Transformer的BLEU評分達(dá)到28.4,超過了之前所有的模型。在WMT2014英語-法語任務(wù)中,Transformer的BLEU得分為41.0,同樣領(lǐng)先于其他模型。
Transformer不僅在NLP領(lǐng)域表現(xiàn)出色,其模型架構(gòu)的靈活性使得它在其他任務(wù)中也有廣泛應(yīng)用的潛力。未來,Transformer有望在圖像、音頻和視頻處理等領(lǐng)域中發(fā)揮更大的作用。
問:Transformer模型與傳統(tǒng)RNN相比有何優(yōu)勢?
問:什么是多頭注意力機(jī)制?
問:Transformer能應(yīng)用于哪些領(lǐng)域?
問:為什么Transformer在機(jī)器翻譯中表現(xiàn)優(yōu)異?
問:如何提升Transformer的訓(xùn)練效率?