TelegramПерейти в канал
Anar Lavrenov
Merged · LLM та RAG

Реалізація трансформеру

Розглядаємо найпопулярнішу та найпотужнішу архітектуру, на якій побудовані усі сучасні Large Language Models. Розберемо їх перевагу перед RNN та недоліки. Напишемо трансформер з нуля на чистому PyTorch.

Код і результати

Опублікована версія після Merge. Результати збережені автором; код на цій сторінці не запускається.

implementation.py · v2
import numpy as np

class MultiHeadAttention:
    def __init__(self, d_model, num_heads):
        if d_model <= 0 or num_heads <= 0 or d_model % num_heads:
            raise ValueError("d_model must be divisible by num_heads")
        self.d_model = d_model
        self.num_heads = num_heads
        self.W_q = np.eye(d_model)
        self.W_k = np.eye(d_model)
        self.W_v = np.eye(d_model)
        self.W_o = np.eye(d_model)


    def forward(self, q, k, v, mask=None):
        """q: [B,N,D], k/v: [B,M,D] -> [B,N,D].
        mask: [N,M], True allows attention; None allows all positions.
        W_q, W_k, W_v, W_o: [D,D], used as x @ W.
        """
        # Project Q/K/V, split heads, apply scaled attention,
        # concatenate heads and apply W_o.
        return q @ k.T + v

Рев’ю спільноти

Окремі рев’ю для цієї версії не збережено.