iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
AI/ ML & Data

Let's Go To The AI Party!系列 第 11

Day10-Transformer

  • 分享至 

  • xImage
  •  

Transformer模型(深度學習革新)

一種深度學習模型,最初被設計 自然語言處理 (Natural Language Processing, NLP) 任務,例如:機器翻譯、文本摘要、問答系統。與傳統循環 神經網絡 (Recurrent Neural Network, RNN)卷積神經網絡 (Convolutional Neural Network, CNN)。Transformer模型在處理序列數據時表現更強大的能力。

Transformer模型架構

  • Encoder:負責將輸入序列編碼成包含語義信息隱含狀態
  • Decoder:負責根據 Encoder 輸出生成目標序列
  • Multi-Head Attention:自注意力機制核心,允許模型從不同表示空間中學習到相關信息
  • Positional Encoding:由於 Transformer 沒有 RNN 遞歸結構,因此需要加入位置編碼來提供序列中每個位置的信息
  • Feed Forward Neural Network:對每個位置的注意力輸出進行非線性變換
    https://ithelp.ithome.com.tw/upload/images/20240810/20163257j5xSayDybA.png
    圖片來源:(https://machinelearningmastery.com/the-transformer-model/)

Transformer模型關鍵概念

  • 自注意力機制 (Self-Attention Mechanism):Transformer模型核心概念,允許模型在處理序列數據時,通過計算每個詞語與其他所有詞語之間的關聯性,來確定每個詞語在整個序列中重要性
  • 編碼器 (Encoder):負責將輸入序列映射到一個高維空間,模型能夠更好地捕捉序列中語義和語法信息
  • 解碼器 (Decoder):負責根據編碼器輸出生成目標序列
  • 位置編碼 (Positional Encoding):由於 Transformer 模型不具有RNN順序處理能力,因此需要引入位置編碼來提供序列中每個詞語位置信息

Transformer模型公式

Scaled Dot-Product Attention

Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

Q 查詢向量 (Query vector)
K 鍵向量(Key vector)
V 值向量(Value vector)
d_k 查詢向量維度
softmax 計算注意力權重

Multi-Head Attention

MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O

h 頭的數量
W^O 線性變換矩陣

Transformer模型程式碼

import torch
import torch.nn as nn

class MultiHeadAttention(nn.Module):
    # ... (多頭注意力機制實現)

class PositionwiseFeedForward(nn.Module):
    # ... (位置前饋網路實現)

class EncoderLayer(nn.Module):
    # ... (編碼器層實現)

class DecoderLayer(nn.Module):
    # ... (解碼器層實現)

class Transformer(nn.Module):
    # ... (整個Transformer模型實現)
import torch
import torch.nn as nn

class ScaledDotProductAttention(nn.Module):
    def __init__(self, d_k):
        super().__init__()
        self.d_k = d_k

    def forward(self, q, k, v):
        attn_logits = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(self.d_k, dtype=torch.float))
        attention = nn.Softmax(dim=-1)(attn_logits)
        values = torch.matmul(attention, v)
        return values
import torch
import torch.nn as nn

class TransformerEncoder(nn.Module):
    def __init__(self, d_model, nhead, num_encoder_layers, dim_feedforward, dropout=0.1):
        super().__init__()
        encoder_layer = nn.TransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout)
        self.transformer_encoder = nn.TransformerEncoder(en   
coder_layer, num_encoder_layers)

    def forward(self, src):
        src = self.transformer_encoder(src)
        return srcTransformer 模型的程式碼
import torch
import torch.nn as nn

class TransformerEncoder(nn.Module):
    def __init__(self, d_model, nhead, num_encoder_layers, dim_feedforward, dropout=0.1):
        super().__init__()
        encoder_layer = nn.TransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout)
        self.transformer_encoder = nn.TransformerEncoder(en   
coder_layer, num_encoder_layers)

    def forward(self, src):
        src = self.transformer_encoder(src)
        return src

Transformer模型應用

  • 機器翻譯:Google Translate
  • 文本摘要:自動生成文章摘要
  • 問答系統:回答用戶提出問題,例如:ChatGPT
  • 文本生成:生成各種形式的文本,例如:詩歌、程式碼

結論

Transformer模型是深度學習領域一項重要突破,為自然語言處理帶來新的可能性。通過深入理解Transformer模型的原理和應用,可以更好地利用這一強大工具,解決各種NLP任務

資料來源:何謂 Transformer 模型?
Transformer模型


上一篇
Day9-前向傳播與反向傳播演算法
下一篇
Day11-NLP
系列文
Let's Go To The AI Party!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言