语言大模型的预训练过程——从无尽数据到海量知识

news2024/11/18 7:24:23

       从目前研究结果看,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)技术精要,感兴趣的读者可以阅读原文!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1204985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA】去掉 if...else 的七种绝佳之法...

文章目录 前言方法一&#xff1a;提前 return方法二&#xff1a;枚举方案三&#xff1a;Optional 判空方案四&#xff1a;表驱动法方案五&#xff1a;策略模式 工厂方法方案六&#xff1a;责任链模式方案七&#xff1a;Function总结 前言 我相信小伙伴一定看过多篇怎么去掉 i…

解决渗透测试js文件泄露

解决办法&#xff1a;使用过滤器过滤 public class StaticSourceFilter implements Filter {private static Logger logger LoggerFactory.getLogger(StaticSourceFilter.class);Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepub…

http-server安装使用

前段时间给电脑重装了系统&#xff0c;很多东西都没了&#xff0c;今天想在浏览器打开一个本地的html文件&#xff0c;发现电脑上没有http-server&#xff0c;于是装了一个&#xff0c;并且记录下安装过程 1、安装 nodejs&#xff0c;但如果你电脑上有&#xff0c;就无需下载 …

html5 初步了解

1、html5 含义 简而言之&#xff0c;html5 其实就是新的一代html标准&#xff01; 2、html5的优缺点 优点 语义化html 增加了很多语义化的标签&#xff0c;让html结构更加清晰&#xff0c;更具可读性由于增加了很多语义化的标签&#xff0c;对SEO更加友好 缺点 其他主流浏…

day59【单调栈】503.下一个更大元素Ⅱ 42.接雨水

文章目录 503.下一个更大元素Ⅱ42.接雨水 503.下一个更大元素Ⅱ 力扣题目链接 代码随想录讲解链接 题意&#xff1a;给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数…

(只需三步)虚拟机上vm的ubuntu不能联上网怎么办

第一步&#xff1a;重启虚拟网络适配器 第二步&#xff1a;删掉网络适配器&#xff0c;重新添加 第三步&#xff1a;重启虚拟机网络服务器 sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start 再打…

【机器学习基础】机器学习入门(2)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a;【机器学习基础】机器学习入门&#xff08;1&#xff09; &#x1f4a1;…

【算法|动态规划 | 区间dp No.1】AcWing 282. 石子合并

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【AcWing算法提高学习专栏】【手撕算法系列专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…

数据结构--图解单链表

学习链表最重要的就是会画图&#xff0c;尤其是要理解链表的逻辑结构和物理结构&#xff0c;理解链表的底层原理才能使用的如鱼得水。 希望这篇文章可以帮助各位&#xff0c;记得关注收藏哦&#xff1b;若发现问题希望私信博主&#xff0c;十分感谢。 当然学习链表是需要大家对…

【PWN · heap | unlink | free_hook】[SUCTF 2018 招新赛]unlink

在前期学习了unlink后&#xff0c;今天翻NSSCTF找到一道名为unlink的题目&#xff0c;尝试不看wp做。过程很顺利&#xff01; 前言 题目对于知识点unlink还是非常裸的&#xff0c;很直接&#xff0c;思路很清晰。 一、题目 二、思路浅析 通过对该程序的反编译&#xff0c;我们…

AGV与AMR的区别

如今&#xff0c;市面上最受关注的两类工业移动机器人分别是AGV和AMR。但大众对于两者的区别还是不甚了解&#xff0c;因此小编将通过这篇文章为大家详细解释。 一、概念阐述 【AGV 】 AGV (Automated Guided Vehicle) 即自动导引运输车&#xff0c;可指基于各种定位导航技术…

第二章:main 方法

系列文章目录 文章目录 系列文章目录前言一、main 方法总结 前言 main方法详解。 一、main 方法 //main方法的形式 public static void main(String[] args){}解释main方法main方法被虚拟机调用Java虚拟机需要调用类的main()方法&#xff0c;所以该方法的访问权限必须是publi…

C++类中的const使用

目录 一&#xff0c;const成员函数 1&#xff0c;const成员函数的语法 2&#xff0c;相同限定符之间的调用 3&#xff0c;不同限定符对象与函数的调用 4&#xff0c;不同限定符函数之间的调用 一&#xff0c;const成员函数 1&#xff0c;const成员函数的语法 将const修饰…

关于MySQL优化的思考二【性能分析工具、优化原则】

在实际的工作中&#xff0c;我们不免需要对SQL预计进行分析和优化&#xff0c;今天我们就来一起看下相关内容&#xff1a; SQL性能分析 SQL优化原则 1 SQL性能分析 对SQL进行性能分析&#xff0c;主要有&#xff1a; 查看慢SQL 通过profile详情查看 explain执行计划 1.1…

2023年【广东省安全员B证第四批(项目负责人)】考试及广东省安全员B证第四批(项目负责人)试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 广东省安全员B证第四批&#xff08;项目负责人&#xff09;考试考前必练&#xff01;安全生产模拟考试一点通每个月更新广东省安全员B证第四批&#xff08;项目负责人&#xff09;试题及解析题目及答案&#xff01;多…

Redhat7设置国内可用yum源

问题&#xff1a; 因为最近安装了redhat7&#xff0c;在使用的时候提示系统未注册订阅&#xff0c;无法使用官方的yum源进行安装软件。为此&#xff0c;我使用centos7国内的yum源替换redhat的官方的yum源实现软件安装。 “This system is not registered with an entitlement …

iOS:何为空指针和野指针

一&#xff1a;什么是空指针和野指针 1、空指针 ①.没有存储任何内存地址的指针就成为空指针&#xff08;NULL指针&#xff09; ②.空指针就是被赋值为0的指针&#xff0c;在没有被具体初始化之前&#xff0c;其值为0. //以下都是空指针&#xff0c;eg: Person *p1 NULL; …

CSDN每日一题学习训练——Java版(数据流的中位数、乘积最大子数组、旋转链表)

版本说明 当前版本号[20231113]。 版本修改说明20231113初版 目录 文章目录 版本说明目录数据流的中位数题目解题思路代码思路参考代码 乘积最大子数组题目解题思路代码思路参考代码 旋转链表题目解题思路代码思路参考代码 数据流的中位数 题目 中位数是有序列表中间的数。…

SPSS时间序列模型预测

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

Leetcode刷题详解——解数独

1. 题目链接&#xff1a;37. 解数独 2. 题目描述&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能…