有人尝试过构建带有退出门、稀疏化、压缩与高度压缩注意力机制、层级注意力以及扩散优化的循环语言模型吗?

Reddit r/ArtificialInteligence 模型

摘要

作者描述了构建一个实验性的Loop语言模型,该模型具有退出门控、稀疏/压缩注意力机制以及基于扩散的优化技术。在受限硬件环境下训练后,初步结果表明其在效率提升方面具有潜力。

我正尝试通过整合我在不同论文中发现的多种思路来构建一个小型实验性语言模型。我知道这听起来像是把近期一半的语言模型文献扔进了搅拌机,但我正试图看看这些碎片是否真的能协同工作。主要思路是**循环语言模型**,即同一模型被多次运行,而不是简单地将网络越做越深。目前我使用4次循环。 文本输入 ↓ 同一个Transformer ↓ 循环1 ↓ 循环2 ↓ 循环3 ↓ 循环4 有趣的是,模型可以学会判断它不需要全部4次循环,并提前退出。 ## 我遵循的论文/思路 最大的灵感来源于 **Ouro / 循环语言模型**,特别是使用循环计算来获得更多计算量,而不仅仅是物理上增加模型深度。我还在尝试: - 循环注意力残差 / 层注意力 - 稀疏注意力 - 压缩 / 高度压缩注意力 - 稀疏MoE - 自适应退出 / Q-exit - 正在构建基于扩散的优化/训练方法 扩散部分尚未完成。我目前正在构建它,并试图理解如何将其与循环深度训练适当结合,而不仅仅是向输入添加噪声就称之为扩散。 ## 我的硬件限制 这可能是最重要的部分。我基本上是在Google Colab免费的15GB GPU上完成所有操作,这是我实际能使用的最大资源。因此我有意保持模型较小。我不打算在一台计算能力大约只比稍有决心的土豆强一点的机器上训练某个70亿参数的巨无霸。我当前的模型大约是: - 6个Transformer层 - 隐藏维度约512 - 8个注意力头 - 4次循环循环 - 稀疏MoE - 压缩注意力 - 层/深度注意力 - 退出门 确切的架构仍在我实验中不断变化。 ## 数据 语料库混合了: - GitHub代码 - 维基百科 - W3Schools - 公版书籍 - 其他抓取的文本 我目前使用的是p50k分词器。我不得不花相当多时间清洗语料库,因为抓取的数据很糟糕。其中包含诸如: - 文本 - npm包元数据 - JSON转储 - GitHub元数据 - 生成的文件 - 日志 - 基准测试数据 - 重复文档 - 网页垃圾信息 其中一些实际上在初次清洗后仍存在。我之所以发现这点,是因为模型开始生成其中一些内容。因此我目前正让过滤变得更加严格。 ## 循环训练遇到的问题 最初我遇到的问题是,后面的循环没有正确学习。模型可以运行4次循环,但这并不意味着第4次循环在做有用功。因此我改变了训练策略。对于阶段I,我现在强制模型在训练期间执行全部4次循环,这样每个循环都得到适当的训练信号。然后我冻结语言模型,单独训练退出门。退出门本身非常小,在我当前的设置中只有约513个可训练参数。 ## 退出门的结果 这部分实际上让我有点惊讶。我在100个验证批次上测试了训练好的门。结果是: ```text 4次循环损失:6.263160 门控损失:6.264089 差异:+0.000929 相对变化:+0.015% 平均深度:2.41 / 4次循环 估计节省计算量:~39.75% ``` 实际的退出分布是: ```text 循环2 → 59% 循环3 → 41% ``` 它基本上目前从不在循环1退出。这实际上是我希望看到的。我不想要一个只是学会“总是使用2个循环”的门。根据输入确实存在一些变化。 最佳循环选择的预言机损失约为6.2615,而门控损失为6.2641,因此门控也相当接近最佳可能的循环选择。 ## 但生成才是有趣的地方 模型可以生成文本,但它绝对不是一个好的语言模型。例如,它生成的内容大致如下: > The future of artificial intelligence is a most terefears of life of those who is impossible. We will be no one and it is, the good deal of the nature of the life of the man who had not been the same. 我希望能够持续生成类似这样的内容。但它有时也会突然陷入抓取语料中的垃圾,生成诸如以下内容: > "description": ["markdown", "type": "string", "source": ["1.9", "https://github.com/... 显然模型具备一些生成连贯散文的能力,但语料库污染和相对较小的训练规模仍在导致严重问题。这是我目前正试图解决的问题之一。 ## 目前我发现有趣的地方 对我来说最有趣的是,循环不再完全相同了。我看到像这样的情况: ```text 循环0 4.48 循环1 4.47 循环2 4.46 循环3 4.46 ``` 改进虽小,但确实存在。而且退出门似乎理解,有时额外的计算并不值得。因此这个思路开始看起来像: ```text ┌── 循环1 │ 输入 ────┼── 循环2 ── 退出 │ ├── 循环3 ── 退出 │ └── 循环4 ``` 而不是强制每个令牌都通过完全相同的计算量。 ## 扩散优化器/训练 这是我目前正在构建的部分。我正尝试利用扩散/循环深度研究中的思路,看看扩散式的训练或优化方法是否能让重复计算学到更有意义的改进。这部分尚未完成,因此我还没有这部分的结果。我仍在试图找出如何将其与自回归循环训练正确结合的方法,而不意外地将整个东西变成一个完全不同的模型。 ## 我需要你的帮助 这仍是一个实验,我正达到需要比我更懂的人来指出我错误的阶段。我特别需要以下方面的帮助: 1. 如何让后面的循环实际学到更有意义的计算,而不仅仅是带来微小的损失改进。 2. 我的退出门训练策略是否合理,或者是否存在更好的训练自适应深度的方法。 3. 将稀疏+压缩/高度压缩注意力+层注意力+MoE+循环循环结合,是否可能产生我忽视的某种交互作用。 4. 如何为这样一个小模型改进训练目标。 5. 更好的抓取语料清洗方法。模型仍偶尔生成GitHub/npm/JSON元数据,显然一些垃圾信息仍在漏网。 6. 我当前正在构建的基于扩散的训练/优化思路是否合理,以及我可能遗漏了相关论文中的哪些内容。 7. 你认为我应该查看的任何论文、实现或实验。 我基本上是用免费的Google Colab及其15GB GPU在做这件事,所以我不能直接抛出一个巨大模型和8×H100来解决问题,然后指望宇宙来解决它。如果你曾使用过Ouro、循环/循环语言模型、自适应计算、稀疏注意力、压缩注意力、MoE或基于扩散的语言模型训练,我将非常感激你的批评和建议。我不需要“看起来不错”。如果设计中有根本愚蠢的地方,请直接告诉我。那要实用得多。
查看原文

相似文章

Retrofitting Linear Attention into Diffusion Language Models

arXiv cs.LG

This paper introduces block-hybrid attention, which combines exact softmax attention within active denoising blocks and linear attention over previous blocks, to accelerate inference in pretrained diffusion language models. The authors retrofit this hybrid attention into LLaDA 2.1, achieving up to 1.7x higher decoding throughput with minimal post-training.

ALoDLM:自适应循环扩散语言模型

Hugging Face Daily Papers

ALoDLM 为扩散语言模型引入了 token 自适应的潜在循环机制,将额外计算分配给难以预测的 token,并通过条件负 ELBO 联合学习预测与计算分配,在 1.7B 和 8B 参数规模下、于十一项基准测试中均优于其他 DLM 和自回归基线模型。

具有自适应退出状态选择的循环状态空间语言模型

arXiv cs.AI

本文探索了使用Mamba和混合Mamba-Transformer骨干网络的循环(递归)状态空间语言模型,表明其在推理任务上优于非循环基线,并在等参数和等FLOPs预训练下保持竞争力,同时自适应退出状态选择改善了中间深度性能。