Mã hóa vị trí hình sin

Trung bình

TransformerAI5 test · 12 giây · sai số 1e-5

Attention không tự biết thứ tự token, nên Transformer cộng thêm vector vị trí vào mỗi token:

  • PE[pos, 2i] = sin(pos / 10000^(2i / d_model))
  • PE[pos, 2i + 1] = cos(pos / 10000^(2i / d_model))

với pos = 0 … seq_len − 1 và 2i chạy qua các cột chẵn.

Viết hàm

positional_encoding(seq_len, d_model)

Tham số

  • seq_len: số vị trí
  • d_model: số chiều (chẵn)

Trả về

Ma trận (seq_len, d_model).

Ví dụ

Tham số

seq_len = 2
d_model = 4

Kết quả

[[0.0,1.0,0.0,1.0],[0.841470985,0.540302306,0.009999833,0.99995]]

Hàng 0 luôn là [0, 1, 0, 1, …]

Tham số

seq_len = 3
d_model = 2

Kết quả

[[0.0,1.0],[0.841470985,0.540302306],[0.909297427,-0.416146837]]

Bài tiếp theo: Lớp tuyến tính với tensor →

Python · NumPy

Bấm “Chạy thử” để gọi positional_encoding() với 2 ví dụ trong đề và so sánh kết quả. Dùng print() thoải mái để gỡ lỗi.