- 标题:TinyStories: How Small Can Language Models Be and Still Speak Coherent English?
- 文章链接:TinyStories: How Small Can Language Models Be and Still Speak Coherent English?
- 开源 ckpt:roneneldan/TinyStories-33M、roneneldan/TinyStories-Instruct-33M
- 发表:2023
- 领域:SLM 能力探索
- 一句话总结:LLM 在所有 NLP 乃至多模态场景中都展现出了非凡的能力,但过大的参数量也带来了训练和推理上的困难。但实际上,当应用场景是十分垂直的子任务时,小规模语言模型 SLM(<10M parameters) 也具有很强的性能
- 摘要:语言模型(LMs)是强大的 NLP 模型,但当参数规模很小时,它们往往难以产生连贯和流畅的文本。GPT Neo(small) 或GPT-2(small) 等具有约 1.25M 参数的模型,即使经过广泛的训练,其生成的连贯且一致的英语文本也很少能超过几个词。这就提出了一个问题:即产生连贯英语文本的能力的出现是否只发生在更大规模(数亿或更多参数)和复杂架构(有多层全局注意力) 的模型中。在这项工作中我们提出了 TinyStories,这是一个由 GPT-3.5 和 GPT-4 生成的短篇故事合成数据集,只包含 3-4 岁儿童能理解的单词。我们表明,参数规模远小于 SOTA(<10M)或有更简单的架构(只有一个 Transformer Block)的 SLM,经过 TinyStories 数据训练后仍然能产生流畅且一致的故事,语法几乎完美,故事情节具有多样性,并具有一定的推理能力。我们还介绍了一种新的语言模型评估范式:使用 GPT-4 对生成内容进行评分,这个新的范式克服了 benchmark 基准的缺陷,不需要模型产生结构化的输出,且能提供一个涵盖语法、创造力和遵循提示能力在内的多维分数。我们希望 TinyStories 能够促进 LMs 的开发、分析和研究,特别是在资源匮乏或专门化的领域,并阐明 LMs 中语言能力的涌现原因
文章目录
- 1. 核心思想
- 2. 本文方法
- 2.1 数据集生成方法
- 2.1.1 TinyStoryies 数据集
- 2.1.2 TinyStories-Instruct 数据集
- 2.2 评估方法 & 性能分析
- 2.3 模型输出分析
- 2.3.1 知识、推理、上下文跟踪
- 2.3.2 遵循指令 & DDO 指令泛化
- 2.3.3 生成多样性分析
- 3. 模型的解释性
- 4. 总结
1. 核心思想
- 作者首先分析了参数规模较小的 SLM 难以生成高质量文本的原因
- 自然语言不仅是一个规则和符号的系统,也是一种传达和解释意义的方式。要理解和生成自然语言,LMs 不仅需要掌握词汇和语法规则,还需要掌握一定的事实知识,并能够根据逻辑和上下文进行推理
- 这里作者举了例子 “Jack was hungry, so he went looking for ⟨ ⟩”,为了续写这句话,模型需要知道,饥饿是一种激励人们寻求食物的状态,而食物是一种可以满足饥饿的东西,还需要选择一个符合句子的句法和语义约束的词
- 我感觉这里其实有点问题,LMs 特别是 SLM 生成本文时不一定能明确这些逻辑关系,模型只是通过数据学到了 “something to eat” 之类的句子更大概率拼接在这段提示之后,不一定能很好地理解
- 作者认为 LLM 存在涌现现象,模型能够生成连贯、合理、能够良好遵循质量的自然语言矩阵,就说明 LMs 不仅学习了语言的表面模式,而且还获得了对世界和文本的一定程度的语义和逻辑理解
- 我个人依然存疑,因为一些针对性研究表明涌现现象很可能是因为评估指标不够连续所致
- 作者注意到当参数量较小时,SLM 即使经过足够数据的充分训练,也难以生成连贯合理的高质量句子,作者猜想这可能是因为训练的语料库涉及的领域太广,语句样本多样性太高,超出了模型的承受能力(overwhelmed)
- 作者举例:在维基百科上训练一个模型时,我们不仅在教它如何说英语,而且还教它如何从不同的领域和学科中编码和检索大量的事实和概念,这可能使得 SLM 被它们必须处理和存储的信息的数量和种类所淹没,并阻碍了它们学习语言的核心机制和原则的能力
- 我认为这一段更适合从数据分布的难度来说明,TinyStories 数据集相比维基百科数据,其分布会窄非常多,即使 SLM 也能良好地学习这种分布关系,而后者则无法良好拟合,当一部分参数用于拟合词汇 / 事实 / 概念时,剩余的参数难以良好地拟合语法规律是有可能的
- 基于以上分析,作者希望设计一个小而精炼的数据集,在保留语法、词汇、事实和推理等自然语言的基本元素的同时,限制其广度和多样性,这允许我们评估 LMs 生成连贯和流畅文本的最低要求,并且有助于 SLM 的开发和分析,特别是对于缺乏大型数据集的小众或垂直领域
- 我感觉整个 Motivation 部分有一点点问题,作者似乎认为 LM 只要能产生高质量的连贯文本,就意味着其具有某种涌现能力,从而暗示其工作对于分析 LMs 最 fancy 的涌现能力有帮助。但我认为这里有 overclaimed 嫌疑,首先关于涌现能力的本质仍有争议,即使从知识压缩的角度看,我也不觉得 SLM 有很强的压缩能力
- 文章本质其实就是发现约束数据分布范围的 SLM 在这个局部的性能和 LLM 类似,这似乎是 trivial 的。尽管如此,本文的一些观察对于我们了解 LMs 的特性还是有帮助的,另外作者的一些工程设计也值得学习
- 作者总结的本文贡献为
- 展示了可以用 TinyStories 数据集来良好地训练参数量很小(参数<10M,嵌入维度256),或有更简单的架构(只有一个 Transformer Block)的 SLM,它仍然能良好地遵循指令,产生多样、流畅、前后一致的故事,具有一定的推理能力并能掌握一些事实知识。在这个小领域的能力和大模型不相上下
- 引入了一种使用 GPT-4 评估 LMs 的新范式,它克服了标准基准测试的许多限制,下文详细说明
- 尽管在 TinyStories 上训练的 SLM 规模很小,但它仍然表现出许多与 LLM 类似的行为,比如 Scaling Law、宽度和深度间的 trade-off 等
- SLM 相比 LLM 更具可解释性,SLM 的 Attention Head 和 MLP 神经元的激活都有更明确的语义模式
- Attention Head 有清晰的注意模式,一部分 Head 关注局部位置,另一部分 Head 关注某些语义信息
- MLP 神经元通常在句子中有明显共同作用的 Token 上被激活
2. 本文方法
2.1 数据集生成方法
2.1.1 TinyStoryies 数据集
- 使用 GPT3.5 和 GPT4.0 生成的预训练数据集,要求
- 具有自然语言中的所有关键元素:语法、词汇、事实、推理
- 数据分布垂直,局限于 3~4 岁小朋友能够理解阅读的小故事
- 直接要求大模型生成儿童故事的多样性不足,作者通过以下方法解决
- 预设词表: 1500 的基础词汇,按动词,名词,形容词分3组;预设故事元素:对话、转折、悲惨结局、道德规范等
- 生成每个故事时,从预设词表中随机选 3 个,从故事元素中随机选一个子集,同 prompt 模版要求生成的故事必须具有指定词汇和情节元素
- 生成故事的示例如下
- 加载 Hugging Face 开源数据集,地址
from datasets import load_dataset
data = load_dataset("roneneldan/TinyStories")
print(data)
print(data["validation"]["text"][2])
print(data["train"]["text"][-1])
“”“
data
DatasetDict({
validation: Dataset({
features: ['text'],
num_rows: 21990
})
train: Dataset({
features: ['text'],
num_rows: 2119719
})
})
”“”
2.1.2 TinyStories-Instruct 数据集
- 为了评估生成模型在遵循指令的能力,作者进一步创建了 TinyStories-Instruct 数据集,其中每个样本都可以看做对 TinyStories 样本的一个扩充,在故事之前增加一组相应的指令。注意这个数据集并不用于预训练后的微调,而是直接在这上面训练
- 指令具有四种类型
- 故事中要包含的单词列表(用于生成 TinyStories 样本的,从词表中随机抽取的三个单词)
- 故事情节元素(用于生成 TinyStories 样本的情节元素子集)
- 故事必须包含的某个句子(从生成的 TinyStories 样本中随机抽取的一句话,不能是第一句)
- 对这个故事的简短总结 (1-2行)
- 构造数据集时,首先按 2.1.1 节方法生成故事样本,然后要求 LLM 写出总结,最后随机选择以上某些指令,组合出指令数据样本,一个例子如下
<|endoftext|>
Summary: Tom and Lily escape from a scary house and find a cozy tree house in the forest where
they meet Ben, who invites them to stay with him.
Features: Dialogue
Words: escape, war, tall
Story:
Tom and Lily were friends. They lived in a big house with many other children. They did not like the big house. It was loud and scary. Sometimes, they heard bad noises outside. They said it was war.
One day, Tom and Lily saw a hole in the fence. They wanted to escape. They wanted to find a better place. They waited until it was dark. Then, they crawled through the hole. They ran and ran until they reached a forest.
"Look, Lily, a tree house!" Tom said. He pointed to a tall tree with a wooden box on top. "Maybe we can stay there."
"OK, Tom, let's go," Lily said. They climbed the tree and entered the box. It was cozy and warm. There were blankets and toys and books. They felt happy and safe.
"Who are you?" a voice asked. Tom and Lily turned around. They saw a boy sitting in a corner. He had curly hair and brown eyes. He looked friendly.
"Hi, I'm Tom and this is Lily," Tom said. "We escaped from the big house. We don't like war."
"I'm Ben," the boy said. "I escaped too. I live here now. You can stay with me if you want."
"Really?" Lily asked. "Thank you, Ben. You are very nice."
"Yes, really," Ben said. "We can be friends. And maybe, one day, the war will end."
<|endoftext|>
- 加载 Hugging Face 开源数据集,地址
from datasets import load_dataset
data = load_dataset("roneneldan/TinyStoriesInstruct")
print(data)
print(data["validation"]["text"][2])
print(data["train"]["text"][-1])
2.2 评估方法 & 性能分析
- LLM 通常依赖于任务形式的结构化评估数据集,这些通常要求模型输出必须匹配给定的答案。作者引入了一个利用 LLM 进行评估的新框架,具体评估方案如下
- 手工准备了大概 50 个 prompt 模板,这通常描述了一个场景,要求 LLM 作为老师对学生写的故事进行评估,并且给出了故事的前半截
- 选取一个 prompt 模板,它以半截故事结尾,将其输入预训练的 SLM,要求其补完故事
- 继续拼接 prompt 模板的后半部分,要求 LLM 模型评估模型的语法、创造力和一致性等
- 一个评估案例如下图所示
其中黑体字是 prompt 模板,黄色字是 SLM 补完的故事,斜体字是 LLM 生成的内容,可见这里要求 LLM 先对 SLM 生成的内容进行分析,然后再打分,这类似 COT,有助于提升打分准确性 - 为了执行完整的评估,对于 50 个 prompt 模板中的每一个,作者使用预训练 SLM 补完 10 个故事,最后用 GPT-4 计算所有 500 个故事的平均分作为对 SLM 性能的多维量化指标。嵌入维度 768,堆叠层数 1/2/4/8,损失和评估指标曲线如下
更大规模的对比实验结果如下表所示
- 浅模型在语法层面表现相对更好,说明模型深度对于保持与内容的一致性比生成语法正确的语言更重要
- 虽然语法可以被相对较小的模型所掌握,但一致性和创造力只有出现在较大的规模上
- 在 Tinystory上训练的最大的模型(约80M参数)在语法和一致性方面达到了 GPT4 水平,但在创造力方面不如 GPT4,这表明与语法和一致性相比,创造力随着模型和数据集的大小继续得到更显著的提高
- 只有一层的模型似乎在遵循指令方面相当困难(这可能严重依赖于 global attention),而两层似乎足以满足一定程度的指令遵循
- 比较 “Instruct (指令引导)” 和 “Plot (情节)” 的分数,我们还可以看到,遵循指令的质量更大程度上取决于层数,而隐藏维度的情节一致性更重要
2.3 模型输出分析
2.3.1 知识、推理、上下文跟踪
- 作者根据以下三种额外类型的 prompt 来评估不同模型的功能:
- 事实 prompt:测试模型对常识事实的知识
- 推理 prompt:测试基本的推理能力,如因果关系和消除关系
- 一致性 prompt:测试模型与给定上下文保持一致性和连续性的能力,比如人物的名称和动作、背景和情节
- 作者发现
- 随着嵌入维数和层数的增加,三类 prompt 引导的输出的性能都有所提高
- 事实知识的掌握能力更多地依赖于嵌入维度;上下文一致性更多地依赖于层数。这表明,嵌入维度对于捕获单词的意义和关系更为重要,而层数对于捕获生成过程中的长期依赖关系更为重要
2.3.2 遵循指令 & DDO 指令泛化
- 作者使用 TinyStories-Instruct 数据集训练模型,评估模型的指令遵循能力,发现:随着模型大小的增加,它遵循指令和生成连贯情节的能力都得到了改进
- 作者通过控制指令的排列组合选择,构造了 TinyStories-Instruct-OOD 数据集,其中不存在某种特定的指令类型组合,这里作者排除了 “摘要 + 关键词”,因为这是最难的情况。作者发现在 TinyStories-Instruct-OOD 上训练的 33M 参数模型还是能够遵循这种特殊指令组合,说明 SLM 也具有指令泛化能力
2.3.3 生成多样性分析
- 作者发现在 TinyStoryies 上训练的 SLM 在写故事这个任务上的性能比在普通数据集上训练的 GPT2-XL 更强,而后者的参数规模大 1000 倍。因此作者进一步分析 SLM 是真的生成了多样性的内容,还是仅仅记住了数据集中的某些模板。为了进行分析,作者将模型记忆分成如下的3个等级:
- 精准记忆:最简单也是最容易观察到的内容。就是我们调用LM模型时,把 do_sample 关闭,每次生成的内容就是论文所说的精准记忆内容。(基本就是我们喂给LM的训练数据的内容)
- 简单的模版匹配: 这是一种比上面稍微复杂的记忆形式,模型从数据集中更改故事中的一些名称或实体,但保持故事的其余部分不变。比如,生成故事的时候,模型可能会改变角色的名字或故事中发生位置,但保持情节和事件不变。这可以通过测量生成的故事和数据集中的故事之间n-gram来检测和防止。
- 复杂的模板匹配:这是最微妙和最困难的记忆形式,模型遵循数据集的更抽象的模式或结构,保持总体情节,但改变细节和故事的细节。这几乎不可能量化,因为它需要更深入地理解和分析故事的内容和含义,以及它们之间的关系
- 论文表明通过 TinyStory 训练的 SLM 排除了精准记忆和简单的模板匹配模式,确实具有多样性,复杂模板匹配则没有简便的评估方法。多样性不是仅仅表现在预训练的数据分布范围,在 OOD 上也同样。这里作者用了三个方法分析模型记忆
- 人工检查:人工设计故事开头并令 SLM 续写完成,通过人工检查确保生成内容不是数据集的复制或密切修改
- 续写训练故事:从训练集中获取故事,在中间截断它们,使用 SLM 续写完成。我们观察到 SLM 续写的故事通常与最初的故事非常不同,并且经常引入新的人物、事件或曲折
- 遵循多样的指令:如 2.3.2 节所述,模型具有遵循 OOD 指令的能力,我们发现,即使这些指令是新颖的或具有挑战性的(比如要求模型在故事中加入不太可能的单词,或者添加情节扭曲或糟糕的结局等特征),SLM 模型也总能按照指令生成不同的故事
3. 模型的解释性
- 理解深度神经网络和语言模型的内部工作原理是困难的,由于网络组件可能以一种复杂而混乱的方式相互作用,通常很难将一个特定的功能分配给神经网络的一个给定组件。作者发现了一些初步的证据,表明在 SLM 模型相比 LLM 具有会导致更高的可解释性,当网络的规模受到限制时,我们可能能够对其内部机制获得一些见解
- 作者主要关注该模型的两个方面
Attention Head
:作者训练一个只有一层 Transformer Block 的 SLM,它仍然能生成有意义的文本。由于模型只有一层,注意力头直接关注到输入的原始 token,因此它们可能比更深层次的模型具有更多的可解释功能。作者使用 Analyzing multi-head self-attention: Specialized heads do the heavy lifting, the rest can be pruned. 这篇论文的方法分析各个 Head 的注意模式,并用 What does bert look at? an analysis of bert’s attention 这篇论文的方法进行可视化。发现注意力头确实学会了执行不同的语言任务,并成功捕捉了故事的不同方面。
- 注意力头表现出不同和有意义的功能,如关注前一个单词、句子的主题、句子的结尾或故事的主要主题
- 一些注意力头专门用来生成某些类型的单词,如名词(人名)、动词或标点符号
MLP 中的神经元
:作者使用类似 Visualizing and understanding neural models in nlp.这篇论文的方法来识别对 MLP 中每个神经元影响最强的 tokens。作者发现一些神经元在句子中具有特定角色的单词(如主语或动作)或故事中(如主角的引入)被激活,表明 MLP 中的神经元学会了编码不同的语义和风格信息,并影响生成过程。
4. 总结
- 虽然文章并没有提出太新的东西,实验结果也并不出乎意料,但这仍然是一个值得入门学习和重新认识 LMs 的工作,文中观点对于建立对 LMs 的 sense 具有指导意义,作者构造数据集、评估模型、分析模型性能的思路都值得学习
- 一个很好的基于 llama 骨干的复现工作:从头预训练一只超迷你 LLaMA 3——复现 Tiny Stories