0Pricing
Machine Learning Academy · レッスン

Transformerアーキテクチャ:Attention、トークン、文脈

自己Attentionの仕組みを追い、BERTが左から右へ読むのではなく文全体を一度に処理する方法を理解し、CLSとSEPの特殊トークンを解釈します。

「Transformerアーキテクチャ:Attention、トークン、文脈」はCoddyKit上の無料Machine Learning Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMachine Learning Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Machine Learning Academyコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

What Is a Transformer?

The Transformer is a neural network architecture introduced in 2017 that replaced recurrent networks for most NLP tasks. Unlike RNNs that process tokens one at a time, Transformers process the entire sequence in parallel using a mechanism called self-attention. This parallel processing makes training much faster and allows the model to capture long-range dependencies more effectively.

Self-Attention: Relating Every Token

Self-attention allows each token in a sequence to attend to every other token simultaneously. For the sentence 'The bank by the river was steep', the word 'bank' can attend strongly to 'river' to resolve its meaning. Each token produces three vectors: Query (Q), Key (K), and Value (V), which are used to compute weighted relationships between all token pairs.

import torch
import torch.nn.functional as F

# Simplified self-attention for 3 tokens, d_model=4
Q = torch.randn(3, 4)  # queries
K = torch.randn(3, 4)  # keys
V = torch.randn(3, 4)  # values

d_k = Q.shape[-1]
scores = torch.matmul(Q, K.T) / (d_k ** 0.5)  # scaled dot product
weights = F.softmax(scores, dim=-1)  # attention weights
output = torch.matmul(weights, V)    # weighted values
print('Attention weights:', weights)

Scaled Dot-Product Attention

The attention score between token i and token j is computed as the dot product of Q_i and K_j, divided by the square root of the key dimension to prevent vanishingly small gradients. The formula is: Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) * V. The scaling factor sqrt(d_k) keeps gradients stable for large embedding dimensions.

Multi-Head Attention

Instead of one set of Q, K, V projections, Transformers use multi-head attention: h parallel attention heads, each learning different aspects of token relationships. One head might learn syntactic dependencies (subject-verb), another semantic ones (synonyms). The outputs of all heads are concatenated and projected to produce the final representation.

import torch.nn as nn

multihead_attn = nn.MultiheadAttention(
    embed_dim=512,
    num_heads=8,      # 8 heads, each with dim 64
    dropout=0.1,
    batch_first=True
)
# x shape: (batch, seq_len, 512)
# output shape: (batch, seq_len, 512)
output, attn_weights = multihead_attn(x, x, x)

BERT: Bidirectional Context

BERT (Bidirectional Encoder Representations from Transformers) reads the entire sequence at once, attending to both left and right context simultaneously. Earlier models like GPT read left-to-right only. This bidirectionality lets BERT understand that 'bank' in 'river bank' differs from 'bank' in 'bank account' by seeing all surrounding words at once.

Special Tokens: CLS and SEP

BERT introduces two special tokens. The [CLS] (classification) token is prepended to every input; after processing, its final hidden state aggregates sentence-level information and is used for classification tasks. The [SEP] token separates two sentences in tasks like question answering or next-sentence prediction. Understanding these tokens is essential when building BERT pipelines.

# Example tokenised input for BERT sentence-pair
# [CLS] I love Python [SEP] Python is great [SEP]
# token_ids: [101, 1045, 2293, 18750, 102, 18750, 2003, 2307, 102]
# segment_ids: [0,   0,    0,    0,     0,   1,     1,   1,    1  ]
print('CLS token id:', 101)
print('SEP token id:', 102)

Positional Encoding: Order Without Recurrence

Because Transformers process all tokens in parallel, they have no inherent sense of token order. Positional encodings are added to each token embedding to inject position information. BERT uses learned positional embeddings while the original Transformer used sinusoidal functions. Without positional encoding, 'cat bites dog' and 'dog bites cat' would produce identical representations.

import torch.nn as nn

# BERT-style learned positional embedding
pos_embedding = nn.Embedding(512, 768)  # max 512 positions, d_model=768
positions = torch.arange(seq_len).unsqueeze(0)  # (1, seq_len)
pos_enc = pos_embedding(positions)  # (1, seq_len, 768)
# Added to token embeddings before feeding to transformer layers

Encoder Architecture: Layers and Feed-Forward

Each BERT encoder layer consists of two sub-layers: multi-head self-attention followed by a position-wise feed-forward network (two linear layers with a GELU activation). Each sub-layer has a residual connection and layer normalisation. BERT-base stacks 12 such layers; BERT-large uses 24. Deeper stacks capture more abstract linguistic structure.

Token Embeddings: WordPiece Vocabulary

BERT tokenises text using WordPiece subword tokenisation. Rare words are split into frequent sub-units: 'unbelievable' might become ['un', '##believe', '##able']. The ## prefix indicates a continuation subword. This approach handles out-of-vocabulary words gracefully and uses a vocabulary of ~30,000 tokens, balancing coverage and embedding table size.

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
text = 'unbelievable achievements'
tokens = tokenizer.tokenize(text)
print(tokens)  # ['un', '##believ', '##able', 'achievements']

encoded = tokenizer(text, return_tensors='pt')
print('input_ids:', encoded['input_ids'])
print('attention_mask:', encoded['attention_mask'])

Attention Mask: Handling Padding

When processing batches of variable-length sentences, shorter sentences are padded with [PAD] tokens to match the longest sequence. The attention mask is a binary tensor (1 for real tokens, 0 for padding) that tells the model to ignore padding positions in the attention computation. Without this mask, the model would attend to meaningless padding tokens and corrupt its representations.

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
batch = ['Short text.', 'This sentence is longer than the first one.']
encoded = tokenizer(batch, padding=True, truncation=True, return_tensors='pt')
print('input_ids shape:', encoded['input_ids'].shape)
print('attention_mask:\n', encoded['attention_mask'])
# Zeros mark padding positions

Pre-Training BERT: MLM and NSP

BERT was pre-trained on two tasks. Masked Language Modelling (MLM) randomly masks 15% of tokens and trains BERT to predict the original token from context, forcing bidirectional understanding. Next Sentence Prediction (NSP) trains BERT to determine whether two sentences are consecutive, helping sentence-pair tasks. Fine-tuning then adapts these rich representations to downstream tasks with minimal additional training.

Quick Check

Test your understanding of Machine Learning with Python concepts from this lesson.

Lesson Recap

In this lesson you learned: Transformers use parallel self-attention instead of sequential recurrence, BERT reads bidirectional context using masked language modelling pre-training, and special tokens [CLS] and [SEP] structure BERT's inputs for classification and sentence-pair tasks. Next up we explore how Hugging Face tokenizers encode raw text into the tensor format BERT expects.

よくある質問

「Transformerアーキテクチャ:Attention、トークン、文脈」レッスンは無料ですか?

はい。「Transformerアーキテクチャ:Attention、トークン、文脈」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Machine Learning Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Machine Learning Academyコースには全4レッスンが含まれています。

「Transformerアーキテクチャ:Attention、トークン、文脈」で何を学びますか?

自己Attentionの仕組みを追い、BERTが左から右へ読むのではなく文全体を一度に処理する方法を理解し、CLSとSEPの特殊トークンを解釈します。 ブラウザで直接実行するハンズオンコードでMachine Learning Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Machine Learning Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのMachine Learning Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Transformerアーキテクチャ:Attention、トークン、文脈」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このMachine Learning Academyレッスンでコードを書いて実行できますか?

はい。すべてのMachine Learning Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Transformerアーキテクチャ:Attention、トークン、文脈
  2. Hugging Face Tokenizers:BERT用のテキストエンコード
  3. BertForSequenceClassificationのファインチューニング
  4. 評価と推論:ロジットから予測ラベルまで
← Machine Learning Academyに戻る