TinyEngram
基于 DeepSeek Engram 架构,通过 N-gram 记忆模块实现 LLM 参数高效微调,兼顾抗灾难性遗忘与多模态扩展
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 DeepSeek Engram 架构,通过 N-gram 记忆模块实现 LLM 参数高效微调,兼顾抗灾难性遗忘与多模态扩展
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:TinyEngram 架构概览,将 N-gram Engram 模块注入 Qwen3 Transformer 层
大型语言模型(LLM)虽然参数量巨大,但在实际使用中常常暴露出一个根本性缺陷——无法精准记忆特定信息。当你让模型学会"以后提到这个词就用这个意思",它很可能会在多次对话后逐渐遗忘,或者因为微调过度而损害原有能力。传统解决方案是 LoRA(Low-Rank Adaptation)微调,但 LoRA 存在两大痛点:一是灾难性遗忘(Catastrophic Forgetting)——模型在吸收新知识的同时,会丢失原有的能力;二是参数效率仍有优化空间,尤其是需要为每个任务单独训练一组 LoRA 权重时。 AutoArk 团队开源的 TinyEngram 项目,给出了一种令人眼前一亮的答案:借鉴 DeepSeek-AI 提出的 Engram 架构思想,通过在 Transformer 层中注入一个紧凑的 N-gram 记忆模块,实现比 LoRA 更高效的知识注入,且几乎不损害原有能力。
Engram(记忆印痕)一词源于神经科学,指的是大脑中存储记忆的物理痕迹。DeepSeek-AI 将这个概念引入 LLM 领域,提出了 Engram 架构——一种外部记忆增强机制,其核心思想是:为 LLM 增加一个轻量级的、可学习的 N-gram 记忆库。当输入文本中出现特定的 N 元组(bigram、trigram)时,对应的记忆向量会被检索并注入到 Transformer 的隐藏状态中,从而实现对特定知识的精准强化。 TinyEngram 则将这一思想小型化、实用化,基于 Qwen3-0.6B 和 Stable Diffusion 系列,提供了完整的训练代码、参数调优实验和多模态扩展(Vision Engram)。作者还发表了配套 arXiv 论文(2605.20309),将视觉实验整理成完整的技术报告。
TinyEngram 的核心实现在两个文件中:engram.py 是 Engram 架构的参考实现,包含完整的 EngramConfig 配置、CompressedTokenizer(用于构建 N-gram 词汇表)、ShortConv(短距离卷积融合模块)和 Engram 主类。engram_qwen.py 则是将 Engram 注入 Qwen3 的工程实现,通过继承 Qwen3Model 并在指定层(默认第 1 层和第 15 层)插入 Engram 层。
Engram 的工作流程分为三步:
CompressedTokenizer 将原始 token 映射为规范化的 N-gram 单元,支持 2-gram、3-gram 级别。映射过程包括 NFKC 归一化、去重音字母、小写化等预处理。soft_constraint_steps 控制门控从软到硬的过渡),将记忆向量注入到 Transformer 的隐藏状态中。这个设计确保了在训练早期梯度能正常流动,在训练后期门控趋近硬开关,实现精准触发。TinyEngram 在文档中提供了详尽的实验数据,核心发现有两点:
发现一:参数效率更高
通过系统的超参数消融实验(详见 doc/experiments/engram_parameters_tuning.md),TinyEngram 证明只需极少的 Engram 参数就能达到与完整 LoRA 相当甚至更好的下游任务表现。具体来说,当 vocab_size 设置为 129280×5(与原 tokenizer 规模对应),embedding_dim=512 时,模型收敛最快、loss 最低。

图2:SFT 训练 loss 曲线
发现二:抗灾难性遗忘能力更强
TinyEngram 的 Engram 模块天然具有零干扰特性(Zero-Interference):Engram 的词汇表是离散的、哈希隔离的,不同概念的记忆单元在 N-gram 层面完全正交,不会互相污染。相比之下,LoRA 通过调整连续的全连接权重矩阵来注入知识,权重更新会不可避免地影响模型全局行为。
实验数据(doc/experiments/catastrophic_forgetting.md)表明,在 Biomed-Enriched 数据集上训练后,TinyEngram 在 MMLU 基准上相比 LoRA 保持了更好的基础能力。
TinyEngram 的野心不止于文本。项目还探索了将 Engram 记忆机制迁移到文生图扩散模型(Stable Diffusion 1.5 和 SD 3.5),这一方向被称作 Vision Engram(详见 doc/experiments/experimental_report_tinyengram_vision.md)。
其核心思路是:在 Text Encoder 层面注入 Engram 记忆。当用户输入特定触发短语(如"Aldric Vortex-9 CyberNebula")时,Engram 向量会被注入到 CLIP Text Encoder 的隐藏状态中,引导扩散模型生成特定的视觉概念,而无需微调任何 UNet 或主 Transformer 权重。
这个方向的意义在于,它验证了 Engram 的模态无关性——记忆存储和检索机制可以在语言和视觉领域通用。
作为一个研究导向的代码库,TinyEngram 的部署有一定门槛:
| 维度 | 评估 |
|---|---|
| 环境要求 | Python 3.10 + Conda,CUDA 驱动,需精确版本依赖(Transformers 4.57.3、PyTorch 2.8.0、DeepSpeed 0.18.5) |
| 模型依赖 | 需手动下载 Qwen3-0.6B 基座模型(来自 HuggingFace) |
| 数据依赖 | Biomed-Enriched 数据集 parquet 文件(Commercial chunk)需自行下载 |
| 硬件需求 | GPU 训练最低 16GB VRAM,无 Docker 一键部署 |
整体难度为中等,适合有 LLM 微调经验的开发者。对于纯应用型用户,当前版本并不友好,但项目代码结构清晰、注释详细,具备良好的二次开发基础。
需要客观指出的是,TinyEngram 仍处于研究原型阶段:
engram.py 中注明了"Demo Purpose Only",实际生产使用需要优化 CUDA 内核和分布式训练支持。masking_utils),否则 engram_qwen.py 会报错。TinyEngram 的核心价值在于它提出了一种模块化、可组合的知识注入范式。与其说它是一个"工具",不如说它是一个研究方向——证明了 N-gram 记忆模块可以在参数效率、抗遗忘、多模态泛化三个维度同时带来收益。 随着 LLM 从通用走向专业化,如何让模型高效学习特定领域知识、同时保留通用能力,将是下一个核心问题。TinyEngram 在这个方向上提供了一套值得关注的实践方案。
项目地址:https://github.com/AutoArk/TinyEngram
论文:arXiv:2605.20309
许可证:MIT