mini-AGI:面向消费级硬件的持续学习字节级模型
mini-AGI 是一个字节级语言模型,旨在仅使用单个配备 8GB VRAM 的消费级 GPU 从零开始训练。与传统的冻结模型不同,mini-AGI 实现了一个持续学习系统,使其能够从数据流中学习,而不会出现通常与在线训练相关的灾难性遗忘。
架构:分页专家混合模型与自适应深度
mini-AGI 使用一种非传统的 Transformer 架构,优先考虑内存效率和动态计算。它不采用固定的层堆叠,而是使用两个密集的前导块,随后应用一个循环块最多 24 次。
动态计算与路由
- 自适应深度(PonderNet): 模型使用一个停止头来决定每个字符所需的计算量。简单字符可能只需要一次计算,而复杂字符最多可消耗 24 次。这确保了计算资源根据输入的难度进行分配。
- 循环 MoE 路由: 每次应用循环块时,模型从共享池中选择前 8 个专家。由于路由是按块应用而非按字符进行,单个字符可以在不同深度上激活大量不同的专家。
- 字节级处理: 模型直接在 256 个字节值上运行。通过消除分词器,模型可以读取任何数据类型而无需新的词汇表。
通过分页实现内存管理
为了在 VRAM 不足的情况下运行更大的模型,mini-AGI 实现了一个分页系统,将磁盘空间作为权重的主要存储:
- 磁盘存储: 每个专家的权重和 Adam 优化器动量均作为独立文件存储在磁盘上。
- VRAM 工作集: 任何时候只有少量专家(工作集)驻留在 VRAM 中。
- 按需交换: 模型根据前一个文本块的路由模式预测下一个文本块所需的专家。专家在磁盘、RAM 缓存和 VRAM 之间交换,以确保前向传播所需的参数可用。
缓解灾难性遗忘
从单一数据流中进行持续学习通常会导致“灾难性遗忘”,即新信息覆盖旧知识。mini-AGI 通过两种主要机制解决此问题:
主干学习率解耦
模型的“主干”——包括嵌入、注意力、路由和停止头——的训练学习率显著低于专家(0.1x)。
实验数据表明,虽然对主干和专家使用相同学习率会导致显著损失(遗忘),但 0.1x 主干学习率可保留 99.84% 的进度(相对于随机)。这防止了核心路由和结构逻辑被单一数据流的特定内容覆盖。
结构隔离
由于模型采用专家混合(MoE)方法,任何一次遍历中只有部分模型被更新。在对 524,000 个字符的国际象棋数据进行探测时,136 个专家中仅有 54 个接收梯度。这种结构隔离确保学习新主题不会必然干扰用于其他主题的参数。
模型增长与剪枝
mini-AGI 被设计为根据遇到的数据动态增长和收缩其容量:
- 通过重组实现增长: 当模型容量不足时,新专家通过重组现有专家的隐藏单元创建。这确保新专家从有用且已训练的组件开始,而非随机噪声。
- 通过使用情况剪枝: 长时间未被路由选中的专家被视为“死亡”,并从磁盘中删除以释放空间。
- 增长约束: 仅在满足特定条件时才添加新专家,包括可用的磁盘/VRAM 空间以及保留损失的稳定性(“诚实”制动)。
性能与扩展性
报告时,模型已读取约 3.181 亿个字符,包含 169 个专家。其在八个主题上的保留损失为 0.8336 nats/字符(1.2026 位/字节)。
数据扩展趋势
扩展性分析表明,模型遵循健康的幂律关系(L ∝ D^-0.239)。作者建议,达到 0.80 BPB(每字节位数)需要约 19.2 亿字节的数据,这在单台笔记本 GPU 上训练几周内即可实现。
社区见解与批评
技术用户之间的讨论突显了当前实现的潜力与局限性:
- 泛化与记忆化: 一些用户质疑模型是否真正实现了泛化,还是仅执行了高效的记忆化。有用户指出,模型当前的每字节位数(BPB)表现比一些在特定数据集(如 enwik9)上训练的小型密集模型更差。
- 架构潜力: 由于其持续学习的特性,模型被认为具有“类 AGI”潜力,有建议探索嵌套强化学习或自相似递归架构。
- 学习率担忧: 批评者指出,主干学习率的降低可能仅延迟灾难性遗忘,而非彻底消除,暗示主干在极长的时间尺度上最终仍会遗忘。
"专家池本身并不能防止遗忘。冻结工作集……仅损失 0.3571 nats……保留大部分权重并不足够。"
技术规格摘要
| 组件 | 详细信息 |
|---|---|
| 词汇表 | 265(256 个字节 + 9 个标记) |
| 上下文窗口 | 4,096 |
| 核心架构 | RMSNorm, RoPE, SwiGLU, Flash Attention |
| 深度 | 2 个前导块 + 1 个循环块(最多应用 24 次) |
| VRAM 要求 | 最低 8 GB |
| 参数管理 | 分页 MoE(磁盘 $ |
| ightarrow$ RAM $ | |
| ightarrow$ VRAM) |
Sources
相关
- 项目
- 项目
- Dispatch
- Dispatch
- Dispatch