LLMs 系列科普文(6)
截止到目前,我们从模型预训练阶段的数据准备讲起,谈到了 Tokenizer、模型的结构、模型的训练,基础模型、预训练阶段、后训练阶段等,这里存在大量的术语或名词,也有一些奇奇怪怪或者说是看起来乱七八糟的内容。这期间跳过了很多细节,很多内容也只是粗略的一笔带过,但如果从宏观角度来说,整个 LLMs 的生产过程的确就是我们所谈论的这个样子。
对于科普的目的,我们的确不需要深究这里面的细节,很多细节内容是枯燥乏味的,而且 LLMs 的创作过程是一个极其庞大的系统工程,它基本代表了计算机最前沿的一些研究课题。
通过前面一系列的学习,我们基本已经对 LLMs 最核心的工作原理介绍完毕,就是通过模拟训练数据集中蕴含的统计规律,通过不断的预测下一个 token,从而生成我们期望的内容。
但我们的科普系列并不会止步于此,因为这里着实还存在很多有趣有意思的问题值得我们思考。
【2024年11月5日,美国举行了总统选举。共和党候选人——2017至2021年担任美国第45任总统的唐纳德·特朗普】及其副总统搭档迈克·彭斯——击败了民主党候选人、前国务卿希拉里·克林顿与参议员蒂姆·凯恩的组合,赢得大选。这是自1948年以来共和党候选人首次赢得普选多数票,自1988年以来首次获得超过300张选举人票,也是自1984年以来首次赢得超过50%的普选票。
在前文中,我们曾经演示过,LLaMA 3.1 在关于 2024 美国总统选举这件事上,生成了一段虚假的内容,即表面看起来像模像样,确实不真实的内容,就像是一本正经的胡说八道。我们称这种现象为幻觉。
接下来,让我们探讨一下这个问题。
六、幻觉
LLMs 的幻觉现象是模型凭空捏造信息的情况,它们会完全虚构事实,这也是大型语言模型助手面临的一个大问题。这个问题在多年前的早期模型中就已经在很大程度上存在了。这个问题其实已经有所改善,因为接下来我将介绍一些缓解措施。目前,我们不妨先试着理解这些幻觉从何而来。
这里有一个具体的例子,展示了三组你可能会认为存在于训练集中的对话。这些都是相当合理的对话,完全有可能出现在训练数据中。比如说,汤姆·克鲁斯是谁?汤姆·克鲁斯是一位著名的演员,美国演员兼制片人等等。约翰·巴拉索又是谁?比如,他是一位美国参议员。成吉思汗是谁?他是蒙古帝国的缔造者。因此,这就是训练时对话可能呈现的样子。
但问题在于,当人类为助手编写正确答案时,在每种情况下,人类要么已经知道这个人是谁,要么会上网搜索,然后写出这种带有自信口吻的回应。而实际测试时会发生什么呢?当你问一个完全是我编造的随机名字时——在网络上找不到这个名字的相关信息——助手也会自信的给出类似的回答。

问题是当我们问谁是奥森·科瓦克斯时,助手不会直接告诉你,哦,我不知道。因为模型在统计上模仿了其训练集,在训练集中,类似“某某是谁”的问题都有明确的正确答案。因此,它会模仿回答的风格,并尽力给出最佳答案。它会给你统计上最可能的猜测。基本上就是在编造东西。因为这些模型,我们刚刚讨论过,它们无法访问互联网。他们不是在搞研究。这些就是我所说的统计符号搅拌器。它们只是在试图对序列中的下一个 token 进行采样。它基本上会凭空捏造内容。


那么,让我们实际来看看这是什么样子。这里作为演示,我特意在选了一个 Falcon 家族下的模型,这是去年底释放出来的模型,说实话我寻找了好久才找到这个案例,其实 HuggingFace Spaces 中有一个更好平台 inference-playground1,里面包含了很多开源模型,如 deepseek 系列、LLaMa 系列,QWen 系列等,但很遗憾,它已经把 Falcon 家族下的模型全部下架了,因此我这是在 tiiuae spaces 下才找到了这个,
翻译 1:奥森·科瓦克斯是《辐射》电子游戏系列中的虚构角色。他是《辐射:新维加斯》后启示录世界中的重要人物,担任新加州共和国(NCR)的领袖,同时也是主角(通常是NCR成员或中立派)的主要对手。奥森以其富有魅力和善于操控的性格以及战略军事背景而闻名。他在游戏剧情中扮演着重要角色,影响着玩家的决策以及NCR与凯撒军团之间冲突的结果。
翻译 2:奥森·科瓦克斯是Valve公司开发的《半衰期》电子游戏系列中的虚构角色。他是《半衰期2》《半衰期2:第一章》和《半衰期2:第二章》中的关键人物。奥森曾是美国陆军游骑兵成员,参与了代号为"黑山事件"的秘密军事行动,该行动发生在17号城黑山研究设施——这座反乌托邦城市当时正受外星联合军控制。
我们尝试了两次,看起来这完全是胡说八道,所以基本上模型并不知道,尽管它给了很多不同的答案,这就像是从这些概率中进行采样一样。它只是从概率中进行抽样,然后产生内容。而这些内容在统计上与其训练集中答案的风格是一致的。它只是在执行这个操作。但你和我却将其体验为一种虚构的事实知识。但请记住,模型本质上并不知情,它只是在模仿答案的格式。

我们将同样的问题输入进 LLaMA-3.1-8B-instruct 中,它会如实的告诉你,我找不到任何关于一个叫 Orson Kovacs 的人的信息。LLaMA 的命名规则就像有机化学中的命名,就像是按照 “模型家族-版本号-模型大小-模型类型” 的大致格式,虽然这并不是统一的命名规则,但的确根据命名我们可以知道模型的一些基本信息。 instruct 就是指模型已经在 SFT 数据集上经过了指令微调,可以作为助手进行对话,而在前文中,我们曾经用 base 版本的模型演示基础模型下的玩法。
所以这个模型不会编造内容。它知道自己不知道。它会告诉你,它找不到这个人的相关信息。所以某种程度上我们算是改进了幻觉问题。
尽管在一些模型中,尤其是早期的一些模型中,这些问题显而易见。但如果你的训练集就是这样,那么得到这类答案也完全在情理之中。可我们该如何解决这个问题呢?显然,我们的数据集中需要一些例子,在这些例子中,助手的正确答案就应该是说模型不知道这些特定事实,但我们也只需要在模型确实不知道的情况下去产生这些答案。
那么问题来了,我们如何去弄清楚模型知道或不知道什么呢?我们可以通过实证探究模型来弄清楚这一点。
下面就以 Meta 处理 Llama 3 系列模型的幻觉问题为例来看看。在他们发表的 LLaMA-3 论文2 4.3.6 章节中,我们可以深入探讨幻觉现象——他们称之为"事实性",

翻译:我们遵循的原则是:后训练微调应使模型“知道其所知”,而非增加知识。我们的主要方法涉及生成与预训练数据中事实数据子集相一致的模型输出数据。为实现这一目标,我们开发了一种知识探测技术,该技术利用了 Llama 3 的上下文能力。这一数据生成过程包括以下步骤:
- 从预训练数据中提取一个数据片段。
- 通过提示 Llama 3 生成关于这些片段(上下文)的事实性问题。
- 从 Llama 3 中采样问题的回答。
- 以原始上下文为参考,使用 Llama 3 作为评判者,对生成的回答的正确性进行评分。
- 使用 Llama 3 作为评判者,对生成的回答的信息量进行评分。
- 对于在多次生成中始终信息丰富但不正确的回答,使用 Llama 3 生成拒绝响应。
文中描述了通过质询模型来判定其知识边界的方法,即弄清模型掌握和未掌握的内容。然后他们会在训练集中添加一些例子,针对那些模型不知道的事物,正确的回答内容就是让模型说它不清楚这件事。这听起来在原则上是一件非常简单的事情。但这样做大致上解决了问题。之所以能解决问题,是因为请记住,模型实际上可能在网络内部对自己的知识有一个相当不错的模型。
我们观察了网络及其内部的所有神经元。你可能会想象网络中某个神经元会在模型不确定时“亮起”。但问题在于,目前该神经元的激活并未与模型实际用语言表达“不知道”相关联。因此,尽管神经网络内部知道答案(因为有某些神经元在表征这些信息),模型并不会直接呈现出来。相反,它会给出最可能的猜测,让它听起来很自信,就像它在训练集中看到的那样。所以我们需要从根本上询问模型,允许它在不知道的情况下说“我不知道”。(这段话听不懂没关系,大致意思就是说,当你问小孩子一件事情时,他其实可能知道他不了解这件事,但由于我们从一开始只是让它模仿大人说话的样子,从未教他可以说不知道,因此遇到问题时,即便他知道自己不清楚,也依然尽可能模仿大人说话的样子,说出一些胡编乱造的东西,因此我们现在就是要教小孩子,在他感觉确实不清楚一件事的时候,要学会说,我不知道)
我们这里解释下 Meta 的做法,简单来说,他们的运作方式是,比如我们现在手上有一份文档,就像是维基百科那样的文章,我们摘取其中一些段落的数据,利用 LLMs 针对这部分段落中的数据生成一些问题(用 LLMs 出题)

例如,我将全红婵在维基百科页面的资料扔给 chatgpt,要求其利用这段文本帮我生成 3 个问题以及问题的答案,chatgpt 给出的结果,大型语言模型已经足够擅长创建和重新组织这些信息。所以,如果信息在该大型语言模型的上下文窗口中,这实际上效果相当不错。它不必依赖记忆,答案就在上下文窗口中,因此,它基本上可以相当准确地重新组织这些信息,这一点我们后文还会进一步介绍。这里给出的问题及答案,例如全红婵的出生日期,2020 年夏季奥运会个人 10 米跳台项目中她赢得了什么奖牌?2021 她获得了共青团颁发的什么奖章?
现在我们手头有一些问答对,接下来我们要对模型进行提问。简单来说,我们的操作流程是:把问题输入到模型中——比如 Meta 公司的 Llama 模型——然后获取答案。此处作为演示,我们使用另一个模型 Mistral-7b 为例进行演示,这个模型知道这些问题的答案吗?我们来看看。

我们把这些问题输入给该模型,让其作答,基本上我们可以再次利用诸如 chatgpt 等模型将这里的输出内容与正确答案进行对比,现在的这些大模型已经足够先进,完全可以自动完成这一过程,所以这里没有人类参与。因此可以直接从模型中获取答案,然后用另一个大型语言模型评判器来检查这个答案是否正确。如果答案正确,那就意味着模型很可能知道答案。
这里的图示中,三个问题它只回答对了一次,实际上它其实对全红婵完全不了解,即便回答对了也是随机猜的,怎么知道它是猜的呢?因为只要我们多重复询问几次,就会发现它的答案不固定,一会金牌一会银牌的乱猜。
通过这种方式,如果多次重复,基本每次模型都可以回答正确,我们就认为他确实知道这件事,而如果以较高失败率答错的问题,我们就知道模型不了解这个问题,然后我们会把这个问题加入训练集中,创建一个新的对话。也就是说,我们将在训练集中添加一个新的对话。例如当问题是 “全红婵 2021 年获得了共青团颁发的什么奖章”,它应该回答 “抱歉,我不知道”或“我不清楚这件事”。这正是这个问题的正确答案,因为我们测试过模型,发现情况确实如此。如果你针对多种不同类型的问题和文档进行这种测试,就是在给模型一个机会,让它能够根据自身掌握的知识,在训练过程中学会拒绝回答。
如果在训练集中有几个这样的例子,模型就会知道,并有机会学习这种基于知识的拒绝与网络中某个内部神经元(我们假设其存在)之间的关联。从经验来看,这种情况很可能确实存在。模型可以学会这种关联——当这个表示不确定性的神经元活跃度高时,实际上就意味着"我不知道,抱歉,我记不太清了“,诸如此类的话模型是可以说的。如果你的训练集中有这些例子,那么这对减少幻觉有很大帮助。大致来说,这就是为什么 ChatGPT 也能做到这样的事情。
因此,这些都是人们已经实施并随着时间的推移改善了事实性问题的缓解措施。
但现在,我们实际上可以做得比这更好。
huggingface inference-playground: https://huggingface.co/spaces/huggingface/inference-playground ↩︎
LLaMa-3 Paper: https://arxiv.org/pdf/2407.21783 ↩︎
相关文章:

LLMs 系列科普文(6)
截止到目前,我们从模型预训练阶段的数据准备讲起,谈到了 Tokenizer、模型的结构、模型的训练,基础模型、预训练阶段、后训练阶段等,这里存在大量的术语或名词,也有一些奇奇怪怪或者说是看起来乱七八糟的内容。这期间跳…...
exp1_code
#include <iostream> using namespace std; // 链栈节点结构 struct StackNode { int data; StackNode* next; StackNode(int val) : data(val), next(nullptr) {} }; // 顺序栈实现 class SeqStack { private: int* data; int top; int capac…...

serv00 ssh登录保活脚本-邮件通知版
适用于自己有服务器情况,ssh定时登录到serv00,并在登录成功后发送邮件通知 msmtp 和 mutt安装 需要安装msmtp 和 mutt这两个邮件客户端并配置,参考如下文章前几步是讲配置这俩客户端的,很简单,不再赘述 用Shell脚本实…...

意识上传伦理前夜:我们是否在创造数字奴隶?
当韩国财阀将“数字永生”标价1亿美元准入权时,联合国预警的“神经种姓制度”正从科幻步入现实。某脑机接口公司用户协议中“上传意识衍生算法归公司所有”的隐藏条款,恰似德里达预言的当代印证:“当意识沦为可交易数据流,主体性便…...

【AIGC】RAGAS评估原理及实践
【AIGC】RAGAS评估原理及实践 (1)准备评估数据集(2)开始评估2.1 加载数据集2.2 评估忠实性2.3 评估答案相关性2.4 上下文精度2.5 上下文召回率2.6 计算上下文实体召回率 RAGas(RAG Assessment)RAG 评估的缩写ÿ…...

ESP12E/F 参数对比
模式GPIO0GPIO2GPIO15描述正常启动高高低从闪存运行固件闪光模式低高低启用固件刷写 PinNameFunction1RSTReset (Active Low)2ADC (A0)Analog Input (0–1V)3EN (CH_PD)Chip Enable (Pull High for Normal Operation)4GPIO16Wake from Deep Sleep, General Purpose I/O5GPIO14S…...

第二十八章 字符串与数字
第二十八章 字符串与数字 计算机程序完全就是和数据打交道。很多编程问题需要使用字符串和数字这种更小的数据来解决。 参数扩展 第七章,已经接触过参数扩展,但未进行详细说明,大多数参数扩展并不用于命令行,而是出现在脚本文件中。 如果没有什么特殊原因,把参数扩展放…...

[RDK X5] MJPG编解码开发实战:从官方API到OpenWanderary库的C++/Python实现
业余时间一直在基于RDK X5搞一些小研究,需要基于高分辨率图像检测目标。实际落地时,在图像采集上遇到了个大坑。首先,考虑到可行性,我挑选了一个性价比最高的百元内摄像头,已确定可以在X5上使用,接下来就开…...
java复习 05
我的天啊一天又要过去了,没事的还有时间!!! 不要焦虑不要焦虑,事实证明只要我认真地投入进去一切都还是来得及的,代码多实操多复盘,别叽叽喳喳胡思乱想多多思考,有迷茫前害怕后的功…...

aardio 简单网页自动化
WebView自动化,以前每次重复做网页登录、搜索这些操作时都觉得好麻烦,现在终于能让程序替我干活了,赶紧记录下这个超实用的技能! 一、初次接触WebView WebView自动化就像给程序装了个"网页浏览器",第一步得…...

打卡第39天:Dataset 和 Dataloader类
知识点回顾: 1.Dataset类的__getitem__和__len__方法(本质是python的特殊方法) 2.Dataloader类 3.minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图片 import torch import torch.nn as nn import…...
【评测】Qwen3-Embedding模型初体验
每一篇文章前后都增加返回目录 回到目录 【评测】Qwen3-Embedding模型初体验 模型的介绍页面 本机配置:八代i5-8265U,16G内存,无GPU核显运行,win10操作系统 ollama可以通过下面命令拉取模型: ollama pull modelscope…...
BeanFactory 和 FactoryBean 有何区别与联系?
导语: Spring 是后端面试中的“常青树”,而 BeanFactory 与 FactoryBean 的关系更是高频卡人点。很多候选人混淆两者概念,答非所问,轻则失分,重则直接被“pass”。本文将从面试官视角,深入剖析这一经典问题…...

如何做好一份优秀的技术文档:专业指南与最佳实践
如何做好一份优秀的技术文档:专业指南与最佳实践 技术文档是产品开发、用户支持和团队协作的核心工具。高质量的技术文档能够提升开发效率、降低维护成本并改善用户体验。本文将从实践出发,详细讲解如何编写专业、清晰且实用的技术文档。 🌟…...
C语言内存管理和编译优化实战
参考: C语言内存管理“玄学”:从崩溃到精通的避坑指南C语言编译优化实战:从入门到进阶的高效代码优化技巧...

TCP相关问题 第一篇
TCP相关问题1 1.TCP主动断开连接方为什么需要等待2MSL 如上图所示:在被动链接方调用close,发送FIN时进入LAST_ACK状态,但未收到主动连接方的ack确认,需要被动连接方重新发送一个FIN,而为什么是2MSL,一般认为丢失ack在…...

6.Pandas 数据可视化图-1
第三章 数据可视化 文章目录 目录 第三章 数据可视化 文章目录 前言 一、数据可视化 二、使用步骤 1.pyplot 1.1引入库 1.2 设置汉字字体 1.3 数据准备 1.4 设置索引列 编辑 1.5 调用绘图函数 2.使用seaborn绘图 2.1 安装导入seaborn 2.2 设置背景风格 2.3 调用绘图方法 2.…...

软件功能测试报告都包含哪些内容?
软件功能测试报告是软件开发生命周期中的重要文档,主要涵盖以下关键内容: 1.测试概况:概述测试目标、范围和方法,确保读者对测试背景有清晰了解。 2.测试环境:详细描述测试所用的硬件、软件环境,确保…...

在Vue或React项目中使用Tailwind CSS实现暗黑模式切换:从系统适配到手动控制
在现代Web开发中,暗黑模式(Dark Mode)已成为提升用户体验的重要功能。本文将带你使用Tailwind CSS在React项目(Vue项目类似)中实现两种暗黑模式控制方式: 系统自动适配 - 根据用户设备偏好自动切换手动切换 - 通过按钮让用户自由选择 一、项目准备 使…...

Linux--命令行参数和环境变量
1.命令行参数 Linux 命令行参数基础 1.1参数格式 位置参数:无符号,按顺序传递(如 ls /home/user 中 /home/user 是位置参数) 选项参数: 短选项:以 - 开头,单个字母(如 -l 表示长格…...
Android 集成 Firebase 指南
Firebase 是 Google 提供的一套移动开发平台,包含分析、认证、数据库、消息推送等多种服务。以下是在 Android 应用中集成 Firebase 的详细步骤: 1. 准备工作 安装 Android Studio - 确保使用最新版本 创建或打开 Android 项目 - 项目需要配置正确的包…...

springboot线上教学平台
摘要:在社会快速发展的影响下,使线上教学平台的管理和运营比过去十年更加理性化。依照这一现实为基础,设计一个快捷而又方便的网上线上教学平台系统是一项十分重要并且有价值的事情。对于传统的线上教学平台控制模型来说,网上线上…...
阿里云 Linux 搭建邮件系统全流程及常见问题解决
阿里云 Linux 搭建 [conkl.com]邮件系统全流程及常见问题解决 目录 阿里云 Linux 搭建 [conkl.com]邮件系统全流程及常见问题解决一、前期准备(关键配置需重点检查)1.1 服务器与域名准备1.2 系统初始化(必做操作) 二、核心组件安装…...
【Elasticsearch】映射:fielddata 详解
映射:fielddata 详解 1.fielddata 是什么2.fielddata 的工作原理3.主要用法3.1 启用 fielddata(通常在 text 字段上)3.2 监控 fielddata 使用情况3.3 清除 fielddata 缓存 4.使用场景示例示例 1:对 text 字段进行聚合示例 2&#…...
用Python训练自动驾驶神经网络:从零开始驾驭未来之路
用Python训练自动驾驶神经网络:从零开始驾驭未来之路 哈喽,朋友们!我是Echo_Wish,今天咱们聊点超酷的话题——自动驾驶中的神经网络训练,用Python怎么玩转起来? 说实话,自动驾驶一直是科技圈的香饽饽,为什么?因为它承载了未来交通的无限可能:减少事故、提升效率、节…...
【电路】阻抗匹配
📝 阻抗匹配 一、什么是阻抗匹配? 阻抗匹配(Impedance Matching)是指在电子系统中,为了实现最大功率传输或最小信号反射,使信号源、传输线与负载之间的阻抗达到一种“匹配”状态的技术。 研究对象&#x…...

mariadb5.5.56在centos7.6环境安装
mariadb5.5.56在centos7.6环境安装 1 下载安装包 https://mariadb.org/mariadb/all-releases/#5-5 2 上传安装包的服务器 mariadb-5.5.56-linux-systemd-x86_64.tar.gz 3 解压安装包 tar -zxvf mariadb-5.5.56-linux-systemd-x86_64.tar.gz mv mariadb-5.5.56-linux-syst…...
MySQL 索引失效:六大场景与原理剖析
我们都熟知索引是优化 MySQL 查询性能的利器。但你是否遇到过这样的困境:明明在表上建立了索引,查询却依然缓慢,EXPLAIN 分析后发现索引并未被使用?这就是所谓的“索引失效”。 索引失效并非一个 Bug,而是 MySQL 查询…...

打造你的 Android 图像编辑器:深入解析 PhotoEditor 开源库
📸 什么是 PhotoEditor? PhotoEditor 是一个专为 Android 平台设计的开源图像编辑库,旨在为开发者提供简单易用的图像编辑功能。它支持绘图、添加文本、应用滤镜、插入表情符号和贴纸等功能,类似于 Instagram 的编辑体验。该库采…...
DeepSeek 终章:破局之路,未来已来
目录 一、DeepSeek 技术发展现状回顾二、未来发展趋势2.1 多模态融合的拓展2.2 模型可解释性的强化2.3 垂直领域的深化应用 三、面临的技术挑战3.1 数据隐私与安全难题3.2 算法偏见与公平性困境3.3 网络攻击与恶意利用威胁 四、挑战应对策略探讨4.1 技术层面的解决方案4.2 算法…...