Xmixers(0) xmixers项目简介
本博客从18年1月份开始写,一开始是主要是记录一些学习的过程,到最近2,3年更新频率逐渐降低,这是因为这几年一直在做sequence modeling的研究,也产出了一些paper,例如cosformer, transnormer, Hgrn1, Hgrn2等等。一直想找一个机会把自己做过的模型整合成一下,于是便有了xmixers这个项目。本博客是以中文撰写,撰写完成后会用chatgpt翻译成英语(为了更广泛的传播),英语版本请参考Xmixers(0) Introduction to the Xmixers Project。
动机
之所以要做该项目,主要是碰到了如下几个痛点:
- 现在huggingface实际上成为了模型接口定义的标准,所有的测评库都会以符合huggingface接口的来定义;
- 训练好的模型需要以huggingface接口进行发布,所以如果用非huggingface接口定义的模型需要经历一个
xxx to hf
的转换过程,这个过程其实挺容易出错的,而且每次研究一个新的模型都要搞一个这样转换脚本,非常的浪费时间; - 我自己之前做过不少模型,但是一直没整理,所以传播度不高,希望借此机会把之前的工作整理一下;
总的来说,个人认为应该以huggingface兼容的接口定义模型,然后接入各种框架进行训练,训完后进行发布的流程来进行research,这样省时省力。
项目介绍
这里简单介绍一下该项目:该项目的目标是以huggingface兼容的接口设计一些模型,主要是我之前paper中出现过的模型以及我感兴趣/复现过的模型,本仓库不包含算子部分,只有模型,尽可能让代码简洁化。设计完模型之后,自然需要测试,我的测试场景如下:
- Causal language modeling;
- gpt形式的语言模型;
- Bidirectional language modeling;
- bert形式的语言模型;
- Image classification;
- vit形式的图像分类模型;
- Image generation;
- dit形式的图像生成模型;
这里分为以上四类,主要个人对于序列建模的理解:一个好的序列模型应该是在单向/双向语言模型,图像分类/生成上都有速度和效果竞争力,这样才有可能在更多场景,例如多模态领域有一席之地。
现在项目刚开始,目前我主要还是从Causal language modeling进行测试,训练代码基于Nanogpt,训练配方为50b token,更新100k次,训完的模型会发布至此。
项目规划
我会同步更新一些实验结果,更新频率大约为1到2周一篇博客,下面是我的实验规划。
模型侧
这部分给出了我会研究哪些模型架构:
- Transformer
- 研究初始化对于模型的影响;
- prenorm / postnorm;
- 各种位置编码;
- Linear Transformer
- 各种decay对于Linear Transformer的影响;
- 新的Linear Transformer架构;
- Linear Rnn
- Long convolution
- 混合模型
应用侧
这部分给出了我会在哪些任务上进行测试:
- Causal language modeling;
- Bidirectional language modeling;
- Image classification;
- Image generation;
测评
这部分给出了我会关注哪些方面的测评,这里主要以Causal language modeling为主,我的目标是找到一些合适的代理任务来比较各种架构的不同。这里的动机在于:对于语言模型,PPL无法反应其真实能力,而可以反应真实能力的场景,例如大海捞针,则需要大约1b的模型训练100b token左右才能看出(这部分可以参考我们的paper),而这个开销过于大;合成的任务,例如mqar则对超参数非常敏感(我实验后得出的结论),这一块暂时没什么头绪,我先列出关注的重点:
- 检索;
- 推理;