为什么大模型普遍选用更宽而不是更高的模型架构

Q:现在大模型为什么普遍选用矮胖(更宽)的模型架构而非瘦高(更高)的呢,能否从理论和工程角度做一个分析?

研究员1:直接能想到的有两点:

  1. 堆的太高很可能gradient计算会不稳定,尤其是mixed precision的情况下损失可能更大
  2. 有parallel的考虑,layer和layer之间的依赖的是sequential的,没法并行,堆的太高其实对训练速度拖慢太多了,不如每层多干点事,因为同一层内parallel容易的多。

memory方面可能也有concern,不过这个取决于具体实现方式(比如是否checkpointing,I/O offloading,等等)感觉现在的架构也是经过大量实验试出来的。

研究员2:有一个针对moe的说法,模型的知识受益于参数量,智力受益于计算量(该说法参考:https://www.youtube.com/watch?v=2pbvnxdaKaw )。所以moe架构在知识性的任务上表现很高,但是由于计算量本身增加很小所以智力不足。一个值得思考的问题是模型能否通过单纯的加大层数从而提升智力水平,或者说通过提升纵向(层间)计算次数提升智力。

研究员3:Skywork-13B采用瘦高而非矮胖架构的原因是,在控制参数量的情况下实验发现瘦高一些的模型架构泛化性能更好。从Infra的角度,理论FLOPs只取决于模型实际激活参数量,跟layer数量无关; 在目前的LLM中增加layer数量并不会增加并行难度。hidden state超过4096, micro batch size = 1, 在gemm上就能几乎打满GPU。从分布式并行收益来看,pipeline parallelism收益大于 tensor parallelism, 增加layer数量对pipeline更友好。只是这个瘦高、矮胖的收益趋势肯定不是单调的, 可能是一个二次曲线,所以存在一个最佳的区间范围。

如何实现知识更新

Q:真的很想知道openai是怎么实现知识更新的

研究员1:推荐一个实习的同组peer在CLIP上做了一个continual pretraining的工作:https://arxiv.org/abs/2310.16226 大体上发现如果想更新知识+不遗忘的话,在update knowledge的时候用memory replay(rehearsal)效果不错。一个重点是update的时候不要使用warmup。他文章里还有很多实验细节,但不确定有多少可以迁移到LLM continual pretrain。他这里还发现当训练规模比较大的时候(模型+数据),传统的很多lifelong learning tricks都没啥用了。他的推特对这篇文章有讲解:https://x.com/saurabh_garg67/status/1717571699720483023 。Skywork的stage-2 pretraing (STEM stage)也用了memory replay,有80%数据来自stage 1(自然语言);CodeLlama的两个finetuning阶段分别混了8%和5%的Llama2训练数据作为memory replay。

研究员2:naive的方法是,比如你原先数据停止在2021年,然后你把21-23年的数据拿出来,跟原先的数据混一混然后做continue pretrain,这应该就能成为一个比较好的baseline。但是这里有两个问题,一个是temporal knowledge update,比如23年的总统和24年总统不一定是同一个人,这个在continue pretrain之后,模型要信哪个;另一个就是unlearn,即使模型信了新的总统,那旧的它到底是直接忘掉了呢,还是其实心里还信着只是不说。

研究员3:locate triple-level (Biden, is president of, US) knowledge的weights then edit的文章被follow up work指出其实在multi-hop question还是会暴露出没有遗忘。比如edit之后who is the president of US, model会回答编辑之后的总统(假设奥巴马)。但是你要是问who is the wife of the president of US, model还是会回答Biden的夫人,而非奥巴马的夫人。而且明显能看出即使最优的编辑方法也不能达到批量的knowledge更新,一旦要更新上千个triple-level knowledge,成功率都会低于50%。 另外还有一个思路,是否真的一定需要通过改变model weights来更新knowledge? 面对相关的问题retrieve up-to-date的外部信息到context中,模型对于这些信息的接受度如何?假设model还是记得奥巴马是总统,直接在context里面说现在的总统是biden,模型能不能接受context中、和model本身知识冲突的外部信息并进行运用?

这边分享一下我们的LLM in knowledge conflict paper: https://arxiv.org/abs/2305.13300 文章探索了8个LLMs能否成功使用context中的外部信息来回答问题,得到的结论是:

  1. 当仅有一种外部信息时:大模型表现出极强的接受性,即使该信息与大模型的参数记忆相冲突。
  2. 当有多种外部信息指向不同的答案时——大模型会固执己见,倾向于选择和其参数记忆一致的信息,尤其是GPT-4。

这种偏见可能会阻碍大模型在生成式搜索引擎(如New Bing)和其他工具增强系统中客观公正地参考/使用外部信息。 现在大部分knowledge editing的方法都是用triplet来表示 knowledge (head entity, relation, tail entity)。比如想要编辑一条triplet knowledge (Elon Musk, is the CEO of, Twitter),这个大多数knowledge editing的方法看起来都能做到。但在更新若干年的knowledge都用triplet来表示并且一起更新模型权重时,整体成功率很低。(e.g., 在MQUAKE: Assessing Knowledge Editing in Language Models via Multi-Hop Questions(https://arxiv.org/pdf/2305.14795.pdf )中,更新上千个instances的时候成功率就很低了,而文中提出的MeLLo方法是在in-context下使用retrieved examples,成功率会高很多)。

研究员4:之前看到一个taxonomy可能可以帮助理解unlearn/knowledge update过程中产生conflicts的问题,本质上是模型针对四种场景的robustness:Noise Robustness, Negative Rejection, Information Integration, Counterfatual Robustness(https://arxiv.org/pdf/2309.01431.pdf )。

复读机问题的原因与解决

研究员1:多ft几轮好像就好了,之前ft llava 150k的时候前几epoch也会有类似现象,多跑跑就没了,应该还是alignment有问题。也可能是eos没搞好,一直生成到最长被强行断掉了。

研究员2:按nucleaus sampling那个paper的说法的话,重复大概是因为probability distribution有问题,导致存在一个子串,通过反复生成它可以提高ppl,所以mle及类似的decoding可能会导致重复生成。解决方法来说,ft/alignment等等方法相当于直接把model改了,那么distribution肯定会改,可能就没有这个可以exploit的子串了;nucleaus sampling的方法是相当于直接操作distribution,试图直接过滤掉那部分。特定情况下,如果有domain knowledge或者一些generation plan,a*decoding可以用偏symbolic的办法来解决这个问题。repetitive penalty,和temperature decoding也是直接操作distribution,但相比nucleaus sampling这种truncation的办法,它们会更soft一点: 通过操作softmax temperature来增加output diversity,这样就不太会有重复生成,缺点就是生成的output更可能会有hallucination。

研究员3:重复问题应该还是值得关注的,在3月份做语言模型续写评测的时候,发现大部分语言模型存在续写无限重复的问题,特别是大家公认训练的不好的模型,但是经过sft后会变好,但是仍有可能存在。在多轮对话中,bot也会重复刚才说过的话或者观点,也算是另一类。有一个奇怪的现象,百川或者llama2模型,在tem>1.2的时候,基本就会崩溃,但是gpt4在tem是1.6的时候,还是稳定的,1.8也不行了。

研究员4:一个hypothesis是每个重复的地方都对应了一个没有cover到的 mode ,要么就是因为数据少了没见过那个mode所以没 cover,要么就是训练过程中dynamics不好把那个mode给磨平了,把语言本身看作多峰分布,一个mode就是一个峰。在小模型时代有很多生成模型的工作去fit 一个很多峰的分布然后展示了 training dynamics 不好的时候也有 mode collapse ,可以认为这些结论在大模型时代也成立。

研究员5:补充一篇Controlled Decoding相关文章,deepmind和openAI联合发布的,与该问题接近:《Controlled Decoding from Language Models》 https://arxiv.org/pdf/2310.17022.pdf

关于LLM外推

研究员1:个人的观点是所有外推的工作都是伪命题,如果硬件可以支持外推,那么它就肯定可以支持continue train,那么就有两种方法达到更长长度:1.不做continue train,给模型上各种fancy embedding然后祈祷它能外推;2.用最朴素的positional interpolation但是continue train 100b token,那这种情况下各种在embedding 上fancy 的操作应该会被continue train的data scaling直接crush掉。

研究员2:人能外推,所以至少外推不是伪命题。前面讨论的是长度外推,不涉及到任务形式的外推。就好比人们看一篇文章写读后感,而看一本书写读后感总不能冒出乱码来(transformer目前的表现基本上就是乱码)。其实这也引发另一个思考,假设直接硬训long context的loss跟外推的loss一样(leaky rerope基本能做到的),但直接硬训的模型的实际效果通常会更好一些,这其中的原因比较迷。

研究员3:现在外推基本上都是保证perplexity不爆炸,但内容是否真的能retrieve到不好说,特别是那些从来没见过的文本。Harry Potter或者三体这种在训练数据集上有了,很有可能是memorization而不是long context的能力,拿这种popular story测long context其实没啥意义。硬训应该说看到了大量long context的实际数据(肯定比用sft的外推得多),泛化应该是更好的,外推其实是用一个general principle来快速达到目标,但可能没有考虑数据中各种 corner case。如果答案在没见过的long story的开头或者结尾,那在inference的时候容易回答正确,不然就容易错(或者hallucinate)。明显的问题往往是有知识迁移的(也就是它可能在其它的语料中出现过),如果扔进去一本它没见过的小说,其中的情节不是那么容易猜出来那几乎铁定会hallucinate(指小说的中间部分)。

GPT的加法正确率,随着位数的增加而降低

研究员1:gpt-3.5-turbo-1106的加法正确率,随着位数的增加而降低。 实验在10^1,2,3,…,10,每个区间采样20个数据,然后两两相加,和python自带的加法计算做对比,拿到 成功率随着位数增加而变化的曲线图。

image-20231203212429033

研究员2:这篇讲的比较清楚https://arxiv.org/abs/2305.18654 ,死磕多位数加减乘除这种Python可以轻松解决的task意义不大,人做这种task也需要外部工具(计算器或者手写“执行”算法)才能做,那为什么不允许LLM用工具或者code解决。举个例子,需要用到简单的加减乘除,OpenAI的思路是生命苦短我用Python。

研究员3:感觉计算题是不realistic的setting,但同时又是一个比较好的研究模型symbolic reasoning的地方,只要它不被overfit。其实不明白的一点是,现在GPT做小数乘法几乎都是对的,就是求一个销售额同比环比增长,它都能算对,这个不知道是模型天生就可以,还是on the fly地调用了计算机。https://arxiv.org/abs/2307.03381 比如这篇就是好文章,很好地体现了COT的格式对模型学习速度的影响。

研究员4:已经有工作证明了,Transformer做symbolic derivation很强大,可以把数学的formal language当natural language直接处理掉,数值计算这种简单的活交给计算器就行了。Symbolic reasoning跟arithmetic calculation不是同一个能力,前者是基于formal language的derivation,后者是规则的简单利用。使用计算器的前提是,能够准备把formal language转化为“计算器”能接受的指令序列,这里的核心点应该是“演绎”,Transfomer的核心能力在演绎与归纳,不在符号执行。同时,真的很大的模型的词表都是十万这个量级的,1000以内的数字都对应一个单独的token,做1000以内的加法,没法拆解digit的情况下,真的能“算”吗?Tokenisation本身也能解释这个图,算得准的部分很可能是tokenisation覆盖的部分,往外推就不准了。

论文分析

1.《VQ一下Key,Transformer的复杂度就变成线性了》

本文介绍了一个名为Transformer-VQ的Efficient Transformer方案,它基于“只需VQ一下Key,Transformer的复杂度就会变成线性”的观察结果进行展开,个人认为是一种非常独特且亮眼的线性化思路,实验结果也很优异。它既可以理解为一种更高明的线性Attention/RNN模型,也可以理解为一个带有“可训练的Tokenizer”的Attention模型。https://kexue.fm/archives/9844 ;https://mp.weixin.qq.com/s/593R02DuEarFxeyKWu2iRA

2.When, Why and How Much? Adaptive Learning Rate Scheduling by Refinement

这篇文章比较有趣,第一次“从理论上推导出warmup,而不是凭经验”,主要研究学习率计划应该如何设置。https://arxiv.org/pdf/2310.07831.pdf

3.Effective long context scaling of foundation models

文章从系统工程视角,把long context看成一个整体,提出了一系列长文本语言模型,支持高达32,768个标记的有效上下文窗口。在大多数常规任务上实现了持续改进,并在长上下文任务上相对Llama 2实现了显著提升。

讨论&杂谈

D(Discussion):请问大家longlora这篇文章为什么可以训练的时候开shift window attention,测试的时候可以full attention呢,实验上是验证的, 但是intuitively 大家有没有理解?

F(Follow):可能是lora对attention计算的改动实在很小吧,如果是全参数更新是否真正work就需要怀疑。这个必须结合lora来考虑的,如果longlora中改为全参数微调,或者干脆从预训练中就开始用window attention,那么测试阶段切换为full attention大概率会崩,这是通过类似的实验得出的。所以猜测(但没有什么依据)这样能work还跟lora对原模型的计算机制改动比较小有关。

D:以当前的科技水准,通用领域的同声传译是不是已经基本解决了?

F:产品化的主要问题还是生成速度和声场的物理限制吧,比如一个很嘈杂的环境下去翻译谁的、没有对准的麦听不清怎么办之类的问题。通用领域的同传前两年就已经可以做得很好了,难的是1)怎么降低延迟,2)专业领域的asr和翻译的准确率。同传是个很反人类的任务,人的反应和记忆力不如机器很吃亏。人的延迟也很高,但人的优势是通过训练会知道怎么调整语序、做概括、调整语音语调来传达信息。模型的做法还比较机械。同传主要是也涉及到未来信息的处理,冯洋老师组里有很多好的工作。

D:有没有什么工作研究scale up retriever / text embedding model本身,似乎huggingface上排的高的embedding都还在 Bert的时代

F1:embedding的scaling基本能归结到语言模型的scaling吧。可能优先data scaling而非model size scaling,因为embedding 的workload比较大

F2:本质上是这个方法本身的限制?cos表达的相似度太简单,语义相似度太复杂。

F3:PLAID: An Efficient Engine for Late Interaction Retrieval https://arxiv.org/abs/2205.09707 这个可能算吧

F4:https://arxiv.org/abs/2112.07899

F5:scale up RAG的还有几篇:https://arxiv.org/abs/2210.05758 ;https://arxiv.org/abs/2112.04426 https://arxiv.org/abs/2302.00083 。Retro这条线的工作有意思的地方是用了cross chunked attention,在training阶段就把retrieval给训练进去了,而不是inference time retrieval。这样在训练的时候就能把trillion级别的data通过rag的方式训进去,提升scale。

D:并且retro和gopher/chinchilla的横向对比可以对比出来非常多的东西,到底是把超大数据集塞进模型内部,还是把它放在模型外部。还有一个问题就是,假设一个7B的retro和一个70B的Chinchilla在language modeling上有同样的perplexity,问两个模型在GSM8K/MATH上谁会更强?

F5:有篇followup做了差不多相同的参数量,48B左右:instructRetro,大概能在长问题上提升10%https://arxiv.org/abs/2310.07713

简短问答

Q:请问现在有没有工作是探索文字信息以外的RAG的?比如说想用RAG去query图片、歌曲之类的东西?

A:

Q:目前有多模态主模型支持键盘鼠标,或者人手动作控制吗,目前只看到清华用vqvae编码人体动作,作为大模型的特征,想了解是否有手部相关研究(MoConVQ: Unified Physics-Based Motion Control via Scalable Discrete Representationshttps://pku-mocca.github.io/MoConVQ-page/ ;https://arxiv.org/pdf/2310.10198.pdf)

A:有篇gestureGPT

Q:有个工程上的问题,通过 python 开启一个 vllm 后,比如: vicuna = LLM("some_path")这个 vicuna 用完后,想 del vicuna 然后用另一个 path:vicuna = LLM("other_path")每次这时候都会报错,大概是无法同时启动两个 tensor parallel。请问下大家知道如何解决么?

A:del vicuna 后可能没释放显存,之前遇到过显存请不掉的问题,最后解决方案是是模型参数得先detach,再cpu,再del 在collect,再empty_cache()

Q:想请教下大家SFT 训练的话大概loss在小于多的时候能判断是overfit呀,然后一般是多少epoch呢,做过一个实验是训练了3个epoch,然后第3个epoch的loss只有0.0几了,感觉会overfit但是test set上的效果却有个boost,不知道合不合理。

A:不用太纠结SFT的过拟合。理由:OpenAI的InstructGPT paper,第8页,Sec 3.5那里

Q:好奇请教一个问题,instruction tuning算是一种generalization方法吧?今天和一个OpenAI的老哥聊了聊,他们之前做泛化和可解释性,现在做alignment

A:是不是因为他们觉得数据够多overfit已经难以避免,真正有用面向用户的还是alignment?关于泛化性,这篇新出的文章似乎也说明了instruction tuning 是能带来跨领域泛化的?https://arxiv.org/pdf/2310.19651.pdf

Q:mistral 有中文继续训练过的版本吗?

A:openbuddy做过,不过听说 https://huggingface.co/HuggingFaceH4/zephyr-7b-beta 这个做中文训练后的效果更好。

Q:有没有人记得这么一篇论文:这篇论文里把目前LLM的数据集按照时效性分成了4个类型,其中包括“一直正确的数据”、“特别频繁更新的数据”、“较长时间才会更新的数据”

A:FreshQA