Author: C3P00

  • 将 Recommenders 示例无缝迁移到 AzureML 云平台

    引言

    随着推荐系统规模的扩大和对训练效率要求的提高,将本地实验迁移到云平台成为一种趋势。Azure 机器学习服务(AzureML)为开发者提供了一个强大的云端环境,可以用于数据准备、模型训练、测试、部署、管理和跟踪。

    本指南将以 run_notebook_on_azureml.ipynb 为例,介绍如何将 Recommenders 示例 Notebook 提交到 AzureML 计算目标,利用云平台的优势加速推荐系统开发流程。

    AzureML 简介

    AzureML 提供了丰富的功能,包括:

    • 管理云资源,用于监控、记录和组织机器学习实验。
    • 支持本地和云端训练模型,包括 GPU 加速训练。
    • 易于扩展,只需创建并指向新的计算目标即可应对数据集增长。

    准备工作

    使用 AzureML 之前,需要完成以下准备工作:

    • 拥有 Azure 订阅。如果没有,可以创建一个免费帐户,并试用 Azure 机器学习服务的免费或付费版本。
    • 安装 azure.contrib.notebook 包。
    #!pip install "azureml.contrib.notebook>=1.0.21.1"

    连接到 AzureML 工作区

    AzureML 工作区是用于组织和协调机器学习工作流的 Azure 资源,它协调存储、数据库和计算资源,为实验、部署、推理和模型监控提供额外功能。

    以下代码将获取或创建一个 AzureML 工作区,并将配置保存到 aml_config/config.json 文件中。

    ws = Workspace.create(
        name="<WORKSPACE_NAME>",
        subscription_id="<SUBSCRIPTION_ID>",
        resource_group="<RESOURCE_GROUP>",
        location="<WORKSPACE_REGION>"
        exist_ok=True,
    )

    创建或连接 Azure 机器学习计算资源

    Azure 机器学习计算是一种托管计算基础设施,允许用户轻松创建单节点到多节点的计算资源。

    以下代码将创建一个 CPU 集群作为远程计算目标。

    # 远程计算(集群)配置
    VM_SIZE = 'STANDARD_D2_V2'
    MIN_NODES = 0
    MAX_NODES = 2
    
    CLUSTER_NAME = 'cpucluster'
    
    try:
        compute_target = ComputeTarget(workspace=ws, name=CLUSTER_NAME)
        print("找到现有计算目标")
    except:
        print("正在创建新的计算目标...")
        # 指定新集群的配置
        compute_config = AmlCompute.provisioning_configuration(
            vm_size=VM_SIZE,
            min_nodes=MIN_NODES,
            max_nodes=MAX_NODES
        )
        # 使用指定的名称和配置创建集群
        compute_target = ComputeTarget.create(ws, CLUSTER_NAME, compute_config)
        # 等待集群完成,显示输出日志
        compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

    提交 Notebook

    以下代码将 sar_movielens.ipynb Notebook 提交到 AzureML 计算目标。

    NOTEBOOK_NAME = 'sar_movielens.ipynb'
    experiment_name = NOTEBOOK_NAME.strip(".ipynb")
    # ... 设置运行配置 ...
    
    cfg = NotebookRunConfig(source_directory='../',
                                notebook='notebooks/00_quick_start/' + NOTEBOOK_NAME,
                                output_notebook='outputs/out.ipynb',
                                parameters={"MOVIELENS_DATA_SIZE": "100k", "TOP_K": 10},
                                run_config=run_config)
    
    run = exp.submit(cfg)
    run

    监控运行进度

    可以使用 Jupyter 小部件监控运行进度。小部件会每隔 10-15 秒提供一次实时更新,直到作业完成。

    RunDetails(run).show()

    查看指标

    运行完成后,可以使用 run.get_metrics() 查看记录的指标。

    metrics = run.get_metrics()
    print(metrics)

    释放计算资源

    为避免不必要的费用,请确保在使用后释放创建的计算目标。

    # 删除计算目标
    compute_target.delete()

    总结

    通过将 Recommenders 示例 Notebook 提交到 AzureML 云平台,可以充分利用云计算的优势,加速推荐系统开发流程。AzureML 提供了丰富的功能和灵活的配置选项,可以满足不同规模和需求的推荐系统开发。

  • 微软 Recommenders:推荐系统实战宝典

    引言

    构建一个高效的推荐系统并非易事,需要对数据进行预处理、选择合适的算法、进行模型训练和评估,最终才能将其部署到生产环境。为了帮助开发者和研究人员更好地应对这些挑战,微软开源了 Recommenders 工具,并提供了一系列 Jupyter Notebook 示例和最佳实践,涵盖了推荐系统开发的完整流程。

    示例概览

    Recommenders 的示例 Notebook 按照功能和用途被组织在不同的目录下,具体如下表所示:

    目录是否支持本地运行描述
    00_quick_start快速入门示例,演示如何在本地环境中使用推荐算法构建推荐系统。
    01_prepare_data数据准备示例,为不同的推荐算法准备和加载数据。
    02_model_collaborative_filtering协同过滤算法模型训练和评估示例,深入探讨算法原理和实现细节。

    本地运行示例

    大部分示例 Notebook 都可以在本地 Linux 机器上直接运行,只需按照 说明 正确设置环境即可。

    注意: 某些示例可能需要异构计算实例,例如安装了 Spark 框架的 CPU 机器集群或配备 GPU 设备的机器。因此,建议在 Linux 数据科学虚拟机 (Ubuntu) 上运行这些 Notebook,因为该虚拟机预先配置了单节点 Spark 和/或 GPU 设备。

    Azure 云端增强

    为了提高大规模开发推荐系统的效率,部分示例 Notebook 还使用了 Azure 云产品和服务,例如:

    • Azure 机器学习服务: 用于训练、部署、自动化和管理机器学习模型的云服务,在示例中广泛用于超参数调整、指标跟踪和监控、计算资源扩展以及 Web 服务部署等任务。
    • Azure 数据科学虚拟机: 主要用作远程服务器,用户可以轻松配置本地和云环境以运行示例 Notebook。
    • Azure Cosmos DB: 用于存储数据,例如在模型部署示例中,将模型生成的推荐结果存储在 Cosmos DB 中以实现实时服务。
    • Azure Databricks: 主要用于在分布式计算环境中开发基于 Spark 的推荐系统,例如 Spark ALS 算法。
    • Azure Kubernetes 服务: 用于服务推荐模型或使用推荐结果为应用程序服务。

    将现有 Notebook 提交到 Azure 机器学习

    run_notebook_on_azureml 示例 Notebook 提供了一个框架,可以直接将现有 Notebook 提交到 Azure 机器学习计算目标。设置好计算目标并创建运行配置后,只需替换 Notebook 文件名即可直接提交 Notebook。

    cfg = NotebookRunConfig(source_directory='../',
                                notebook='examples/00_quick_start/' + NOTEBOOK_NAME,
                                output_notebook='outputs/out.ipynb',
                                parameters={"MOVIELENS_DATA_SIZE": "100k", "TOP_K": 10},
                                run_config=run_config)

    所有使用 store_metadata 记录的指标和参数都将作为跟踪指标存储在运行中。最初提交的 Notebook 将作为输出 Notebook out.ipynb 存储在 Azure 门户的输出选项卡中。

    总结

    微软 Recommenders 提供的示例 Notebook 为开发者和研究人员提供了一个宝贵的学习资源,可以帮助他们快速掌握构建高性能推荐系统的最佳实践。无论是本地运行还是借助 Azure 云平台,Recommenders 都能帮助您轻松构建个性化推荐体验。

  • 深入浅出推荐系统:微软开源工具 Recommenders 解析

    引言

    在信息爆炸的时代,人们面对海量数据往往无所适从。推荐系统应运而生,它通过分析用户的历史行为和偏好,为用户提供个性化的推荐内容,帮助用户快速找到自己感兴趣的信息。从电商平台的商品推荐,到社交媒体的内容推送,再到音乐软件的歌曲推荐,推荐系统已经渗透到我们生活的方方面面。

    微软开源工具 Recommenders 正是为构建、实验和部署各种经典和先进的推荐系统而生。它提供了一系列 Jupyter Notebook 示例和最佳实践,涵盖了推荐系统构建的五个关键任务:

    1. 数据准备:为不同的推荐算法准备和加载数据。
    2. 模型构建:使用各种经典和深度学习推荐算法构建模型,例如交替最小二乘法(ALS)或极深因子分解机(xDeepFM)。
    3. 模型评估:使用离线指标评估算法性能。
    4. 模型选择和优化:调整和优化推荐模型的超参数。
    5. 模型部署:在 Azure 生产环境中部署模型。

    Recommenders 提供了多个实用工具,用于支持加载数据集、评估模型输出和划分训练/测试数据等常见任务。它还包含了一些先进算法的实现,供用户自学和定制自己的应用程序。

    算法概览

    Recommenders 提供了丰富的推荐算法,涵盖了协同过滤、基于内容的过滤等多种类型,具体如下表所示:

    算法类型描述示例
    交替最小二乘法 (ALS)协同过滤适用于大型数据集的显式或隐式反馈的矩阵分解算法,针对可扩展性和分布式计算能力进行了优化。它在 PySpark 环境中工作。快速入门 / 深入探讨
    注意力异步奇异值分解 (A2SVD)协同过滤基于序列的算法,旨在使用注意力机制捕获用户的长期和短期偏好。它在 CPU/GPU 环境中工作。快速入门

    注意: 表格中只列举了部分算法,完整列表请参考 README.md

    算法比较

    为了方便用户比较不同算法的性能,Recommenders 提供了一个 基准测试 Notebook。该 Notebook 使用 MovieLens 数据集,以 75/25 的比例将其划分为训练集和测试集,并使用多个协同过滤算法训练推荐模型。

    下表展示了在 Movielens 100k 数据集上运行 15 个 epoch 后,不同算法的评估指标结果:

    算法MAPnDCG@kPrecision@kRecall@kRMSEMAER2Explained Variance
    ALS0.0047320.0442390.0484620.0177960.9650380.7530010.2556470.251648
    BiVAE0.1461260.4750770.4117710.219145N/AN/AN/AN/A

    注意: 表格中只列举了部分算法的评估结果,完整列表请参考 README.md

    总结

    微软开源工具 Recommenders 为研究人员、开发者和爱好者提供了一个强大的平台,可以快速构建、实验和部署各种经典和先进的推荐系统。它提供了丰富的算法、示例和最佳实践,并且易于使用和扩展,是构建高性能推荐系统的理想选择。

    参考文献

    • D. Li, J. Lian, L. Zhang, K. Ren, D. Lu, T. Wu, X. Xie, “Recommender Systems: Frontiers and Practices”, Springer, Beijing, 2024. 链接.
    • A. Argyriou, M. González-Fierro, and L. Zhang, “Microsoft Recommenders: Best Practices for Production-Ready Recommendation Systems”, WWW 2020: International World Wide Web Conference Taipei, 2020. 链接
    • … | … | … |

    注意: 以上只列举了部分参考文献,完整列表请参考 README.md

  • SalUn : 通过基于梯度的权重显著性赋能图像分类和生成中的机器遗忘

    引言

    随着数据法规的不断演变,机器遗忘 (MU) 已成为增强当今人工智能模型信任度和安全性的重要工具。然而,现有的 MU 方法侧重于数据和/或权重视角,在遗忘准确性、稳定性和跨领域适用性方面往往存在局限性。为了应对这些挑战,我们引入了 MU 的“权重显著性”概念,并将其与模型解释中的输入显著性进行了类比。这一创新将 MU 的注意力从整个模型转移到特定的模型权重上,从而提高了有效性和效率。由此产生的方法被称为显著性遗忘 (SalUn),它缩小了与“精确”遗忘(从移除遗忘数据点后从头开始重新训练模型)的性能差距。据我们所知,SalUn 是第一个能够有效消除遗忘数据、类别或概念在图像分类和生成任务中的影响的原则性 MU 方法。例如,SalUn 在高方差随机数据遗忘中具有稳定性优势,例如,在 CIFAR-10 数据集上与精确遗忘相比,差距为 0.2%。此外,在防止条件扩散模型生成有害图像方面,SalUn 实现了近 100% 的遗忘准确率,优于当前最先进的基线,如 Erased Stable Diffusion 和 Forget-Me-Not。代码可在 https://github.com/OPTML-Group/Unlearn-Saliency 获取。

    警告:本文包含的模型输出可能具有冒犯性。

    机器遗忘的挑战

    现有的机器遗忘方法存在两大局限性:

    • 不稳定性: 现有的 MU 方法在面对不同数量的遗忘数据时,其性能表现出显著的差异。例如,当遗忘数据量从 10% 增加到 50% 时,一些方法的遗忘效果会大幅下降。此外,一些方法的性能也受到超参数选择的影响,导致不稳定性。
    • 缺乏通用性: 许多 MU 方法主要应用于图像分类,而新兴的用于生成建模的扩散模型 (DMs) 也需要有效的 MU 技术来保护版权并防止生成有害内容。然而,现有的 MU 方法在图像生成任务中效果不佳。

    SalUn:权重显著性是 MU 的关键

    为了解决上述局限性,我们提出了 SalUn,它利用了梯度信息来构建权重显著性图,并将其用于指导遗忘过程。

    基于梯度的权重显著性图

    我们借鉴了梯度信息在输入显著性图中的应用,提出了构建权重显著性图来辅助 MU 的想法。权重显著性图可以将预遗忘模型权重 (θo) 分解为两个不同的部分:在 MU 期间标记为更新的显著模型权重和保持不变的完整模型权重。

    我们使用遗忘损失 (`f(θ; Df)) 相对于遗忘数据集 Df 下模型权重变量 θ 的梯度,并应用硬阈值操作来获得权重显著性图:

    mS = 1 (|∇θ`f(θ; Df) |θ=θo| ≥ γ), 

    其中 1(g ≥ γ) 是一个元素级指示函数,如果 gi ≥ γ,则第 i 个元素的值为 1,否则为 0,|·| 是元素级绝对值运算,γ > 0 是硬阈值。

    基于权重显著性图,我们可以将遗忘模型 θu 表示为:

    θu = mS  (∆θ + θo) + (1 − mS)  θo, 

    其中 是元素级乘积,1 表示全 1 向量。这意味着在 MU 期间的权重更新中,注意力可以集中在显著权重上。

    SalUn 的实现

    SalUn 将权重显著性图 (mS) 集成到遗忘过程中,并利用随机标签 (RL) 方法来更新显著权重。

    在图像分类中,SalUn 的优化问题可以表示为:

    minimize ∆θ L(1)SalUn(θu) := E(x,y)∼Df,y0≠y [`CE(θu; x, y0)] + αE(x,y)∼Dr [`CE(θu; x, y)], 

    其中 y0 是与 y 不同的随机图像标签,θu 已在 (4) 中定义。

    在图像生成中,SalUn 的优化问题可以表示为:

    minimize ∆θ L(2)SalUn(θu) := E(x,c)∼Df,t,∼N(0,1),c0≠c ||θu(xt|c0) − θu(xt|c)||22 + β`MSE(θu; Dr), 

    其中 c0 ≠ c 表示概念 c0 与 c 不同,θu 是由 (4) 给出的基于显著性的遗忘模型,β > 0 是一个正则化参数,用于在遗忘数据集 Df 上的基于 RL 的遗忘损失与非遗忘数据集 Dr 上的扩散训练损失 `MSE(θu; Dr) 之间进行优化权衡。

    实验结果

    我们在图像分类和生成任务上进行了大量的实验,验证了 SalUn 的有效性。

    图像分类

    在图像分类任务中,我们重点关注随机数据遗忘,并在 CIFAR-10 数据集上使用 ResNet-18 模型进行评估。我们比较了 SalUn 与其他 7 种 MU 基线方法的性能,包括 FT、RL、GA、IU、`1-sparse、BS 和 BE。

    实验结果表明,SalUn 在两种遗忘场景(10% 随机数据遗忘和 50% 随机数据遗忘)中均实现了与 Retrain 最小的平均性能差距。此外,SalUn 在遗忘效果 (UA 和 MIA) 和模型保真度 (RA 和 TA) 之间取得了最佳平衡,同时保持了计算效率。

    图像生成

    在图像生成任务中,我们重点关注两种遗忘场景:使用 DDPM 的类遗忘和使用 LDM 的概念遗忘。

    实验结果表明,SalUn 在类遗忘和概念遗忘任务中均优于其他 MU 基线方法,同时保持了良好的图像生成质量。

    NSFW 概念遗忘

    我们还评估了 SalUn 在概念遗忘中的有效性,以消除通过不当图像提示 (I2P) 引入的 NSFW 概念的影响。

    实验结果表明,SalUn 生成的有害图像最少,显著优于其他 MU 基线方法。

    结论

    我们提出了 SalUn,这是一个基于权重显著性的机器遗忘框架,它有效地解决了现有 MU 方法的局限性,并适用于图像分类和生成任务。SalUn 在防止稳定扩散生成有害内容方面非常有效,即使遇到不当图像提示也是如此。

    参考文献

    • Adebayo, J., Gilmer, J., Muelly, M., Goodfellow, I., Hardt, M., & Kim, B. (2018). Sanity checks for saliency maps. Advances in neural information processing systems, 31.
    • Bae, G., Lee, S., Jeong, S., Park, J., & Kim, N. (2023). Diffusion art or digital forgery? investigating data replication in diffusion models. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 15494-15503).
    • Becker, F., & Liebig, T. (2022). Approximate machine unlearning via random label flipping. In Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security (pp. 2000-2013).
    • Bedapudi, N. (2019). Nudenet: Open source nudity detection. https://github.com/notAI-tech/NudeNet.
    • Birhane, A., Prabhu, V., & Mitchell, M. (2021). Multimodal datasets: misogyny, pornography, and malignant stereotypes. arXiv preprint arXiv:2110.01963.
    • Carlini, N., Tramer, F., Wallace, E., Jagielski, M., Herbert-Voss, A., Lee, K., … & Usenix Security. (2022). Extracting training data from diffusion models. In 31st {USENIX} Security Symposium ({USENIX} Security 22) (pp. 423-440).
    • Chattopadhay, A., Sarkar, A., Howlader, P., & Balasubramanian, V. N. (2018). Grad-cam++: Generalized gradient-based visual explanations for deep convolutional networks. In 2018 IEEE Winter Conference on Applications of Computer Vision (WACV) (pp. 839-847). IEEE.
    • Chen, Y., Zhang, X., & Zhu, S. (2022a). Certified graph unlearning. In Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security (pp. 2104-2117).
    • Chen, T., Zhang, Z., Liu, S., Chang, S., & Wang, Z. (2022b). Adversarial weight perturbation helps robust generalization. Advances in Neural Information Processing Systems, 35, 20269-20282.
    • Chen, Y., Zhang, X., & Zhu, S. (2023). Approximate machine unlearning via class-discriminative boundary shifting. In Proceedings of the 40th International Conference on Machine Learning (pp. 4488-4501). PMLR.
    • Cheng, Y., Chen, Y., Zhang, X., & Zhu, S. (2023). Efficient graph unlearning with guar- antees. arXiv preprint arXiv:2305.16868.
    • Chien, S., Zhou, Y., Honorio, J., & Li, L. (2022). Certified removal of data points for ma- chine learning. arXiv preprint arXiv:2205.06735.
    • Dai, D., Dong, L., Hao, Y., Sui, Z., Ke, F., & Zhang, J. (2021). Knowledge neurons in pre- trained transformers. arXiv preprint arXiv:2104.08656.
    • De Cao, N., Aziz, W., & Titov, I. (2021). Editing factual knowledge in language models. arXiv preprint arXiv:2104.08164.
    • Dwork, C., McSherry, F., Nissim, K., & Smith, A. (2006). Calibrating noise to sensitivity in private data analysis. In Theory of cryptography conference (pp. 265-284). Springer.
    • Frankle, J., & Carbin, M. (2018). The lottery ticket hypothesis: Finding sparse, trainable neural networks. arXiv preprint arXiv:1803.03635.
    • Gandikota, V., Liu, R., Abbeel, P., & Recht, B. (2023). Erased stable diffusion. arXiv preprint arXiv:2301.12796.
    • Ginart, A., Guan, M., Valiant, G., & Zou, J. (2019). Making ai forget you: Data deletion in machine learning. Advances in Neural Information Processing Systems, 32.
    • Golatkar, A., Achille, A., & Soatto, S. (2020). Eternal sunshine of the spotless net: Forgetting in deep networks. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 9304-9312).
    • Graves, A., Shokri, R., & Goldwasser, S. (2021). Breaking certified defenses: Semantic adversarial examples with spoofed robustness certificates. In International Conference on Machine Learning (pp. 3664-3673). PMLR.
    • Grosse, D., LeCun, Y., & Schoelkopf, B. (2023). Data attribution for deep learning models based on integrated gradients. In Proceedings of the 40th International Conference on Machine Learning (pp. 11258-11271). PMLR.
    • Guo, C., Goldstein, T., Hannun, A., & van der Maaten, L. (2019). Certified data removal from machine learning models. arXiv preprint arXiv:1911.03030.
    • Han, S., Pool, J., Tran, J., & Dally, W. (2015). Learning both weights and connections for efficient neural network. Advances in neural information processing systems, 28.
    • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 770-778).
    • Heng, S., & Soh, H. (2023). Forget-me-not: Accurate diffusion model unlearning via data synthesis and model pruning. arXiv preprint arXiv:2308.14558.
    • Ho, J., & Salimans, T. (2022). Classifier-free diffusion guidance. Advances in Neural Information Processing Systems, 35, 16294-16305.
    • Hoofnagle, C. J., Borgesius, F. Z., Whittington, R., & Mayer-Schönberger, V. (2019). The right to be forgotten. Stanford Law Review, 70(6), 1443-1532.
    • Howard, J., & Gugger, S. (2020). Fastai: A layered api for deep learning. Information, 11(2), 108.
    • Ilyas, A., Park, S., Bastani, O., & Reagen, B. (2022). Data debugging with shapley expla- nations. In Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security (pp. 1982-1999).
    • Izzo, Z., Smart, M., Chaudhuri, K., & Zou, J. Y. (2021). Approximate data deletion from machine learning models: Algorithms and evaluations. arXiv preprint arXiv:2110.04788.
    • Jain, P., Liu, S., & Kamar, E. (2023). Unlearn what you’ve learned: Adaptive pre- training for knowledge transfer. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 14398-14407).
    • Jeyakumar, J. V., Batra, D., Parikh, D., & Kim, S. (2020). Influence functions in deep learning are fragile. arXiv preprint arXiv:2006.14065.
    • Jia, J., Fan, C., Liu, J., Wei, D., & Liu, S. (2023). Full-stack evaluation of machine unlearning in image classification. arXiv preprint arXiv:2305.17537.
    • Koh, P. W., & Liang, P. (2017). Understanding black-box predictions via influence func- tions. In International conference on machine learning (pp. 1885-1894). PMLR.
    • Krizhevsky, A., Hinton, G., et al. (2009). Learning multiple layers of features from tiny images.
    • Le, Y., & Yang, X. (2015). Tiny imagenet visual recognition challenge. CS 231N, 7(7), 3.
    • Liu, Z., Lin, Y., Cao, Y., Hu, H., Wei, Y., Zhang, Z., … & Guo, B. (2021). Swin transformer: Hierarchical vision transformer using shifted windows. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 10012-10022).
    • Liu, Y., Ma, X., Bailey, J., & Lu, F. (2022a). Black-box unlearning of backdoor poisoned deep neural networks. arXiv preprint arXiv:2205.05728.
    • Liu, Y., Lyu, L., Feng, S., Xu, X., & Zhang, T. (2022b). Machine unlearning for federated learning: Fundamental limits and algorithms. arXiv preprint arXiv:2209.01941.
    • Meng, K., Bau, D., & Lakkaraju, H. (2022). Locating and editing factual associations in gpt. Advances in Neural Information Processing Systems, 35, 17343-17355.
    • Menik, A., & Ramaswamy, S. (2023). Modularity in large language models. arXiv preprint arXiv:2302.03000.
    • Neel, S., Roth, A., & Sharifi-Malvajerdi, S. (2021). Descent-to-delete: Gradient-based methods for machine unlearning. In International Conference on Machine Learning (pp. 8274-8283). PMLR.
    • Netzer, Y., Wang, T., Coates, A., Bissacco, A., Wu, B., & Ng, A. Y. (2011). Reading digits in natural images with unsupervised feature learning.
    • Oesterling, F., Roth, A., & Neel, S. (2023). Machine unlearning for fairness. In Proceedings of the 40th International Conference on Machine Learning (pp. 25892-25907). PMLR.
    • Parikh, N., Boyd, S., et al. (2014). Proximal algorithms. Foundations and Trends® in Optimization, 1(3), 127-239.
    • Park, S., Bastani, O., & Ilyas, A. (2023).

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

    A: 这篇论文试图解决的问题是机器学习(ML)模型中的机器遗忘(Machine Unlearning, MU)问题。具体来说,它关注以下几个关键点:

    1. 数据隐私和合规性:随着数据保护法规(如“被遗忘权”)的实施,需要一种方法来有效地从预训练的ML模型中移除特定数据点、类别或概念的影响,以保护用户隐私和满足法规要求。
    2. 模型安全性:在计算机视觉领域,需要防止模型受到后门攻击,提高模型的公平性,以及增强预训练方法以提高迁移学习能力。
    3. 内容生成控制:在文本到图像的生成模型中,需要防止生成敏感、有害或非法的图像内容,尤其是在面对不适当的提示(如裸露内容)时。
    4. 现有MU方法的局限性:现有的MU方法在遗忘准确性、稳定性和跨领域适用性方面存在局限性。这些方法通常分为两类:精确MU(如重新训练模型)和近似MU(如基于影响函数的遗忘)。精确MU方法计算资源消耗大,而近似MU方法虽然实用,但准确性和稳定性仍有待提高。

    为了解决这些问题,论文提出了一种新的MU方法,称为“权重显著性”(Weight Saliency),并开发了一种名为SalUn(Saliency Unlearning)的方法。这种方法通过关注模型中的特定权重而不是整个模型,提高了MU的有效性和效率。SalUn旨在缩小与精确遗忘(从头开始重新训练模型)的性能差距,并在图像分类和生成任务中实现有效的遗忘。

    Q: 有哪些相关研究?

    A: 论文中提到的相关研究领域和具体工作包括:

    1. 机器遗忘(Machine Unlearning)
      • 精确遗忘方法,如重新训练(Retrain)模型。
      • 近似遗忘方法,如差分隐私(DP)-强制遗忘、认证数据移除、随机标记(Random Labeling)、梯度上升(Gradient Ascent)、Fisher遗忘等。
    2. 图像分类中的机器遗忘
      • 研究如何从图像分类模型中移除特定数据点或类别的影响。
      • 相关工作包括使用概率方法、差分隐私和各种遗忘策略。
    3. 图像生成中的机器遗忘
      • 研究如何在条件扩散模型(如DDPM和LDM)中实现有效的遗忘,以防止生成有害内容。
      • 相关工作包括概念擦除(Concept Erasing)和学习遗忘(Learning to Forget)。
    4. 数据和模型显著性分析
      • 输入显著性映射,如像素级敏感度图和类歧视定位方法。
      • 数据归因(Data Attribution),用于模型解释、调试、高效训练和提高模型泛化能力。
      • 模型显著性,如权重稀疏性,用于模型剪枝以提高效率。
    5. 自然语言处理(NLP)中的模型编辑
      • 研究如何通过直接修改模型权重来定位和编辑模型中的特定知识。
    6. 机器遗忘的挑战
      • 研究机器遗忘方法在稳定性和泛化性方面的局限性。
    7. 机器遗忘的评估
      • 提出了全面的“全栈”机器遗忘评估方法,包括遗忘准确性(UA)、成员推断攻击(MIA)、剩余准确性(RA)、测试准确性(TA)和运行时间效率(RTE)。

    这些相关研究为论文提出的SalUn方法提供了理论基础和技术背景。论文通过整合这些研究成果,提出了一种新的原则性机器遗忘方法,旨在提高遗忘的准确性和效率。

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

    A: 论文通过引入“权重显著性”(Weight Saliency)的概念来解决机器遗忘(MU)问题,并提出了一种名为SalUn(Saliency Unlearning)的方法。以下是SalUn方法的关键步骤和特点:

    1. 权重显著性映射:SalUn首先利用遗忘损失(forgetting loss)相对于模型权重的梯度来构建权重显著性映射。这个映射能够识别出在遗忘过程中需要特别关注的模型权重。
    2. 权重更新:在MU过程中,SalUn专注于更新显著性映射中标记为显著的权重,同时保持其他权重不变。这样可以更有效地更新模型,以减少对遗忘数据点的依赖。
    3. 随机标记(Random Labeling):SalUn结合了随机标记方法,通过为遗忘数据集分配随机标签并对模型进行微调,来强制模型遗忘特定数据点。
    4. 优化问题:SalUn定义了一个优化问题,旨在最小化遗忘数据点上的分类误差,同时通过正则化项保持模型在非遗忘数据点上的泛化能力。
    5. 可扩展性:SalUn方法具有很好的可扩展性,可以应用于不同的MU场景,包括图像分类和生成任务。在图像生成任务中,SalUn通过关联遗忘概念和不匹配的图像来实现遗忘。
    6. 实验验证:论文通过在CIFAR-10、CIFAR-100、SVHN、Tiny ImageNet等数据集上的实验,以及在ResNet-18、VGG-16、Swin-T等模型上的评估,验证了SalUn方法的有效性。实验结果表明,SalUn在遗忘准确性、成员推断攻击、剩余准确性、测试准确性和运行时间效率方面均优于现有方法。
    7. 软阈值SalUn:论文还提出了SalUn的软阈值版本,该版本使用软阈值而不是硬阈值来确定权重显著性映射。尽管软阈值SalUn在实践中没有超越硬阈值版本,但它提供了一种更灵活的权重更新方法。

    通过这些方法,SalUn能够有效地减少与精确遗忘方法(从头开始重新训练模型)之间的性能差距,同时保持了计算效率。这种方法为图像分类和生成任务中的机器遗忘问题提供了一种新的原则性解决方案。

    Q: 论文做了哪些实验?

    A: 论文中进行了一系列的实验来验证SalUn方法的有效性,这些实验包括:

    1. 图像分类任务的遗忘性能评估
      • 在CIFAR-10、CIFAR-100、SVHN、Tiny ImageNet等数据集上,使用ResNet-18、VGG-16、Swin-T等模型架构,进行了随机数据遗忘和类别遗忘的实验。
      • 评估了SalUn与其他7种机器遗忘基线方法(包括FT、RL、GA、IU、ℓ1-sparse、BS和BE)的性能。
      • 使用了多种评估指标,包括遗忘准确性(UA)、成员推断攻击(MIA)、剩余准确性(RA)、测试准确性(TA)和运行时间效率(RTE)。
    2. 图像生成任务的遗忘性能评估
      • 在DDPM和LDM(基于LDM的稳定扩散)模型上进行了类别遗忘和概念遗忘的实验。
      • 使用了CIFAR-10和Imagenette数据集,以及与遗忘类别或概念相关的文本提示。
      • 评估了SalUn在防止生成特定类别或概念图像方面的有效性,并通过FID(Fréchet Inception Distance)和UA来衡量生成图像的质量。
    3. 权重显著性的重要性验证
      • 通过将权重显著性映射(mS)集成到传统的机器遗忘方法中,展示了权重显著性在提高遗忘效果方面的作用。
    4. 软阈值SalUn的比较
      • 对比了硬阈值和软阈值版本的SalUn在图像分类任务中的性能。
    5. 不同遗忘数据量的影响
      • 研究了不同遗忘数据量(10%、20%、30%、40%和50%)对SalUn和其他基线方法性能的影响。
    6. 迭代遗忘性能
      • 在CIFAR-10数据集上进行了迭代遗忘实验,逐步遗忘数据并评估SalUn的性能。
    7. 不同模型架构的适用性
      • 在VGG-16和Swin-T模型上评估了SalUn在不同模型架构中的适用性和性能。
    8. NSFW(不适宜内容)概念遗忘
      • 使用SalUn来防止SD模型生成与不适宜内容相关的图像,并通过NudeNet检测器对生成的图像进行分类。

    这些实验结果表明,SalUn在多种评估指标上均优于现有方法,特别是在高变异性随机数据遗忘和防止生成有害图像方面表现出色。此外,SalUn在保持模型泛化能力的同时,能够有效地实现遗忘目标。

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

    A: 尽管SalUn方法在机器遗忘领域取得了显著的进展,但仍有一些潜在的研究方向可以进一步探索:

    1. 跨领域适应性:研究SalUn方法在其他领域(如自然语言处理、音频处理等)的适用性和有效性。
    2. 长期遗忘效果:评估SalUn在长期遗忘场景下的性能,例如在连续遗忘多个数据集或概念后,模型的稳定性和泛化能力。
    3. 遗忘与模型压缩的结合:探索将SalUn与模型压缩技术结合的可能性,以实现更高效的模型更新和部署。
    4. 遗忘过程中的隐私保护:研究在执行SalUn过程中如何进一步保护用户数据的隐私,例如通过引入差分隐私或其他隐私保护技术。
    5. 遗忘的可解释性:提高SalUn方法的可解释性,帮助用户理解模型为何遗忘特定数据,以及遗忘过程对模型性能的具体影响。
    6. 遗忘的自动化和优化:开发自动化工具来确定最佳的遗忘策略,包括遗忘数据的选择、权重显著性阈值的设定以及遗忘过程中的超参数调整。
    7. 遗忘与模型鲁棒性:研究遗忘过程对模型鲁棒性的影响,以及如何设计遗忘策略来提高模型对对抗攻击的抵抗力。
    8. 遗忘与模型更新的结合:探索在模型更新过程中如何有效地整合遗忘操作,以实现模型知识的持续更新和优化。
    9. 遗忘的法律和伦理考量:研究遗忘技术在法律和伦理层面的挑战,以及如何确保遗忘操作符合相关法规和道德标准。
    10. 遗忘的实时性:研究如何在实时或近实时环境中执行SalUn,以适应动态变化的数据环境和即时遗忘需求。

    这些研究方向不仅有助于提高SalUn方法的性能和适用性,还能推动机器遗忘领域的整体发展,使其更好地服务于数据隐私保护、模型安全和伦理合规等重要领域。

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

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

    1. 问题定义:论文针对机器学习模型中的机器遗忘(MU)问题,特别是在数据隐私保护、模型安全性和内容生成控制方面的挑战。
    2. 现有方法的局限性:指出现有MU方法在遗忘准确性、稳定性和跨领域适用性方面的不足。
    3. 权重显著性概念:引入权重显著性的概念,将注意力从整个模型转移到特定的、有影响力的模型权重上,以提高MU的有效性和效率。
    4. SalUn方法:提出了一种名为SalUn(Saliency Unlearning)的新方法,该方法通过权重显著性指导遗忘过程,缩小了与精确遗忘(从头开始重新训练模型)的性能差距。
    5. 实验验证:在多个数据集和模型架构上进行了广泛的实验,验证了SalUn在图像分类和生成任务中的有效性。实验结果表明,SalUn在遗忘准确性、成员推断攻击、剩余准确性、测试准确性和运行时间效率方面均优于现有方法。
    6. 应用场景:展示了SalUn在防止生成有害图像内容(如裸露内容)方面的应用,以及在不同遗忘数据量下的性能稳定性。
    7. 软阈值SalUn:探讨了SalUn的软阈值版本,虽然在实践中没有超越硬阈值版本,但提供了一种更灵活的权重更新方法。
    8. 未来研究方向:提出了进一步研究的潜在方向,包括跨领域适应性、长期遗忘效果、遗忘与模型压缩的结合、遗忘过程中的隐私保护等。

    总的来说,这篇论文通过引入权重显著性的概念,提出了一种新的原则性机器遗忘方法SalUn,并通过实验验证了其在多个任务中的有效性,为机器遗忘领域提供了新的视角和解决方案。

  • Ollama:让大型语言模型触手可及

    导语: 近年来,大型语言模型(LLM)发展迅猛,但对于普通用户而言,搭建和使用LLM仍有一定门槛。Ollama应运而生,它是一个轻量级、可扩展的框架,致力于让每个人都能轻松构建和运行本地LLM。

    一键安装,轻松上手

    Ollama 提供了简单易用的安装方式,无论你是 macOS、Windows 还是 Linux 用户,都能快速开始使用。

    macOS:

    下载

    Windows (预览版):

    下载

    Linux:

    curl -fsSL https://ollama.com/install.sh | sh

    您也可以参考手动安装指南进行安装。

    Docker:

    Ollama 也提供了官方 Docker 镜像 ollama/ollama,您可以在 Docker Hub 上找到它: https://hub.docker.com/r/ollama/ollama

    海量模型库,总有一款适合你

    Ollama 支持 ollama.com/library 上提供的众多模型,以下是一些示例:

    模型参数量大小下载
    Llama 38B4.7GBollama run llama3
    Llama 370B40GBollama run llama3:70b
    Phi 3 Mini3.8B2.3GBollama run phi3
    Phi 3 Medium14B7.9GBollama run phi3:medium
    Gemma 29B5.5GBollama run gemma2
    Gemma 227B16GBollama run gemma2:27b

    您可以根据自身需求选择合适的模型,例如,运行 Llama 3 模型,只需执行以下命令:

    ollama run llama3

    需要注意的是,运行大型模型需要足够的内存,建议至少 8GB 内存运行 7B 模型,16GB 内存运行 13B 模型,32GB 内存运行 33B 模型。

    个性化定制,打造专属模型

    Ollama 不仅提供了丰富的模型库,还支持用户自定义模型,您可以:

    1. 从 GGUF 文件导入模型:
    • 创建名为 Modelfile 的文件,并在其中使用 FROM 指令指定本地 GGUF 模型文件的路径。例如: FROM ./vicuna-33b.Q4_0.gguf
    • 使用 ollama create 命令创建模型: ollama create example -f Modelfile
    • 运行模型: ollama run example
    1. 从 PyTorch 或 Safetensors 导入模型:
    1. 自定义提示词:
    • 您可以通过 Modelfile 文件为模型设置自定义提示词。例如,以下 Modelfile 文件将 llama3 模型的角色设定为超级玛丽中的马里奥: FROM llama3 # 设置温度参数,值越高越有创造力,值越低越连贯 PARAMETER temperature 1 # 设置系统消息 SYSTEM """ 你将扮演超级玛丽中的马里奥,请以马里奥的身份回答问题。 """
    • 创建并运行模型: ollama create mario -f ./Modelfile ollama run mario >>> 你好 你好!我是你的朋友马里奥。 更多自定义提示词的示例,请参考 examples 目录。

    功能强大的命令行工具

    Ollama 提供了一套简洁易用的命令行工具,方便用户管理和使用模型。

    • ollama create: 从 Modelfile 创建模型。
    • ollama pull: 下载模型。
    • ollama rm: 删除模型。
    • ollama cp: 复制模型。
    • ollama show: 显示模型信息。
    • ollama list: 列出本地模型。
    • ollama serve: 启动 Ollama 服务。

    灵活的 REST API

    Ollama 还提供了 REST API,方便用户通过编程方式与模型交互。

    • 生成文本:
    curl http://localhost:11434/api/generate -d '{
      "model": "llama3",
      "prompt":"为什么天空是蓝色的?"
    }'
    • 与模型聊天:
    curl http://localhost:11434/api/chat -d '{
      "model": "llama3",
      "messages": [
        { "role": "user", "content": "为什么天空是蓝色的?" }
      ]
    }'

    更多 API 详情请参考 API 文档

    丰富的社区集成

    Ollama 拥有活跃的社区,开发者们贡献了众多集成工具,涵盖 Web、桌面、终端、数据库、移动端等多个平台,例如:

    • Web & 桌面: Open WebUI, Enchanted, Hollama, Lollms-Webui 等等。
    • 终端: oterm, Ellama Emacs client, gen.nvim 等等。
    • 数据库: MindsDB, chromem-go 等等。
    • 移动端: Enchanted, Maid 等等。

    总结

    Ollama 为用户提供了一个简单易用、功能强大的平台,让每个人都能轻松构建和运行本地大型语言模型。无论您是 LLM 爱好者、开发者还是研究人员,Ollama 都能为您提供强大的支持。

    参考文献

  • 新奇性算法,也称为新奇性搜索(Novelty Search)

    新奇性算法,也称为新奇性搜索(Novelty Search),是一种非传统的优化和搜索方法,它与传统的目标驱动型算法形成鲜明对比。该算法的核心思想不在于直接追求某个预设的目标或优化某个特定的目标函数,而是鼓励探索未知和新颖的解决方案。它基于自然进化的原理,即新奇的行为或特性往往能开启通往更多新奇发现的路径,从而促进创新和多样性。

    核心概念

    • 新奇性作为驱动力:新奇性算法通过评估解决方案的新颖程度来指导搜索过程,而不是直接的性能或目标达成度。
    • 探索未知:算法鼓励智能体或系统探索那些前所未有的行为或状态空间,即使这些行为在短期内不直接导向传统意义上的成功。
    • 踏脚石概念:新奇性行为可以作为进一步发现的起点,类似于自然进化中创新的积累,新奇性可以是达到更复杂目标的间接路径。
    • 应用领域:新奇性搜索在机器人学、人工智能、游戏AI、以及需要创新解决方案的任何领域都有应用,它能够帮助发现传统方法可能忽视的解决方案。

    实践案例

    • 迷宫实验:在迷宫实验中,新奇性探索算法的机器人通过尝试新路径,而非直接寻找出口,最终走出迷宫的次数多于目标驱动型算法,显示了其在探索未知方面的优势。
    • 图片孵化器:一个科学实验通过“图片孵化器”网站,展示了新奇性算法如何通过不断繁育图像,生成前所未有的图像,如从基础形状进化到复杂图像,如汽车,这体现了新奇性如何促进创新生成。

    思考与应用

    新奇性算法挑战了我们对目标设定的传统理解,提倡在某些情况下,无目标的探索可能比直接追求目标更能促进创新和长期的成功。在教育、创新项目管理、以及人工智能的开放式探索中,这种方法鼓励人们接受不确定性,拥抱探索过程中的偶然性,从而可能发现更为广阔的可能性空间。


    新奇性搜索在机器学习领域的应用广泛,它通过鼓励探索未知和新颖的解决方案,推动了多个方面的创新。以下是一些具体实例:

    1. 机器人学
      • 迷宫导航:机器人通过新奇性搜索,不直接寻找出口,而是探索新的路径,最终学会了高效穿越复杂环境。
      • 双足机器人行走:新奇性搜索帮助双足机器人通过不断尝试新奇的步态,而非直接设定行走目标,学会了更自然、更稳定的行走方式。
    2. 自动编程与软件工程
      • 通过新奇性搜索,可以发现新的编程模式或算法,帮助优化代码结构,甚至自动修复错误。例如,Heather Goldsby使用新奇性搜索来发现计算机程序中的错误,这表明该方法能有效识别和改进代码的创新性部分。
    3. 材料科学与药物发现
      • 在材料设计中,新奇性搜索可以引导研究人员探索具有新奇性质的化合物,这些化合物可能具有前所未有的物理或化学特性,对于开发新材料至关重要。
      • 在药物发现领域,算法可以探索化学空间,寻找具有新奇药理活性的分子,这在传统目标导向方法难以触及的领域尤为重要。
    4. 机器学习算法优化
      • 新奇性搜索可以用于优化神经网络架构或超参数,通过寻找新颖的配置而非直接最小化损失函数,可能发现更高效或更适应特定任务的模型结构。
    5. 游戏AI与创意生成
      • 在游戏AI中,新奇性搜索可以生成创新的策略和游戏行为,使AI角色的行为更加不可预测和有趣。
      • 在艺术和创意领域,如生成艺术作品,新奇性搜索可以探索新的视觉或音乐表达,创造独特的艺术作品。
    6. 多智能体系统
      • 在多智能体系统中,新奇性搜索可以促进智能体之间的非直接竞争或合作,通过探索新的交互模式,提高整个系统的适应性和复杂任务的解决能力。

    这些应用展示了新奇性搜索在促进创新、增加解决方案多样性以及在复杂、非线性问题上的潜力。通过鼓励探索未知,新奇性搜索为机器学习和人工智能领域带来了新的视角和方法。


    通过新奇性搜索解决复杂问题,主要依赖于以下几个步骤和原则:

    1. 放弃直接目标:首先,不同于传统方法直接设定最终目标,新奇性搜索鼓励探索未知领域,不设定具体目标或优化指标,而是寻找行为或解决方案的新颖性。
    2. 定义新奇性标准:新奇性是相对于已知解决方案的差异度。需要建立一个机制来评估解决方案的新颖性,这通常基于与历史解的比较,如通过行为的统计特征或解决方案的结构差异来衡量。18
    3. 初始探索:启动搜索过程,生成一系列初始解决方案或行为模式,并记录这些行为的特征,作为新奇性评估的基准。
    4. 迭代与评估
      • 在每次迭代中,算法生成新的解决方案或策略。
      • 评估这些新解的新奇性,保留那些与现有解相比具有显著差异的。
      • 这些新奇解成为下一步探索的起点,即使它们当前可能不直接指向问题的解决方案。
    5. 累积知识:新奇性搜索过程中,虽然不直接追求解决方案,但通过不断积累的新奇解,可能会无意中发现解决问题的关键特征或中间步骤。
    6. 适应性与多样性:鼓励多样性,即使某些尝试看似无效,也可能为后续的创新提供灵感。在复杂问题中,多样性是克服局部最优的关键。
    7. 分析与整合:随着时间的推移,通过分析新奇解的模式,可能揭示出解决复杂问题的新途径。这需要人类的介入,理解这些新奇解背后的潜在价值,并可能手动或通过其他算法整合这些发现。
    8. 反馈循环:虽然新奇性搜索不直接设定目标,但可以设置反馈机制,确保探索的方向与问题的某些关键方面保持相关性,避免完全无目的的探索。
    9. 跨领域应用:新奇性搜索的原理可以应用于多个领域,如机器人控制、算法设计、创意生成等,通过跨领域的灵感,可能发现意想不到的解决方案。

    通过上述步骤,新奇性搜索利用探索的广度而非直接的深度来解决复杂问题,这种方法特别适合于那些目标不明确或解决方案空间高度不确定的问题。它通过不断尝试和学习新奇事物,最终可能间接地达到或超越传统目标驱动方法的成果。


    评估新奇性搜索中解决方案的新奇性,通常涉及以下几个关键步骤和考虑因素:

    1. 定义行为空间:首先,需要明确解决方案或行为的表示空间,这可以是解决方案的参数空间、行为轨迹、或是任何可以量化其特性的多维空间。
    2. 构建行为特征:为每个解决方案提取特征,这些特征应该能够描述解决方案的关键方面,比如在机器人学中,可以是步态的节奏、步幅长度等。特征的选择对新奇性的准确评估至关重要。
    3. 历史行为数据库:维护一个历史解的数据库,记录已评估过的解决方案的特征。这个数据库用于比较新解与历史解的新颖性。
    4. 新奇性度量
      • 距离度量:使用如欧氏距离或余弦相似度等,计算新解特征与历史解特征集的平均距离。距离越大,新奇性越高。
      • 覆盖度:评估新解是否落在历史解的覆盖区域之外,如果新解在历史解的“行为地图”中开辟了新的区域,那么它就被认为是新奇的。
      • 聚类分析:通过聚类算法识别行为模式,新解如果与任何现有聚类显著不同,则认为具有新奇性。
    5. 非目标性评估:新奇性评估不考虑解决方案的性能或目标达成度,仅基于其与历史解的差异性。
    6. 阈值设定:设定一个新奇性阈值,低于此阈值的解决方案被视为不新奇,不会被保留或进一步探索。
    7. 时间或代际窗口:有时,新奇性评估会考虑最近几代或一段时间内的解,以确保新奇性评估反映最近的探索进展。
    8. 人工或专家审查:在某些情况下,新奇性评估可能需要人工审查,特别是在解决方案的复杂性或领域专业知识要求较高的情况下。
    9. 动态调整:随着搜索的进行,新奇性的定义和评估标准可能需要调整,以反映当前探索的深度和广度。

    通过上述方法,新奇性搜索能够系统地识别和保留那些在当前探索中具有独特性的解决方案,促进对未知领域的探索,即使这些新奇解在初期可能不直接带来性能上的提升。


    在新奇性搜索(Novelty Search, NS)的实现基础中,保存新颖项信息的核心在于设计一个能够有效记录和管理探索过程中遇到的新颖解决方案的数据结构。以下是实现这一过程的关键步骤和组件:

    1. 定义 NoveltyItem 类
      • 属性:每个 NoveltyItem 应包含至少两个关键属性:个体的特征向量(代表解决方案的特性)和该个体的新颖性得分。特征向量用于后续的比较和新奇性评估,而新颖性得分则是基于与历史解的比较得出的。
      • 方法:可能包括计算或更新新颖性得分的方法,以及用于存储和检索个体特征的接口。
    2. 新颖性列表(Novelty List)管理
      • 数据结构:使用列表、队列或更高级的数据结构(如平衡二叉搜索树、哈希表)来存储 NoveltyItem 对象。选择哪种数据结构取决于对查找效率、插入速度和内存使用的需求。
      • 插入机制:每当评估一个新个体的新颖性时,将其作为 NoveltyItem 对象插入到列表中,并根据需要更新新颖性得分。
      • 管理历史记录:为了保持数据结构的效率和实用性,可能需要定期或达到一定容量时移除最“不新奇”的个体,确保只保留最具代表性的或最近的解。
    3. 新颖性评估
      • 计算新奇性:对于每个新个体,计算其特征与新颖性列表中所有个体特征的相似度,可以使用距离度量(如欧氏距离)。
      • 得分更新:基于相似度计算新颖性得分,得分越低表示越新奇。这一步可能需要一个全局或局部的阈值来决定一个个体是否足够新奇以被保留。
    4. 更新与维护
      • 定期更新:随着搜索的进行,新颖性列表需要定期更新,移除不再新奇的个体,保持列表的动态性和有效性。
      • 多样性保持:确保列表中包含多样化的解决方案,避免过早收敛到特定的解决方案类型。

    通过这样的实现,NS 能够有效地跟踪和利用探索过程中的新颖性信息,促进对未知解决方案空间的探索,而不是直接追求性能优化。这种方法鼓励算法探索新的行为或解决方案,从而在复杂和多变的问题中找到创新的路径。


  • 策略梯度方法利用动作特征的挑战

    策略梯度方法,如A3C(Asynchronous Advantage Actor-Critic,Mnih等人,2016年提出的),确实面临在处理高维或连续动作空间时的挑战,但这并不意味着它们无法利用动作特征。实际上,策略梯度方法通过参数化策略,可以有效地利用动作空间的特征。在高维动作空间中,策略网络通常设计为接收状态信息,并输出动作的概率分布,或者直接输出动作的连续值,这背后就涉及到了对动作空间的特征表示。

    利用动作特征

    1. 特征工程:在设计策略网络时,通过精心设计的特征工程,可以将动作空间的复杂性转化为更容易处理的表示。这些特征可以是基于物理属性、历史行为或其他与环境交互相关的量。
    2. 神经网络的输入:在连续动作空间中,策略网络的输入层会直接接收状态特征,这些状态特征间接地包含了动作空间的有用信息。通过多层神经网络的非线性变换,模型能够学习到状态与动作之间的复杂关系,从而在输出层产生动作的参数,如均值和方差(在高斯策略中),或者直接输出动作值。
    3. 优势函数与值函数:A3C等方法通过使用优势函数或值函数来指导学习,这些函数的估计可以基于状态-动作对的特征,帮助算法更有效地学习哪些动作在特定状态下更有利,从而间接利用了动作特征。
    4. 策略优化:在更新策略参数时,通过梯度上升或下降,策略网络学习到如何根据当前状态调整动作,这一过程自然地考虑了动作空间的特性,尤其是当网络结构能够捕捉到这些特性时。

    面临的挑战

    尽管策略梯度方法能够利用动作特征,它们在高维动作空间中仍然面临挑战,如学习效率低下、收敛速度慢和方差大的问题。为了应对这些挑战,研究者们引入了如目标网络、策略正则化(如TRPO、PPO中的方法)、以及更复杂的策略表示方法,如使用更深层次的神经网络和更高级的优化技巧。

    因此,策略梯度方法在理论上和实践中都能够利用动作特征,但需要通过恰当的模型设计和算法改进来克服高维动作空间带来的困难。


    策略梯度方法在处理大动作空间时面临挑战,主要由于以下几个原因:

    高维动作空间的复杂性:在连续或高维离散动作空间中,动作的数量几乎是无限的,这使得找到最优或接近最优的策略变得极其困难。每个动作的细微变化都可能对最终的奖励产生影响,导致策略的梯度信号非常稀疏且噪声大。

    梯度估计的方差问题:策略梯度方法通过采样动作序列来估计策略的梯度,而在大动作空间中,这种采样过程的方差通常很高。这意味着即使多次尝试,梯度的估计也可能波动很大,这会减慢学习速度并可能导致学习过程不稳定。

    优化难度增加:在高维空间中,优化目标可能非常复杂且非凸,这使得找到全局最优解或接近最优解的难度大大增加。局部最优解的陷阱更为常见,策略可能在某些局部区域徘徊而无法跳出。

    动作空间的连续性处理:对于连续动作空间,策略需要输出动作的概率分布,这通常通过高斯分布或其他连续分布来近似。在这样的空间中,精确地调整动作以最大化奖励需要非常精细的梯度信号,而这种信号在大空间中很难获得。

    探索与利用的平衡:在大动作空间中,有效的探索变得至关重要,因为不常见的动作可能带来重要的信息。然而,策略梯度方法在初始阶段可能难以探索动作空间的广泛区域,导致学习进展缓慢。

    计算资源需求:处理大动作空间需要更多的计算资源,因为每个动作的评估和梯度计算都可能更复杂,尤其是在使用神经网络作为策略函数时,模型的训练和评估会更加耗时和资源密集。

    为了克服这些挑战,研究者们发展了多种策略,如引入基线减少方差、使用目标网络来稳定学习、正则化策略以避免过拟合、以及采用近端策略优化(PPO)、信任区域策略优化(TRPO)等算法来提高学习效率和稳定性。这些方法通过不同的机制来改善在大动作空间中的表现,比如通过优势函数来指导学习,或者通过策略的结构优化来更好地处理高维动作。


    策略梯度方法与基于值的方法在处理连续动作空间时存在显著差异,主要体现在目标函数、优化策略、以及对动作空间的处理方式上:

    策略梯度方法的特点:

    1. 直接优化策略:策略梯度方法直接学习一个参数化的策略函数,这个函数能够输出在给定状态下采取某个动作的概率。它通过计算策略梯度来更新参数,以最大化累积奖励的期望。
    2. 处理连续动作:策略梯度特别适合于连续动作空间,因为它可以输出动作的概率分布,如高斯分布,直接控制动作的输出,无需将动作空间离散化。
    3. 探索与利用:策略梯度通过随机抽样动作来实现探索,这自然地嵌入在策略中,不需要明确的探索机制如ε-greedy。
    4. 方差问题:在连续空间中,由于动作的连续性和策略梯度估计的随机性,梯度估计的方差可能很高,这可能导致学习过程不稳定。

    基于值的方法的特点:

    1. 间接学习策略:基于值的方法,如Q-learning或DQN,首先学习状态(或状态-动作)的价值函数,然后通过价值函数间接确定最优策略。在连续动作空间中,通常需要通过策略如ε-greedy或确定性策略来从价值函数中导出动作。
    2. 离散化处理:对于连续动作空间,基于值的方法通常需要将动作空间离散化,以便于应用,这可能导致信息损失和优化困难。
    3. 稳定但可能较慢:基于值的方法在更新时通常更稳定,因为它们基于价值的预测进行更新,但找到最优策略可能需要更多的迭代,尤其是在处理连续动作时。
    4. 目标函数:基于值的方法优化的目标是价值函数的误差最小化,而不是直接优化策略的性能,这在连续空间中可能需要额外的策略提取步骤。

    对比总结:

    • 直接与间接策略梯度直接优化策略,而基于值的方法通过价值函数间接找到最优策略。
    • 动作处理:策略梯度自然适应连续动作,而基于值的方法需要额外处理才能应用于连续空间。
    • 探索机制:策略梯度的探索内置于策略中,基于值的方法通常需要明确的探索策略。
    • 学习稳定性与效率:基于值的方法可能在学习初期更稳定,但策略梯度在处理复杂、连续空间时可能更直接有效,尽管需要更复杂的方差减少技术。

    在实际应用中,结合两种方法的混合策略,如Actor-Critic架构,可以结合两者的优点,既直接优化策略,又利用价值函数的稳定性来指导学习,成为处理连续动作空间的有力工具。


    基于梯度的策略优化方法是一类直接在策略参数上进行优化的强化学习算法,旨在通过梯度上升或下降来最大化累积奖励。以下是一些重要的基于梯度的策略优化算法:

    1. REINFORCE(Williams, 1992):这是策略梯度方法的早期代表,它通过估计策略性能指标的梯度来更新策略参数。REINFORCE通常使用回报的总和作为目标函数,并通过策略梯度定理来计算梯度。为了减少方差,可以引入一个基线(通常是状态价值函数的估计)。
    2. Actor-Critic:结合了值函数方法和策略梯度的优点,其中“Actor”负责学习策略,而“Critic”评估这个策略的好坏,通常通过TD误差来指导Actor的更新。有多种变体,如A2C(Advantage Actor Critic)和A3C(Asynchronous Advantage Actor Critic),后者通过异步多线程学习加速训练过程。
    3. TRPO (Trust Region Policy Optimization):由Schulman等人提出,它在策略更新时引入了一个信任区域,确保更新不会偏离当前策略太远,从而保证了学习的稳定性。
    4. PPO (Proximal Policy Optimization):也是由Schulman等人提出,简化了TRPO的实现,通过一个简单的clip函数来限制新旧策略之间的差异,保持了更新的稳定性,同时简化了超参数的调整。
    5. DDPG (Deep Deterministic Policy Gradient):适用于连续动作空间,结合了DQN的深度学习架构和策略梯度的思想,使用了目标网络和actor-critic架构,解决了连续动作空间中的探索问题。
    6. SAC (Soft Actor-Critic):引入了熵正则化来鼓励探索,同时优化了价值函数和策略,以及一个软性目标策略,以平衡探索与利用。
    7. TRPO和PPO的变体:这些算法的变体不断出现,旨在改善学习效率、稳定性或适应特定任务的需要,如V-trace(用于A3C的改进)和各种针对特定环境优化的策略。

    这些算法各有特点,适用于不同的学习环境和任务需求,但共同点在于它们都通过直接优化策略参数来学习最优行为策略。


    策略梯度方法在处理高方差问题时,通常采用以下几种策略来提高学习的稳定性和效率:

    1. 引入基线(Baseline):通过从累积回报中减去一个基线来减少方差,而这个基线通常是状态价值函数的估计或所有轨迹回报的平均值。在Actor-Critic架构中,基线可以是Critic估计的行动优势函数,这不仅减少了方差,还保持了估计的无偏性。
    2. 利用因果关系(Reward to Go):考虑到动作只能影响之后的奖励,不改变之前的奖励,因此可以只考虑从当前时刻到结束的累积奖励(即reward to go),这减少了方程中的求和项,从而降低方差。
    3. 目标函数的正则化:通过在目标函数中加入正则项,如熵正则化,可以鼓励策略的探索性,同时在一定程度上减少方差,因为这促使策略保持一定的随机性,避免过早收敛到局部最优。
    4. 信任区域方法(如TRPO):通过限制策略更新的步长,确保新策略不会偏离旧策略太远,从而控制方差并保持学习的稳定性。
    5. 近端策略优化(PPO):通过剪裁的优势函数来限制策略更新的幅度,确保更新不会偏离当前策略太多,这在实践中被证明能有效减少方差,同时保持学习的稳定性和效率。
    6. 多步回报(n-step returns):使用多步回报而不是单步回报,可以平衡近期和远期奖励的估计,减少方差。
    7. 经验重放:虽然主要用于基于值的方法,但在某些策略梯度方法中,通过存储和重放经验可以增加数据的利用,减少方差,尤其是在结合了Actor-Critic架构时。
    8. 批量更新:通过在更新策略时使用多个轨迹的平均回报,可以减少单个轨迹带来的噪声,从而降低方差。

    这些方法通过不同的机制来减少策略梯度估计的方差,提高学习的稳定性和效率,使得智能体在复杂和高维的环境中能够更有效地学习。


    REINFORCE 算法能有效处理采样梯度的期望问题,主要是因为它利用了策略梯度理论和蒙特卡洛方法的结合。以下是其有效性的几个关键点:

    1. 策略梯度理论:REINFORCE基于策略梯度方法,它直接在策略参数上进行优化,而不是通过值函数间接优化。这种方法允许直接计算策略性能的梯度,即策略参数如何影响期望回报的改变。
    2. 蒙特卡洛方法:REINFORCE通过实际执行策略并收集完整的轨迹(即从初始状态到终止状态的一系列状态-动作-奖励序列)来估计策略的性能。这种方法利用了大量随机样本(即多个轨迹)来估计期望回报的梯度,尽管每个样本的回报是随机的,但大量样本的平均可以提供一个无偏的估计。
    3. 期望回报的梯度估计:REINFORCE算法的关键在于能够计算策略参数的梯度,这通过观察到的回报和策略行为之间的关系来实现。具体来说,通过观察到的轨迹,REINFORCE算法计算每个动作的贡献,即动作的回报乘以其概率,然后通过调整这些概率来增加高回报动作的选取概率,减少低回报动作的选取概率。
    4. 方差减少策略:尽管原始的REINFORCE算法的梯度估计方差较高,但通过引入基线(通常是状态价值函数的估计),可以减少估计的方差而不影响梯度的期望值。基线的引入减少了回报的波动,从而使得梯度估计更加稳定。
    5. 无模型学习:REINFORCE不需要环境的动态模型,这使得它在复杂和未知的环境中特别有用,因为它直接从与环境的交互中学习。

    综上所述,REINFORCE算法通过直接在策略上进行优化,并利用蒙特卡洛采样来估计策略梯度,有效地解决了在复杂策略空间中寻找最优策略的采样期望问题。虽然存在方差大的挑战,但通过引入基线和其他方差减少技术,可以进一步提高其学习效率和稳定性。


    监督学习中的“数据”: 在监督学习中,我们处理的是带有标签的数据集。这意味着每一份数据(例如图像、文本或数值)都配有一个明确的正确答案或标签(例如分类标签、回归值)。学习过程旨在通过这些已知的输入-输出对来学习一个函数,这个函数能够对新的、未见过的数据做出准确的预测。监督学习的关键在于从这些配对的数据中提取模式,以泛化到未知数据。数据是学习过程的直接指导,它告诉模型“正确答案”是什么。

    强化学习中的“环境”: 强化学习的场景则大不相同。在这里,智能体(模型)与一个环境交互,这个环境可以是物理的(如机器人导航)或虚拟的(如游戏)。智能体通过采取行动来探索环境,并从环境中接收反馈,这种反馈通常以奖励(正向或负向)的形式出现,但不直接提供“正确答案”。智能体的目标是通过试错学习,找到能最大化累积奖励的行动策略。环境扮演了一个动态的、非直接指导的角色,它不直接告诉智能体应该做什么,而是通过奖励机制间接引导智能体学习。

    对比与联系

    • 目标导向:监督学习侧重于预测准确性,而强化学习侧重于决策过程和长期目标的实现
    • 学习过程:监督学习是通过已知结果的直接反馈进行学习,强化学习则通过探索未知,通过奖励和惩罚来调整行为。
    • 数据与互动:监督学习的数据是静态的、预先存在的,强化学习的数据是动态生成的,依赖于智能体与环境的互动。
    • 反馈机制:监督学习的反馈是即时且明确的,强化学习的反馈往往是延迟的,需要智能体理解其行为的长期后果。

    因此,”在监督学习中,我们拥有的是数据;而在强化学习中,我们拥有的是环境。”这句话强调了两种学习范式的核心差异:监督学习依赖于外部提供的明确知识,而强化学习则依赖于智能体与环境的动态交互来自我发现知识。


    在强化学习中,智能体通过试错探索提升动作质量是一个迭代和累积学习的过程,主要涉及以下几个关键环节:

    1. 环境交互:智能体开始时对环境知之甚少,它通过执行动作与环境进行交互,观察环境的响应,即接收到的奖励和新的状态。这是学习的基础,智能体通过这些交互来理解其行为的后果。
    2. 奖励信号:环境通过奖励来反馈智能体的动作效果。奖励可以是正的(鼓励行为)或负的(惩罚行为),智能体的目标是最大化累积奖励。奖励机制引导智能体学习哪些动作是“好”的,哪些是“坏”的。
    3. 策略更新:智能体根据接收到的奖励来调整其行为策略。在策略梯度方法中,如REINFORCE,智能体会根据动作的奖励调整执行该动作的概率,倾向于那些带来高奖励的动作。在价值函数方法中,如Q学习,智能体会更新动作的价值估计,从而影响未来的选择。
    4. 探索与利用:智能体在学习过程中需要平衡探索(exploration)和利用(exploitation)。探索是指尝试新的、未知的动作,以发现可能的高奖励路径;利用则是基于已知信息做出决策,倾向于已知的高奖励动作。ε-贪婪策略是实现这一平衡的常见方法,智能体以ε的概率随机选择动作进行探索,以1-ε的概率选择当前最优动作进行利用。
    5. 长期奖励的考虑:智能体不仅要考虑即时奖励,还要考虑长期奖励。这通常通过折扣因子来实现,确保智能体不仅追求短期利益,也考虑未来可能的奖励,从而学习到更复杂的策略。
    6. 策略优化:随着智能体的不断学习,它会通过算法(如策略梯度、价值迭代等)来优化其策略,使得在给定状态下采取的动作能够最大化预期的累积奖励。
    7. 适应与调整:智能体在遇到新情况或环境变化时,需要能够适应并调整其策略。这要求学习过程具有一定的泛化能力,能够从已学习的经验中抽象出一般性的行为规则。

    通过这个循环往复的过程,智能体逐渐提升其动作质量,从随机行为开始,逐步学习到在特定环境下获得最大奖励的策略。这个过程体现了强化学习的核心——通过不断的试错和反馈,智能体自我改进,最终达到或接近最优策略。


    在多智能体系统中,处理维度爆炸问题通常涉及减少状态和动作空间的复杂性,以及优化学习算法以适应大规模的交互环境。以下是一些解决策略:

    1. 状态空间优化
      • 特征工程:通过特征选择和降维技术,如PCA(主成分分析)和LDA(线性判别分析),来提取状态空间中的关键特征,减少不必要的维度。
      • 状态抽象:将复杂状态空间抽象成更粗粒度的表示,通过归纳或聚类减少状态的多样性。
    2. 联合动作空间优化
      • Mean Field MARL(平均场多智能体强化学习):通过考虑智能体间的平均交互而非所有个体交互,简化联合动作空间。算法将智能体间的交互近似为与邻居的交互,减少计算复杂度。
      • 动作编码:通过高效编码机制,尝试在有限的表示中包含更多信息,减少联合动作的优化问题的直接维度,但不减少其复杂性。
    3. 混合型训练机制
      • 集中式训练分布式执行(CTDE):在训练时,智能体共享全局信息,以集中方式学习策略,但在执行时,每个智能体基于局部信息行动,减少每个智能体需要考虑的全局状态信息量。
    4. 探索算法优化
      • 基于伪计数的探索:设计算法来评估动作的探索频率,即使在连续空间中也能有效探索,通过密度模型来近似动作的频率,从而提高探索效率。
    5. 分解MDPs(马尔可夫决策过程)
      • 利用因子化表达,将复杂问题分解为更小、更可管理的部分。例如,VDN(价值分解网络)和QMIX等算法通过假设值函数可分解为智能体的独立贡献,减少联合策略的复杂度。
    6. 协调图与动态贝叶斯网络
      • 使用协调图来表示智能体间的依赖关系,通过因式分解值函数,允许智能体在行动时协调,减少状态-动作空间的指数爆炸。
    7. 元学习与对手建模
      • 元学习帮助智能体快速适应不同环境,减少对特定环境的过度拟合,从而在多变的多智能体环境中减少探索的维度需求。
      • 对手建模通过预测其他智能体的行为来稳定学习过程,减少因其他智能体策略变化带来的环境非平稳性影响。

    通过这些方法,多智能体系统可以更有效地处理大规模状态和动作空间,提高学习效率和策略质量,从而克服维度爆炸带来的挑战。


  • Resemble Enhance:AI赋能的语音增强利器

    近年来,人工智能技术在语音处理领域的应用日益广泛,语音增强技术作为其中重要一环,其发展也日新月异。今天,就为大家介绍一款名为Resemble Enhance的AI语音增强工具,它能够有效降低噪音、提升语音质量,为用户带来更清晰、更纯净的音频体验。

    Resemble Enhance:双模块协同,打造高品质语音

    Resemble Enhance 的核心是由去噪器增强器这两个模块构成的。

    • 去噪器:顾名思义,它的主要功能是从嘈杂的音频中分离出人声,就像一位经验丰富的录音师,能够精准地将人声从背景噪音中剥离出来。
    • 增强器:在去噪的基础上,增强器进一步提升语音的感知质量。它不仅可以修复音频失真,还能扩展音频带宽,使得最终输出的语音更加清晰、饱满、富有层次感。

    值得一提的是,这两个模块的训练数据均为高品质的44.1kHz语音数据,这保证了Resemble Enhance 能够输出高保真的增强语音。

    Resemble Enhance:简单易用,功能强大

    Resemble Enhance 的一大优势在于其简单易用的特点。即使你不是技术专家,也能轻松上手。

    安装与使用

    你可以通过以下命令,轻松安装稳定版本的 Resemble Enhance:

    pip install resemble-enhance --upgrade

    如果你想尝试最新的预发布版本,可以使用以下命令:

    pip install resemble-enhance --upgrade --pre

    安装完成后,使用起来也非常简单。只需执行以下命令,即可对指定目录下的音频文件进行增强:

    resemble_enhance in_dir out_dir

    其中,in_dir 是输入音频文件所在的目录,out_dir 是输出增强后的音频文件所在的目录。

    如果你只想进行去噪处理,可以使用以下命令:

    resemble_enhance in_dir out_dir --denoise_only

    Web Demo 体验

    为了方便用户体验 Resemble Enhance 的强大功能,开发者还提供了一个基于 Gradio 构建的 Web 演示版本。你可以在 Hugging Face 上在线体验,也可以在本地运行:

    python app.py

    Resemble Enhance:定制化训练,满足个性化需求

    除了使用预训练模型,Resemble Enhance 还支持用户根据自身需求训练个性化模型。

    数据准备

    训练模型的第一步是准备数据。你需要准备三个数据集:

    1. 前景语音数据集:包含清晰人声的音频文件。
    2. 背景非语音数据集:包含各种噪音的音频文件。
    3. 房间冲激响应 (RIR) 数据集:用于模拟不同声学环境的.npy文件,示例可以参考 这里

    数据集的目录结构如下:

    data
    ├── fg
    │   ├── 00001.wav
    │   └── ...
    ├── bg
    │   ├── 00001.wav
    │   └── ...
    └── rir
        ├── 00001.npy
        └── ...

    模型训练

    Resemble Enhance 的训练过程分为三个阶段:

    1. 去噪器预热:尽管去噪器和增强器是一起训练的,但建议先对去噪器进行预热训练: python -m resemble_enhance.denoiser.train --yaml config/denoiser.yaml runs/denoiser
    2. 增强器第一阶段:训练自编码器和声码器: python -m resemble_enhance.enhancer.train --yaml config/enhancer_stage1.yaml runs/enhancer_stage1
    3. 增强器第二阶段:训练潜在条件流匹配 (CFM) 模型: python -m resemble_enhance.enhancer.train --yaml config/enhancer_stage2.yaml runs/enhancer_stage2

    总结

    Resemble Enhance 是一款功能强大、易于使用的 AI 语音增强工具,它可以有效降低噪音、提升语音质量,为用户带来更佳的音频体验。同时,它还支持用户自定义训练模型,以满足个性化需求。相信随着技术的不断发展,Resemble Enhance 将在语音增强领域发挥更大的作用。

    参考文献

    希望这篇文章能帮助你更好地了解 Resemble Enhance。

  • S3:一个简单高效的多模态对话系统

    近年来,人工智能 (AI) 领域见证了多模态系统的兴起。这些系统能够无缝整合文本、图像和音频等多种形式的数据,在模拟人类认知能力方面正变得越来越娴熟。然而,该领域的研究人员面临的主要挑战之一是需要大量数据和计算资源来训练最先进的模型。

    本文介绍了一种全新的范式,即只需少量数据和计算资源即可构建强大的多模态系统。我们提出了一个简单而有效的基线模型 S3,它挑战了大型数据集和过度计算能力是开发具有竞争力的多模态 AI 系统的先决条件的传统观念。通过使用包含不到 150,000 个多模态样本的精简语料库、预训练的冻结模态编码器、7B 语言模型,以及利用单个 A100-80GB GPU 的计算经济性,我们创建了一个架构简洁优雅、性能可与目前领域内更复杂系统相媲美的模型。我们方法的核心是一个模态投影器,它使用一个简单的多层感知器 (MLP) 将多模态特征映射到标记嵌入中。

    S3 的强大之处

    S3 的贡献可以概括如下:

    • 我们将一种用于训练多模态投影器的成熟管道应用于多种模态(图像、音频和文本),以训练多模态对话模型。
    • 我们引入了一种用于训练多模态对话模型的高质量有效数据混合。
    • 我们证明了将整个图像映射到 4 个文本标记足以完成多模态对话任务。
    • 我们公开了所获得的模型,该模型显示出与最先进模型相当的性能。

    深入 S3 的核心技术

    多模态数据预处理的艺术

    为了实现多模态对话的目标,我们以标准聊天布局格式化了每个数据集。这种格式将每条消息表示为一个 JSON 对象,其中包含“角色”(指示消息是来自用户还是机器人)、“类型”(指示消息包含图像、音频还是文本)以及消息内容本身(在图像和音频的情况下,这将是文件路径)。

    {
      "id": 0,
      "messages": [
        {
          "role": "user",
          "type": "image",
          "text": "https://example.com/images/bird.jpg"
        },
        {
          "role": "user",
          "type": "audio",
          "text": "https://example.com/audio/birdsong.mp3"
        },
        {
          "role": "user",
          "type": "text",
          "text": "How can be the image and the audio related?"
        },
        {
          "role": "bot",
          "type": "text",
          "text": "The image shows a Northern Cardinal,
                   and the audio file is its distinctive birdsong."
        }
      ]
    }

    图1:多模态对话数据 json 格式示例

    我们为每个数据集创建了一个自定义系统提示,以引出与原始数据集紧密匹配的机器人响应。例如,对于 TextCaps 数据集,我们选择了“用单个词或短语回答问题”之类的提示,以反映数据集主要包含简短响应的事实。

    为了解决许多数据集存在的简短性问题(这些数据集通常由单对问答组成),我们随机将多个简短对话组合成扩展序列,以创建更长的对话。

    特殊标记和后处理:解码多模态对话的关键

    我们在基础模型的标记器中集成了额外的特殊标记,并解冻了语言模型头和嵌入层,以促进这些新标记的训练。具体来说:

    • 我们引入了模态标记 [M][/M] 来标记数据中不同模态对象的开始和结束。
    • 我们使用 [img] 等标记分别对音频和图像内容进行编码。
    • 为了表示对话中的说话者,我们为机器人和用户角色添加了特殊标记。
    • 我们还添加了 [RS] 标记来表示对话中每条消息的开始和结束。

    模态投影器:连接视觉和语言的桥梁

    模态投影器的作用是调整各种模态对象(如图像和音频)的嵌入,以确保它们与语言模型兼容。在我们的研究中,我们实现了一种基本架构设计,其中使用多个线性层将来自模态编码器的隐藏状态直接映射到语言模型的标记嵌入中。

    与 LLaVA 等最先进的模型不同,我们将模态对象映射到 4 个标记中,而不管模态编码器中输出补丁的数量。我们假设少量输出模态标记足以进行基本的视觉理解。此外,仅使用 4 个标记可以显着减少我们传递给 Transformer 的序列长度。

    S3 性能评估:在 AI 旅程竞赛和 MMMU 基准测试中脱颖而出

    AI 旅程竞赛:展现强大的多模态交互能力

    我们在 2023 年 AI 旅程竞赛的“强人工智能”任务中测试了 S3。该竞赛的目标是开发一个能够在文本、图像和音频三种模态之间无缝交互的系统。

    结果:在 AI 旅程竞赛中,我们的方法在 30 个参赛队伍中获得了第 4 名。

    MMMU 基准测试:验证视觉理解能力

    我们使用 MMMU 基准测试来评估 S3 的视觉理解能力,并将其与现有模型进行比较。

    结果:我们的系统使用低计数数据混合,在性能方面超过了许多现有模型。在开源的 7B 模型中,它表现出具有竞争力的性能。它甚至可以与在更大的数据集、更大的 LLM 上训练的最先进模型相媲美,仅略逊一筹。

    展望未来:迈向更强大的多模态对话系统

    我们的研究表明,无需大型数据集或巨大的计算能力即可开发出极具竞争力的多模态对话模型。未来工作应侧重于增加数据集的大小和多样性,尤其是在音频模态方面,因为这可能会进一步提高性能。此外,探索集成更复杂的模态自适应架构也可能有利于进一步增强其功能。

    参考文献

    [1] Ainslie, J., Lee-Thorp, J., de Jong, M., Zemlyanskiy, Y., Lebron, F., Sanghai, S.: GQA: Training generalized multi-query transformer models from multi-head checkpoints. In: Bouamor, H., Pino, J., Bali, K. (eds.) Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing. pp. 4895–4901. Association for Computational Linguistics, Singapore (Dec 2023). https://doi.org/10.18653/v1/2023.emnlp-main.298, https://aclanthology.org/2023.emnlp-main.298

    [30] Zhu, D., Chen, J., Shen, X., Li, X., Elhoseiny, M.: Minigpt-4: Enhancing vision-language understanding with advanced large language models. CoRR abs/2304.10592 (2023). https://doi.org/10.48550/ARXIV.2304.10592

    请注意:由于篇幅限制,此处仅列出部分参考文献,完整列表请参阅原文。

  • 通向AGI之路:AI原生记忆,而非无限上下文

    引言:LLM的局限性与AGI的曙光

    近年来,大型语言模型(LLM)的蓬勃发展,为人工智能领域注入了新的活力,预示着通用人工智能(AGI)的曙光。然而,一些LLM初创公司认为,拥有近乎无限上下文长度的LLM就能实现AGI,这种观点或许过于乐观。本文将深入探讨LLM在实现AGI道路上面临的挑战,并提出一种基于AI原生记忆的AGI实现路径。

    无限上下文并非万能解药

    当前,许多研究致力于扩展LLM的上下文长度,例如,GPT-4的上下文窗口为32K tokens,而最新的GPT-4-turbo和GPT-4o模型可以处理128K tokens;Gemini 1.5则声称拥有1M或10M tokens的上下文窗口。学术界也探索了对抗长度外推和位置偏差的方法,一些研究甚至声称实现了“无限”的上下文长度。

    然而,LLM是否能够有效利用超长甚至无限的上下文,目前尚无定论。我们认为,类似于人类的认知负荷,LLM能够处理的最大内容量可能存在固有限制。

    有效上下文长度的局限性

    现有的长上下文LLM通常采用“大海捞针”(NIAH)测试来评估其性能,即从大量无关文本中检索特定信息的能力。有效上下文长度则定义为测试LLM相较于强基线模型表现更优的最大长度。

    然而,根据最近一项针对长上下文模型的基准测试研究(Hsieh et al., 2024),大多数(如果不是全部)LLM都夸大了其上下文长度。例如,声称拥有128K上下文长度的GPT-4,其有效上下文长度仅为64K;而ChatGLM的有效上下文长度仅为4K,远低于其声称的128K。

    推理能力的瓶颈

    为了进一步验证LLM在长上下文场景下的推理能力,我们提出了一种新的评估任务——推理大海捞针,旨在验证LLM在需要同时进行检索和推理时的能力。

    我们以Mindverse AI的“第二自我”产品Mebot的真实用户数据为例,构建了8个不同的用户数据堆栈,并设计了6种不同的查询-信息对。实验结果表明,即使是最先进的LLM(如GPT-4o和GPT-4-turbo),在处理长文本和多跳推理时也表现不佳。

    图2:基于Mebot真实数据的推理大海捞针比较

    实验结果表明,响应质量与上下文长度和推理步骤数量呈负相关,这意味着LLM在处理长文本和多步推理方面存在困难

    AI原生记忆:通向AGI的关键

    我们认为,AGI应该是一个类似于计算机的系统,其中LLM充当处理器,LLM的上下文充当RAM,而记忆则扮演着磁盘存储的角色

    RALM/RAG:记忆的初级形态

    检索增强型LLM(RALM)可以通过筛选大量相关上下文来回答查询,可以看作是将记忆定义为仅包含原始数据的特例。然而,记忆不仅仅是原始数据,它还应该包含从原始数据中推理得到的重要结论,并能够被用户直接消费。

    什么是AI原生记忆?

    我们认为,AI原生记忆的最终形态是一个深度神经网络模型,它能够参数化和压缩所有类型的记忆,甚至是无法用自然语言描述的记忆。为了确保与同一个AGI代理交互的不同用户的记忆隐私,我们认为最佳实践是为每个用户维护一个独立的记忆模型。我们将这种介于AGI代理和特定用户之间的记忆模型称为该用户的大型个人模型(LPM)

    LPM记录、组织、索引和排列关于个人的每一个细节,最终为用户提供直接访问记忆的接口,并为下游应用程序(如个性化生成、推荐等)提供有用、完整的上下文。

    LPM的实现级别

    我们设想LPM的实现可以分为三个级别,复杂度递增:

    • L0:原始数据。这种方法类似于直接将RALM/RAG应用于原始数据,将记忆定义为所有原始数据。
    • L1:自然语言记忆。指可以用自然语言形式概括的记忆,例如用户的简短个人简介、重要句子或短语列表以及偏好标签。
    • L2:AI原生记忆。指不一定需要用自然语言描述的记忆,通过模型参数学习和组织。每个LPM都将是一个神经网络模型。

    L1:自然语言记忆

    在L1中,记忆将包含一组自然语言描述,例如关键词/标签、短语、句子甚至段落。这与信息提取和知识发现高度相关,包括短语挖掘、实体识别、关系提取、文本摘要、分类法构建等。

    L1 LPM的开发者需要指定方案,例如定义各种有用的记忆类型,包括但不限于:

    • (简短)个人简介:对用户的概括性描述,通常包含几句话。
    • 用户的兴趣主题:可以看作是一组标签的集合(例如,“政治”、“篮球”)。
    • 偏好:包括用户对各种事物的偏好。
    • 社交关系:包括用户的社交关系,例如提到过谁和哪些组织。

    L2:AI原生记忆

    在L2中,记忆超越了自然语言形式,成为一个神经网络模型,因此我们将其命名为“AI原生”。该模型旨在编码用户的所有记忆。

    L2 LPM可以看作是世界模型的个性化版本,它应该能够根据用户历史预测用户行为。

    L2 LPM的挑战和潜在解决方案:

    • 训练效率:一种直观但计算复杂的方法是为每个用户微调他们自己的LLM。
    • 服务效率:随着越来越多的L2 LPM部署给用户,需要新的基础设施来服务这些模型。
    • 冷启动:L2 LPM训练中的一个常见问题。
    • 灾难性遗忘和冲突解决:确保学习新记忆的同时防止旧记忆的灾难性遗忘至关重要。

    总结与展望

    AI原生记忆作为AGI时代(主动)参与、个性化、分发和社交的变革性基础设施,具有巨大的潜力,同时也带来了隐私和安全方面的挑战。

    我们相信,在未来,AGI代理将首先与AI原生记忆交互,并查看它是否能够提供必要的信息。如果不是,则由AI原生记忆与真实用户交互以找出更多信息。因此,AI原生记忆将成为用户与AGI代理之间所有交互和个性化的核心