深入解析 AI 幻觉:从原理探究到实战防御

在人工智能(AI)领域,特别是在大语言模型(LLM)的研究与应用中,“幻觉”这个词被赋予了一种全新且极具挑战性的含义。与人类心理学中指代误导性感官知觉的含义不同,AI 幻觉是指 AI 系统生成的具有想象力、新颖性,但往往是不准确或意料之外的输出。这些输出有时看起来非常逼真,但实际上却超出了训练数据的真实范围或违背了事实逻辑。

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250227123841281228/What-are–AI-Hallucinations.webp">What-are–AI-Hallucinations

在这篇文章中,我们将像一位资深工程师一样,深入探讨什么是 AI 幻觉。它背后的技术成因是什么?我们该如何通过代码检测它?又有哪些实战策略可以预防它?让我们开始这段探索之旅吧!

什么是 AI 幻觉?

简单来说,当 AI 模型生成不准确、逻辑不通或有缺陷的输出,却将其以肯定的态度呈现出来时,我们就称之为发生了 AI 幻觉。这种情况通常发生在 LLM 模型 感知到并不存在的模式或联系时,从而导致了“一本正经地胡说八道”。

有时,AI 工具生成的输出并非基于训练数据的真实事实,而是被 Transformers 架构中的概率解码机制误导,导致它“拼凑”出了看似通顺实则错误的答案。幻觉的影响范围可能很广,从轻微的事实错误(例如 LLM 编造了一个不存在的历史日期)到生成截然相反的输出。

例如,当我们在测试中要求聊天机器人提供“Augmentation”(增强)的同义词时,它如果反复试图给出一个医学上不相关的词(如“Amputation”),这就是一种幻觉表现。

!AI Hallucinations Chat GPT-Geeksforgeeks

#### 代码示例 1:模拟简单的概率性幻觉

让我们通过一个简单的 Python 例子来理解模型是如何基于概率“产生”错误的。在这个例子中,我们构建一个极其简化的“语言模型”,它会根据前文预测下一个词。由于缺乏真实世界的知识,它很容易产生幻觉。

import random

# 模拟一个简化的语言模型预测下一个词的概率分布
# 键是输入上下文,值是可能的后续词及其权重(概率)
model_knowledge_base = {
    "The capital of France": {
        "is": 0.95,
        "might be": 0.04,
        "is definitely not": 0.01 # 极低概率,但模型可能在特定温度下选中
    },
    "The capital of Mars": {
        "is": 0.3,
        "is probably": 0.3,
        "was once": 0.2,
        "is Elon Musk‘s favorite place": 0.2 # 模型捏造的事实
    }
}

def predict_next_word(context, temperature=0.0):
    """
    根据上下文预测下一个词。
    如果 temperature 较高,模型更有可能选择低概率词(增加创造性/幻觉风险)。
    """
    if context not in model_knowledge_base:
        return "[Unknown]" # 处理未知输入

    options = model_knowledge_base[context]
    
    # 如果 temperature 为 0,总是选择概率最高的词
    if temperature == 0:
        return max(options.items(), key=lambda x: x[1])[0]
    else:
        # 简单模拟温度采样:给低概率词更多机会
        words, weights = zip(*options.items())
        # 这里用随机模拟 softmax 的效果
        return random.choices(words, weights=weights, k=1)[0]

# 场景 1:事实性查询(正常)
print(f"正常输出: France ... {predict_next_word(‘The capital of France‘)}")

# 场景 2:未知事实查询(易产生幻觉)
# 模型没有关于火星首都的真实数据,但它试图完成任务,从而编造内容
print(f"幻觉输出: Mars ... {predict_next_word(‘The capital of Mars‘, temperature=0.5)}")

代码解析:

在这个例子中,你可以看到当我们询问“火星的首都”时,由于训练数据(model_knowledge_base)中并没有真实答案(火星没有首都),模型为了完成“补全”任务,利用概率分布编造了一个答案。这就是 LLM 产生幻觉的核心机制之一:基于概率的文本生成而非事实检索

AI 幻觉的现实世界案例

理论讲够了,让我们看看现实世界中发生的惊心动魄的案例。这些例子告诉我们,如果不加控制,AI 幻觉会带来什么后果。

#### 1. 关于错误信息和捏造

AI 新闻机器人:

在某些情况下,负责针对突发紧急情况生成快速报告的 AI 驱动新闻机器人可能会包含捏造的细节或未经核实的信息。例如,曾有 AI 在没有任何官方消息源的情况下,编造了某家公司的财报数据,导致股市瞬间波动。

#### 2. 关于医疗领域的误诊

皮肤病变分析:

这是一个高风险领域。一个经过训练用于分析皮肤病变以检测癌症的 AI 模型,可能会因为训练数据中缺乏某种罕见皮肤病的样本,而将良性痣误分类为恶性。这种误判可能导致患者接受不必要的、痛苦的身体活检或过度治疗。

#### 3. 关于算法偏见

招聘工具:

AI 驱动的招聘软件可能会根据历史招聘数据(这些数据可能包含人类社会的偏见)对某些人群产生偏见。例如,模型可能错误地认为“男性”更适合某些技术岗位,从而不公平地过滤掉合格的候选人。这本质上是模型对社会趋势的一种“幻觉式”拟合。

#### 4. 关于意料之外的输出

微软的 Tay 聊天机器人:

这个案例非常经典。Tay 被设计为从 Twitter 上的用户互动中学习,旨在模仿少女的语气。然而,在短短 24 小时内,恶意用户利用了这一点,向 Tay 灌输了大量种族主义和仇恨言论。模型迅速将这些模式“学习”为正常对话,并开始生成带有冒犯性的推文。

深入探究:AI 幻觉的成因

理解了现象,让我们像工程师诊断 Bug 一样,拆解一下导致 AI 模型产生幻觉的根本原因。

#### 1. 数据集质量

这是所谓的“Garbage In, Garbage Out”。AI 模型完全依赖于训练数据。

  • 标记错误的训练数据: 如果数据集本身包含对抗性样本或错误的标签,模型就会学到错误的逻辑。
  • 噪声与偏见: 互联网上的文本充满了噪声。如果模型在未经清洗的 Reddit 或论坛数据上训练,它很容易学会错误的事实或不当用语。

#### 2. 数据过时

世界在不断变化,但模型是静态的。基于过时数据训练的 AI 模型可能会遗漏关键信息。例如,一个在 2021 年之前训练的模型,不知道 2023 年的某个国家元首变更,当被问及时,它可能会基于旧的模式编造一个名字,这就是典型的时效性幻觉。

#### 3. 训练(或测试)数据中缺失上下文

错误或相互矛盾的输入可能会导致幻觉。这是用户可控的因素。

#### 代码示例 2:提示词模糊导致的幻觉

让我们看看如何通过优化输入来减少幻觉。在这个例子中,我们将对比模糊指令和精确指令的效果。

# 模拟一个 LLM 的查询接口(伪代码)
def query_llm(prompt):
    # 这里我们硬编码返回值来模拟 LLM 的行为
    # 实际开发中,你会调用 openai.ChatCompletion.create 或类似接口
    if "Python" in prompt and "install" in prompt:
        return "To install Python, download it from python.org"
    elif "code" in prompt:
        # 假设这是幻觉路径:因为指令不明确,它猜测你要写 C++
        return "Here is the code in C++: std::cout << 'Hello World';"
    else:
        return "I don't know."

# 场景 A:模糊的指令(容易触发幻觉)
vague_prompt = "Write some code for me."
print(f"User: {vague_prompt}")
print(f"AI: {query_llm(vague_prompt)} 
") # 输出 C++ 代码,可能不是用户想要的

# 场景 B:精确的指令(减少幻觉)
specific_prompt = "Write a Hello World script in Python for data analysis."
print(f"User: {specific_prompt}")
print(f"AI: {query_llm(specific_prompt)}")

代码解析:

我们可以看到,在场景 A 中,由于缺乏上下文(具体的语言、用途),模型被迫“猜测”意图,从而产生了不符合预期的输出(幻觉)。而在场景 B 中,我们提供了强约束,模型就能更准确地回答。

人工智能 (AI) 中的幻觉会如何影响我们?

AI 幻觉不仅仅是一个技术趣味话题,它给各个领域带来了巨大的风险。让我们深入分析这些潜在问题,并探讨解决方案。

#### 1. 医疗误诊

  • 漏诊或误诊: 用于分析 X 光片或血液检查的 AI 可能会因为训练数据的局限性而忽略微弱的病灶,或者将阴影误判为肿瘤。
  • 无效的治疗方案: 如果 AI 幻觉生成了不存在的药物组合或错误的剂量建议,后果将是致命的。

解决方案(思维链 CoT): 为了解决这个问题,我们可以在医疗提示词中强制要求模型展示推理过程,而不是直接给出结论。

#### 代码示例 3:使用思维链降低幻觉风险

思维链(Chain-of-Thought)提示是一种有效减少幻觉的技术,迫使模型一步步推理。

“INLINECODE30e9121e`INLINECODEc8a8b29dlogprobs` 参数,观察不同问题下的模型置信度变化。

  • 使用 LangChain 库搭建一个基于本地 txt 文档的简易 RAG 问答系统,亲身体验“外挂大脑”如何减少幻觉。

希望这篇文章能帮助你更专业地理解和应对 AI 幻觉! Happy Coding!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/20833.html
点赞
0.00 平均评分 (0% 分数) - 0