2023年的深度学习入门指南(15) - 大模型的幻觉
大模型的能力最另人惊讶的,一个是强大的能力,另一个就是时不时一本正经地胡说八道。如果你用的是小一点的模型,可能还见过输出循环内容之类的情况。我们将这种生成不良内容的现象称为幻觉-hallucination。
那么,随着模型不断变大,能力不断变强,幻觉是否会好转呢?从我们前面讲过的Instruct GPT等论文的结论来看,并没有。
需要强调的一点是,所有的生成任务都有可能产生幻觉。并不是仅限于问答类或者对话类,比如翻译任务也有可能产生幻觉。这是因为,幻觉的产生是由模型的能力决定的,而不是任务的类型。
我们来把幻觉问题拆解一下,大家就能更清楚地得到答案了。我们先看来一篇香港科技大学的综述《Survey of Hallucination in Natural Language Generation》。
什么是幻觉?
从产生的原因上来讲,幻觉的引入主要有数据原因和模型训练和推理的原因。
数据方面,我们前面讲了缩放定律,大模型需要大数据,如果数据不够,那么投入更多的计算资源并不会取得更好的效果。但是,当数据越来越多时,手动去检查数据的重复就变得越来越不可能。这些重复的数据,在模型中的比重就会比不重复的数据可能更高。从而导致模型在生成时,更倾向于生成重复的内容。
而在模型方面,越大的模型掌握的知识越多,这导致模型更容易犯参数化知识偏差的问题。也就是说,模型是从自己的知识中生成内容,而不是从输入的材料中生成内容。这就导致了模型生成的内容更倾向于自己的知识,而不是输入的材料中的知识。
我们可以将幻觉分为两类,内在幻觉和外在幻觉。
内在幻觉是指生成的输出与源内容相矛盾。这个相对容易判断,因为我们可以通过源内容来判断生成的内容是否正确。
外在幻觉是指生成的输出无法从源内容中验证。在很多任务中,这样的幻觉可能是有益的,因为是模型从自己的知识库里调用了知识,补充了源材料中没有的内容。但是,对于另一些严格需要根据源材料生成的任务,这样的幻觉就是有害的,而且很难发现。
我们做过的阅读理解的问题,很多干扰选项就是这样的幻觉。比如要阅读的材料是讲李白和汪伦的友情,而干扰项可能就有李白和孟浩然的交往。在历史上李白和孟浩然确实是朋友,但是从材料中找不到这样的信息,如果大模型的生成了这样的信息,这就是外在幻觉。
不管是内在幻觉还是外在幻觉,都有可能是模型根据相似性泛化出来的,有可能是对的,有可能是错的,还有可能根本没办法判断对错。
当我们去用大模型做一些对于幻觉的容忍度比较低的任务时,需要想办法做验证。比如摘要和翻译这样的任务,就需要小心。
数据原因导致的幻觉
产生幻觉的一部分重要原因,就是数据的质量不够好。Garbage in, Garbage out的基本原理对于大模型仍然是适用的。
启发式数据集
为了降低数据的成本,训练大模型时,很多数据并不都是由人类来校验过的,而是采用了一些启发时的方法。比如,从wiki中获取的数据,在写作的时候,其实就没有遵循严格的规范。对于海量的数据,我们采取一些假设,比如假设总是结论先行,后面是论据。
这种对语料库的近似处理并不是近几年模型变大之后才有的,早在2016年的时候语料库就开始使用启发式方法来构造了。
2020年Google和卡耐基梅隆大学的一项研究《ToTTo: A Controlled Table-To-Text Generation Dataset》指出,现有的模型生成的文字很流畅,但是有时候就会幻想出表格中没有的一些新短语。
2019年加州大学的一篇研究《Revisiting Challenges in Data-to-Text Generation with Fact Grounding》指出现有的RotoWire数据集中,类编写的摘要中有大约40%的内容无法直接映射到任何输入的表格记录,,这导致了模型在学习时容易产生不符合事实的幻想。为此,作者提出一个质量更好的新的数据集。
目前基本上各大商用模型都并不公开自己的数据集,也很难假设厂商自己有这样的人力和上面的几个研究一样去仔细审查数据集。
数据重复
2022年Google大脑团队的一项研究《Deduplicating Training Data Makes Language Models Better》指出,来自预训练语料库的重复示例会导致模型偏向于生成重复的、来自重复示例中记忆短语的输出。他们发现了现有的语言模型数据集中存在许多近似重复的样本和长重复的子串,导致语言模型在无提示输出时有超过1%的文本是从训练数据中直接复制的。
这种重复不光出现在训练集内部,也同时出现在训练集和验证集之间,导致超过4%的验证集其实是无效的。
数据的内在差异
2021年来自Google的一项研究《Increasing Faithfulness in Knowledge-Grounded Dialogue with Controllable Features》指出,在人类编写的回复中,也并不是都有理有据的回答,有的是非常主观的信念,也有的就是随便闲聊。所以该论文提出了增加一些评估指标,让回答数据更有依据的改进方法。
综上三种,要么是数据量太大人标不过来而采取一些近似的方法,要么是有重复数据没有过滤,要么是人类本身的回答就风格不统一等等,这些数据上的问题导致模型的输入就不是那么足够有效。
要学习一个流畅的语言模型自然是没有问题的,但是想要像知识库一样精准,确实是有点难为大模型了。
模型原因导致的幻觉
根据研究,即使是可以做到高水平的语料库,仍然可能由于模型的训练和推理的原因产生幻觉。
这其实也好理解,因为训练数据和推理用的数据并不是完全一样的。这跟你不管用多少年的股价信息来做训练,也难以预测未来的股价是一个道理。
不完善的表示学习
编码器的作用是理解和将输入文本编码为有意义的表示。具有有缺陷理解能力的编码器可能会影响幻觉的程度。当编码器在训练数据的不同部分之间学习到错误的相关性时,可能导致与输入不一致的错误生成结果。
错误的解码
解码器接收编码器的编码输入并生成最终的目标序列。解码过程中的两个方面会导致幻觉的出现。首先,解码器可能会关注错误的编码输入部分,导致错误的生成结果。这种错误的关联会导致生成的内容中混淆了两个相似实体之间的事实。
其次,解码策略本身的设计也可能导致幻觉的产生。提高生成多样性的解码策略(例如top-k采样)与幻觉的增加呈正相关。
为了增加生成效果的随机性,我们会提高top-k采样的采样数量,但是这样的话,就会导致更多的幻觉。
曝光偏差
假设我们也解决了上面说的解码问题,一个新的问题叫做曝光偏差问题还是难以避免,它定义为训练和推理时解码之间的差异。
常见的训练方法是使用教师强制最大似然估计(MLE)训练来训练解码器,在这种训练中,解码器被鼓励根据真实的前缀序列预测下一个令牌。然而,在推理生成过程中,模型会根据之前由自身生成的历史序列来预测下一个令牌。这种差异可能导致越来越错误的生成结果,特别是当目标序列变得更长时。
比如我们用马丁路德金的著名演讲《I have a dream》来训练模型:
I have a dream that one day this nation will rise up and live out the true meaning of its creed: “We hold these truths to be self-evident, that all men are created equal.”
I have a dream that one day on the red hills of Georgia, the sons of former slaves and the sons of former slave owners will be able to sit down together at the table of brotherhood.
I have a dream that one day even the state of Mississippi, a state sweltering with the heat of injustice, sweltering with the heat of oppression, will be transformed into an oasis of freedom and justice.
I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character.
训练的时候,模型得到的知识是,“I have a dream”后面最可能的单词是that。而“I have a dream that”最可能是one,也有一定可能是my。而如果是“I have a dream that one day”,那可能性就比较多了。这时候如果模型根据自己的知识生成了一个错误的单词,比如“one”,那么后面的内容就会跟着偏差,从此越跑越远,跟金先生的原文就越来越无关了,这可能是大模型的梦想,但是不一定是金博士的梦想了。
参数化知识偏差
其实我们现在跟chatgpt聊天时,大部分都是靠chatgpt模型本身所学的参数化知识来输出的。这些参数化的知识显著地提高了很多自然语言处理任务的性能,比如说它本身对于情感分析就有自己的判断,再结合材料给的样例去对齐,就比只看材料本身带来的理解更为准确。
但是,信息论告诉我们,如果你提供1个比特的输入想得到多个比特的输出,那么你就需要提供更多的信息。如果你想用大模型中已有的参数化知识来进行补齐,就要承担有偏差的风险。
这就像一枚硬币有正反两面,不可以只要其中一面一样。古人云:阴在阳之内,不在阳之对。参数化知识也是一样。
缓解幻觉的方法
最后,我们再讲解一下如何缓解幻觉。从目前业界的效果来看,幻觉问题肯定是没有被解决掉的。
但是有一些思路可以缓解幻觉的产生。其中像强化学习正是我们上节着重讲的内容。另外我们在使用openai的服务时可以发现,其在服务端还有一个后处理的服务,如果生成了不合适的内容,就会被这个监控服务给处理掉。
前面我们讲了,幻觉产生的原因是因为数据和模型两个方面,所以解决方案也是从这两方面入手,另外增加一个后处理的方式,就是先污染再治理。
数据类的思路,一个是花人工好好构建有质量的数据。另外,是写一些工具去处理比较重复数据的内容,去做清洗。
最后,数据还可以跟权威数据等进行对齐,不符合的数据清洗掉。
模型的方法,我们前面也讲了,总共就注意力机制、编码器和解码器三个方面。后面我们深入讲模型架构的时候再讲。
从训练和推理方面,我们可以先制定一个骨架或者模板让大模型参考,或者是采取受控生成的方式,增加限制以减少幻觉的产生。
当然,这两种限制,在减少幻觉的同时,也在降低模型的创造力甚至是生成能力。一些来自openai的消息就是为了安全性,其实模型的性能是有所损失的。
最后就是强化学习和多任务学习这两种了。强化学习的思路是,让模型自己去探索,然后根据反馈来调整。多任务学习的思路是,让模型同时学习多个任务,这样就可以让模型的知识更加丰富,从而减少幻觉的产生。
小结
其实论文中结合了更种任务有更细节的描述,而且我们不能只看综述,还要看一些重要的论文本身。不过这一讲的篇幅已经很长了,我们后面针对具体专题还会滚动式增加知识内容。