语言大模型的预训练

从无尽数据到海量知识

       从目前研究结果看,Transformer是足够强大的特征抽取器,通过预训练过程,Transformer学到了什么?知识是如何存取的?我们又如何修正错误知识?本文讲述这方面的研究进展。

1、求知:LLM学到了什么知识

1.1 训练文本的来源

        LLM从海量不同类型文本中学习了大量知识。例如,ChatGPT训练的文本类型包括了多种来自互联网的文本,这些文本用于模型的预训练。这些文本类型包括但不限于:

  1. 新闻文章:包括来自各种新闻机构和新闻网站的新闻报道,涵盖了各种主题,如政治、经济、科技、体育等。

  2. 社交媒体帖子:来自社交媒体平台(如Twitter、Facebook、Instagram)的用户帖子、推文和评论,用于捕捉社交对话和趋势。

  3. 网页内容:网站上的各种网页内容,包括博客文章、论坛帖子、产品描述和维基百科等。

  4. 电子书:包括虚构和非虚构作品的电子书,覆盖了文学、科学、历史、自助等多种领域。

  5. 学术文献:学术期刊、研究论文和学术出版物,包括科学、工程、医学和人文领域的文献。

  6. 对话和聊天记录:来自各种在线聊天平台和社交媒体的对话和聊天记录,用于训练模型生成自然语言对话。

  7. 问答数据:包括各种问答网站(如Quora、Stack Exchange)上的问题和答案,用于训练模型回答问题和提供解释。

  8. 博客文章:博客作者的个人博客文章,涵盖了各种主题,包括技术、生活、旅行、美食等。

  9. 评论和评价:产品评论、影片评论、餐厅评价和应用程序评价,用于训练模型理解和生成用户反馈。

  10. 新闻评论和分析:新闻评论员和分析师的观点文章,用于了解社会和政治问题的不同观点。

这些文本类型涵盖了互联网上各种不同的文本来源,帮助ChatGPT模型学习理解和生成多领域的自然语言文本。这使模型能够在各种对话和文本生成任务中表现出色,包括回答问题、进行对话、提供建议和提供信息。

1.2 学习到的知识类型

如果把这些知识做粗略分类的话,可以分为语言类知识和世界知识两大类。

       语言类知识指的是词法、词性、句法、语义等有助于人类或机器理解自然语言的知识。关于LLM能否捕获语言知识有较长研究历史,自从Bert出现以来就不断有相关研究,很早就有结论,各种实验充分证明LLM可以学习各种层次类型的语言学知识,这也是为何使用预训练模型后,各种语言理解类自然语言任务获得大幅效果提升的最重要原因之一。另外,各种研究也证明了浅层语言知识比如词法、词性、句法等知识存储在Transformer的低层和中层,而抽象的语言知识比如语义类知识,广泛分布在Transformer的中层和高层结构中。

       世界知识指的是在这个世界上发生的一些真实事件(事实型知识,Factual Knowledge),以及一些常识性知识(Common Sense Knowledge)。比如“拜登是现任美国总统”、“拜登是美国人”、“乌克兰总统泽连斯基与美国总统拜登举行会晤”,这些都是和拜登相关的事实类知识;而“人有两只眼睛”、“太阳从东方升起”这些属于常识性知识。关于LLM模型能否学习世界知识的研究也有很多,结论也比较一致:LLM确实从训练数据中吸收了大量世界知识,而这类知识主要分布在Transformer的中层和高层,尤其聚集在中层。而且,随着Transformer模型层深增加,能够学习到的知识数量逐渐以指数级增加(可参考:BERTnesia: Investigating the capture and forgetting of knowledge in BERT)。其实,你把LLM看作是一种以模型参数体现的隐式知识图谱,如果这么理解,我认为是一点问题也没有的。

        依旧以ChatGPT为例,ChatGPT从海量文本中学习到了广泛的知识,这些知识包括但不限于以下内容:

  1. 语言知识:ChatGPT通过海量文本学会了多种语言的语法、拼写、标点符号和语言结构。它了解不同语言之间的共性和差异。

  2. 常识知识:ChatGPT获取了广泛的常识知识,包括日常生活中的常识、历史事件、地理信息、文化背景和科学原理。这有助于模型更好地理解和生成文本。

  3. 文化知识:模型通过学习文本获取了关于不同文化的知识,包括传统习俗、文化节庆、宗教信仰和文化差异。

  4. 科学和技术知识:ChatGPT学习了关于各种科学领域(如物理学、化学、生物学、计算机科学)和技术领域(如编程、人工智能、机器学习)的基础知识。

  5. 历史知识:模型了解了历史事件、重要人物、历史时期和政治运动的相关知识。

  6. 社会和政治知识:ChatGPT学会了有关政府、政治制度、社会问题、经济政策和社会运动的知识。

  7. 娱乐和艺术知识:模型获得了关于音乐、电影、文学、艺术和娱乐业的信息,包括流行文化趋势和作品的背景。

  8. 地理知识:ChatGPT学会了关于地理位置、国家、城市、地理特征和地理事件的知识。

  9. 环境和健康知识:模型了解了有关环境问题、可持续发展、健康和医学的信息。

  10. 教育和学术知识:ChatGPT获取了关于学校、学科、学术领域、教育政策和学术研究的知识。

       这些知识使ChatGPT成为一个强大的自然语言处理模型,能够应对各种不同领域的问题和任务。然而,需要注意的是,模型的知识是从互联网文本中学习的,并且可能不是绝对准确或完整的,因此在使用时需要谨慎验证和核实信息。

1.3 学习到的知识量与训练数据量的关系

“When Do You Need Billions of Words of Pre-training Data?”这篇文章研究了预训练模型学习到的知识量与训练数据量的关系,它的结论是:对于Bert类型的语言模型来说,只用1000万到1亿单词的语料,就能学好句法语义等语言学知识,但是要学习事实类知识,则要更多的训练数据。这个结论其实也是在意料中的,毕竟语言学知识相对有限且静态,而事实类知识则数量巨大,且处于不断变化过程中。而目前研究证明了随着增加训练数据量,预训练模型在各种下游任务中效果越好,这说明了从增量的训练数据中学到的更主要是世界知识。

以下是一些关于预训练模型知识量和训练数据量关系的要点:

  1. 数据量与知识广度:更多的训练数据通常能够帮助模型获取更广泛的知识。大规模的数据集包含了各种不同领域的文本,因此模型可以了解更多主题和领域的信息。

  2. 数据量与知识深度:更多的数据还可以增加模型在每个领域的知识深度。模型可以从大量文本中学习更多细节、例子和特定领域的知识。

  3. 数据质量:数据的质量对知识量也有重要影响。高质量的数据集能够提供准确、可靠的信息,有助于模型获取更有价值的知识。

  4. 模型体系结构:模型的体系结构和复杂性也影响了知识的获取和表达。更大、更复杂的模型通常能够捕获更多知识,但也需要更多的训练数据来支持它们。

  5. 训练方法:训练方法和技巧也可以影响知识的获取。预训练过程中的任务设置、模型微调和学习率等参数都会影响知识的吸收和应用。

  6. 领域特定的微调:模型的领域特定微调可以进一步扩展其在特定领域的知识。通过在特定任务上微调模型,可以使其更精通该领域。

  7. 知识的多样性:数据集中不仅仅包括了多领域的文本,还包括了不同类型的知识,如事实性知识、常识知识、技术知识等。模型在多个层面上学习知识,包括语法、语义、推理和背景信息。

       总的来说,更多的训练数据可以帮助模型获取更多的知识,但知识量的增加可能会递减,即随着数据规模的增加,新增的知识可能会减少。此外,模型的性能还受到其他因素的影响,如计算资源、模型的架构、训练方法和评估方法。因此,在设计和使用预训练模型时,需要综合考虑这些因素。

2、存知:LLM如何存取知识

       由上可知,LLM确实从数据中学到了很多语言类及世界知识。那么,对于某条具体的知识,LLM把它存储到了哪里?又是如何提取出来的?这也是一个有意思的问题。

2.1 知识主体存储在Transformer的FFN结构

       显然,知识一定存储在Transformer的模型参数里。从Transformer的结构看,模型参数由两部分构成:多头注意力(MHA)部分占了大约参数总体的三分之一,三分之二的参数集中在FFN结构中。MHA主要用于计算单词或知识间的相关强度,并对全局信息进行集成,更可能是在建立知识之间的联系,大概率不会存储具体知识点,那么很容易推论出LLM模型的知识主体是存储在Transformer的FFN结构里。

 2.2 具体知识的存储与提取

但这样的定位,粒度还是太粗,无法很好回答具体某条知识是如何存储与提取的,比如 “中国的首都是北京”这条知识,以三元组表达就是<北京,is-capital-of,中国>,其中“is-capital-of”代表实体间关系。这条知识它存储在LLM的哪里呢?

        “Transformer Feed-Forward Layers Are Key-Value Memories”给出了一个比较新颖的观察视角,它把Transformer的FFN看成存储大量具体知识的Key-Value存储器。如上图所示(图左是原始论文图,其实不太好理解,可以看做了注释的图右,更好理解些),FFN的第一层是个MLP宽隐层,这是Key层;第二层是MLP窄隐层,是Value层。FFN的输入层其实是某个单词对应的MHA的输出结果Embedding,也就是通过Self Attention,将整个句子有关的输入上下文集成到一起的Embedding,代表了整个输入句子的整体信息。

        Key层的每个神经元节点,记载了一对<Key,Value>信息。比如对于上图中FFN第一个隐层的第 i个节点 k_{i} ,也许就是它记载了<北京,is-capital-of,中国>这条知识。 k_{i} 节点对应的key向量,其实指的是节点 k_{i}和输入层每个节点的权重向量;而对应的Value向量,指的是节点 k_{i}和FFN第二层的Value层每个节点形成连接的权重向量。每个神经元的Key向量,用于识别输入中的某种语言或者知识模式,是一种模式探测器。如果输入中包含它要检测的某种模式,那么输入向量和 k_{i}节点的key权重进行向量内积计算,加上Relu,形成 k_{i}的大数值响应,意味着 k_{i}检测到了这个模式,于是再把这个响应值,通过 k_{i} 节点的Value权重向量向FFN第二层传播。这等价于将Value向量的值,用响应值加权,然后传递并体现到第二层Value层每个节点的输出上。如此这般,FFN的正向传播计算过程,看起来就像是通过Key检测到某种知识模式,然后取出对应的Value,并把Value体现在FFN的第二层输出上。当然,FFN第二层每个节点,会收集FFN的Key层所有节点信息,所以是一种混合响应,而Value层所有节点的混合响应,可以解读为代表输出单词的概率分布信息。

       听着可能还是比较复杂,我们用个极端的例子来说明。我们假设上图的节点 k_{i}就是记载<北京,is-capital-of,中国>这条知识的Key-Value存储器,它的Key向量,用于检测”中国的首都是…”这个知识模式,它的Value向量,基本存储了与单词“北京”的Embedding比较接近的向量。当Transformer的输入是“中国的首都是[Mask]”的时候, k_{i}节点从输入层探测到这个知识模式,所以产生较大的响应输出。我们假设Key层其它神经元对这个输入都没有任何响应,那么对应的Value层的节点,其实只会接收到“北京”这个Value对应的单词embedding,并通过 k_{i} 的大响应值,进行了进一步的数值放大。于是,Mask位置对应的输出,就自然会输出“北京”这个单词。基本就是这么个过程,看着很复杂,其实很简单。

       把FFN看成Key-Value存储器这种思路,很可能不是最终的正确答案,但是距离最终正确答案的距离,估计也不太远。

2.3 Transformer模型不同层次的功能

       而且这篇文章还指出,Transformer低层对句子的表层模式作出反应,高层对语义模式作出反应,就是说低层FFN存储词法、句法等表层知识中层和高层存储语义及事实概念知识,这和其它研究结论是一致的。

关于Transformer模型不同层次的功能,Transformer 模型的深度结构允许它在不同层次上处理文本信息,包括表层模式(lexical and syntactic patterns)和语义模式(semantic patterns)。

以下是一些与不同层次的功能相关的说明:

  1. 低层(底层):低层的 Transformer 层通常更接近输入数据,可以捕获词法(lexical)和句法(syntactic)信息。这些层可能会检测词汇、词语之间的依赖关系、词性标签等表层特征。低层的神经网络结构,如自注意力机制,有助于在句子中捕获词汇和句法关系。

  2. 中层(中间层):中层的 Transformer 层位于模型的中间,具有一定的语法和语义分析能力。这些层可能能够识别更复杂的语法结构和语义关系,包括主谓宾结构、从句、逻辑关系等。在中层,模型可以更好地理解句子的结构和含义。

  3. 高层(顶层):高层的 Transformer 层更加抽象,它们存储更多的语义信息和事实概念知识。这些层通常负责整合句子中的不同部分,进行推理和推断,以生成对文本的更高层次理解。高层的神经网络结构有助于模型进行语义分析和抽象推理。

总体而言,Transformer 模型中的不同层次的层共同协作,以实现对文本的多层次理解。这种分层结构有助于模型在处理自然语言文本时既考虑表层特征,又理解更深层次的语义和含义。这使得 Transformer 模型在各种自然语言处理任务中表现出色,包括文本生成、情感分析、机器翻译等。

   

3、修正:如何修正LLM里存储的知识

3.1  修正LLM存储知识的必要性

       既然我们已知具体的某条世界知识存储在某个或者某些FFN节点的参数里,自然会引发另外一个问题:我们能否修正LLM模型里存储的错误或者过时的知识呢?比如对于问题:“英国的现任首相是谁?”鉴于近年来英国首相频繁更迭,你猜LLM更倾向输出“鲍里斯”还是更青睐“苏纳克”?很明显训练数据中包含“鲍里斯”的数据会更多,这种情况很大可能LLM会给出错误回答,于是我们就有修正LLM里存储的过时知识的必要性。

3.2   三类修正方法

如果归纳下,目前有三类不同方法来修正LLM里蕴含的知识:

       第一类方法从训练数据的源头来修正知识。“Towards Tracing Factual Knowledge in Language Models Back to the Training Data”这篇文章的研究目标是:对于指定的某条知识,我们是否可以定位到是哪些训练数据导致LLM学会了这条知识?答案是肯定的,这意味着我们可以逆向追踪到某条知识对应的训练数据源头。如果利用这项技术,假设我们想要删除某条知识,则可首先定位到其对应的数据源头,删除数据源,然后重新预训练整个LLM模型,这样即可达成删除LLM中相关知识的目的。但是这里有个问题,如果修正一小部分知识,我们就需要重新做一次模型预训练,这样做明显成本太高。所以这种方法不会太有发展前景,可能比较适合那种对于某个特定类别数据的一次性大规模删除场合,不适合少量多次的常规知识修正场景,比如可能比较适合用来做去除偏见等去toxic内容的处理。

       第二类方法是对LLM模型做一次fine-tuning来修正知识。一个直观能想到的方法是:我们可以根据要修正成的新知识来构建训练数据,然后让LLM模型在这个训练数据上做fine-tuning,这样指导LLM记住新的知识,遗忘旧的知识。这个方法简单直观,但是也有一些问题,首先它会带来灾难遗忘问题,就是说除了忘掉该忘的知识,还忘掉了不该忘的知识,导致这么做了之后有些下游任务效果下降。另外,因为目前的LLM模型规模非常大,即使是做fine-tuning,如果次数频繁,其实成本也相当高。对这种方法感兴趣的可以参考“Modifying Memories in Transformer Models”。

        第三类方法直接修改LLM里某些知识对应的模型参数来修正知识。假设我们想要把旧知识<英国,现任首相,鲍里斯>,修正到<英国,现任首相,苏纳克>。首先我们想办法在LLM模型参数中,定位到存储旧知识的FFN节点,然后可以强行调整更改FFN中对应的模型参数,将旧知识替换成新的知识。可以看出,这种方法涉及到两项关键技术:首先是如何在LLM参数空间中定位某条知识的具体存储位置;其次是如何修正模型参数,来实现旧知识到新知识的修正。关于这类技术的细节,可以参考“Locating and Editing Factual Associations in GPT”和“Mass-Editing Memory in a Transformer”。理解这个修正LLM知识的过程,其实对于更深入理解LLM的内部运作机制是很有帮助的。

声明:本文参考了知乎文章——通向AGI之路:大型语言模型(LLM)技术精要,感兴趣的读者可以阅读原文!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值