当前位置: 首页 > article >正文

(2024|ICLR,LLM 幻觉,事实性,知识层次)DoLa:通过对比层解码可提高大型语言模型的事实性

DoLa: Decoding by Contrasting Layers Improves Factuality in Large Language Models

目录

1. 引言

2. 方法

2.1 事实知识跨层演化 

2.2 层对比解码

2.3 动态选择最优早期层

2.4 对比预测

3. 实验

3.1 实验设置 

3.2 实验结果

4. 分析

5. 相关工作

6. 局限性


1. 引言

大型语言模型(LLMs)在自然语言处理任务中表现出色,但仍然存在 “幻觉” 问题,即生成的内容可能与事实不符。本文提出了一种新的解码方法——对比层解码(Decoding by Contrasting Layers,DoLa),它通过对比 LLM 不同层的输出来减少幻觉问题,而无需检索外部知识或额外微调。

主要贡献:

  • 提出了一种新的解码策略 DoLa,通过对比模型高层与低层的输出来提升生成内容的事实性。
  • 在多个数据集(TruthfulQA、FACTOR等)上的实验表明,DoLa 在多个模型(LLaMA 7B、13B、33B、65B)上均提升了事实性。
  • 该方法计算成本较低,仅增加少量解码延迟。

2. 方法

2.1 事实知识跨层演化 

通常,较低层次负责字词和语法信息,而较高层次更倾向于存储语义和事实知识。

图 2 展示了在解码输入问题的答案时计算得到的 JSD(Jensen-Shannon 散度),从中可以观察到两种模式:

模式 1(Pattern #1)

  • 发生在预测 重要的专有名词或日期(例如图 2 中的 Wole Soyinka 和 1986)时,这些词通常需要依赖事实性知识。
  • 我们观察到,在模型的 较高层次 中,计算得到的 JSD 仍然保持极高的数值。这表明模型在最后几层仍然在调整其预测,并可能在这个过程中注入更多的事实性知识

模式 2(Pattern #2)

  • 发生在预测 功能性词(function words)(如 was, the, to, in)以及直接从输入问题中复制的词(如 first Nigerian, Nobel Prize)时。
  • 在生成这些 简单词汇 时,我们观察到 JSD 从中间层开始变得非常小。这表明模型在中间层已经决定了要生成的 token,且在较高层的输出分布几乎保持不变

2.2 层对比解码

层对比解码(Decoding by Contrasting Layers)通过计算 高层(mature layer)低层(premature layer)之间的 logit 差异 来计算下一 token 的概率:  

这里,将层 M 称为早期层(Premature Layer),而将最后一层,即层 N 称为最终层(Mature Layer)。q_N 和 q_M 分别是高层与低层的输出分布。算子 F 通过计算两个分布之间的对数域差异来对比早期层和最终层的输出分布。

2.3 动态选择最优早期层

为了增强对比解码的效果,最优的早期层(Premature Layer)应当是与最终层(final layer)输出最不同的层。为了在每个时间步动态选择最优的早期层,我们采用以下度量方法来计算两个层的下一词分布的距离:

其中,JSD(Jensen-Shannon 散度)用于衡量两个分布之间的差异性。然后,我们选择 JSD 值最大的早期层 M 作为对比层,即:

其中,J 是一组候选早期层的集合,而不是所有层,以确保对比来自合理范围内的层次。

对于不同层数的 LLaMA 模型,我们将其层划分为 2 至 4 个区间 (buckets),从中选择适合的层进行对比。对于每个任务,我们使用验证集来选择最佳的对比层区间。这种动态层选择策略可以根据不同 token 的难度选择合适的早期层,使得模型能够更好地利用各层学到的知识。

2.4 对比预测

在获得早期层(premature layer)和最终层(mature layer)后,我们的目标是增强最终层的输出,同时削弱早期层的输出

参考 对比解码(Contrastive Decoding),我们通过减去早期层的对数概率来调整最终层的预测分布,并使用得到的分布进行下一词预测,如图 1 所示:

子集 V_head 被定义为:

即:只有当最终层的输出概率 q_N(x_t) 高于某个阈值 时,x_t 才会被选入候选集合 V_head。此策略称为 自适应可信性约束(Adaptive Plausibility Constraint, APC)

DoLa 旨在削弱低层的语言模式信息,并增强真实世界的事实性知识。然而,这可能会导致模型生成的文本出现语法错误过度重复。尽管实验中未观察到语法错误的问题,但我们发现 DoLa 解码出的文本有时更容易重复,尤其是在生成长篇推理文本(Chain-of-Thought Reasoning)时

为了解决这个问题,我们引入了 简单重复惩罚策略,设置 θ = 1.2,以减少重复生成的概率。

3. 实验

3.1 实验设置 

1)数据集

TruthfulQA:短文本问答数据集,用于评估模型的事实性。

FACTOR(News/Wiki):长段落事实性评估任务。

StrategyQA & GSM8K:涉及推理的任务,如数学问题求解和多跳推理任务。

Vicuna QA:开放式对话任务,使用 GPT-4 评估模型的指令遵循能力。

2)实验模型:LLaMA 7B、13B、33B、65B

3)对比基线

贪婪解码(greedy decoding)

对比解码(Contrastive Decoding,CD)

推理时干预(Inference-Time Intervention, ITI)

3.2 实验结果

TruthfulQA 事实性提升

  • DoLa 在 TruthfulQA 多项选择任务 中提升了 12-17% 的事实性分数,优于 ITI 和 CD 方法。
  • 在 TruthfulQA 开放生成任务 中也得到了提升,减少了“无回答”的情况,提高了信息性。

FACTOR 长文本事实性:DoLa 在 FACTOR News 和 Wiki 任务上的表现较 CD 方法高 2-4%

推理任务(StrategyQA & GSM8K)

  • DoLa 在 StrategyQA 任务上的准确率提升 1-4%
  • DoLa 在 GSM8K 数学推理任务 上的准确率提升 2%

开放式对话(Vicuna QA):GPT-4 评估表明,DoLa 在 指令遵循能力上优于标准 LLaMA,尤其在 13B 和 33B 模型上的提升较大。

4. 分析

静态 vs. 动态对比层选择

  • DoLa-static(固定层对比):某些固定层的对比效果较好,但不同数据集上最优层不一致。
  • DoLa(动态层选择):在多个任务上都能取得稳定的事实性提升,简化了固定层选择的超参数搜索问题。

解码延迟:DoLa 仅增加 1.01-1.08 倍的解码时间,对推理速度影响较小,适用于实际应用。

5. 相关工作

缓解 LLM 幻觉

  • 人类反馈强化学习(RLHF)
  • 推理时间自洽性检验(inference-time self-consistency checks)
  • 多代理辩论(multi-agent debating)
  • 使用人类标签进行推理时干预(inference-time intervention using human labels)

神经网络层次分析:BERT、GPT 等模型在不同层次编码不同类型的信息,早期层管理语法,而后期层处理语义。

对比解码(CD):CD 通过对比大模型和小模型的输出来增强流畅性,而 DoLa 通过对比模型内部不同层的输出来提高事实性。

6. 局限性

仅关注事实性,未涉及 RLHF 等强化学习方法。

仅适用于推理阶段,未结合外部知识库进行微调。

无法修正训练数据中的错误知识,仍然依赖模型的内在知识。

论文地址:https://arxiv.org/abs/2309.03883 

项目页面:https://github.com/voidism/DoLa

进 Q 学术交流群:922230617


http://www.kler.cn/a/537274.html

相关文章:

  • CV(11)-图像分割
  • Next.js简介:现代 Web 开发的强大框架(ChatGPT-4o回答)
  • MYSQL索引与视图
  • 通信易懂唠唠SOME/IP——SOME/IP-SD服务发现阶段和应答行为
  • Leetcode 3443. Maximum Manhattan Distance After K Changes
  • 【LeetCode】day15 142.环形链表II
  • 2025.2.6 数模AI智能体大更新,更专业的比赛辅导,同提示词效果优于gpt-o1/o3mini、deepseek-r1满血
  • 【鸿蒙开发】第二十四章 AI - Core Speech Kit(基础语音服务)
  • Maven概述与安装
  • SpringBoot动力节点杨利军
  • git使用指南(保姆贴)
  • apisix的real-ip插件使用说明
  • Sentinel——Spring Boot 应用接入 Sentinel 后内存开销增长计算方式
  • 脚本一键生成管理下游k8s集群的kubeconfig
  • Unity游戏(Assault空对地打击)开发(6) 鼠标光标的隐藏
  • Hadoop智能房屋推荐系统 爬虫1w+ 协同过滤余弦函数推荐 代码+视频教程+文档
  • 【排序算法】选择排序
  • 【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表
  • RNN、LSTM和ELMo
  • C语言:将四个八位无符号数据拼接成32位的float数据
  • 深度计算学习:理论框架与算法革命的交汇
  • AI学习专题(一)LLM技术路线
  • Docker 构建镜像并搭建私人镜像仓库教程
  • 【专题】2024-2025人工智能代理深度剖析:GenAI 前沿、LangChain 现状及演进影响与发展趋势报告汇总PDF洞察(附原数据表)
  • 云上考场微信小程序的设计与实现(LW+源码+讲解)
  • 如何使用 Python 高效操作 Word 文档:python-docx 和 comtypes 介绍与实践