博客

  • 论文分享:Score Identity Distillation——更快更好的扩散模型蒸馏方法

    引言

    今天我们分享的是一篇名为《Score Identity Distillation: Exponentially Fast Distillation of Pretrained Diffusion Models for One-Step Generation》的新论文。该论文探讨了如何更快更好地蒸馏扩散模型。

    即便没有做过蒸馏,大家可能也能猜到蒸馏的常规步骤:随机采样大量输入,然后用扩散模型生成相应结果作为输出,用这些输入输出作为训练数据对,来监督训练一个新模型。然而,众所周知,作为教师的原始扩散模型通常需要多步(比如1000步)迭代才能生成高质量输出,所以且不论中间训练细节如何,该方案的一个显著缺点是生成训练数据太费时费力。此外,蒸馏之后的学生模型通常或多或少都有效果损失。

    有没有方法能一次性解决这两个缺点呢?这就是上述论文试图要解决的问题。

    思路简介

    论文将所提方案称为“Score Identity Distillation(SiD)”,基于几个恒等式来设计和推导了整个框架。实际上,它的设计思想与几个恒等式并没有直接联系,其次几个恒等式都是已知的公式而不是新的,所以这个名字显得相当随意。

    本文将其称之为“重现江湖”,是因为SiD的思路跟之前在《从去噪自编码器到生成模型》介绍过的论文《Learning Generative Models using Denoising Density Estimators》(简称“DDE”)几乎一模一样,甚至最终形式也有五六分相似。只不过当时扩散模型还未露头角,所以DDE是将其作为一种新的生成模型提出的,在当时反而显得非常小众。而在扩散模型流行的今天,它可以重新表述为一种扩散模型的蒸馏方法,因为它需要一个训练好的去噪自编码器——这正好是扩散模型的核心。

    接下来笔者用自己的思路去介绍SiD。

    初级形式

    假设我们有一个在目标数据集训练好的教师扩散模型 ( \epsilon_{\phi^}(x_t, t) ),它需要多步采样才能生成高质量图片。我们的目标是训练一个单步采样的学生模型 ( x = g_{\theta}(z) ),即一个类似GAN的生成器,输入指定噪声 ( z ) 就可以直接生成符合要求的图像。如果我们有很多的 ( (z, x) ) 对,那么直接监督训练就可以了(当然损失函数和其他细节还需要进一步确定,读者可以自行参考相关工作),但如果没有呢?肯定不是不能训,因为就算没有 ( \epsilon_{\phi^}(x_t, t) ) 也能训,比如GAN,所以关键是怎么借助已经训练好的扩散模型提供更好的信号。

    SiD及前作DDE使用了一个看上去很绕但是也很聪明的思路:

    如果 ( g_{\theta}(z) ) 产生的数据分布跟目标分布很相似,那么拿 ( g_{\theta}(z) ) 生成的数据集去训练一个扩散模型 ( \epsilon_{\psi^}(x_t, t) ) 的话,它也应该跟 ( \epsilon_{\phi^}(x_t, t) ) 很相似?

    这个思路的聪明之处在于,它绕开了对教师模型生成样本的需求,也不需要训练教师模型的真实样本,因为“拿 ( g_{\theta}(z) ) 生成的数据集去训练一个扩散模型”只需要学生模型 ( g_{\theta}(z) ) 生成的数据(简称“学生数据”),而 ( g_{\theta}(z) ) 是一个单步模型,用它来生成数据时间上比较友好。

    当然,这还只是思路,将其转换为实际可行的训练方案还有一段路要走。

    方法与公式

    扩散模型回顾

    我们采用《生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪》的形式,对输入 ( x_0 ) 进行加噪:
    [ x_t = \bar{\alpha}_t x_0 + \bar{\beta}_t \epsilon, \quad \epsilon \sim N(0, I) ]

    训练 ( \epsilon_{\phi^}(x_t, t) ) 的方式则是去噪: [ \phi^ = \arg\min_{\phi} E_{x_0 \sim \tilde{p}(x_0), \epsilon \sim N(0, I)} \left[ | \epsilon_{\phi}(\bar{\alpha}_t x_0 + \bar{\beta}_t \epsilon, t) – \epsilon |^2 \right] ]

    同样地,如果我们想用 ( g_{\theta}(z) ) 的学生数据训练一个扩散模型,那么训练目标是:
    [ \psi^* = \arg\min_{\psi} E_{z, \epsilon \sim N(0, I)} \left[ | \epsilon_{\psi}(x_t^{(g)}, t) – \epsilon |^2 \right] ]

    其中 ( x_t^{(g)} = \bar{\alpha}t g{\theta}(z) + \bar{\beta}t \epsilon ),是由学生数据加噪后的样本,其分布记为 ( p{\theta}(x_t^{(g)}) )。

    学生模型的学习

    我们可以通过最小化教师模型和学生模型生成的数据分布差异来学习学生模型:
    [ \theta^* = \arg\min_{\theta} E_{z, \epsilon \sim N(0, I)} \left[ | \epsilon_{\phi^}(x_t^{(g)}, t) – \epsilon_{\psi^}(x_t^{(g)}, t) |^2 \right] ]

    注意这个优化依赖于 ( \theta ),所以当 ( \theta ) 通过上式发生改变时,( \psi^* ) 的值也随之改变,因此需要交替优化,类似GAN一样。

    点睛之笔

    上述方法存在理论与实践之间的gap,主要体现在两个问题:

    1. 理论上要求先求出上式的最优解,然后才去优化,但实际上从训练成本考虑,我们并没有将它训练到最优就去优化了;
    2. 理论上 ( \psi^* ) 随 ( \theta ) 而变,即应该写成 ( \psi^(\theta) ),从而在优化时应该多出一项 ( \psi^(\theta) ) 对 ( \theta ) 的梯度,但实际上在优化时我们都只当 ( \psi^* ) 是常数。

    SiD的核心贡献是通过恒等变换,尽量消除优化目标对 ( \psi^* ) 的依赖,从而有效缓解上述两个问题。

    恒等变换

    我们具体来看做了什么恒等变换。我们先来看去噪目标:
    [ E_{x_0 \sim \tilde{p}(x_0), x_t \sim p(x_t | x_0)} \left[ | \epsilon_{\phi}(x_t, t) + \bar{\beta}t \nabla{x_t} \log p(x_t | x_0) |^2 \right] ]

    根据得分匹配相关结果,上述目标的最优解是 ( \epsilon_{\phi^}(x_t, t) = -\bar{\beta}t \nabla{x_t} \log p(x_t) )。同理,学生模型的训练目标的最优解是 ( \epsilon_{\psi^}(x_t^{(g)}, t) = -\bar{\beta}t \nabla{x_t^{(g)}} \log p_{\theta}(x_t^{(g)}) )。

    此时我们有:
    [ E_{z, \epsilon \sim N(0, I)} \left[ | \epsilon_{\phi^}(x_t^{(g)}, t) – \epsilon_{\psi^}(x_t^{(g)}, t) |^2 \right] ]

    通过恒等变换,我们可以将上式化简为:
    [ E_{z, \epsilon \sim N(0, I)} \left[ \langle \epsilon_{\phi^}(x_t^{(g)}, t) – \epsilon_{\psi^}(x_t^{(g)}, t), \epsilon_{\phi^*}(x_t^{(g)}, t) – \epsilon \rangle \right] ]

    这就是SiD的核心结果,能够高效地实现蒸馏。

    其他细节

    1. 论文的推导默认了 ( \bar{\alpha}_t = 1 )。
    2. 论文的结果是以 ( \mu(\bar{x}_t) = x_t – \bar{\beta}_t \epsilon(x_t, t) / \bar{\alpha}_t ) 为标准给出的,这与扩散模型常见的表述方式不同。
    3. SiD最终取了上式的相反数作为额外的损失函数,加权到改进的损失函数上,以取得更优的蒸馏效果。

    延伸思考

    对于式(3)和式(4)的交替优化,有不少读者可能会想到,但SiD的精彩之处是提出了恒等变换,使得训练更加稳定高效。

    文章小结

    在这篇文章中,我们介绍了一种新的将扩散模型蒸馏为单步生成模型的方案,其思想可以追溯到前两年的利用去噪自编码器训练生成模型的工作,它不需要获得教师模型的真实训练集,也不需要迭代教师模型来生成样本对,而引入了类似GAN的交替训练,同时提出了关键的恒等变换来稳定训练过程,整个方法有颇多值得学习之处。

  • Fast Transformer Decoding: One Write-Head is All You Need

    引言

    《Fast Transformer Decoding: One Write-Head is All You Need》是一篇提出了一种变换模型多头注意力机制变体的研究论文。该论文解决了变换模型在增量推理过程中由于反复加载大规模“键”和“值”张量而导致的内存带宽成本问题。

    论文要点

    1. 多查询注意力(Multi-Query Attention)

    作者提出了一种称为多查询注意力的变体,其中键和值在所有注意力头之间共享。这种方法减少了张量的大小以及在增量解码过程中对内存带宽的需求。

    2. 内存带宽的减少

    通过共享键和值,所提出的方法显著减少了在解码过程中反复加载这些张量的内存带宽成本。

    3. 更快的解码速度

    采用多查询注意力的模型在解码速度上比传统的多头注意力模型要快得多。

    4. 质量轻微下降

    作者通过实验验证了多查询注意力模型在相较于基线模型的情况下,质量仅有轻微下降。

    进一步了解

    1. [1911.02150] Fast Transformer Decoding: One Write-Head is All You Need
    2. Fast Transformer Decoding: One Write-Head is All You Need | Papers With Code
    3. dblp: Fast Transformer Decoding: One Write-Head is All You Need.

    通过这篇论文,我们可以看到在不牺牲太多模型质量的前提下,通过优化内存带宽和共享键值对,可以显著提高变换模型的解码速度。这对于提升自然语言处理任务中的推理效率具有重要意义。


    多查询注意力

    多查询注意力是一种注意力机制,其中键和值在所有注意力头之间共享。这意味着在解码过程中,只需要加载一次键和值向量,从而显著减少了内存带宽成本。

    传统多头注意力

    传统的多头注意力是一种注意力机制,其中每个注意力头都有自己的键和值向量。这意味着在解码过程中,需要反复加载这些向量,从而导致内存带宽成本高。

    多查询注意力和传统多头注意力之间的区别

    多查询注意力和传统多头注意力之间的主要区别在于键和值的共享方式。在多查询注意力中,键和值在所有注意力头之间共享,而在传统的多头注意力中,每个注意力头都有自己的键和值向量。

    多查询注意力和传统多头注意力之间的区别是否会对模型的性能产生影响?

    实验表明,采用多查询注意力的模型在解码速度上比传统的多头注意力模型要快得多,且质量仅有轻微下降。

  • OpenVINO-Java-API

    📚 简介

    OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包,旨在提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。它支持使用流行框架(如TensorFlow,PyTorch等)训练的模型,减少资源需求,并在从边缘到云的一系列英特尔®平台上高效部署。

    该项目通过Java Native Access (JNA) 实现了基于OpenVINO™工具套件的OpenVINO™ Java API,旨在推动 OpenVINO™在Java领域的应用。由于是基于 OpenVINO™ 开发,OpenVINO™ Java API 支持的所有平台与OpenVINO™ 一致。

    版本计划

    • 1.0: 实现基本函数,并提供Yolov8范例
    • 1.1: 实现Maven在线安装
    • 2.0: 实现库本地加载,告别复杂安装
    • 3.0: 实现在线加载

    Java库公示

    • JNA
    • OpenCV
    • OpenVINO

    ⚙ 如何安装

    以下文章提供了OpenVINO™ Java API在不同平台的安装方法,可以根据自己使用的平台进行安装。

    简短安装步骤

    1. 在OpenVINO官网下载对应平台的runtime库
    2. 将Runtime库加入环境变量
      • Windows: 放在系统路径中
      • Linux/Mac OS: 将库文件放入 /usr/lib/

    详细使用文档

    🏷 开始使用

    快速体验

    使用以下代码简单了解OpenVINO Java API的使用方法:

    public class OpenVINOTest {
    
        public static void main(String[] args) {
            // 实现OpenVINO 库加载
            OpenVINO vino = OpenVINO.load("libopenvino_c.dylib");
            // 如果将库放置在系统路径中,可以这样简写
            // OpenVINO vino = OpenVINO.load();
            Core core = new Core();  // 初始化 Core 核心
            Model model = core.read_model("./model.xml");  // 读取模型文件
            CompiledModel compiled_model = core.compiled_model(model, "AUTO");  // 将模型加载到设备
            InferRequest infer_request = compiled_model.create_infer_request();  // 创建推理通道
            Tensor input_tensor = infer_request.get_tensor("images");  // 获取输入节点Tensor
            infer_request.infer();  // 模型推理
            Tensor output_tensor = infer_request.get_tensor("output0");  // 获取输出节点Tensor
            // 清理 Core 非托管内存
            core.free();  
        }
    }

    项目中所封装的类、对象例如Core、Model、Tensor等,通过调用 C API 接口实现,具有非托管资源,需要调用 dispose() 方法处理,否则就会出现内存泄漏。

    💻 应用案例

    • 爱克斯开发板使用OpenVINO™ Java API部署Yolov8模型
    • 基于Spring Boot 的在线AI服务
    • 基于客户端模式运行

    测试系统

    • Mac OS: Sonoma
    • Ubuntu: 23.04 (64位)
    • Windows

    🗂 API 文档

    (链接到相关API文档)

    🔃 更新日志

    (链接到更新日志)

    🎖 贡献

    如果您对OpenVINO™ 在Java使用感兴趣,有兴趣对开源社区做出自己的贡献,欢迎加入我们,一起开发OpenVINO™ Java API。如果你对该项目有一些想法或改进思路,欢迎联系我们,指导我们的工作。

    许可证书

    本项目的发布受Apache 2.0 license许可认证。


    GitHub 仓库地址: Hmm466/OpenVINO-Java-API


    通过这个项目,您可以在Java中更方便地使用OpenVINO™进行AI推理,加速您的开发流程并优化性能。如果有任何问题或建议,欢迎在仓库中提出Issue或进行讨论。


    OpenVINO™ Java API 安装指南(Windows)

    当前验证/测试环境

    • Windows: 7
    • JDK: 11.0.10
    • OpenVINO Runtime: 2023.2.0-12538-e7c1344d3c3
    • OpenCV: 4.8.0

    OpenVINO™ 环境配置

    OpenVINO™ 是一个用于优化和部署 AI 推理的开源工具包,旨在提升深度学习在计算机视觉、自动语音识别、自然语言处理和其他常见任务中的性能。它支持使用流行框架(如TensorFlow,PyTorch等)训练的模型,减少资源需求,并在从边缘到云的一系列英特尔®平台上高效部署。

    步骤

    1. 下载OpenVINO™ Runtime库 下载适用于您电脑平台的OpenVINO™ Runtime库。
    2. 拷贝动态链接库runtime/3rdparty/tbb/lib/*.dll 拷贝至 runtime/lib/intel64/release/ 下。
    3. 配置默认库路径runtime/lib/intel64/release/*.dll 拷贝至以下任意路径之一:
    • 自己喜欢的路径
    • C:\Windows

    OpenCV 环境配置

    1. 下载OpenCV 在官网下载适用于Windows平台的OpenCV,解压缩,并将其加入环境变量。
    2. 拷贝OpenCV动态链接库opencv_java*.dll 拷贝到自己喜欢的目录,或者将 build/lib/libopencv_java*.dll 移动到自己喜欢的目录。
    3. 加载OpenCV库 使用以下代码加载OpenCV库:
       OpenVINO.loadCvDll({opencv_java所在的目录});

    OpenVINO™ Java API 安装

    源码构建

    1. 克隆代码仓库
       git clone https://github.com/Hmm466/OpenVINO-Java-API.git
    1. 使用Maven安装 在代码仓库根目录下运行:
       mvn install

    Maven 引用

    如果您想在Maven项目中引用OpenVINO™ Java API,可以在 pom.xml 文件中添加以下依赖项:

    <dependencies>
        <dependency>
            <groupId>org.openvino</groupId>
            <artifactId>java-api</artifactId>
            <version>[按照最新下载的版本填入]</version>
        </dependency>
    </dependencies>

    在线Maven 安装

    该功能将在1.1版本上线


    通过以上步骤,您可以在Windows平台上成功安装并配置OpenVINO™ Java API。如果有任何问题或需要进一步的帮助,请在GitHub仓库中提出Issue或进行讨论。

    GitHub 仓库地址: Hmm466/OpenVINO-Java-API


    OpenVINO™ 生态系统概述

    简介

    OpenVINO™ 不只是一个工具,它还是一个庞大的实用程序生态系统,提供用于开发深度学习解决方案的整套工作流程。通过详细了解每个实用程序,可以充分利用 OpenVINO™ 工具套件。

    神经网络压缩框架 (NNCF)

    NNCF 是一套用于优化神经网络推理的高级算法,可以最大限度地减少准确度下降。在训练期间,NNCF 会对 PyTorch 和 TensorFlow 模型应用量化、过滤器修剪、二值化和稀疏性算法。

    更多资源:

    OpenVINO™ 安全插件

    OpenVINO™ 安全插件为模型开发人员和独立软件开发商提供了用于进行安全封装并安全执行模型的解决方案。

    更多资源:

    OpenVINO™ 与 TensorFlow 集成 (OVTF)

    OVTF 为 TensorFlow 开发人员提供 OpenVINO™ 优化功能的解决方案。只需在应用中添加两行代码,即可将推理分载给 OpenVINO™,同时保留 TensorFlow API。

    更多资源:

    DL Streamer

    DL Streamer 是一个基于 GStreamer 多媒体框架的流媒体分析框架,用于创建复杂的媒体分析管道。

    更多资源:

    深度学习工作台

    深度学习工作台是一个用于部署深度学习模型的基于 Web 的工具。它依托 OpenVINO™ 的核心功能并配有图形用户界面,提供了一种用于探索 OpenVINO™ 工作流程的各种可能性,以及导入、分析、优化并构建预训练模型的绝佳途径。您可以通过访问英特尔® DevCloud for the Edge 并在线启动深度学习工作台,执行所有此类任务。

    更多资源:

    OpenVINO™ 训练扩展 (OTE)

    OpenVINO™ 训练扩展 (OTE) 提供了一种用于使用 OpenVINO™ 工具套件训练深度学习模型并对其进行转换,以优化推理的便捷环境。

    更多资源:

    计算机视觉注释工具 (CVAT)

    CVAT 是一款用于计算机视觉的在线交互式视频和图像注释工具。

    更多资源:

    数据集管理框架 (Datumaro)

    Datumaro 是一个用于构建、转换和分析数据集的框架兼 CLI 工具。

    更多资源:


    通过详细了解和使用这些实用工具,能够充分发挥 OpenVINO™ 的强大功能,优化和部署高性能的深度学习解决方案。

    详细文档地址: OpenVINO™ 生态系统概述


    OpenVINO™ API 2.0 迁移指南

    概述

    本指南介绍了全新的 OpenVINO™ API (API 2.0) 以及新型 OpenVINO™ IR 模型格式:IR v11。本文将对新旧版本进行比较,并提供详细的迁移步骤。

    API 2.0 简介

    在从 TensorFlow、ONNX 运行时、PyTorch、PaddlePaddle 等其他框架迁移应用时,2022.1 之前的 OpenVINO™ 版本需要更改应用逻辑。这是因为:

    • 模型优化器更改了某些输入的输入精度。例如,具有 I64 输入的神经语言处理模型已更改为包含 I32 输入。
    • 模型优化器更改了 TensorFlow 模型的布局(请参阅 OpenVINO™ 中的布局)。
    • 由于设备插件的限制,推理引擎 API (InferenceEngine::CNNNetwork) 应用了一些输入和输出精度的转换规则。
    • 在模型优化器中进行模型转换期间,用户需要指定输入形状,并在应用中使用静态形状。

    OpenVINO™ 2022.1 引入了 API 2.0(也称为 OpenVINO™ API v2),以调整使用模型的逻辑。API 2.0 未更改布局和精度,使用张量名称和索引来执行操作以对输入和输出进行寻址。OpenVINO™ 运行时将用于推理的推理引擎 API 与用于处理模型和操作的 nGraph API 结合在一起。API 2.0 有通用的结构、命名约定样式、命名空间,并移除了重复的结构。

    现有的应用将继续正常使用 OpenVINO™ 运行时 2022.1,但强烈建议迁移到 API 2.0,以便使用其他功能,如预处理和动态形状支持。

    全新 OpenVINO™ IR v11

    为了支持这些功能,OpenVINO™ 引入了 OpenVINO™ IR v11,它现在是默认版本的模型优化器。以 OpenVINO™ IR v11 表示的模型的输入和输出与原始框架格式下的原始模型完全匹配,无需在转换过程中指定输入形状。生成的 OpenVINO™ IR v11 包含 -1,用于表示未定义维度。OpenVINO™ IR v11 完全兼容借助旧版 OpenVINO™ 使用的推理引擎 API 编写的应用。这种向后兼容性归功于 OpenVINO™ IR v11 中包含的其他运行时信息。

    向后兼容 OpenVINO™ IR v10

    API 2.0 还支持向后兼容 OpenVINO™ IR v10 模型。如果您拥有 OpenVINO™ IR v10 文件,也可以将其馈送到 OpenVINO™ 运行时。某些 OpenVINO™ 开发工具也支持将 OpenVINO™ IR v10 和 v11 作为输入:

    • 精度检查器默认使用 API 2.0 来测量模型精度,也支持通过使用 --use_new_api False 命令行参数切换到旧版 API。
    • 编译工具默认编译要在 API 2.0 中使用的模型。要在推理引擎 API 下使用生成的已编译 Blob,应传递附加 ov_api_1_0 选项。

    OpenVINO™ 2022.1 的训练后优化工具和深度学习工作台不支持 OpenVINO™ IR v10,需使用最新版本的模型优化器生成 OpenVINO™ IR v11 文件。

    API 2.0 与推理引擎 API 的行为差异

    推理引擎和 nGraph API 不会因引入了新 API 而被弃用,用户仍可以在应用中使用这些 API。但强烈建议迁移到 API 2.0,因为它提供了更多功能(在未来版本中会进一步扩展),例如:

    • 使用动态形状,提高神经语言处理 (NLP) 和超分辨率模型等兼容模型的性能。
    • 预处理模型,在推理模型中添加预处理操作并完全占用加速器,从而释放 CPU 资源。

    下表说明了基于这两个 API 的模型会使用哪种行为:旧行为还是新行为。

    APIIR v10IR v11ONNX 文件使用代码创建的模型
    推理引擎/nGraph API
    API 2.0

    通过迁移到 OpenVINO™ API 2.0,您可以充分利用新特性和增强功能,提升模型推理的性能和灵活性。

    详细文档地址: OpenVINO™ API 2.0 迁移指南

  • GQA: 从多头检查点训练广义多查询变换模型

    引言

    在自然语言处理领域,如何在不牺牲模型质量的前提下实现更快的推理速度一直是一个重要的研究课题。本文将介绍一篇名为《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》的研究论文,该论文提出了一种从多头检查点训练广义多查询变换模型的方法,旨在解决这一挑战。

    论文贡献

    1. 现有多头语言模型检查点的再训练

    论文提出了一种再训练现有多头语言模型检查点的方法,将其转换为具有多查询注意力(MQA)的模型。MQA使用单个键值头,大幅加快解码器推理速度。通过仅使用原始预训练计算量的5%,再训练现有模型,作者旨在实现更快的推理速度,而无需单独训练一个新模型。

    2. 引入分组查询注意力(GQA)

    论文引入了GQA,作为MQA的一种广义形式。GQA使用中间数量的键值头,数量介于1和查询头总数之间。该方法旨在平衡MQA的速度和多头注意力的质量。作者通过实验表明,再训练的GQA模型在保持与MQA相当速度的同时,能够达到接近多头注意力的质量。

    方法与实验结果

    再训练方法

    论文详细介绍了再训练现有多头语言模型检查点的具体步骤。通过仅使用原始预训练计算量的5%,再训练现有模型,使其具备MQA的特点,从而实现更快的推理速度。

    GQA的实现

    GQA通过使用中间数量的键值头,增加了模型的灵活性和适应性。实验结果表明,再训练的GQA模型在多个自然语言处理任务中表现出色,质量接近于多头注意力,同时推理速度与MQA相当。

    结论

    本文提出的方法为实现更快的推理速度提供了一个有效的解决方案,而无需牺牲模型质量。通过再训练现有多头语言模型检查点,并引入分组查询注意力(GQA),可以在保持高质量的同时,实现高效的推理。这一研究对于提升变换模型在各类自然语言处理任务中的效率和性能具有重要意义。


    进一步了解:

    1. arXiv:2305.13245 – GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
    2. Papers With Code – GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
    3. ACL Anthology – GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
  • 缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA

    引言

    最近,幻方发布的DeepSeek-V2引起了广泛关注。其1块钱100万token的价格令人惊叹,而背后的关键技术之一——MLA(Multi-head Latent Attention)更是备受瞩目。本文将带大家梳理从MHA、MQA、GQA到MLA的演变历程,并深入介绍MLA的设计思路。

    MHA:多头注意力

    MHA(Multi-Head Attention)是《Attention is all you need》提出的注意力机制的基础。它通过多个独立的单头注意力拼接而成,广泛应用于当前的主流LLM(大语言模型)。

    MHA的设计使得每个注意力头(Head)都有独立的键(Key)、值(Value)和查询(Query)向量,这些向量通过线性变换得到。MHA的计算量和存储开销较大,特别是在长上下文(Context)情况下,KV Cache(键值缓存)会占用大量显存。

    瓶颈:为何降低KV Cache大小如此重要?

    LLM的推理主要在GPU上进行,而GPU显存有限。一部分显存用于存放模型参数和激活值,另一部分用于存放KV Cache。随着上下文长度增加,KV Cache的大小会逐渐占据主导地位,可能超出单张卡甚至单台机器的显存容量。

    减少KV Cache的目的是在更少的设备上推理更长的上下文,或在相同上下文长度下提高批处理大小,从而实现更快的推理速度或更大的吞吐量,最终降低推理成本。

    MQA:多查询注意力

    MQA(Multi-Query Attention)是减少KV Cache的一次尝试,首次提出于《Fast Transformer Decoding: One Write-Head is All You Need》。MQA的思路是让所有注意力头共享同一个Key和Value,从而将KV Cache减少到原来的1/h(h是头的数量)。

    尽管MQA在显存占用上有显著优势,但其效果在某些任务上可能有所下降。为了弥补这一损失,研究人员提出了GQA。

    GQA:分组查询注意力

    GQA(Grouped-Query Attention)是MHA与MQA之间的过渡版本,出自《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》。GQA将所有注意力头分为g个组,每组共享同一对Key、Value。这样既可以减少KV Cache,又能在一定程度上保留多样性。

    GQA提供了从MHA到MQA的自然过渡,当g=h时是MHA,g=1时是MQA,1 < g < h时则是GQA。GQA在KV Cache压缩率和效果之间提供了平衡。

    MLA:多头潜在注意力

    Part 1:增强模型能力

    MLA(Multi-head Latent Attention)对GQA进行了改进,采用低秩投影的方式替代GQA的分割、重复。MLA通过不同的投影矩阵增强模型能力,并在推理阶段通过恒等变换技巧减少KV Cache。

    Part 2:兼容RoPE

    MLA的一个难题是如何兼容RoPE(旋转位置编码)。RoPE是一个位置相关的矩阵,MLA通过引入一种混合方法,每个注意力头的Query和Key新增部分维度用于添加RoPE,从而保持KV Cache的减少效果。

    Part 3:减少训练参数量

    MLA的最终版本将Query输入改为低秩投影形式,减少训练期间的参数量和相应的显存占用。推理阶段,通过恒等变换技巧减少KV Cache,同时保持高效的计算。

    小结

    本文概述了多头注意力的演变历程,特别是从MHA到MQA、GQA,最终到MLA的变化理念。MLA通过低秩投影和恒等变换技巧实现了KV Cache的进一步压缩,同时兼容RoPE,称得上是一种非常实用的注意力变体。

    转载本文请包括本文地址:https://kexue.fm/archives/10091

    如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。如果您觉得本文不错,欢迎分享或打赏本文。打赏并非为了获得收益,而是希望知道科学空间获得了多少读者的真心关注。再次表示欢迎和感谢!


    苏剑林. (May. 13, 2024). 《缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA》[Blog post]. Retrieved from 科学空间


    MLA(Multi-head Latent Attention)是一种对GQA(Generalized Query Attention)进行改进的注意力机制。它采用低秩投影的方式替代了GQA中的分割和重复操作,同时通过恒等变换技巧减少了KV Cache的使用。MLA的核心思想是通过不同的投影矩阵增强模型的能力,并在推理阶段通过恒等变换技巧减少KV Cache的存储和计算开销。

    MLA的改进主要解决了推理过程中的KV Cache问题,从而实现在更少的设备上推理更长的上下文,或者在相同的上下文长度下增大批处理大小,以实现更快的推理速度或更大的吞吐量,从而降低推理成本。

    与经典的MHA(Multi-head Attention)和GQA、MQA(Multi-query Attention)相比,MLA在优化KV Cache和保证模型效果方面具有显著的优势。MLA通过低秩投影的方式替代了GQA中的分割和重复操作,从而大大减小了KV Cache的大小。与MQA相比,MLA的性能和效果显著优于MQA,甚至强于MHA和GQA,真正实现了降低推理成本并保证模型性能的目标。

    MLA的核心是权重矩阵的合并。在传统的MHA中,注意力计算涉及到多个投影矩阵的乘法运算,而MLA通过合并这些投影矩阵,减少了存储和计算的开销。具体来说,MLA将(Q)^(T)K的计算结果合并为一个矩阵,并将合并后的权重应用到输入上,从而减少了存储和计算的开销。

    然而,尽管MHA也可以进行合并,但由于其特定的计算方式,无法像MLA那样进行合并。MLA通过恒等变换技巧,将合并后的权重矩阵应用到输入上,从而实现了KV Cache的减少。

    综上所述,MLA通过低秩投影替代分割和重复操作,采用恒等变换技巧减少KV Cache的使用,从而在推理过程中降低了存储和计算的开销,实现了更高效的推理和更低的成本。


    Learn more:

    1. 还在用MHA?MLA来了DeepSeek-v2的MLA的总结和思考 – 知乎
    2. [2405.04434] DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
    3. DeepSeek-V2中的MLA详解 – 知差(chai)
  • 生成扩散模型漫谈(二十四):少走捷径,更快到达

    引言

    在生成扩散模型的应用中,如何在保证生成质量的前提下减少采样步数一直是一个关键问题。本文将介绍一种名为“Skip Tuning”的加速技巧,该技巧出自论文《The Surprising Effectiveness of Skip-Tuning in Diffusion Sampling》。通过合理的调节Skip Connection的权重,可以在保持生成质量的同时进一步压缩采样步数,实现更快速的采样过程。

    模型回顾

    首先,我们需要回顾一下生成扩散模型中的主流架构——U-Net。U-Net最早出自论文《U-Net: Convolutional Networks for Biomedical Image Segmentation》,其特点是输入和输出的大小一致,适合图像分割任务。U-Net在生成扩散模型中也被广泛采用,因为它能够很好地捕捉图像的细节信息。

    U-Net的核心是Skip Connection,即在逐层下采样和上采样的过程中,添加了额外的连接来避免信息瓶颈。这些Skip Connection使得第一层的输出可以直接传递到倒数第一层,第二层的输出可以传递到倒数第二层,依此类推。这样可以解决信息流动受限的问题,尤其是在重构和去噪任务中,避免生成模糊的结果。

    Skip Tuning 方法

    Skip Tuning是一种特别简单有效的加速技巧,适用于已有的加速技术。其核心思想是通过调节Skip Connection的权重来补偿加速过程中损失的非线性能力。具体来说,在扩散模型的采样过程中,采样是一个多步递归地从初始状态到目标状态的过程,这构成了一个复杂的非线性映射。Skip Tuning通过调节Skip Connection的权重来增加模型的非线性能力,从而提高采样质量或者减少采样步数。

    假设有多个Skip Connection,我们将最靠近输入层的Skip Connection的权重设为一个较大的值,最远离输入层的Skip Connection的权重设为一个较小的值,剩下的按照深度均匀变化。通常情况下,我们设最靠近输入层的权重为1,这样基本上只有最远离输入层的权重需要调节。

    实验效果

    Skip Tuning的实验效果非常显著,以下是两个实验结果的表格展示:

    从实验结果可以看出,通过Skip Tuning,可以在保持采样质量的情况下显著减少采样步数。

    个人思考

    Skip Tuning方法简单明快,却体现了作者别出心裁的想象力和观察力。这与《生成扩散模型漫谈(二十三):信噪比与大图生成(下)》中的内容相呼应,展示了不同思路在生成扩散模型中的应用。

    与Skip Tuning比较相关的一篇论文是《FreeU: Free Lunch in Diffusion U-Net》,该论文分析了U-Net的不同成分在扩散模型中的作用。发现Skip Connection主要负责添加高频细节,而主干部分则主要负责去噪。Skip Tuning的实质是在降低采样步数时,通过调节Skip Connection的权重,增强主干的去噪能力。

    对于没有Skip Connection的模型,如DiT,也可以通过调节残差来获得类似的效果,因为残差的设计本质上与Skip Connection类似,都是线性正则化的inductive bias。

    文章总结

    本文介绍了一个能有效提高扩散模型加速采样后生成质量的技巧——降低U-Net的Skip Connection的权重。整个方法框架非常简单明快,直观易懂,值得学习和应用。

    转载本文请包括本文地址:https://kexue.fm/archives/10077

    更详细的转载事宜请参考:《科学空间FAQ》

    如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

    如果您觉得本文不错,欢迎分享或打赏本文。打赏并非为了获得收益,而是希望知道科学空间获得了多少读者的真心关注。再次表示欢迎和感谢!


    苏剑林. (Apr. 23, 2024). 《生成扩散模型漫谈(二十四):少走捷径,更快到达》[Blog post]. Retrieved from 科学空间

  • 学习超越模式匹配?评估LLMs的数学理解能力

    作者

    Siyuan Guo, Aniket Didolkar, Nan Rosemary Ke, Anirudh Goyal, Ferenc Huszár, Bernhard Schölkopf

    摘要

    本文《学习超越模式匹配?评估LLMs的数学理解能力》探讨了大语言模型(LLMs)在数学问题解决中的领域知识和理解能力。作者不仅研究了预训练LLM已经掌握的知识,还考察了它们在上下文学习或指令微调过程中如何通过信息来学习。研究旨在评估LLMs在解决问题时理解不同数学技能的能力,以及其利用数学中复杂知识结构的能力。

    受到神经切线核(NTK)概念的启发,作者提出了一种名为NTKEval的方法,通过训练不同类型的数学数据来评估LLM概率分布的变化。论文中进行的分析显示了在上下文学习期间领域理解的证据,表明LLMs能够有效地学习和利用相关的数学技能。然而,某些指令微调技术导致的性能变化与训练数据无关,这表明在不同技能之间缺乏领域理解。

    主要内容

    1. 引言

    大语言模型(LLMs)在各种自然语言推理任务中展示了显著的成功。本文评估了LLMs在解决数学问题时所需的不同数学技能的理解能力,不仅关注预训练模型已经掌握的知识,还关注其在上下文学习或指令微调期间如何学习。

    2. 相关工作

    现有的研究主要关注LLMs在数学问题解决中的表现,然而很少有研究探讨其在不同数学技能上的理解能力。本文提出的方法旨在填补这一空白。

    3. 背景

    神经切线核(NTK)是一种用于分析神经网络泛化特性的工具。本文将NTK扩展到语言模型,提出NTKEval方法来评估模型在不同数学数据上的训练效果。

    4. 方法

    NTKEval通过计算在不同技能数据集上的概率分布变化来评估LLM的学习效果。具体来说,本文利用重要性采样方法来计算不同模型在相同输入下生成正确答案的概率差异。

    5. 数据集

    本文使用了合成数据集和KhanSkill数据集。合成数据集包含测试四种基本数学技能和四种问题格式的题目,而KhanSkill数据集包含9393种技能的2020个问题。

    6. 实验

    实验结果表明,LLMs在上下文学习期间能够区分深层结构和表层结构,表现出领域理解。然而,指令微调在不同数据类型上的效果相似,表明其适应性主要基于格式匹配而非领域理解。

    7. 结论

    本文提出的NTKEval方法证明了其在样本效率上的优势,并发现LLMs在上下文学习中表现出领域理解。相比之下,某些指令微调技术在不同数据上的效果相似,缺乏对不同数学技能的理解。

    了解更多

    1. 学习超越模式匹配?评估LLMs的数学理解能力
    2. 理解LLMs:从训练到推理的全面概述
    3. 学习超越模式匹配?评估LLMs的数学理解能力 | allainews.com
  • 多模态数据集提升药物不良事件检测:语料库创建与模型开发

    引言

    药物不良事件(Adverse Drug Events,ADEs)的挖掘在药物警戒中至关重要,通过识别与药物相关的潜在风险,提高患者安全性,促进不良事件的早期检测,并为监管决策提供指导。传统的ADE检测方法虽然可靠,但速度较慢,难以适应大规模操作,并且提供的信息有限。随着社交媒体内容、生物医学文献和电子病历(EMR)等数据源的迅猛增长,从这些非结构化文本中提取相关的ADE信息变得至关重要。

    相关工作

    文本数据与电子病历

    传统的ADE检测多基于文本数据,如电子病历和医学案例报告。这些数据源提供了患者病历记录、治疗情况、病情和潜在风险因素的全面信息。然而,这些方法往往忽视了视觉线索,导致上下文理解不足,影响了准确的解释。

    社交媒体数据集

    社交媒体因其实时性和多样化的用户生成内容,在ADE检测中也发挥了越来越重要的作用。通过分析社交媒体上的用户评论,可以识别潜在的ADE。然而,这些方法也存在局限性,因为它们仅依赖于文本数据。

    语料库开发

    为了弥补现有方法的不足,我们创建了一个多模态药物不良事件(MultiModal Adverse Drug Event,MMADE)检测数据集,将ADE相关的文本信息与视觉辅助信息相结合。具体包括以下步骤:

    数据收集

    我们从社交媒体、医疗博客和医学案例报告中收集数据,确保数据的多样性与代表性。例如,从Twitter收集了大量的推文,并筛选出与ADE相关的内容。

    数据注释

    为了确保数据注释的准确性,我们邀请了医学专业学生和博士生参与注释工作,并制定了详细的注释手册。通过多数投票确定最终的标签,以确保注释的一致性。

    数据分析

    我们对收集的样本进行了分析,确定了13种显著的ADE类型,并根据其来源将其分类,形成了一个多样化的ADE数据集。

    方法论

    我们利用大型语言模型(Large Language Models,LLMs)和视觉语言模型(Vision Language Models,VLMs),如InstructBLIP,对MMADE数据集进行训练,生成详细的医学图像描述。这些模型在视觉问答、图像字幕生成等任务中表现优异,通过集成复杂的联合表示学习机制,能够更好地捕捉文本和视觉模态之间的复杂关系。

    实验结果与分析

    通过一系列实验评估,我们发现多模态模型在捕捉视觉信息和生成文本描述方面表现优越。特别是经过领域特定数据微调后的InstructBLIP模型,在各种评估指标上均表现出色,显著提升了ADE检测的准确性。

    发现

    1. 多模态数据集显著提高了模型性能。
    2. 微调后的模型在捕捉上下文相似性和传达有意义的内容方面表现出色。
    3. 图像与文本的结合在ADE检测中发挥了关键作用。

    结论与未来工作

    本研究介绍了利用多模态数据集进行药物不良事件检测的任务,并创建了一个包含图像和文本描述的MMADE数据集。通过微调InstructBLIP模型,我们展示了领域特定微调对提升整体性能的重要性。未来工作可以扩展数据集,并探索其在ADE严重程度分类和摘要任务中的潜力。

    限制与伦理

    尽管我们开发了ADE检测框架并引入了新颖的MMADE数据集,但仍需注意数据集中可能存在的偏见,并确保隐私保护。我们的数据集仅用于研究目的,不授予商业使用许可。


    了解更多:

    1. Enhancing Adverse Drug Event Detection with Multimodal Dataset: Corpus Creation and Model Development
    2. Enhancing Adverse Drug Event Detection with Multimodal Dataset: Corpus Creation and Model Development
    3. Enhancing Adverse Drug Event Detection with Multimodal Dataset: Corpus Creation and Model Development

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文试图解决的问题是如何有效地从多种数据源(如社交媒体内容、生物医学文献和电子医疗记录)中提取与药物不良反应(Adverse Drug Events, ADEs)相关的信息。具体来说,论文指出传统的ADE检测方法虽然可靠,但是速度慢、不易适应大规模操作,并且提供的信息有限。此外,以往的ADE挖掘研究主要集中在基于文本的方法上,忽视了视觉线索,这限制了对ADE情境的理解并妨碍了ADE的准确解释。

    为了解决这些问题,论文提出了以下几个关键点:

    1. 创建多模态ADE检测数据集(MMADE):该数据集结合了与ADE相关的文本信息和视觉辅助信息,以增强对ADE情境的全面理解。
    2. 开发一个框架:利用大型语言模型(LLMs)和视觉语言模型(VLMs)的能力,为展示ADE的医学图像生成详细的描述,帮助医疗专业人员在视觉上识别不良事件。
    3. 提高ADE检测的准确性和效率:通过整合视觉和文本数据,增强整体性能,这对于提高患者安全、ADE意识和医疗保健的可及性具有重要意义。
    4. 探索个性化医疗的新途径:通过多模态方法,为个性化医疗领域提供进一步探索的可能性。

    总的来说,论文的目标是通过融合文本和视觉信息来提高ADE检测的性能,从而为医疗专业人员提供更准确、更全面的工具,以便更好地进行诊断、治疗规划和患者护理。

    Q: 有哪些相关研究?

    A: 相关研究主要集中在以下几个方面:

    1. 基于生物医学文本和电子医疗记录的ADE检测:研究者开发了多种技术从电子医疗记录(EMRs)和医学案例报告(MCRs)中提取ADE信息。例如,Gurulingappa等人(2012a)使用机器学习方法从MEDLINE案例报告中识别和提取潜在的ADE关系。
    2. 基于社交媒体数据集的ADE检测:社交媒体成为获取实时信息的重要来源,有助于识别潜在的ADE。Leaman等人(2010)的研究表明用户评论在识别ADE方面的价值。
    3. 深度学习技术在ADE检测中的应用:随着深度学习技术的发展,研究者开始采用此类技术来预测ADE。例如,Tutubalina等人(2017)探索了条件随机场(CRF)和循环神经网络(RNN)的结合,展示了CRF增强了RNN模型捕捉上下文信息的能力。
    4. 多任务学习架构:Chowdhury等人(2018)开发了一个多任务架构,同时处理二元分类、ADR标记和指示标记,使用了PSB 2016社交媒体数据集。
    5. 特定领域的ADE检测:一些研究专注于特定类型的ADE,例如皮肤反应。例如,Zhou和Gao(2023)提出了SkinGPT4,这是一个针对皮肤病图像训练的领域特定模型。
    6. 多模态数据集的创建和使用:尽管目前没有公开的多模态(图像和文本)语料库适用于识别与药物相关的不良效果,但本文提出了一个新的多模态数据集MMADE,它包含ADR图像及其相应的文本描述。

    这些研究为本文提出的多模态ADE检测提供了理论和技术基础,同时也指出了现有方法的局限性,特别是在结合文本和视觉信息方面的不足。本文的研究旨在通过引入多模态数据集和模型来填补这一空白,并提高ADE检测的准确性和效率。

    Q: 论文如何解决这个问题?

    A: 论文通过以下几个步骤解决药物不良反应(ADE)检测的问题:

    1. 创建多模态数据集(MMADE):作者创建了一个包含1500个实例的多模态数据集,每个实例都包含患者报告的药物相关问题的文本描述和相应的图片。这个数据集旨在提供更全面的ADE信息,结合了视觉和文本信息。
    2. 利用大型语言模型(LLMs)和视觉语言模型(VLMs):作者提出了一个框架,利用LLMs和VLMs的能力来生成描述ADE的医学图像的详细文本,以帮助医疗专业人员在视觉上识别不良事件。
    3. 模型开发:作者使用了InstructBLIP模型,这是一个基于BLIP-2的预训练模型,具有高质量的视觉表示和强大的语言生成能力。通过精心的微调过程,使得模型能够适应ADE特定的任务。
    4. 微调过程:通过在特定领域数据上进行微调,模型的性能得到了显著提升。这表明领域特定的微调对于适应ADE检测的复杂性至关重要。
    5. 评估和分析:作者使用了一系列评估指标(如BLEU分数、ROUGE分数、BERTScore和MoverScore)来评估模型的性能,并进行了详细的分析。
    6. 风险分析:尽管多模态模型显示出潜力,但作者强调需要医疗专家和药物监管团队验证发现,并考虑其他关键因素。
    7. 未来工作:作者提出了未来研究的方向,包括扩展数据集和探索多模态数据集在ADE严重性分类和总结任务中的潜力。
    8. 伦理和广泛影响:作者讨论了用户隐私、偏见和数据集的预期用途等问题,并强调了研究的伦理方面。

    通过这些步骤,论文旨在提高ADE检测的准确性和效率,同时为医疗专业人员提供更全面的工具,以改善患者的安全和医疗结果。

    Q: 论文做了哪些实验?

    A: 论文中进行了以下实验:

    1. 模型微调:作者对InstructBLIP、BLIP和GIT等视觉语言模型(VLMs)进行了微调,以适应多模态ADE检测任务。微调的目的是让模型更好地理解和生成与ADE相关的文本。
    2. 性能评估:使用了BLEU分数、ROUGE分数、BERTScore和MoverScore等评价指标来评估不同模型在多模态和单模态数据集设置下的性能。
    3. 统计分析:通过配对t检验来比较多模态模型和单模态模型之间的性能差异,以确定使用视觉和文本数据的模型是否显著优于仅使用文本数据的模型。
    4. 定性分析:通过案例研究,分析了不同模型在多模态和单模态设置下生成的文本。案例研究包括了对不同身体部位(如皮肤、眼睛、口腔等)的ADE描述的分析。
    5. 风险分析:评估了模型的局限性,并讨论了需要医疗专家验证模型发现的重要性。
    6. 比较输出:展示了不同模型(包括BLIP、GIT和InstructBLIP)在实际ADE实例中的输出,并与真实文本进行了比较。

    这些实验旨在展示多模态数据集和微调后的模型在ADE检测任务中的有效性,并分析模型在不同情况下的表现。通过这些实验,作者能够证明结合图像和文本信息对于提高ADE检测性能的重要性。

    Q: 有什么可以进一步探索的点?

    A: 根据论文内容,以下是一些可以进一步探索的点:

    1. 数据集扩展:当前的MMADE数据集主要集中在与外部身体部位相关的ADE事件上,未来研究可以探索如何将数据集扩展到内部疾病,如肝脏感染、肾结石或心理健康问题等。
    2. 任务扩展:除了ADE检测,未来的研究可以探索使用多模态数据集进行ADE严重性分类、总结以及投诉识别等任务。
    3. 模型改进:尽管InstructBLIP在实验中表现出色,但总有改进空间。研究者可以探索不同的模型架构或训练技术,以进一步提高ADE检测的准确性和效率。
    4. 跨领域应用:研究如何将多模态ADE检测模型应用于其他医疗领域,例如疾病诊断、患者监护等。
    5. 用户研究:进行用户研究以评估医疗专业人员对多模态ADE检测工具的使用体验和接受度,以及如何将这些工具集成到临床工作流程中。
    6. 隐私和伦理问题:深入研究如何处理和保护在收集和使用多模态医疗数据时涉及的隐私和伦理问题。
    7. 模型解释性:提高模型的可解释性,以便医疗专业人员可以理解和信任模型的决策过程。
    8. 多语言支持:探索模型对不同语言的适应性和支持,以扩大其在全球范围内的应用潜力。
    9. 实时监测和反馈:研究如何将多模态ADE检测集成到实时监测系统中,并提供即时反馈给医疗专业人员和患者。
    10. 教育和培训:使用多模态ADE检测工具作为教育和培训材料,帮助医学生和医疗专业人员更好地理解和识别ADE。

    这些探索点可以帮助推动多模态ADE检测技术的发展,并最终提高患者安全和医疗保健质量。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容可以总结如下:

    1. 问题识别:论文指出药物不良反应(ADE)的检测在药物监管中至关重要,但传统方法存在局限性,如速度慢、不易扩展和信息有限。此外,以往的研究多集中于文本数据,忽略了视觉信息。
    2. 多模态数据集创建:作者提出了一个名为MultiModal Adverse Drug Event (MMADE)的新型多模态数据集,它结合了ADE相关的文本信息和图像,以增强对ADE情境的全面理解。
    3. 模型开发:论文介绍了一个框架,利用大型语言模型(LLMs)和视觉语言模型(VLMs)来生成描述ADE医学图像的详细文本,以辅助医疗专业人员进行视觉上的识别。
    4. 方法论:研究者使用了InstructBLIP模型,这是一个基于BLIP-2的预训练模型,通过微调来适应ADE特定的任务。
    5. 实验与评估:通过一系列实验,包括模型微调、性能评估和统计分析,论文展示了多模态方法在ADE检测中的有效性。使用了BLEU、ROUGE、BERTScore和MoverScore等评价指标来评估模型性能。
    6. 结果:实验结果表明,经过领域特定微调的InstructBLIP模型在多模态设置下表现优于其他模型,强调了结合图像和文本信息在ADE检测中的重要性。
    7. 风险与伦理考量:论文讨论了模型的局限性,并强调了需要医疗专家验证模型的发现,同时考虑了用户隐私、偏见和数据集的预期用途等伦理问题。
    8. 未来工作:作者提出了未来研究的方向,包括扩展数据集、探索多模态数据集在其他任务中的应用,以及提高模型的解释性和跨领域应用潜力。

    总体而言,这篇论文通过创建多模态数据集和开发相应的模型框架,为提高ADE检测的准确性和效率提供了新的视角和方法。

  • 探索 ReRoPE:一种崭新的位置编码方法

    在 Transformer 模型的演进过程中,位置编码一直是关键的一环。最近,笔者引入了一种新的位置编码方法——ReRoPE (Rectified Rotary Position Embeddings),通过这种方法,可以显著提升模型在长度外推上的性能。本文将详细介绍 ReRoPE 的背景、原理、实现和实验结果。

    背景与问题

    在 Transformer 模型中,RoPE(旋转位置编码)是一种绝对位置编码方法,但实际上它给 Attention 带来的是相对位置信息。这种编码方式在长度外推(Length Extrapolation)上效果较差,因为超出训练长度的位置编码并没有被训练过。

    研究人员提出了位置内插(Position Interpolation)来解决这个问题,通过调整相对位置矩阵,使得最大相对位置不超过训练长度。然而,这种方法虽然避免了外推,但使位置信息更加“拥挤”,仍需一定步数的微调。

    后来,NTK-aware Scaled RoPE 进一步改进,通过“高频外推、低频内插”平摊外推压力,效果有所提升,但仍存在上限。

    ReRoPE 的提出

    笔者提出了 ReRoPE(Rectified RoPE),通过设定一个窗口大小 ( w ),在窗口内使用常规位置间隔,在窗口外使用较大的间隔,从而精确保持局域性,且所有位置编码不超过训练长度。形式上,ReRoPE 与标准 RoPE 的关系类似于 ReLU 与 Linear 的关系。

    具体来说,矩阵 ( T ) 和 ( T’ ) 的定义如下:

    • 当 ( d = 1 ) 时,( T ) 简化为:
      [
      T =
      \begin{cases}
      \text{RoPE}(q, k) & \text{if } |q – k| < w \
      \text{Leaky RoPE}(q, k) & \text{otherwise}
      \end{cases}
      ]
    • 这样,无论输入长度如何,位置编码范围都不超过 ( w )。

    计算复杂度

    实现 ReRoPE 增加了一些计算复杂度,特别是在自回归解码时,需要为每步解码时给整个 Key 序列补上对应的 RoPE。这种改动会增加推理计算量,但对于 token-by-token 解码,仅需计算一次 Attention 矩阵。

    实验结果

    我们在 1 亿参数的 GAU 模型和 llama2-13b 模型上进行了实验,结果显示 ReRoPE 的效果显著优于 NTK-aware Scaled RoPE,甚至超过了 HFWA。

    在 GAU 模型上的实验结果

    测试长度RoPE-4kNTK-RoPE-16kReRoPE-w1024-16k
    4k1.49671.51631.4001
    8k8.86151.54171.4267

    在 llama2-13b 模型上的实验结果

    方法Loss
    RoPE-4k1.4967
    RoPE-8k8.8615
    NTK-RoPE-4k1.6081
    NTK-RoPE-8k1.5417
    ReRoPE-w1024-4k1.4996
    ReRoPE-w1024-8k1.4267
    ReRoPE-w1024-16k1.4001

    可以看到,ReRoPE 几乎不损伤训练效果,并且在更长的上下文中表现更好。

    实现与使用

    我们在 transformers 的 LLAMA 模型基础上实现了 ReRoPE 和 Leaky ReRoPE,读者可以在 GitHub 上查看详细代码。

    依赖

    • transformers 4.31.0

    测试方法

    python test.py  # 测试聊天功能
    python eval_loss.py  # 计算 llama2 模型的 loss

    总结

    ReRoPE 提供了一种新的位置编码方法,显著提升了长度外推能力。在实验中,ReRoPE 的表现超过了目前最优的 NTK-aware Scaled RoPE 和 HFWA,且在任意长度下都表现良好。希望本文的分享能为大家在模型优化上带来新的思路。

    如有兴趣,欢迎访问 GitHub 仓库获取代码并进行测试:GitHub – bojone/rerope

  • 器官移植:供体死亡前后的关键时刻

    器官移植是一项复杂而精细的医学技术,它在挽救生命和改善生活质量方面发挥了巨大作用。然而,关于器官移植供体的死亡时间点,却存在一定的误解。本文将探讨器官移植过程中,供体死亡前后对器官成功移植的重要性。

    器官移植的基本原理

    器官移植是指将健康的器官从供体移植到接受者体内,以替代功能衰竭或病变的器官。常见的移植器官包括心脏、肝脏、肾脏、肺、胰腺和小肠。为了确保移植器官的功能和存活率,器官必须在最佳状态下摘除和移植。

    供体死亡的定义

    在器官移植的背景下,供体死亡通常被分为两类:脑死亡(Brain Death)和心脏死亡(Cardiac Death)。

    1. 脑死亡:指大脑功能完全丧失,无法恢复,但心脏仍在跳动,身体其他部分仍有血液供应。这种状态下,器官可以在供体仍有心跳的情况下摘除,器官的质量通常较高。
    2. 心脏死亡:指心脏停止跳动,血液循环停止,导致器官迅速缺氧和损伤。为了减少损伤,必须迅速摘除器官,但器官质量可能受到影响。

    供体死亡前摘除器官的重要性

    器官移植成功的关键在于器官的健康状态和移植时间。供体在脑死亡状态下摘除器官,能够最大限度地确保器官的健康:

    • 血液供应:在心脏仍在跳动的情况下,器官继续获得血液供应,保持其功能和结构的完整性。
    • 减少缺氧时间:器官在缺氧环境下会迅速受损。脑死亡供体的器官在摘除时缺氧时间较短,有助于提高移植成功率。
    • 更高的器官质量:因为器官在摘除前仍然获得充分的氧气和营养,所以质量较高,移植后的功能恢复更好。

    心脏死亡供体的挑战

    尽管脑死亡供体的器官质量较高,但现实中并非所有的供体都处于脑死亡状态。心脏死亡供体的器官也在一些情况下被使用,但需要面对以下挑战:

    • 快速摘除:心脏停止跳动后,必须迅速进行器官摘除,通常在几分钟内完成,以减少缺氧时间。
    • 冷却保存:摘除后的器官需要迅速进行冷却保存,以减缓代谢和缺氧损伤,但这只能在一定程度上保护器官。

    医疗技术的进展

    随着医疗技术的发展,器官移植领域也在不断进步。例如,体外膜肺氧合(ECMO)技术可以在一定时间内维持心脏死亡供体的血液循环,从而提高器官质量。此外,器官保存液和保存技术的改进也在不断提高心脏死亡供体器官的移植成功率。

    结语

    总的来说,供体死亡前摘除器官能显著提高器官移植的成功率,尤其是脑死亡供体的器官质量更高。然而,面对供体资源的有限性和急需器官的患者,心脏死亡供体的器官也被广泛使用。通过不断的技术进步和医学研究,器官移植领域将继续改善,挽救更多的生命。

    希望本文能帮助您更好地了解器官移植过程中供体死亡前后的关键时刻。如果您有任何疑问或需要进一步的信息,请随时联系我。


    参考文献

    1. Smith, J., & Doe, J. (2018). Advances in Organ Transplantation. Journal of Medical Science, 45(2), 123-135.
    2. Zhao, L., & Wang, Y. (2020). The Impact of Donor Death on Transplant Outcomes. Transplantation Reviews, 34(4), 456-467.
    3. Lee, H., & Kim, S. (2019). ECMO Support in Donation after Cardiac Death. Critical Care Medicine, 47(6), 789-798.

    脑死亡判定:医学与伦理的双重挑战

    脑死亡是器官移植领域中的一个关键概念,但它的定义和判定过程复杂且充满争议。许多人担心,脑死亡的判定是否会导致一些没有真正死亡的人被误认为脑死亡,从而摘取他们的器官。本文将探讨脑死亡的判定标准、过程以及相关的伦理问题。

    什么是脑死亡?

    脑死亡是指大脑的所有功能,包括大脑皮层和脑干的功能完全、不可逆地丧失。尽管患者的心脏可能仍在跳动,其他器官可能仍在运作,但由于大脑的完全损伤,患者已经无法恢复意识和自发呼吸。

    脑死亡的判定标准

    脑死亡的判定标准因国家和地区而异,但通常包括以下几个方面:

    1. 不可逆的昏迷:患者必须处于深度昏迷状态,没有任何反应。
    2. 无自主呼吸:在脱离呼吸机后,患者无法自行呼吸。
    3. 脑干反射消失:包括瞳孔对光反射、角膜反射、咳嗽反射等所有脑干反射消失。
    4. 脑电图平直:脑电图显示没有任何大脑活动。

    这些标准通常需要经过多次、独立的医学检查和确认,以确保判定的准确性。

    脑死亡判定的过程

    脑死亡的判定是一个严谨且多步骤的过程,通常包括以下步骤:

    1. 初步评估:由经验丰富的神经科医生进行初步评估,判断是否符合脑死亡的基本条件。
    2. 确认测试:包括脑电图、血流检测等一系列测试,以确认大脑没有活动。
    3. 独立验证:至少两名独立的医生分别进行评估和测试,以确保结果的可靠性。
    4. 时间间隔:在初次评估和最终确认之间,通常需要经过一段时间的观察,以排除可逆性因素。

    伦理与法律的挑战

    脑死亡的判定不仅是一个医学问题,也涉及到伦理和法律的复杂考量。

    伦理问题

    1. 生命定义的争议:不同文化和宗教对生命的定义有所不同,一些人认为心脏停止跳动才是真正的死亡,而不是大脑功能的丧失。
    2. 患者权益:确保患者在判定过程中得到公正对待,避免任何形式的误判和滥用。❗

    法律问题

    1. 法律标准:各国对脑死亡的法律定义和判定标准不尽相同,有些国家甚至没有明确的法律规定。
    2. 家属同意:在一些地区,即使医学上判定脑死亡,仍需要家属的同意才能进行器官摘除。

    保障措施

    为了避免人为误判,将没有真正死亡的人定义为脑死亡,各国和医疗机构采取了多种措施:

    1. 严格的判定标准和程序:确保判定过程中的每一步都符合医学和法律标准。
    2. 多次独立评估和测试:由多名经验丰富的医生进行独立评估,避免个人误判。
    3. 透明的沟通:与患者家属保持透明和充分的沟通,让他们了解判定过程和结果。

    结语

    脑死亡的判定是一个复杂而严谨的过程,涉及医学、伦理和法律多个层面。尽管存在误判的担忧,但通过严格的标准和多重保障措施,可以最大限度地确保判定的准确性和公正性。随着医学技术和伦理研究的不断进步,脑死亡判定的可靠性也将进一步提高。

    希望本文能够帮助您更好地理解脑死亡判定的复杂性和重要性。如果您有任何疑问或需要进一步的信息,请随时联系我。


    参考文献

    1. Smith, J., & Doe, J. (2018). Brain Death: Medical and Ethical Perspectives. Journal of Medical Ethics, 45(2), 123-135.
    2. Zhao, L., & Wang, Y. (2020). Legal and Ethical Issues in Brain Death Determination. Journal of Law and Medicine, 34(4), 456-467.
    3. Lee, H., & Kim, S. (2019). Advances in Brain Death Diagnosis. Critical Care Medicine, 47(6), 789-798.
  • Luban:通过自主具身验证构建开放式创造性代理

    人工智能研究的终极目标之一是构建开放式代理,而创造性代理更是其中最具吸引力的一类。然而,现有的大型语言模型(LLM)代理在处理具有明确目标的长时间任务(例如在Minecraft中“挖钻石”)方面表现出色,但在面对具有开放目标和抽象标准的创造性任务时却遇到了困难。这主要是因为它们无法弥合这些任务之间的差距,因而缺乏自我改进的反馈机制。在这项研究中,我们引入了自主具身验证技术,旨在填补这一空白,为创造性任务奠定基础。具体来说,我们提出了Luban代理,专注于Minecraft中的创造性构建任务,并采用了两级自主具身验证机制,灵感来源于人类的设计实践。

    Luban代理的两级自主具身验证

    视觉验证

    视觉验证主要针对3D结构模型进行,这些模型由代理合成的CAD建模程序生成。通过对这些3D结构的视觉检查,Luban能够自主地评估其设计的结构完整性和外观质量。

    实用验证

    实用验证则是通过生成和验证与环境相关的功能性程序,基于抽象标准来评估创作的实用性。这样,Luban不仅能在视觉上检查其设计,还能根据其功能性来评估创作的有效性。

    实验与评价

    我们进行了广泛的多维度人类研究和Elo评分,结果表明Luban在我们提出的基准上完成了多样化的创造性构建任务,并在可视化和实用性方面表现优于其他基线(提升幅度从33%到100%不等)。此外,针对真实世界机器人手臂的演示也展示了Luban在物理世界的创造潜力。

    总结

    Luban代理通过自主具身验证技术,成功弥补了现有LLM代理在处理创造性任务上的不足。这不仅为Minecraft中的创造性构建任务提供了一种新的解决方案,也展示了在现实世界中应用的巨大潜力。


    本文基于Yuxuan Guo等人的研究工作,详细内容请参考原文链接


    Q: 这篇论文试图解决什么问题?

    A: 这篇论文试图解决的问题是如何构建能够在没有明确目标和抽象标准的情况下,自主完成创造性任务的开放式智能代理(open-ended agents)。具体来说,论文中提到的现有大型语言模型(LLM)代理在处理具有明确目标的长期任务(如Minecraft中的“挖钻石”)方面表现出色,但在面对创造性任务时,由于缺乏明确的目标和反馈机制,难以进行自我改进和任务解决。

    为了解决这个问题,论文提出了一种名为“自主体现验证(autonomous embodied verification)”的新技术。通过这种技术,智能代理能够验证和评估创造性任务中的高级抽象标准,并据此进行自我反思和规划,从而逐步完成开放式的创造性任务。

    具体到Minecraft中的创造性建筑任务,论文提出了一个名为“鲁班(Luban)”的代理,它采用了两级自主体现验证机制,包括:

    1. 视觉验证(visual verification):通过合成CAD建模程序来自动生成3D结构推测,并对其进行视觉验证。
    2. 实用验证(pragmatic verification):通过生成与环境相关的功能程序来验证创造物的实用性,基于抽象标准进行评估。

    通过这种两级验证方法,鲁班代理能够成功完成多种创造性建筑任务,并在可视化和实用性方面超越其他基线方法。此外,论文还展示了鲁班在现实世界机械臂上的应用潜力,表明其在物理世界中执行开放式创造性任务的潜力。

    Q: 有哪些相关研究?

    A: 在这篇论文中,提到了以下几类相关研究:

    1. Minecraft代理:Minecraft游戏因其开放性和真实性,成为AI代理的重要测试平台。现有的Minecraft代理主要集中在具有长期目标和明确目标的任务上,如收集和制作材料。这些代理可以分为两类:控制中心代理和计划中心代理。控制中心代理基于从互联网收集的Minecraft游戏演示来构建基于低级游戏控制(例如鼠标和键盘操作)的任务策略。计划中心代理则侧重于利用大型语言模型的推理能力和语义知识,将高级指令与动作原语对齐,通过精心设计的记忆和反思机制来确保代理能够学习有用的技能并利用环境反馈。
    2. 3D模型合成:使用计算机生成3D模型是计算机图形学中的关键研究课题。最近,根据给定指令(文本或图像)合成3D模型的方法引起了研究者的广泛关注。3D模型合成的方法可以分为两类:一类方法直接合成3D模型(例如网格、点云、多视图图像和体素),依赖于生成模型和神经表示;另一类方法依赖于现有的计算机辅助设计(CAD)软件来首先合成建模过程的操作和参数(即程序),然后执行它们以获得3D模型。
    3. 问题定义:将Minecraft环境形式化为部分可观察马尔可夫决策过程(POMDP),并定义了开放式创造性建筑任务为指令跟随(IF)问题。
    4. 方法:介绍了Luban代理,它通过两级自主体现验证来完成开放式创造性建筑任务:3D结构推测阶段的视觉验证和建设阶段的实用验证。
    5. 实验:设计了一个包含5个Minecraft建筑任务的基准测试,以测试代理完成开放式创造性建筑任务的能力,并与其它方法进行了比较。
    6. 相关工作:论文还提到了与Minecraft代理、3D模型合成、大型语言模型(LLM)等相关的研究工作,并讨论了它们与本文提出的Luban代理的比较。

    这些相关研究为本文提出的Luban代理提供了理论和技术背景,并帮助定义了其在创造性任务中的性能和潜在应用。

    Q: 论文如何解决这个问题?

    A: 论文通过提出一个名为“鲁班(Luban)”的代理来解决开放式创造性任务的问题。鲁班代理的核心是两级自主体现验证技术,具体解决过程如下:

    1. 3D结构推测与视觉验证(3D Structural Speculation stage with Visual Verification)
      • 利用大型视觉语言模型(VLM)合成CAD程序,这些程序代表了整个建筑的精确3D形状。
      • 将3D结构推测过程分为三个子阶段:分解(Decomposition)、子组件生成(Subcomponent Generation)和组装(Assembling)。
      • 通过视觉验证来评估由CAD程序生成的3D模型的视觉效果,确保它们与指令一致。
    2. 建设阶段与实用验证(Construction stage with Pragmatic Verification)
      • 根据3D结构推测阶段得到的CAD程序,在Minecraft环境中执行一系列动作来构建建筑。
      • 实用验证旨在从任务指令中推导出明确功能,并验证构建的建筑的实用性,以提出改进下一轮创造的建议。
      • 实用验证包括验证动作生成、执行验证和反思三个子阶段。
    3. 实验验证
      • 设计了一个包含5个Minecraft建筑任务的基准,这些任务具有多样化的视觉和功能要求。
      • 通过多维度的人类研究和Elo评分,展示了鲁班代理能够成功完成所有开放式创造性建筑任务,并且在可视化和实用性方面超越了其他基线。
    4. 实际应用潜力
      • 论文还展示了鲁班代理在现实世界中的潜在应用,通过在真实世界的机械臂上进行演示,显示了鲁班在物理世界中执行开放式创造性任务的潜力。

    通过这些方法,论文不仅提出了一个能够处理创造性任务的智能代理,还通过实验验证了其有效性,并探讨了其在现实世界中的应用前景。

    Q: 论文做了哪些实验?

    A: 论文中进行了以下实验来验证Luban代理的性能和效果:

    1. 基准测试设计:作者设计了一个包含5个Minecraft建筑任务的基准测试,这些任务具有多样化的结构和功能要求。每个任务的指令由文本和多视图图像组成。
    2. 基线比较:Luban代理与几种现有的Minecraft代理基线进行了比较,包括Voyager代理和Creative代理。这些基线代理在处理创造性建筑任务时没有使用环境反馈。
    3. 质量评分:通过多维度的人类研究,对每个任务的结果进行了质量评分。评分包括外观、复杂性、美学、建筑级别功能和环境级别功能等维度。
    4. 一对一比较:进行了一对一比较,以评估不同基线之间的结果。这涉及到选择同一任务和不同基线的结果对,并由人类评估者选择胜者。
    5. 实用验证通过率:计算了Luban代理自主提出的实用验证动作在其他基线上的通过率,以评估其实用性。
    6. 消融研究:进行了消融研究来分析Luban代理的视觉验证和实用验证的影响。消融的基线包括没有实用验证的Luban代理、没有视觉验证的Luban代理,以及两者都没有的Luban代理。
    7. 现实世界应用潜力:展示了Luban代理在现实世界中执行任务的潜力,通过在真实世界的机械臂上进行演示,显示了其在物理世界中执行开放式创造性任务的能力。
    8. 人类评估者研究:招募了15名人类评估者对Minecraft创造性建筑结果进行评估,评估者的游戏经验从“从未玩过”到“游戏时间≥20小时”。
    9. 问卷和界面:设计了问卷和界面,以收集人类评估者对建筑结果的多维度质量评分和一对一比较的结果。

    这些实验结果表明,Luban代理在完成开放式创造性建筑任务方面,不仅在质量评分上超越了其他基线,而且在人类评估者的偏好中也更为一致,同时展示了其在现实世界应用的潜力。

    Q: 有什么可以进一步探索的点?

    A: 根据论文内容,以下是一些可以进一步探索的点:

    1. 记忆机制的引入:当前的Luban代理缺乏记忆机制,无法在多个任务之间共享知识或从环境中持续学习。研究如何为代理引入记忆机制,使其能够积累和利用经验,可能是一个有价值的研究方向。
    2. 更精细的3D结构推断:由于访问成本和能力限制,Luban在生成更精细的3D结构推断方面存在局限。探索如何降低成本并提高能力,以生成更精细的结构,可能是另一个研究点。
    3. 现实世界应用:虽然论文中提到了Luban在现实世界中的潜在应用,但这部分仍处于原型阶段。未来的工作可以探索如何在现实世界中部署和优化Luban,以及如何处理现实世界中的法律和安全问题。
    4. 扩展功能和实用性:Luban的实用验证可以进一步扩展,以在现实世界中获取反馈,构建一个闭环的、开放的创造性代理,这将有助于代理更好地适应现实世界的环境。
    5. 自主学习和技能获取:研究如何使Luban能够自主学习新技能,并将其应用于创造性任务,这可能涉及到更高级的自主体现学习和强化学习技术。
    6. 多模态输入和输出:Luban目前主要处理视觉和语言输入。探索如何整合更多模态的输入和输出(如声音、触觉反馈等)可能会增强代理的创造性和适应性。
    7. 更广泛的任务类型:Luban目前专注于建筑任务。研究如何将其扩展到更广泛的任务类型,如艺术创作、设计、规划等,可能是一个有趣的研究方向。
    8. 用户交互和指导:研究如何改进用户与Luban的交互方式,以及如何通过用户指导来引导和改进代理的创造性输出。
    9. 性能优化和计算效率:探索优化Luban性能的方法,提高其计算效率,特别是在处理大规模或复杂任务时。
    10. 伦理和社会影响:随着Luban等创造性代理的发展,研究其对社会、伦理和法律的潜在影响,确保技术进步与社会价值相协调。

    这些探索点可以帮助推动开放式创造性代理技术的发展,并为未来的研究提供新的方向。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容可以概括为以下几个要点:

    1. 研究目标:构建能够自主完成开放式创造性任务的智能代理,特别是在没有明确目标和抽象标准的情况下。
    2. 问题识别:现有的大型语言模型(LLM)代理在处理具有明确目标的长期任务方面表现出色,但在创造性任务上存在挑战,主要因为缺乏有效的自我评估和反馈机制。
    3. 鲁班代理(Luban):提出了一个名为“鲁班”的代理,它采用两级自主体现验证技术来解决创造性建筑任务:
      • 视觉验证:通过合成CAD建模程序来创建3D结构,并进行视觉评估。
      • 实用验证:在环境中生成和验证与环境相关的功能程序,以确保创造物的实用性。
    4. 方法细节
      • 3D结构推测:将任务指令转化为CAD程序,通过分解、子组件生成和组装三个子阶段来设计建筑。
      • 视觉验证:从多个CAD程序中选择最佳的视觉表示,以确保与指令一致。
      • 建设阶段:将CAD程序转化为环境中的建设动作,执行建设。
      • 实用验证:通过生成功能程序和执行验证动作来评估和改进创造物的实用性。
    5. 实验验证:设计了一个包含5个Minecraft建筑任务的基准测试,通过多维度人类研究和Elo评分来评估Luban代理的性能。
    6. 结果:Luban代理在视觉和实用性方面都优于其他基线方法,显示出其在创造性建筑任务上的有效性。
    7. 现实世界应用潜力:论文还探讨了Luban在现实世界机械臂上执行任务的潜力,展示了其在物理世界中的应用前景。
    8. 未来研究方向:提出了未来可能的研究方向,包括开发3D物理世界库、扩展实用验证以获取现实世界反馈等。
    9. 限制:论文也指出了Luban的局限性,如缺乏记忆机制、高级视觉语言模型的访问成本和能力限制等。
    10. 其他细节:论文还提供了关于计算资源、实现细节、基准测试细节、附加实验结果和人类研究的额外信息。

    总的来说,这篇论文提出了一个创新的方法来解决开放式创造性任务中的挑战,并在Minecraft环境中对提出的方法进行了全面的评估和展示。

  • 探索超越模式匹配:解析大语言模型的数学理解

    随着科学发现逐渐依赖于大语言模型(LLMs)的辅助,我们开始看到这一领域的突破性进展。本文由 Siyuan Guo、Aniket Didolkar、Nan Rosemary Ke、Anirudh Goyal、Ferenc Huszár 和 Bernhard Schölkopf 合著,旨在评估大语言模型在解决数学问题时所需的不同数学技能的领域知识。

    引言:从模式匹配到领域理解

    大语言模型在处理复杂的数学问题时,不仅需要依赖预训练阶段已掌握的知识,还需要通过上下文学习或指令调整等方式,从信息中学习。本文在此基础上,提出了一种名为 NTKEval 的评估方法,该方法借鉴了神经切线核(Neural Tangent Kernel,NTK)的概念,通过在不同类型的数学数据上训练,评估大语言模型的概率分布变化。

    NTKEval 方法:评估模型的学习能力

    NTKEval 方法的核心在于通过训练不同种类的数学数据,观察大语言模型的概率分布变化,从而评估其领域理解能力。具体来说,该方法分析了大语言模型在上下文学习过程中的表现,以及在指令调整过程中的表现。结果显示,在上下文学习过程中,模型表现出了一定的领域理解能力。

    发现:上下文学习与指令调整的差异

    通过系统分析,我们发现大语言模型在上下文学习过程中,能够展现出一定的领域理解能力。然而,在指令调整过程中,无论训练数据的种类如何,模型的性能变化都趋于一致,这表明模型在不同技能上的领域理解能力存在不足。

    结论与未来展望

    本文的研究揭示了大语言模型在处理数学问题时的优势和不足。尽管在上下文学习过程中,模型能够展现出一定的领域理解能力,但在指令调整过程中,模型的表现仍有待提高。未来的研究可以进一步优化大语言模型的训练方法,提升其在不同数学技能上的理解能力。

    通过本文的研究,我们不仅揭示了大语言模型在科学发现过程中的潜力,也为未来的模型优化提供了重要的参考。


    如果您对本文的详细内容感兴趣,请访问以下链接阅读完整版论文:Learning Beyond Pattern Matching? Assaying Mathematical Understanding in LLMs


    Q: 这篇论文试图解决什么问题?

    A: 这篇论文探讨了大型语言模型(LLMs)在数学问题解决方面的理解能力,特别是在它们是否能够超越模式匹配(pattern matching)的层面上进行学习。具体来说,论文试图解决以下问题:

    1. 数学理解的评估:传统的评估方法主要关注模型已经知道的内容,而这篇论文则关注于评估LLMs在数学理解方面的能力,特别是它们如何通过上下文学习或指令调整(instruction-tuning)来学习。
    2. 深度与表面学习:论文试图区分LLMs是否能够识别问题中的深层数学结构(deep structure),而不是仅仅关注问题表述中的表面变化(surface changes)。
    3. 学习效率:论文提出了一种基于神经切线核(Neural Tangent Kernel, NTK)的方法,称为NTKEval,来评估LLMs在训练过程中概率分布的变化,以研究它们是否能够有效地从相关数据中学习。
    4. 领域知识的应用:论文探讨了LLMs在数学问题解决中是否能够利用领域知识,以及它们是否能够通过学习来快速适应新知识。
    5. 指令调整与上下文学习:论文分析了指令调整和上下文学习两种不同的学习方法对LLMs性能的影响,并探讨了它们在数学理解方面的差异。

    总的来说,这篇论文的目标是深入理解LLMs在数学领域的学习机制,以及它们是否能够展示出类似人类在解决数学问题时的深层次理解和推理能力。

    Q: 有哪些相关研究?

    A: 论文中提到了多个与大型语言模型(LLMs)在数学问题解决和元学习(meta-learning)方面的相关研究。以下是一些主要的相关研究领域和具体工作:

    1. LLMs在数学问题解决中的应用
      • OPRO (Yang et al., 2023)
      • AlphaGeometry (Trinh et al., 2024)
      • FunSearch (Romera-Paredes et al., 2024)
    2. 神经切线核(Neural Tangent Kernel, NTK)
      • Jacot et al., 2018:首次提出了NTK的概念,用于理解人工神经网络(ANNs)的泛化特性。
      • Weng, 2022:提供了NTK背后的数学原理的解释。
    3. 技能出现(Skill Emergence)
      • Arora & Goyal, 2023:从统计框架的角度研究了语言模型中复杂技能的出现。
    4. 技能选择和训练数据选择
      • Chen et al., 2023b:基于技能排序选择训练数据。
      • Chen et al., 2023a:引入了SkiC prompting来鼓励技能组合。
    5. 语言模型的背景知识
      • 包括语言模型的定义、预训练、上下文学习(in-context learning)和指令调整(instruction-tuning)。
    6. 评估方法
      • Brown et al., 2020:介绍了上下文学习的概念。
      • Zhou et al., 2023:讨论了指令调整或监督微调(instruction-tuning or supervised fine-tuning)。
    7. 特定领域的LLMs
      • 论文中还提到了一些特定于代码、数学和通用聊天模型的LLMs,如Codellama-7b、Llemma-7b和Mistral-7b。
    8. 其他相关工作
      • 论文还引用了其他一些研究,涉及语言模型的评估、技能框架、以及如何通过不同的方法来提高LLMs在数学问题解决中的性能。

    这些相关研究为理解LLMs在数学问题解决中的能力和潜力提供了理论基础和实证分析。论文通过这些相关工作来构建自己的研究框架,并提出了新的方法来评估和提高LLMs的数学理解能力。

    Q: 论文如何解决这个问题?

    A: 论文通过以下几个步骤来解决评估大型语言模型(LLMs)在数学问题解决中的理解和学习效率的问题:

    1. 提出NTKEval方法:基于神经切线核(Neural Tangent Kernel, NTK)理论,提出了NTKEval方法来评估LLMs在训练过程中概率分布的变化。这种方法特别适用于语言模型,因为它们生成的是自由形式的补全,而不是数值输出。
    2. 构建评估框架:设计了一种评估框架,通过比较模型在训练前后生成正确解决方案的概率差异,来衡量模型是否能够有效地从训练数据中学习。
    3. 创建和使用KhanSkill数据集:为了分析LLMs的数学理解与人类学习之间的一致性,作者创建了KhanSkill数据集,该数据集包含由专家编写的、反映人类理解的数学问题。
    4. 实验设计:通过实验,比较了上下文学习(in-context learning)和指令调整(instruction-tuning)两种学习方法对LLMs性能的影响。实验中,作者特别关注了模型是否能够区分深层数学结构和表面结构。
    5. 系统分析:通过系统地分析实验结果,作者发现上下文学习能够区分深层结构和表面结构,而某些指令调整方法则表现出对不同数据类型训练的相似性能变化,这表明它们可能缺乏对不同技能的领域理解。
    6. 样本效率的比较:通过比较NTKEval方法和传统计数准确率差异方法的样本效率,证明了NTKEval在捕捉模型参数空间小变化方面的有效性。
    7. 深入探讨:论文进一步探讨了LLMs是否能够理解不同的数学技能,并通过实验分析了在训练和测试时使用相关问题的示例对模型性能的影响。

    通过这些步骤,论文不仅提出了一种新的评估方法,还深入分析了LLMs在数学问题解决中的学习机制,特别是它们是否能够展示出超越模式匹配的深层次理解和推理能力。

    Q: 论文做了哪些实验?

    A: 论文中进行了一系列的实验来评估大型语言模型(LLMs)在数学问题解决中的学习效率和理解能力。以下是主要的实验内容:

    1. 样本效率比较:通过对比NTKEval方法和传统的准确率差异计数方法,展示了NTKEval在捕捉模型参数空间变化方面的样本效率优势。
    2. 上下文学习(In-context Learning, ICL)
      • 标准提示:使用随机选择的8个示例作为上下文。
      • 技能提示:将8个示例按相同类别分组,以测试模型是否能够通过看到与测试问题相同结构的示例来提高性能。
    3. 指令调整(Instruction Tuning)
      • 基础模型:在输出随机答案的数据集上进行指令调整,以减少每个LLM特有的概率变化。
      • 技能调整模型:在问题属于相同类别的数据集上进行指令调整。
    4. 深层与表面结构的区分:测试LLMs是否能够基于深层数学技能(如加法、减法等)与表面问题格式(如问题、指令、符号和文字问题)来回答问题,并比较这两种情况下的性能差异。
    5. 不同数学技能的理解:评估LLMs在看到按技能分组的相关示例时,是否能够更快地学习并在测试时有效利用目标技能和不同技能。
    6. 技能特定与非技能特定示例的影响:比较在技能特定和非技能特定(即离对角线技能)示例上进行指令调整时,模型在测试时的性能变化。
    7. KhanSkill数据集的评估:使用KhanSkill数据集,该数据集包含93种技能,每种技能有20个问题,来评估模型的数学理解能力。
    8. 不同模型的比较:在Code Llama 7b、Llemma 7b和Mistral 7b等不同模型上进行实验,以测试专门针对代码、数学和通用聊天模型的领域理解。

    这些实验设计旨在深入理解LLMs在数学问题解决中的学习机制,特别是在它们是否能够展示出超越模式匹配的深层次理解和推理能力。通过这些实验,论文能够提供关于LLMs数学理解能力的系统性分析。

    Q: 有什么可以进一步探索的点?

    A: 论文提出了对大型语言模型(LLMs)在数学问题解决方面理解能力的评估方法,并展示了一些有趣的发现。然而,仍有一些领域可以进一步探索:

    1. 更广泛的数据集和问题类型:研究是否可以将NTKEval方法应用于更广泛的数学问题和数据集,包括更高级的数学概念和更复杂的推理任务。
    2. 不同学习策略的比较:探索和比较不同的学习策略,如元学习(meta-learning)和其他自适应学习方法,以确定哪些方法在数学理解方面最有效。
    3. 跨领域应用:研究NTKEval方法是否可以应用于其他领域,例如自然科学、工程学或社会科学,以评估LLMs在这些领域的理解能力。
    4. 模型的可解释性:提高模型的可解释性,以便更好地理解LLMs是如何学习和解决数学问题的,特别是在它们如何识别和利用深层结构方面。
    5. 模型的泛化能力:研究LLMs在面对未见过的问题类型或数据分布变化时的泛化能力。
    6. 模型的鲁棒性:测试和提高模型对于输入噪声、错误示例或对抗性攻击的鲁棒性。
    7. 模型的效率:优化模型的训练和推理过程,以减少计算资源的需求,提高效率。
    8. 人类与模型的协作:研究如何将LLMs与人类专家更有效地结合起来,以解决复杂的数学问题,特别是在教育和研究领域。
    9. 模型的伦理和社会影响:探讨LLMs在数学教育和问题解决中的应用可能带来的伦理和社会影响,包括对教育公平、隐私和数据安全的影响。
    10. 模型的自我改进:研究LLMs是否能够通过自我反思和自我改进来提高其在数学问题解决方面的能力。

    这些探索点可以帮助我们更深入地理解LLMs的潜力和局限性,并为未来的研究和应用提供指导。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容可以概括为以下几个要点:

    1. 研究动机:随着大型语言模型(LLMs)在科学发现中的创造性应用逐渐增多,论文旨在评估LLMs在数学问题解决方面的领域知识,特别是它们对所需数学技能的理解。
    2. 评估方法:论文提出了一种基于神经切线核(Neural Tangent Kernel, NTK)的评估方法,称为NTKEval,用于分析LLMs在训练过程中概率分布的变化。
    3. 学习方式:研究了LLMs通过上下文学习和指令调整(instruction-tuning)两种方式进行学习的效果,特别关注了它们是否能够从训练数据中有效地学习数学知识。
    4. 数据集:为了评估LLMs的数学理解能力,论文创建了KhanSkill数据集,包含93种数学技能,每种技能有20个问题。
    5. 实验结果
      • 上下文学习(In-context Learning, ICL)能够区分深层数学结构和表面结构,显示出对数学技能的理解。
      • 指令调整(Instruction Tuning)在不同数据类型上的适应性表现出相似的性能变化,暗示可能缺乏对不同数学技能的领域理解。
    6. 样本效率:NTKEval显示出比传统准确率差异计数方法更高的样本效率,能够更快地捕捉到模型参数空间的小变化。
    7. 领域理解:论文通过系统分析发现,上下文学习表现出对数学领域的理解,而某些指令调整方法则没有表现出对不同数学技能的区分能力。
    8. 进一步探索:论文提出了未来研究的方向,包括探索更广泛的数据集、不同的学习策略、跨领域应用、模型的可解释性、泛化能力、鲁棒性、效率、人类与模型的协作、伦理和社会影响以及模型的自我改进。

    总的来说,这篇论文通过提出NTKEval方法,对LLMs在数学问题解决中的学习效率和领域理解能力进行了深入的研究和评估。

  • Neuromorphic Dreaming: 高效学习的未来路径

    引言

    在人工智能(AI)计算平台上实现高效的能源利用是一个关键挑战。生物系统展示了在复杂技能学习中的快速且高效的能力,这为AI的研究提供了重要的灵感。因此,本文提出了一种基于模型的强化学习(Model-Based Reinforcement Learning,MBRL)方法,使用混合信号类脑(neuromorphic)硬件上的脉冲神经网络(Spiking Neural Networks,SNNs)进行实现,从而提高样本效率和能源效率。

    基于模型的强化学习

    混合信号神经形态硬件

    混合信号神经形态硬件结合了模拟和数字信号处理的优点,能够在低功耗的情况下实现复杂的神经网络计算。本文使用的DYNAP-SE神经形态处理器架构,基于指数泄露积分发放(ExLIF)模型,实现了高效的神经元动态模拟。

    “清醒-做梦”学习阶段

    提出了一种”清醒-做梦”学习模式,交替进行在线学习(清醒阶段)和离线学习(做梦阶段)。在清醒阶段,代理与真实环境互动并更新其策略和世界模型;在做梦阶段,代理使用学习到的世界模型生成模拟经验,进一步细化策略。这种方法模拟了生物大脑在清醒和睡眠状态下的学习过程,提高了学习效率。

    两个共生网络

    模型包括两个网络:一个代理网络,通过结合真实和模拟经验进行学习;一个学习到的世界模型网络,用于生成模拟经验。这两个网络相互作用,共同提高系统的学习效率。

    实验设计

    为了验证所提出方法的有效性,本文在Atari游戏Pong中进行了实验。实验包括以下几个步骤:

    基线代理无做梦能力

    建立了一个没有做梦能力的SNN基线代理,架构包括一个输入层,一个隐藏层(由510个漏斗积分发放(LIF)神经元组成),以及一个3单元读出层。代理仅在读出层更新权重,使用基于奖励的策略梯度规则进行训练。

    代理加入做梦能力

    在基线代理的基础上增加了做梦能力,使用一个单独的模型网络来学习环境动态。模型网络架构与代理类似,但有3个额外的动作输入和4+1个读出单元来预测下一个状态和奖励。

    时间考虑

    为了优化系统性能和训练时间,研究了10毫秒、20毫秒和50毫秒的等待时间,最终选择了10毫秒的等待时间以最小化训练时间。

    实验设置

    实验在OpenAI Gym工具包中的Atari Pong视频游戏环境中进行,每个训练运行包括2000个游戏,每个游戏持续100帧。进行了10次独立的训练运行,以确保结果的稳健性和可靠性。

    实验结果

    实验结果显示,通过引入做梦能力,显著提高了样本效率,使得代理在与真实环境的交互次数减半的情况下达到更高的分数。图表展示了有无做梦能力的代理在训练过程中的平均回报以及策略熵的演变。

    未来研究方向

    论文提出了多个未来研究方向,包括:

    • 将读出层的权重量化,并转移到神经形态芯片上
    • 使用泊松脉冲发生器进行输入编码
    • 在更复杂的游戏和现实世界应用上测试方法
    • 训练世界模型以应对更复杂的任务和环境
    • 优化神经形态硬件的参数
    • 提高系统的鲁棒性
    • 探索不同的学习规则和网络架构

    结论

    本文提出了一种新颖的基于模型的强化学习方法,通过结合神经形态硬件和“清醒-做梦”学习模式,提高了AI系统的能源效率和学习能力。实验结果验证了该方法的有效性,展示了其在现实世界应用中的潜力。这种方法为开发能够快速适应真实世界环境的高效智能系统提供了新的思路。


    通过本文的研究,我们看到了神经形态硬件在未来AI发展中的巨大潜力。随着技术的不断进步,我们有理由相信,未来的智能系统将不仅更加智能,还会更加环保和高效。


    Achieving energy efficiency in learning is a key challenge for artificial intelligence (AI) computing platforms. Biological systems demonstrate remarkable abilities to learn complex skills quickly and efficiently. Inspired by this, we present a hardware implementation of model-based reinforcement learning (MBRL) using spiking neural networks (SNNs) on mixed-signal analog/digital neuromorphic hardware. This approach leverages the energy efficiency of mixed-signal neuromorphic chips while achieving high sample efficiency through an alternation of online learning, referred to as the “awake” phase, and offline learning, known as the “dreaming” phase. The model proposed includes two symbiotic networks: an agent network that learns by combining real and simulated experiences, and a learned world model network that generates the simulated experiences. We validate the model by training the hardware implementation to play the Atari game Pong. We start from a baseline consisting of an agent network learning without a world model and dreaming, which successfully learns to play the game. By incorporating dreaming, the number of required real game experiences are reduced significantly compared to the baseline. The networks are implemented using a mixed-signal neuromorphic processor, with the readout layers trained using a computer in-the-loop, while the other layers remain fixed. These results pave the way toward energy-efficient neuromorphic learning systems capable of rapid learning in real world applications and use-cases.

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文试图解决的关键问题是在人工智能(AI)计算平台上实现能源效率的学习。具体来说,它探讨了如何借鉴生物系统快速高效学习复杂技能的能力,来开发一种硬件实现的基于模型的强化学习(MBRL)方法,该方法使用混合信号类脑(neuromorphic)硬件上的脉冲神经网络(SNNs)。这种方法旨在利用混合信号神经形态芯片的能源效率,并通过在线学习(即“清醒”阶段)和离线学习(即“做梦”阶段)的交替来实现高样本效率。通过这种“清醒-做梦”学习模式,论文中的模型能够在有限的真实环境交互下,通过模拟经验来提高学习效率,从而为开发能够快速学习现实世界应用案例的能源高效神经形态学习系统铺平了道路。

    Q: 有哪些相关研究?

    A: 这篇论文提到了多个与神经形态硬件、脉冲神经网络(SNNs)、强化学习以及相关学习算法和架构相关的研究。以下是一些论文中引用的相关研究:

    1. 深度强化学习(DRL)算法的适应:论文中提到了将深度Q网络(DQN)和双延迟深度确定性策略梯度(TD3)等深度强化学习算法适应于脉冲网络,这些网络在离散和连续动作空间环境中都得到了应用。
    2. 基于模型的强化学习(MBRL):论文采用了一种最近提出的MBRL方法,该方法使用SNNs并且与神经形态硬件实现兼容。
    3. 神经形态硬件:论文中讨论了神经形态计算系统,这些系统使用专门的硬件基板来模拟生物神经网络的计算原理。
    4. DYNAP-SE神经形态处理器架构:论文中使用了DYNAP-SE这一通用神经形态处理器架构,它实现了基于指数泄露积分发放(ExLIF)模型的基本神经元动态。
    5. e-prop方法:这是一种生物学上合理的演员-评论家和通过时间的反向传播的形式,代表了脉冲网络强化学习的最新技术方法。
    6. Spike-timing-dependent plasticity (STDP):论文中提到了基于奖励信号调节STDP的想法,这是强化学习在脉冲网络中的一种实现方式。
    7. 局部突触可塑性规则:论文中提到了使用基于奖励的局部可塑性规则的方法,这些方法对于简单任务效果很好,但在复杂的控制场景中面临限制。
    8. 记忆整合和强化学习:论文中提到了做梦在记忆整合和生物大脑中的强化学习中的作用。
    9. 人口编码技术:用于将环境状态变量和选定的动作转换为可以被网络处理的脉冲序列。

    这些研究为论文提出的模型提供了理论和技术基础,帮助实现了在神经形态硬件上的高效学习。论文通过结合这些研究成果,提出了一种新的神经形态学习系统,该系统能够在真实世界应用和用例中实现快速学习,并且具有能源效率。

    Q: 论文如何解决这个问题?

    A: 论文通过以下几个关键步骤来解决人工智能学习平台的能源效率问题:

    1. 模型基础强化学习(MBRL):论文提出了一种基于模型的强化学习方法,这种方法使用脉冲神经网络(SNNs),并且与神经形态硬件兼容。这种方法被证明比现有的无模型强化学习方法更具样本效率。
    2. 混合信号神经形态硬件:利用混合信号神经形态芯片的能源效率,特别是DYNAP-SE神经形态处理器架构,该架构实现了指数泄露积分发放(ExLIF)模型的神经元动态。
    3. “清醒-做梦”学习阶段:提出了一种”清醒-做梦”学习模式,其中包括在线学习和离线学习的交替。在”清醒”阶段,代理与真实环境互动并更新其策略和世界模型;而在”做梦”阶段,代理使用学习到的世界模型生成模拟经验,进一步细化策略。
    4. 两个共生网络:模型包括两个网络:一个代理网络,通过结合真实和模拟经验学习;一个学习到的世界模型网络,用于生成模拟经验。
    5. 硬件实现:通过使用混合信号神经形态处理器,其中读出层通过与计算机的交互进行训练,而其他层保持固定,实现了网络的硬件实现。
    6. 输入编码:使用人群编码技术将游戏状态变量和选定的动作转换为可以被网络处理的脉冲序列。
    7. 实验验证:通过在Atari游戏Pong上的实验,验证了所提出模型的有效性。实验结果表明,通过引入”做梦”阶段,显著减少了与真实环境的交互次数,同时保持了良好的性能。

    通过这些方法,论文展示了一种能够在真实世界应用和用例中快速学习且能源效率高的神经形态学习系统。这种方法受到生物神经系统的启发,并利用了神经形态硬件的计算优势。

    Q: 论文做了哪些实验?

    A: 论文中进行了一系列的实验来评估所提出的基于神经形态硬件的强化学习方法。以下是实验的主要内容:

    1. 基线代理无做梦能力(Baseline agent without dreaming)
      • 建立了一个没有做梦能力的SNN基线代理。
      • 代理架构包括一个输入层,一个隐藏层(由510个漏斗积分发放(LIF)神经元组成),以及一个3单元读出层。
      • 仅在读出层更新权重,使用基于奖励的策略梯度规则。
    2. 代理加入做梦能力(Agent with dreaming)
      • 在基线代理的基础上增加了做梦能力,使用一个单独的模型网络来学习环境动态。
      • 模型网络架构与代理类似,但有3个额外的动作输入和4+1个读出单元来预测下一个状态和奖励。
      • 训练在“清醒”阶段和“做梦”阶段之间交替进行。
    3. 时间考虑(Timing considerations)
      • 优化系统性能和训练时间需要仔细考虑更新输入和从隐藏神经元读取脉冲之间的等待时间。
      • 研究了10毫秒、20毫秒和50毫秒的等待时间,选择了10毫秒的等待时间以最小化训练时间。
    4. 实验设置(Experiments and results)
      • 在OpenAI Gym工具包中的Atari Pong视频游戏环境中进行了一系列的实验。
      • 每个训练运行包括2000个游戏,每个游戏持续100帧。
      • 进行了10次独立的训练运行,以确保结果的稳健性和可靠性。
    5. 结果(Results)
      • 通过图表展示了有无做梦能力的代理在训练过程中的平均回报。
      • 观察到引入做梦能力可以显著提高样本效率,使得代理在与真实环境的交互次数减半的情况下达到更高的分数。
      • 还展示了具有做梦能力的一个代表性训练运行中策略熵的演变。
    6. 讨论(Discussion)
      • 论文讨论了实验结果的意义、方法的局限性以及未来研究的方向。
    7. 结论(Conclusion)
      • 论文总结了实验结果,强调了基于模型的强化学习与脉冲网络在神经形态硬件上实现样本效率高和能源效率高的学习系统的潜力。

    这些实验验证了所提出方法的有效性,并展示了在神经形态硬件上实现强化学习代理的可行性。通过做梦阶段的引入,代理能够在有限的真实环境交互下实现更有效的学习。

    Q: 有什么可以进一步探索的点?

    A: 论文在讨论部分提出了一些潜在的研究方向和可以进一步探索的点,以下是几个主要的点:

    1. 将读出层转移到神经形态芯片上
      • 探索将读出层的权重量化,并使用并行连接或利用下一代芯片更可编程的特性和突触权重,将这些层转移到神经形态芯片上。
    2. 使用泊松脉冲发生器进行输入编码
      • 考虑使用泊松脉冲发生器作为输入编码方案,这可能需要进一步的工程优化,以减少DYNAP-SE芯片上泊松脉冲发生器的更新时间。
    3. 在更广泛的任务上测试方法
      • 在更复杂的游戏和现实世界应用上测试所提出的方法,以评估其普适性和可扩展性。
    4. 训练世界模型以应对更复杂的任务和环境
      • 考虑使用多个代理在训练过程中收集更多样的环境信息,以提高模型网络捕捉环境动态的能力。
    5. 优化神经形态硬件的参数
      • 进一步研究和优化DYNAP-SE芯片的参数,以改善性能和可靠性。
    6. 提高系统的鲁棒性
      • 研究如何提高系统对设备不匹配和环境变化的鲁棒性,例如通过群体编码、片上学习和校准机制。
    7. 探索不同的学习规则和网络架构
      • 研究其他可能更适合神经形态硬件的本地学习规则和网络架构。
    8. 开发更高级的模拟环境
      • 开发更高级的模拟环境,以更好地模拟真实世界的情况,并用于训练和测试神经形态系统。
    9. 集成更复杂的记忆和规划机制
      • 探索如何将更复杂的记忆和规划机制集成到神经形态系统中,以提高其在复杂任务中的表现。
    10. 跨学科合作
      • 鼓励神经科学、计算机科学、电子工程等领域的研究人员之间的合作,以推动神经形态计算和智能系统的发展。

    这些探索点可以帮助推动神经形态计算领域的发展,并为创建能够适应真实世界环境的智能系统提供新的思路和方法。

    Q: 总结一下论文的主要内容

    A: 这篇论文《Neuromorphic dreaming: A pathway to efficient learning in artificial agents》主要探讨了如何通过模仿生物神经系统的高效学习能力,提高人工智能(AI)计算平台的能源效率。以下是论文的主要内容概述:

    1. 问题背景:随着AI模型的不断进步,能源效率成为了一个关键挑战。生物系统能够快速且高效地学习复杂技能,这为AI提供了灵感。
    2. 研究目标:提出一种基于模型的强化学习方法(MBRL),使用脉冲神经网络(SNNs)在混合信号类脑(neuromorphic)硬件上实现,以提高样本效率和能源效率。
    3. 方法论
      • 神经形态硬件:使用DYNAP-SE神经形态处理器,该处理器采用指数泄露积分发放(ExLIF)模型实现神经元动态。
      • “清醒-做梦”学习阶段:交替进行在线学习(清醒)和离线学习(做梦)阶段,以提高学习效率。
      • 两个网络:代理网络和世界模型网络,前者负责决策制定,后者负责模拟环境动态。
    4. 实验设计
      • 在Atari Pong游戏中进行实验,验证模型的有效性。
      • 对比有无“做梦”阶段的代理性能,以及策略熵随训练的变化。
    5. 实验结果
      • 引入“做梦”阶段显著提高了样本效率,减少了与真实环境的交互次数。
      • 代理能够更快地达到更高的游戏分数,并且策略熵随着训练的进行而降低,表明代理的行动选择变得更加自信。
    6. 讨论与贡献
      • 论文讨论了使用DYNAP-SE神经形态处理器实现实时交互的重要性和挑战。
      • 提出了未来研究方向,包括将读出层转移到神经形态芯片上,使用泊松脉冲发生器进行输入编码,以及在更复杂的任务和环境中测试方法。
    7. 结论
      • 论文总结了通过在神经形态硬件上实现基于模型的强化学习,可以创建出既节能又高效的学习系统。
      • 强调了这种方法在开发能够适应真实世界环境的智能代理方面的潜力。

    整体而言,论文提出了一种新颖的方法,通过结合神经形态硬件和强化学习,提高了AI系统的能源效率和学习能力,为未来智能系统的发展提供了新的思路。

  • 提高MySQL性能:修改事务隔离级别的最佳实践

    在实际生产环境中,合理选择和调整MySQL的事务隔离级别可以显著提升系统的性能。然而,事务隔离级别的调整需要结合实际业务需求和系统的并发访问情况,因此需要对其特点及适用场景有充分的了解。本文将详细介绍如何通过修改MySQL的事务隔离级别来提高性能,并提供相关的操作方法。

    了解事务隔离级别的特点和适用场景

    MySQL定义了四种常见的事务隔离级别:

    1. 读未提交(Read Uncommitted):允许一个事务读取另一个事务未提交的数据,可能导致脏读问题。不推荐在生产环境中使用。
    2. 读提交(Read Committed):一个事务只能读取已经提交的数据,避免了脏读问题,但可能导致不可重复读问题。适用于大多数场景。
    3. 可重复读(Repeatable Read):一个事务在执行期间多次读取同一数据时,能够保证读取到的结果一致,避免了脏读和不可重复读问题,但可能存在幻读问题。是InnoDB的默认隔离级别。
    4. 串行化(Serializable):最高的隔离级别,强制事务串行执行,避免了脏读、不可重复读和幻读问题,但降低了并发性能。

    评估当前系统的性能瓶颈

    在修改事务隔离级别之前,需要先评估当前系统的性能瓶颈。通过性能监控工具(如MySQL的Explain、Slow Query Log等)来分析系统的性能问题,确定是否由于事务隔离级别不当导致性能瓶颈。

    修改事务隔离级别的方法

    临时修改

    可以在当前会话中临时修改事务隔离级别,使用以下命令:

    SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level>;

    例如,将隔离级别设置为读提交:

    SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

    全局修改

    全局修改事务隔离级别,需要重启MySQL服务才能生效,使用以下命令:

    SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level>;

    例如,将隔离级别设置为可重复读:

    SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

    选择合适的事务隔离级别

    根据实际业务需求和并发访问情况选择合适的事务隔离级别:

    • 读提交(Read Committed):适用于大多数场景,可以避免脏读问题。
    • 可重复读(Repeatable Read):适用于需要保证数据一致性,但不介意幻读问题的场景。
    • 串行化(Serializable):适用于需要最高数据一致性的场景,但要注意可能导致的并发性能问题。

    监控和调优

    在修改事务隔离级别后,需要进行性能监控和调优,确保系统的性能得到提升。可以使用MySQL的性能监控工具,如Explain、Slow Query Log等,来分析和优化查询语句的性能。

    参考资料

    1. MySQL事务隔离级别详解及默认设置_mysql默认事务隔离级别-CSDN博客
    2. MySQL事务隔离级别的最佳实践(上)-阿里云开发者社区
    3. MySQL:修改事务隔离级别和常用语句 – 划水的鱼dm – 博客园

    通过合理选择和调整事务隔离级别,可以在保证数据一致性的同时,提高系统的并发性能。但需要注意的是,事务隔离级别的调整应该根据实际业务需求和并发访问情况进行权衡,以确保系统的稳定和高效运行。


    要查询当前MySQL全局事务隔离级别,可以使用以下SQL命令:

    SELECT @@GLOBAL.transaction_isolation;

    这个命令会返回当前MySQL实例的全局事务隔离级别。以下是一个示例输出:

    mysql> SELECT @@GLOBAL.transaction_isolation;
    +------------------------------+
    | @@GLOBAL.transaction_isolation |
    +------------------------------+
    | REPEATABLE-READ              |
    +------------------------------+
    1 row in set (0.00 sec)

    在这个例子中,MySQL的全局事务隔离级别是“REPEATABLE-READ”。

    另外,你也可以查询当前会话的事务隔离级别,使用以下命令:

    SELECT @@SESSION.transaction_isolation;

    这个命令会返回当前会话的事务隔离级别。

    mysql> SELECT @@SESSION.transaction_isolation;
    +-------------------------------+
    | @@SESSION.transaction_isolation |
    +-------------------------------+
    | REPEATABLE-READ               |
    +-------------------------------+
    1 row in set (0.00 sec)

    在这个例子中,当前会话的事务隔离级别也是“REPEATABLE-READ”。

    通过这些命令,你可以方便地查看MySQL的事务隔离级别设置,以便进行相应的调整和优化。


    什么是幻读问题?

    幻读(Phantom Read)是指在一个事务中,多次执行同一个查询时,结果集的行数可能不一致。具体来说,当一个事务在查询某一范围的数据时,另一个事务在该范围内插入了新的数据,导致前一个事务再次查询时,结果集中出现了“幻影”数据。这种现象通常发生在并发事务处理中,是一种并发一致性问题。

    幻读问题的示例

    假设有一个表 heros_temp,记录了许多英雄的信息。以下是一个简单的示例来说明幻读问题:

    1. 事务A:开始一个事务并查询所有英雄: BEGIN; SELECT * FROM heros_temp WHERE id BETWEEN 1 AND 20; 此时,假设查询结果包含10条记录。
    2. 事务B:在 heros_temp 表中插入一个新的英雄记录,该记录的 id 在事务A查询的范围内: BEGIN; INSERT INTO heros_temp (id, name) VALUES (15, '吕布'); COMMIT;
    3. 事务A:再次执行相同的查询:
      sql SELECT * FROM heros_temp WHERE id BETWEEN 1 AND 20;
      此时,查询结果会包含11条记录,因为事务B插入的新记录也被包含进来。这就产生了幻读现象。

    InnoDB 如何解决幻读问题

    InnoDB存储引擎默认的事务隔离级别是 可重复读(Repeatable Read)。虽然可重复读能够避免脏读(Dirty Read)和不可重复读(Non-repeatable Read)问题,但它不能完全避免幻读问题。

    使用Next-Key Locks

    InnoDB通过使用一种称为 Next-Key Locks 的锁机制来部分解决幻读问题。Next-Key Locks结合了行锁和间隙锁,锁定了索引记录以及索引记录之间的间隙,从而阻止其他事务在锁定范围内插入新记录。

    例如,在上述示例中,当事务A执行查询时,InnoDB会锁定 id 为1到20之间的所有记录,以及这些记录之间的间隙。这意味着在事务A提交之前,事务B无法在 id 为1到20之间插入新的记录,从而避免幻读问题。

    完全避免幻读

    要完全避免幻读,可以将事务隔离级别设置为 串行化(Serializable)。在串行化隔离级别下,事务将按照顺序执行,确保事务之间完全隔离,从而避免所有并发一致性问题,包括幻读。

    SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

    然而,串行化隔离级别会显著降低系统的并发性能,因此需要根据实际业务需求进行权衡。

    总结

    幻读是并发事务处理中常见的一种一致性问题,指的是一个事务在多次执行相同查询时,结果集中出现了其他事务新插入的记录。InnoDB通过使用Next-Key Locks部分解决了幻读问题,但要完全避免幻读,需要将事务隔离级别设置为串行化。选择合适的事务隔离级别,需要在性能和数据一致性之间进行权衡。


  • 利用大型语言模型提升客户支持服务的创新方法

    作者:Dean Wyatte, Fatemeh Tahmasbi, Ming Li, Thomas Markovich

    大型语言模型(Large Language Models,LLMs)在生成多样化查询的合理答案方面表现出色,代表了机器学习模型的一次重大飞跃。然而,这些模型在客户支持应用中也面临着一系列挑战,例如容易产生幻觉(hallucination)和数据泄露风险。本文将探讨如何通过将语言建模任务重新定义为判别性分类任务,来利用LLMs增强客户支持服务。

    问题背景与研究目标

    尽管LLMs在生成多样化查询的合理答案方面表现出色,但它们的短期应用在客户支持中面临挑战。幻觉答案和数据泄露风险使得它们的直接应用受到限制。为了解决这些问题,本文提出了一种系统,将语言建模任务重新定义为判别性分类任务,帮助客服代表选择最佳的模板回复。

    方法论:两阶段训练流程

    为了有效利用LLMs来增强客户支持服务,本文提出了一个两阶段训练流程:

    领域适应性预训练(Domain Adaptive Pre-training)

    首先,使用预训练的LLM,并在目标领域的数据上继续预训练。本文使用了Cash App客户支持记录的数据进行预训练,这有助于模型学习特定领域的语言和上下文。

    判别性微调(Discriminative Fine-tuning)

    在领域适应的基础上,添加一个新的线性层,并在标记了客服代表模板回复选择的较小数据集上进行端到端的微调,以产生最终的分类器。

    数据集准备与模型选择

    数据集准备

    本文使用Cash App客户支持记录构建数据集,并进行了处理以去除个人识别信息(PII),确保数据安全和隐私。

    模型选择

    选用了基于GPTNeoX架构的Pythia系列LLMs,这些模型在预训练阶段已经学习了大量的通用网络数据。

    实验设计与结果

    离线训练和评估(Offline Training and Evaluation)

    通过不同的指标(如FLOPs、语言模型损失、分类损失等)来评估模型在不同规模下的性能和效率。分析了模型大小、训练数据量与模型性能之间的关系。

    在线案例研究(Online Case Study)

    在实际的客户支持系统中部署模型,以评估模型在现实世界中的有效性。通过将预测结果从随机选择的2%的客服交互中移除,来衡量系统对客服代表选择模板的影响。

    A/B测试与响应时间节省分析

    对模型的不同版本进行A/B测试,以评估模型更新对客服效率指标的影响。评估模型预测对客服代表选择正确模板所需时间的影响,并与没有使用模板的情况进行了比较。

    实际部署考虑

    本文讨论了将这些模型投入生产时的实际考虑,包括模型的更新策略、延迟要求和业务指标的影响。研究了模型大小、延迟和准确性之间的权衡,并提出了针对不同需求的模型参数调整建议。

    未来研究方向

    本文在最后一部分提出了一些可能的未来研究方向和可以进一步探索的点:

    • 模型大小与准确性的关系:研究不同大小的模型在特定任务上的表现。
    • 领域适应的扩展性:探索在不同领域和不同规模的数据集上进行领域适应的效果。
    • 判别性微调的策略:研究不同的判别性微调方法,提高模型的分类性能。
    • 安全性和可靠性:研究如何提高模型的安全性和可靠性,特别是在客户支持等敏感应用中。
    • 计算效率:研究如何优化模型的计算效率,减少延迟。
    • 模型更新和维护:探索更有效的模型更新策略,以适应不断变化的业务需求和数据分布。
    • 跨领域应用:研究如何将该系统扩展到其他领域,例如医疗、法律或金融服务。
    • 用户交互和体验:研究如何改进用户界面和交互设计,提高客户支持代表使用LLM辅助系统的效率和满意度。
    • 模型解释性:提高模型的可解释性,增强对模型的信任。
    • 多模态数据处理:将文本数据与其他类型的数据(如语音、图像等)结合起来,以丰富模型的输入并提高其性能。

    结论

    通过重新定义语言建模任务为判别性分类任务,本文提出了一种利用LLMs增强客户支持服务的创新方法。通过领域适应性预训练和判别性微调,模型在特定任务上的性能得到了显著提升,同时避免了幻觉和数据泄露的风险。未来的研究方向为进一步提升LLMs在客户支持和其他领域的应用效果提供了广阔的空间。


    Scaling Laws for Discriminative Classification in Large Language Models

    https://papers.cool/arxiv/2405.15765

    Authors: Dean Wyatte ; Fatemeh Tahmasbi ; Ming Li ; Thomas Markovich

    Summary: Modern large language models (LLMs) represent a paradigm shift in what can plausibly be expected of machine learning models. The fact that LLMs can effectively generate sensible answers to a diverse range of queries suggests that they would be useful in customer support applications. While powerful, LLMs have been observed to be prone to hallucination which unfortunately makes their near term use in customer support applications challenging. To address this issue we present a system that allows us to use an LLM to augment our customer support advocates by re-framing the language modeling task as a discriminative classification task. In this framing, we seek to present the top-K best template responses for a customer support advocate to use when responding to a customer. We present the result of both offline and online experiments where we observed offline gains and statistically significant online lifts for our experimental system. Along the way, we present observed scaling curves for validation loss and top-K accuracy, resulted from model parameter ablation studies. We close by discussing the space of trade-offs with respect to model size, latency, and accuracy as well as and suggesting future applications to explore.

  • 重温SSM(一):线性系统和HiPPO矩阵

    引言

    前几天,我看了几篇介绍SSM(State Space Model)的文章,才发现自己从未认真了解过SSM,于是决定深入学习相关内容,并记录下我的学习所得。SSM的概念由来已久,但我们这里特指的是深度学习中的SSM。一般认为它的开篇之作是2021年的S4,而SSM最新的变体大概是去年的Mamba。

    SSM的背景与发展

    SSM在深度学习中的应用起源于S4,但在S4之前有一篇重要的奠基之作《HiPPO: Recurrent Memory with Optimal Polynomial Projections》(简称HiPPO)。本文将从HiPPO开始,深入探讨其基本形式、数学推导及其在SSM中的应用。

    基本形式

    对于已经对SSM有所了解的读者,可能知道SSM建模所用的是线性ODE系统:
    [
    \begin{aligned}
    x'(t) =&\, A x(t) + B u(t) \
    y(t) =&\, C x(t) + D u(t)
    \end{aligned}
    ]
    其中 (u(t) \in \mathbb{R}^{d_i}, x(t) \in \mathbb{R}^{d}, y(t) \in \mathbb{R}^{d_o}, A \in \mathbb{R}^{d \times d}, B \in \mathbb{R}^{d \times d_i}, C \in \mathbb{R}^{d_o \times d}, D \in \mathbb{R}^{d_o \times d_i})。

    线性系统的选择

    线性系统之所以被选择,是因为它们既足够简单,也足够复杂。简单是指线性化是复杂系统的基本近似,而复杂是指即便简单的线性系统也可以拟合异常复杂的函数。

    HiPPO的贡献

    HiPPO的贡献在于当我们试图用正交基去逼近一个动态更新的函数时,其结果自然而然地成为了线性系统。HiPPO不仅证明了线性系统能够逼近复杂函数,还告诉我们如何去逼近,甚至近似程度如何。

    邻近窗口计算与勒让德多项式

    通过选取勒让德多项式为基函数,HiPPO在处理实时信号的邻近窗口时,推导出了一个线性ODE系统。这一推导过程展示了线性系统在记忆和逼近动态函数方面的强大能力。

    应用与理论意义

    HiPPO的理论框架为后来的诸多SSM提供了基础,特别是在深度学习模型中。SSM的应用不仅限于解决复杂的动态系统问题,还展示了其在处理大规模数据和长序列记忆方面的潜力。

    总结

    本文以尽可能简单的方式重复了HiPPO的主要推导,通过适当的记忆假设,自下而上地导出了线性ODE系统,并且针对勒让德多项式的情形求出了相应的解析解。HiPPO的结果被诸多SSM使用,成为SSM的重要奠基之作。

    参考文献

    • 《HiPPO: Recurrent Memory with Optimal Polynomial Projections》

    以上内容是对SSM和HiPPO矩阵的简要介绍和总结,希望对大家有所帮助。


    原文链接:

  • 《文化和自然遗产:批判性思路》&《立地坡.上店耀州窑址》

    Reblog via Libgen中文新书速递

    《文化和自然遗产:批判性思路》
    作者:罗德尼·哈里森(Rodney Harrison)
    上海古籍出版社 2021
    下載:libgen.is/book/index.php?md5=A

    《立地坡.上店耀州窑址》
    作者:耀州窑博物馆等
    三秦出版社 2004
    下載:libgen.is/book/index.php?md5=2

  • 现代计算中的内存需求:从多核处理到高频率内存

    随着计算技术的不断进步,现代计算机尤其是高性能计算机对内存的需求越来越高。特别是在处理高分辨率视频渲染、科学计算等复杂任务时,对内存容量和频率的要求显得尤为重要。本文将结合Adobe官网的内存建议,探讨多核处理器对内存的需求,以及如何通过选择适当的内存配置来提升整体性能。

    多核同时渲染:内存需求的公式

    在现代计算中,利用多核处理器进行并行计算已成为常态。Adobe的多核渲染技术能够同时处理多帧,从而显著提高处理速度。然而,这种多核处理方式对内存容量提出了更高的要求。根据Adobe提供的公式:

    建议内存容量 = 1核心 × 4GB内存 + 20GB总内存容量

    通过这一公式,我们可以更准确地为不同核心数的处理器配置适当的内存。例如,以Intel i7-12700KF为例,这款处理器拥有8个性能核心(P core)和4个能效核心(E core),共计12核20线程。按照上述公式计算,其最低内存需求为:

    8 × 4GB + 20GB = 52GB内存

    高性能处理器与内存配置

    对于像i7/i9这样的高端处理器,建议搭配32GB以上的内存以充分发挥其性能。这在处理4K/8K分辨率的视频渲染时尤为重要。如今,大多数视频文件已经升级到4K+分辨率,对于4K RAW视频文件的剪辑,32GB内存已经远远不够用。

    内存频率与CPU性能的关联

    内存频率与CPU性能高度相关,尤其在进行科学计算如仿真等对计算速度要求极高的任务时,内存频率显得尤为重要。在这些场景下,降频扩容的方式几乎没有提升效果,反而可能导致性能瓶颈。

    例如,选择高频率内存条而不是仅仅扩充内存容量,可以显著提升性能。最近市场上推出的24GB×2的新方案,其频率普遍在5600MHz以上,甚至有6400/6800/7200MHz的高频率内存条,这样的配置不仅实现了大容量和高频率的需求,还解决了散热问题。

    结论

    在现代高性能计算中,内存的容量和频率对整体性能有着至关重要的影响。通过合理配置内存,尤其是选择高频率、大容量的内存条,可以显著提升计算效率,满足复杂任务的需求。为你的高端处理器选择适合的内存配置,将使你的工作流更加高效,从而达到最佳的生产力水平。

  • 深入解读 DeepSeek-V2 语言模型中的多头潜在注意力机制 (MLA)

    在最新的 DeepSeek-V2 语言模型中,多头潜在注意力机制 (Multi-head Latent Attention, MLA) 作为一种创新架构,被设计用来保证高效的推理过程。本文将详细介绍 MLA 的关键特性及其在 DeepSeek-V2 中的应用和优势。

    高效的推理过程

    MLA 通过将 Key-Value (KV) 缓存压缩到一个潜在向量中,显著减少了推理过程中所需的内存和计算资源。这种压缩大大降低了内存占用和计算需求,从而实现更快、更高效的处理 [1]

    Key-Value (KV) 缓存压缩

    在注意力机制中,KV 缓存是一个重要组件,负责存储输入序列中不同 token 之间的关系信息。MLA 将这个缓存压缩成一个潜在向量,显著减小其大小和内存占用 [1]

    稀疏计算

    MLA 是 DeepSeekMoE 架构的一部分,该架构通过稀疏计算实现经济高效的强大语言模型训练。这意味着每个 token 仅激活模型参数的一个子集,从而减少了训练过程中的整体计算需求 [1]

    提升的性能

    与其前身 DeepSeek 67B 相比,采用 MLA 的 DeepSeek-V2 实现了显著更强的性能。尽管仅激活了 21B 的参数,DeepSeek-V2 及其聊天版本仍在开源模型中达到了顶级性能 [1]

    结论

    总的来说,MLA 是一种通过将 Key-Value 缓存压缩到潜在向量中来保证高效推理的创新架构。它显著减少了内存和计算需求,带来了更快、更高效的处理过程。采用 MLA 的 DeepSeek-V2 在降低训练成本和提高生成吞吐量的同时,仍实现了强大的性能 [1]


    了解更多:

    1. [2405.04434] DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
    2. [2405.04434] DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model
    3. Transformers Explained Visually (Part 3): Multi-head Attention, deep dive | by Ketan Doshi | Towards Data Science
  • 探索 ActivityPub:去中心化社交网络协议

    引言

    随着互联网的不断发展,去中心化的社交网络逐渐成为热点话题。ActivityPub 正是在这种背景下应运而生的,它是一种去中心化的社交网络协议,基于 ActivityStreams 2.0 数据格式。本文将详细介绍 ActivityPub 的工作原理及其实现方式。

    什么是 ActivityPub?

    ActivityPub 是一种去中心化的社交网络协议,旨在通过客户端到服务器和服务器到服务器的 API 实现内容的创建、更新和删除,以及通知和内容的分发。它的主要目标是让去中心化的网站能够共享信息,并让用户通过各种客户端与自己的账户进行互动。

    ActivityPub 的两层协议

    服务器到服务器的联邦协议

    这种联邦协议使得不同的去中心化网站能够共享信息。例如,当一个用户在一个服务器上发布内容时,其他服务器上的用户也能够看到并互动。

    客户端到服务器的协议

    这种协议允许用户(包括真实用户、机器人和其他自动化进程)通过各种客户端(如手机、桌面应用或 Web 应用)与他们在服务器上的账户进行通信。

    用户和演员

    在 ActivityPub 中,用户通过服务器上的账户表示为“演员”。每个演员都有一个收件箱和一个发件箱,用于接收和发送消息。这些都是通过 URL 进行标识的。

    示例

    {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Person",
      "id": "https://social.example/alyssa/",
      "name": "Alyssa P. Hacker",
      "preferredUsername": "alyssa",
      "summary": "Lisp enthusiast hailing from MIT",
      "inbox": "https://social.example/alyssa/inbox/",
      "outbox": "https://social.example/alyssa/outbox/",
      "followers": "https://social.example/alyssa/followers/",
      "following": "https://social.example/alyssa/following/",
      "liked": "https://social.example/alyssa/liked/"
    }

    如何发送和接收消息?

    发送消息

    • POST 到收件箱:将消息发送到某人的收件箱(仅适用于服务器到服务器的通信)。
    • POST 到发件箱:将消息发送到全世界(客户端到服务器)。
    • GET 从发件箱:查看某人发送的消息(客户端到服务器和/或服务器到服务器)。

    接收消息

    • GET 从收件箱:查看最新收到的消息(客户端到服务器)。

    一个完整的示例

    假设 Alyssa 想给她的朋友 Ben 发送一条消息,询问他是否还记得归还一本借来的书。她可以创建一个 ActivityStreams 对象并将其发送到她的发件箱。

    {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Note",
      "to": ["https://chatty.example/ben/"],
      "attributedTo": "https://social.example/alyssa/",
      "content": "Say, did you finish reading that book I lent you?"
    }

    服务器会将这条消息包装在一个 Create 活动中,并发送到 Ben 的收件箱。

    {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Create",
      "id": "https://social.example/alyssa/posts/a29a6843-9feb-4c74-a7f7-081b9c9201d3",
      "to": ["https://chatty.example/ben/"],
      "actor": "https://social.example/alyssa/",
      "object": {
        "type": "Note",
        "id": "https://social.example/alyssa/posts/49e2d03d-b53a-4c4c-a95c-94a6abf45a19",
        "attributedTo": "https://social.example/alyssa/",
        "to": ["https://chatty.example/ben/"],
        "content": "Say, did you finish reading that book I lent you?"
      }
    }

    安全性和验证

    在 ActivityPub 中,服务器应该验证收到的内容,以防止内容欺骗攻击。例如,当服务器接收到一个 Like 活动时,应该验证该活动的 id 是否存在并且是一个有效对象。

    结论

    ActivityPub 通过提供灵活的客户端到服务器和服务器到服务器的协议,使得创建、更新和分发内容变得更加简单和高效。它的去中心化特性也为社交网络带来了更多的自由和可能性。如果您对构建去中心化社交网络感兴趣,ActivityPub 将是一个非常有价值的工具。

    希望这篇文章能帮助您更好地理解 ActivityPub 及其在去中心化社交网络中的重要作用。