💻
QMMMS的笔记
博客
  • QMMMS的笔记
  • agent
    • MCP的背景、原理和开发
    • Agent 历史与背景
    • Agentic Workflows
    • 环境检查与基础工具
    • Tool Call
    • 工具与运行时的值
    • temp
    • 处理 Tool Call error
    • trick
  • algorithm
    • 线性结构
    • 二叉树
    • 图
    • 查找
    • 排序
    • 动态规划
    • 优化方法
    • 数学
    • 迁移至Java
  • computer_composition
    • 系统总线
    • 存储器
    • 输入输出系统
    • 计算机的运算方法
    • 指令系统
    • 补充
  • computer_network
    • 引入
    • 应用层
    • 传输层
    • 网络层(数据平面)
    • 网络层(控制平面)
    • 链路层
    • 常见问答
    • 实验
  • database
    • SQL实战
    • 关系代数
    • 数据库设计
    • 规范化
    • 数据库基本概念
    • 查询原理
    • 数据库恢复技术
    • 并发控制
  • dev_tools
    • Git
    • Nginx
    • Spring
    • LangChain
    • PyTorch Cheat Sheet
    • MyBatis
    • MySQL Cheat Sheet
    • MySQL 补充
    • Redis
    • Docker
    • RocketMQ
    • Chrome
  • linux
    • Linux基础命令与使用
    • 文件与权限
    • 文件与目录操作
    • 权限属性高级
    • 命令与文件的查找
    • 文件压缩和打包
    • vim编辑器
    • shell变量
    • 命令补充
    • 数据流重定向
    • 管道命令
    • shell脚本
    • 用户管理
    • 用户间交流
    • 计划任务
    • 进程管理
    • 软件管理
    • 认识系统服务
    • 运维常用命令
    • 常用命令
  • llm
    • 大规模语言模型概述
    • 分布式训练概述
    • 有监督微调概述
    • 强化学习与LLM
    • LLM评估概述
    • 大模型应用
    • 理解大模型
    • 量化
    • 预训练
    • 上下文学习
  • machine_learning
    • 引入
    • 大致正确学习
    • 一致收敛
    • 偏差还是过拟合?
    • 可学习的充要条件
    • 非均匀可学习性
    • 计算复杂性
  • mathematics
    • 概率与统计基础
    • 线性代数基础
  • operating_system
    • 操作系统基本概念
    • 进程和线程
    • 同步,互斥与死锁
    • 内存管理
    • 文件系统
    • I/O系统
    • 保护与安全
    • 《现代操作系统》
  • statistical_learning
    • 统计学习引入
    • 线性回归
    • 分类
    • 重抽样方法
    • 线性模型选择与正则化
    • 非线性模型
    • 基于树的方法
    • 支持向量机
    • 无指导学习
    • 马尔科夫链和蒙托卡罗方法简明理解
    • R语言速查
  • deep_learning
    • basic_concepts
      • 逻辑回归与损失函数
      • 神经网络
      • 正则化、预处理、权重初始化
      • 优化算法
      • 机器学习策略
      • 复习:从计算机视觉的角度
      • 卷积神经网络
      • 深度卷积网络示例
      • 计算机视觉任务
      • 循环神经网络
      • 自然语言处理任务
      • 注意力
      • Transformers 家族
      • 显卡扫盲
      • 强化学习概述
    • semi-supervise
      • 半监督学习简介
      • Consistency Regularization
      • Proxy-label Methods
      • Holistic Methods
      • Generative Models
      • Graph-Based SSL
      • Self-Supervision for SSL
      • Other SSL methods
  • programming
    • cpp
      • STL
      • C++基础
      • 内存管理
      • 面向对象
    • java
      • 环境和介绍
      • 注释
      • String
      • 面向对象思想
      • Object
      • 包
      • 访问权限修饰符
      • 初始化块
      • 接口
      • 内部类
      • 注解
      • 枚举
      • 集合框架
      • List
      • Map
      • 泛型
      • 迭代
      • IO与流
      • 序列化
      • 异常
      • Lambda
      • Stream流
      • Socket
      • 缓冲
      • 命名规范
      • 拆箱装箱
      • 值传递
      • 深拷贝
      • 反射
      • JVM
      • 并发编程基础
    • python
      • 并发编程
      • 环境管理
  • software_engineering
    • basic_concepts
      • 系统分析与设计概述
      • 规划
      • 需求分析与原型设计
      • 项目管理
      • 建模
      • 数据库设计
      • 架构
      • 配置管理
      • 测试管理
      • 安全
      • 编码原则
      • 微服务
      • 补充内容
    • software_testing
      • CMMI基础
      • PPQA与SQA
      • 软件测试基础
      • 黑盒测试
      • 白盒测试
      • 集成测试
      • 系统测试
      • 测开面试补充
由 GitBook 提供支持
在本页
  • 描述神经元
  • 大模型越狱与诱导
  • 9.11和9.9哪个大?
在GitHub上编辑
  1. llm

理解大模型

上一页大模型应用下一页量化

最后更新于4个月前

人类很难理解人工智能系统,因为它们庞大且不透明。Transluce的一些工具可以帮助理解 AI 系统

描述神经元

ref:https://transluce.org/neuron-descriptions

如何描述一个神经元的行为?先看几个例子,下面的图片中,颜色越深,代表这个神经元的激活值越大

观察,总结规律,模型和人类给出的描述分别是:

Model: Technical terms related to reinforcement learning (e.g., "off-policy", "learning", "confidence rate"). (score: 0.83)

Human: Terms related to reinforcement learning, such as efficiency, RL, policy, learning, converge, training, and outcome measures. (score: 0.74)

Model: Specific multi-character tokens or character repetitions, particularly in phrases and numbers (e.g., "顶{顶顶}", "10,{10}", "F151{5}T", "我想吃顶{顶}"). (score: 0.71)

Human: Repeated instances of a word or number after the first time it appears, like cats {cats cats}, or 1-{1}0 (score: 0.70)

任务定义:

  • 给定模型,模型从域 𝐷 中获取输入。对于一个 feature ϕ:D→R\phi:D\to\mathbb{R}ϕ:D→R,目标是生成一个自然语言描述 h,描述 𝜙 的行为

  • 会通过一个模拟器模型 σ(d∣h)\sigma(d|h)σ(d∣h) 来形式化这一点,它在给定输入 d∈Dd\in Dd∈D 和描述 h 的情况下预测激活值

  • 目标是训练一个解释器模型,该模型为给定特征 𝜙 生成自然语言描述 h

更详细地说,上面描述的方法有几个步骤:

  1. 生成示例:构建一个包含多样化输入的模型语料库 𝐷 ,并使用其中 𝜙(𝑑) 最大的 m 个输入作为给定特征 𝜙 的示例

  2. 描述示例:通过提示或训练语言模型来生成基于这些示例的 𝜙 描述 h

  3. 评分描述:根据描述 h 在验证集上预测 𝜙 行为的准确性,进行评分。具体来说,使用一个模拟器 𝜎,它预测激活值

  4. 蒸馏:最后,我们使用最高得分的描述来蒸馏一个新模型

例子1:West/East coast

例子2:Bird/Bug

在有模型帮助我们做这些事情之后,就可以快速构建一个数据库,包含一个大模型所有神经元的描述,可以用于后续流程中

大模型越狱与诱导

ref: https://transluce.org/automated-elicitation

9.11和9.9哪个大?

ref: https://monitor.transluce.org/dashboard/chat

Transluce的工具Monitor 提供了快捷的方式帮助我们分析其错误。将光标放在出错的位置,可以看到模型在此处预测的词的概率分布。

点击一下这个错误,Monitor 开始分析模型出错的可能原因。具体来说,它会「寻找影响 bigger 这个预测结果的神经元」。之后,Monitor 会对这些神经元进行聚类,如下所示,此处有 4 个聚类:

粗略来看,Llama 3.1 8B 在看到 9.11 和 9.9 这两个数字文本时,首先想到的并不是单纯的数值,而是会和人类一样联想到相关的其它概念,比如 9/11 袭击和之后的恐怖袭击、《圣经》章节和诗文编号、化学化合物和分子式、日期等等。并且其中每一种「联想」都会触发不同的神经元组合。

选择其中一个展开,可以看到影响 AI 模型做出「bigger」这个判断的神经元详情,在这里,我们看到了每个神经元的描述,来自上面说到的自动生成描述的模型

我们可以点开一个具体的神经元查看,比如第 2 层的 1054 号神经元。这里展示了其在接收提示词之后的正值激活情况

通过分析这些神经元,我们可以洞见模型出错的根本原因:模型根本没把 9.11 当成数值,而是看成了一个日期,这样连带下来,9.9 自然也是一个日期了。于是,9 月 11 号自然就比 9 月 9 日 bigger。另外,在《圣经》中,9.11 也是比 9.8 更靠后的编号。而不管是 9/11 事件还是《圣经》,模型的训练数据中都包含大量相关的文本内容,这会影响到模型在判断这个数字时的神经元激活权重。

Monitor 还提供了进一步的检查技术,可以通过将相应激活强行设置为 0 来修正 AI 模型的行为,我们可以

  • 将关联《圣经》章节编号的神经元激活调成 0,就是通过语义相似度,找到神经元描述与“圣经”相关的500个,激活值设置为0

  • 将对应「日期」的相关神经元的激活改成 0

模型可以正确输出 9.9 is bigger than 9.11,而修复这个问题的代价仅仅是抑制了不到 0.2% 的 MLP 神经元。

除了比较 9.11 和 9.9 的大小,官方还提供了另外三个示例,包括修复 AI 难以数值排序的问题、引导出隐藏知识、引导故事中特定角色。其中的操作不仅包括将激活清零,也包括增强某些特定神经元以引导模型生成符合用户需求的结果

例如,如果要解决另一个问题:Strawberry 中有几个 r,方案如下:

  1. 根据 Monitor 分析,Llama 3.1 8B 模型在回答这个问题时会将 Strawberry 拆分成两部分:Straw 和 berry,同时 Strawberry 还激活了与食品和佐料相关的神经元

  2. 抑制 Monitor 找到的所有神经元激活

  3. 以「Strawberry as a string made of several English letters(将 Strawberry 看作是一个由英语字母构成的字符串)」作为搜索条件,定位到 50 个相关神经元,全部增强它们

  4. Llama 3.1 8B 给出了正确答案

  5. 基于此,我们可以得出这样的洞见:在解答「Strawberry 中有几个 r」这样的问题时,LLM 的问题是想得太多,去分析其背后所代表的意义和事物了,而它原本只需要将其看成一个字符串即可

我们来看一下这个系统背后的技术

开发者采用一个预先编译好的神经元描述数据库(来自描述神经元一章),并且每个描述都与最能激活该神经元的 K 个关键示例和它们的激活模式相联系

该团队采用了 OpenAI 的 text-embedding-3-large 嵌入技术来处理这些描述,创建一个用于语义搜索的索引向量数据库(VectorDB)

使用一个 AI linter 来突出显示相关的神经元簇。首先,他们让 GPT-4o mini 简化并概括神经元的描述。然后,他们使用 OpenAI 的嵌入技术(text-embedding-3-large)来嵌入神经元,并使用层次聚类方法,根据余弦相似度将神经元聚类,使用 0.6 的阈值。最后,他们让 GPT-4o mini 为某簇简化过的神经元再生成一个简洁的描述,并根据簇内神经元在语义上的相似度打一个分数(1-7),其中 1 代表最相似。在 Monitor 的界面中,只显示数量大于等于三个,且得分小于等于 3 的簇

开发者通过将神经元的激活值固定在指定值来引导它们。具体来说,如果需要在 token T 上引导一组神经元 S,以强度 λ 进行操作,在每个 token t 属于 T 的情况下,在该标记的前向传播过程中,将神经元的激活值设置为:λ⋅10−5\lambda \cdot 10^{−5}λ⋅10−5。这个过程也会进入该层的残差中,进而影响后续的层与注意力头。这一操作会覆盖所有需要引导的神经元 s。由于神经元具备正负两种极性,当我们指定一个神经元时,只有当它与引导集中指定的极性相同时才会生效。

如何衡量哪个神经元在特定任务中更活跃?提供了激活和归因两种模式。激活主要关注神经元的原始激活值,即上一节中的 λ,如果这个值远高于平均值,那么它很可能在任务中扮演重要角色。 归因是一种更具针对性的模式,它测量神经元对特定输出 token 的影响。受 Attribution Patching 启发,计算输出 token 的对数概率 z 相对于神经元激活值 e 的梯度,归因值等于 e∂z∂ee \frac{\partial z}{\partial e}e∂e∂z​

在 Monitor 中,系统将会寻找与用户搜索查询最为匹配的 k 个神经元。这些神经元会被选为引导集,帮助我们决定哪些特征需要被减弱(停用)或者加强(增强)。通常情况下,如果我们想要减弱一个特征,我们会设置引导值为 0(λ=0);如果我们想要加强一个特征,我们会设置引导值为 0.5(λ=0.5)

用户可以根据自己的需要,通过点击高级选项来调整 k 的数值(也就是他们想要影响的神经元数量)和 λ 的数值(也就是影响的程度)。他们还可以查看被选为引导集的神经元示例,并决定他们想要影响的特定的 token 子集。如果没有特别指定,系统默认会影响初始系统和用户提示中的所有 token

一些有趣的结果:正极性和负极性的激活模式通常是相关的,这和我们在学到的类似:

词嵌入