WMX · 随记
·AI· 3 分钟阅读

位置编码:相同 token 在不同位置需要不同信号

只对 token 内容做注意力,模型难以区分相同词在不同顺序中的角色。序列任务需要某种位置或相对距离信息。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

But what is a GPT? Visual intro to transformers

结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

AI 系列概览:模型机制、系统边界与效果评估
AI 系列概览:模型机制、系统边界与效果评估 点击图片查看大图 ↗

问题从哪里出现

只对 token 内容做注意力,模型难以区分相同词在不同顺序中的角色。序列任务需要某种位置或相对距离信息。

理解核心机制

原始 Transformer 使用不同频率的正弦和余弦位置编码,并加到词向量上。下面用小维度生成位置向量,观察相邻位置的变化模式。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。

Python10 行 · 可横向滚动
import math
def encoding(position, dimension=6):
    result = []
    for pair in range(dimension // 2):
        angle = position / (10000 ** (2 * pair / dimension))
        result.extend([math.sin(angle), math.cos(angle)])
    return result
assert encoding(0) == [0.0, 1.0] * 3
assert encoding(1) != encoding(2)
print(encoding(1), encoding(2))

适用边界与常见误区

示例要求偶数维度,且只演示一种历史方案。现代模型也会使用旋转位置编码等方法;训练窗口外的行为不能仅由公式可计算就推断可靠。

继续练习

比较高频与低频分量在位置增加时的变化,再思考相对距离与绝对位置分别适合表达哪些信息。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档