2023年的深度学习入门指南(15) - 大模型的幻觉

news2024/11/28 3:45:53

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的消息就是为了安全性,其实模型的性能是有所损失的。

最后就是强化学习和多任务学习这两种了。强化学习的思路是,让模型自己去探索,然后根据反馈来调整。多任务学习的思路是,让模型同时学习多个任务,这样就可以让模型的知识更加丰富,从而减少幻觉的产生。

小结

其实论文中结合了更种任务有更细节的描述,而且我们不能只看综述,还要看一些重要的论文本身。不过这一讲的篇幅已经很长了,我们后面针对具体专题还会滚动式增加知识内容。

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

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

相关文章

3d动画用云渲染靠谱吗?

3d动画是一种利用计算机技术制作的动画形式,它可以模拟真实世界的物体和场景,创造出各种惊人的效果和视觉体验。3d动画广泛应用于影视、游戏、广告、教育等领域,成为当今最流行的艺术表现形式之一。据统计,2019年全球3d动画市场规…

吴恩达老师《机器学习》课后习题1之线性回归

在学习这些内容之前,需要学习python数据分析相关内容: numpy:科学计算库,处理多维数组,进行数据分析 pandas:基于numpy的一种工具,该工具是为了解决数据分析任务而创建的 matplotlib&#xff1a…

Atcoder Beginner Contest 297

A - Double Click AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N110; int t[N]; int main() {int n,d;cin>>n>>d;for(int i1;i<n;i) cin>>t[i];bool flagfalse;i…

数据结构05:树的定义与双亲表示法[持续更新中]

参考用书&#xff1a;王道考研《2024年 数据结构考研复习指导》 参考用书配套视频&#xff1a;5.1.1 树的定义和基本术语_哔哩哔哩_bilibili 特别感谢&#xff1a; Chat GPT老师[部分名词解释、修改BUG]、BING老师[封面图]~ 备注&#xff1a;博文目前是未完成的状态&#xff…

【数据结构】哈希表(Map和Set)

文章目录 Map和Set模型MapTreeMap和HashMap对比Entry<K,V>常用方法 SetTreeSet和HashSet对比常用方法 OJ练习只出现一次数字复制带随机指针的链表宝石与石头坏键盘打字前K个高频单词 哈希表哈希表所用数据结构解决哈希冲突闭散列开散列 避免哈希冲突哈希函数设计负载因子…

springboot bean的生命周期

Spring Boot是一个非常流行的Java框架&#xff0c;它提供了许多功能&#xff0c;使开发人员可以快速构建和部署应用程序。其中一个非常重要的功能是Spring Boot Bean的生命周期。在本文中&#xff0c;我们将深入探讨Spring Boot Bean的生命周期&#xff0c;以及如何最大化利用它…

光伏发电系统最大功率跟踪控制MATLAB仿真模型(电导增量法+扰动观察法)

光伏发电系统最大功率跟踪控制MATLAB仿真模型&#xff08;电导增量法扰动观察法参考文献&#xff09;资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87878528 模型介绍&#xff1a; 模型主要包含光伏电池模块、直流升压模块、以及最大功率跟踪控制模块。…

深度学习--神经网络全面知识点总结(持续更新中)

文章目录 神经网络基础1.1 什么是神经网络&#xff1f;1.2 神经元和激活函数1.3 前向传播和反向传播1.4 损失函数和优化算法 深度神经网络2.1 卷积神经网络&#xff08;CNN&#xff09;2.2 循环神经网络&#xff08;RNN&#xff09;2.3 长短期记忆网络&#xff08;LSTM&#xf…

C#可视化 商品信息管理系统(具体做法及全部代码)

目录 题目&#xff1a; 效果图&#xff1a; 数据库&#xff1a; 做法&#xff1a; 主页面添加menustrip&#xff0c;之后添加两个窗体双击事件&#xff0c;双击下拉区域就好了。 添加界面 查询按钮功能 datagirdview设置 全部代码&#xff1a; DBHelper类 From1主窗体代…

【并发篇】01 java中的线程状态

Java线程分为6种状态&#xff1a; &#xff08;1&#xff09;新建NEW&#xff1a;用new关键字创建的线程就是新建状态&#xff0c;这时候还没有和系统底层真正的线程关联起来&#xff0c;还仅仅只是一个java对象&#xff0c;所以这个时候这个线程不会被系统分配给cpu。 &#…

【云原生】docker

容器化越来越受欢迎&#xff0c;因为容器是&#xff1a; ●灵活&#xff1a;即使是最复杂的应用也可以集装箱化。 ●轻量级&#xff1a;容器利用并共享主机内核。 ●可互换&#xff1a;可以即时部署更新和升级。 ●便携式&#xff1a;可以在本地构建&#xff0c;部署到云&#…

shel脚本基础1——变量基础、脚本运算符

文章目录 一、变量基础二、bash变量类型三、脚本基础知识3.1 脚本测试命令3.2 shell运算符3.3 命令逻辑关系3.4 bash条件判断3.4.1 条件测试的表达式3.4.2 整数测试3.4.2 字符测试3.4.3 文件测试3.4.4 组合测试条件 一、变量基础 变量的含义&#xff1a; 变量可以通过变量名访问…

5.数据结构期末复习之图以及相关算法

1.应用: 教学计划(先修什么才能修什么课程)社交网络地图导航 2.什么是图? 顶点(有穷非空个)顶点的边 ,抽象为G(V,E) (Vert,Edge) 1.无向图: 点到点都可以到达 表示为(vi,vj) 2.有向图 只能一个点到另外一个点 表示为<vi,vj> 又分为: 1.非带权图(上面的例子就是) 2.带权图…

Day29

TCP_SER #include <myhead.h>//定义处理错误的宏函数 #define ERR_MSG(msg) do{\fprintf(stderr,"line:%d %s %s",__LINE__, __FILE__, __func__);\perror(msg);\ }while(0)//定义IP和端口号 #define IP "192.168.2.186" #define PORT 6666int …

数组的定义方式及访问

问题 如何创建及访问数组。 方法 了解数组的概念 数组就是存储多个数据的容器&#xff0c;数组的长度固定&#xff0c;多个数据的数据类型要一致。 数组的三种定义方式 数据存储的数据类型[] 数组名字 new 数组存储的数据类型[长度] 数据类型[] 数组名 new 数据类型[]{元素…

测试人35岁何去何从?软件测试路在何方?“我“一路升级打怪...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试员干到35岁&a…

暑期健身房招生活动文案分享,在线传单设计

想要有效地宣传健身房的信息&#xff0c;还能够吸引学员了解报名的宣传单要怎么制作&#xff1f;不用自己动手设计&#xff0c;借助在线模板和在线设计工具&#xff0c;一键就能生成专属的招生传单。以下是在线招生传单设计教程和传单设计模板使用教程。 首先找到一个在线设计工…

Juypter更改默认路径,并且解决改完默认路径不自动跳转的问题

目录 更改默认路径 第一步先在你所安装的juypter的环境下输入下面代码 第二步在自己的文件夹下找到这个目录&#xff0c;用记事本打开 第三步更改快捷方式 解决浏览器不调转方法 相对于juypter来讲&#xff0c;还是挺好用的&#xff0c;自我感觉比pycharm更好一点。 juypt…

ES6中 Promise和使用场景

介绍 &#x1f959;&#x1f959;&#x1f959;更加合理和更加强大 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;回调函数&#xff09;更加合理和更加强大 在以往我们如果处理多层异步操作&#xff0c;我们往往…

群晖服务器被encrypted勒索病毒攻击后的表现与如何解密勒索病毒

群晖服务器是一种高效的数据管理方案&#xff0c;但是如果被Encrypted勒索病毒感染&#xff0c;可能会导致许多重要的数据会丢失。Encrypted勒索病毒将加密被感染服务器上的文件&#xff0c;导致它们无法打开。一旦我们遭到encrypted勒索病毒攻击&#xff0c;建议大家选择专业的…