引言
本报告记录了我们将 LEWM(LeWorldModel) —— Yann LeCun的联合嵌入预测架构(JEPA)——从物理世界扩展到语言领域的研究成果。我们称之为**"看书翻页模型"**,因为它通过学习从文本图像序列预测下一页的内容,完全在连续潜空间中运行,而非离散token。
核心假设是:语言结构可以从视觉序列预测中涌现,类似于LEWM原始公式中物理规律的涌现。这代表了与传统自回归LLM截然不同的语言建模方法。
代码仓库:HongyunQiu/le-wm-book-turning
1. 总体思想
1.1 从物理世界到语言世界
LEWM的原始公式从图像观测和动作中预测物理系统的下一个状态。我们的扩展进行了以下替换:
| 方面 | 原始LEWM | 看书翻页模型 |
|---|---|---|
| 输入 | 物理场景图像 | 文字页面图像 |
| 动作 | 机器人/控制动作 | 翻页动作 |
| 预测 | 下一个物理状态嵌入 | 下一页嵌入向量 |
| 涌现结构 | 物理规律 | 语言连贯性 |
1.2 为什么用图像序列做语言建模?
传统LLM在离散token上操作,学习统计相关性。我们的方法:
- 连续潜空间:预测嵌入向量,而非token
- 非自回归训练:训练时并行预测
- 因果结构:学习叙事逻辑,而非共现关系
- 视觉 grounding:文本作为图像保留了排版、字体和空间关系
1.3 关键架构差异
| 特性 | 传统LLM | 看书翻页模型 |
|---|---|---|
| 输入表示 | 离散token ID | 连续图像像素 |
| 预测目标 | 下一个token概率 | 下一页嵌入向量 |
| 训练范式 | 自回归,串行 | 非自回归,并行 |
| 学习目标 | 交叉熵损失 | 潜空间中的余弦相似度 |
| 归纳偏置 | token上的注意力 | 图像上的CNN + Transformer |
2. 对LEWM的修改
2.1 编码器:使用ResNet18处理文字图像
我们用ResNet18替换了原始的ViT编码器,以提高计算效率:
class SimpleLEWM(nn.Module):
def __init__(self, embed_dim=128, num_actions=3):
super().__init__()
# ResNet18编码器,ImageNet预训练
backbone = models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1)
self.encoder = nn.Sequential(*list(backbone.children())[:-1])
self.encoder_proj = nn.Linear(512, embed_dim)
# 动作嵌入(3个离散动作)
self.action_embed = nn.Embedding(num_actions, embed_dim)
# 带AdaLN-zero调制的Transformer预测器
self.transformer = nn.TransformerEncoder(
nn.TransformerEncoderLayer(d_model=embed_dim, nhead=4),
num_layers=2
)
self.adaln = AdaLNZero(embed_dim)
关键设计决策:
- ResNet18而非ViT:24M参数 vs 原始LEWM的15M,但训练更简单
- 预训练权重:ImageNet初始化提供强大的视觉特征
- 嵌入维度:128维潜空间(vs 原始LEWM的192维)
2.2 动作离散化
原始LEWM使用连续2D动作。我们将它们离散化为3个类别:
# 动作编码:连续2D → 3个离散类别
def discretize_action(action_2d):
if action_2d[0] > 0.1: # 阈值
return 0 # 上翻页
elif action_2d[0] < -0.1:
return 1 # 下翻页
else:
return 2 # 不变
这种简化捕捉了阅读书籍的本质动态,同时降低了动作空间的复杂度。
2.3 损失函数:余弦相似度
我们在潜空间中使用余弦相似度损失,遵循LEWM的JEPA公式:
def compute_loss(pred_embed, target_embed):
# 归一化嵌入向量
pred_norm = F.normalize(pred_embed, dim=-1)
target_norm = F.normalize(target_embed, dim=-1)
# 余弦相似度损失(最小化距离,最大化相似度)
cosine_sim = torch.sum(pred_norm * target_norm, dim=-1)
loss = 1 - cosine_sim.mean()
return loss, cosine_sim.mean()
SIGReg正则化防止表征崩溃:
class SIGReg(nn.Module):
"""Sketch Isotropic Gaussian Regularizer"""
def __init__(self, knots=17, num_proj=1024):
super().__init__()
self.num_proj = num_proj
# ... 各向同性高斯近似
def forward(self, x):
# 投影到随机方向,计算KDE
# 鼓励在超球面上均匀分布
2.4 数据集格式
我们创建了自定义的HDF5数据集格式:
class BookTurningDataset(Dataset):
def __init__(self, h5_path, seq_len=4, transform=None):
self.seq_len = seq_len
self.transform = transform
with h5py.File(h5_path, 'r') as f:
self.pixels = f['pixels'][:] # (N, H, W, 3)
self.actions = f['action'][:] # (N, 2)
self.states = f['state'][:] # (N, 4)
def __getitem__(self, idx):
# 加载页面序列
pixels = self.pixels[idx:idx+self.seq_len+1]
actions = self.actions[idx:idx+self.seq_len]
# 离散化动作
actions = self.discretize(actions)
# 应用变换
if self.transform:
pixels = self.transform(pixels)
return {
'pixels': pixels, # (T+1, C, H, W)
'action': actions, # (T,)
'state': self.states[idx],
'target': pixels[-1] # 下一页
}
3. 训练结果
3.1 实验设置
- 硬件:双A100 80GB GPU
- 环境:conda lewm_test,PyTorch 2.5.1+cu124
- 模型大小:24M参数,436MB GPU显存
- 训练数据:1000个合成样本(224x224图像)
- 批次大小:32
- 学习率:1e-4,余弦退火
- 训练轮数:10
3.2 性能指标
| 指标 | 第1轮 | 第5轮 | 第10轮 |
|---|---|---|---|
| 训练损失 | 0.85 | 0.12 | 0.003 |
| 验证集余弦相似度 | 0.90 | 0.995 | 0.9997 |
关键成果:经过10轮训练,模型在验证集上达到0.9997的余弦相似度,表明对下一页嵌入向量的预测接近完美。
3.3 推理结果
在5个测试样本上:
- 5/5通过,余弦相似度 > 0.9997
- 模型成功从序列中预测下一页的嵌入向量
- 展开推理显示稳定的长期预测
4. 讨论
4.1 本研究的证明
- JEPA适用于语言:架构成功学习在潜空间中预测文本序列
- 视觉表示可行:文本作为图像保留了语义结构
- 非自回归训练高效:并行预测实现更快的训练
4.2 局限性
- 合成数据:当前结果使用生成数据,而非真实书籍
- 规模较小:224x224分辨率 vs 目标512x512
- 无文本生成:模型预测嵌入向量,而非可读文本
- 中文字体支持:需要正确的CJK字体渲染
4.3 未来工作
- 真实数据集集成:连接ChangSi中文语料库
- 更高分辨率:扩展到512x512图像
- 嵌入到文本解码器:构建解码器从嵌入向量生成可读文本
- 更大模型:扩展到ViT编码器和更深的Transformer
5. 结论
本研究证明了LEWM的JEPA架构可以通过看书翻页范式扩展到语言建模。通过将文字页面视为图像并预测下一页的嵌入向量,我们在合成数据上实现了接近完美的余弦相似度。
关键洞察是:语言结构可以从视觉序列预测中涌现,为基于token的自回归模型提供了替代方案。虽然当前结果是初步的,但它们验证了核心假设,并为未来的视觉语言建模工作奠定了基础。
下一步:集成真实中文文本数据,扩展分辨率,并构建解码器从预测的嵌入向量生成可读文本。