作者: admin

  • 前向-前向(FF)算法:一种全新的深度学习方法

    引言

    在NeurIPS 2022大会上,Geoffrey Hinton提出了一种名为前向-前向(Forward-Forward,简称FF)算法的新型神经网络学习方法[1]。这种算法已经在一些小问题上展示了其潜力,并引起了广泛关注。本文将详细介绍FF算法的机制、优势及其在深度学习中的应用。

    FF算法的机制

    FF算法的核心思想是用两个前向传递来替代反向传播中的前向和后向传递[3]。具体来说,第一个前向传递涉及正样本(即真实数据),而第二个前向传递涉及负样本,这些负样本可以由网络本身生成[3]。每一层都有其独立的目标函数,目标是对正样本具有高好度(goodness)而对负样本具有低好度[3]

    好度的定义

    好度可以通过多种方式来衡量,例如层中的平方活动之和或负的平方活动之和[3]。这种多样性的衡量标准为算法提供了灵活性,使其能够适应不同的应用场景。

    时间上的分离

    一个有趣的特点是,如果正负传递可以在时间上分离,那么负传递可以离线进行[3]。这使得正向传递中的学习过程更加简化,并允许视频数据在不存储活动或传播导数的情况下通过网络进行流水线处理[3]

    FF算法的优势

    实时学习

    FF算法可以在不打断输入流处理的情况下,实时学习流数据的多层次表示[2]。这对于处理动态和连续数据非常有利,例如视频流或实时传感器数据。

    易于实现

    与强化学习相比,FF算法在扩展性上表现更好,并且比反向传播更容易在大脑皮层中实现[2]。这使得FF算法在神经科学和脑机接口等领域具有潜在的应用价值。

    结论

    总的来说,Geoffrey Hinton在NeurIPS 2022上提出的前向-前向算法为深度神经网络的训练提供了一种新的视角。其无需传播导数或记忆神经活动的特点,使得它在实时数据处理和扩展性方面具有显著优势。随着进一步的研究和优化,FF算法有望在未来的深度学习中发挥重要作用。

    参考文献

    1. Geoffrey Hinton proposed New Forward-Forward (FF) Algorithm
    2. NeurIPS Invited Talk The Forward-Forward Algorithm for Training Deep Neural Networks
    3. [2212.13345] The Forward-Forward Algorithm: Some Preliminary Investigations

    前向-前向(FF)算法的重新实现

    简介

    在GitHub上,loeweX的仓库提供了Geoffrey Hinton前向-前向(Forward-Forward,简称FF)算法的Python/PyTorch重新实现。这一实现涵盖了论文中第3.3节“FF的一个简单监督示例”中描述的实验,并实现了与官方Matlab实现大致相同的性能。

    FF算法概述

    FF算法是一种更符合生物学原理的深度神经网络训练方法。与传统的反向传播不同,FF算法不在层之间共享梯度,而是基于局部损失训练每一层。具体来说,网络进行两个前向传递:

    1. 正样本前向传递:这些样本代表“真实”数据,网络被训练以最大化每一层的“好度”(goodness)。
    2. 负样本前向传递:这些样本是对真实数据分布的扰动,网络被训练以最小化每一层的好度。

    好度可以通过多种方式评估,如计算层的平方活动之和。

    实验设置

    设置环境

    要运行该代码,您需要按照以下步骤设置环境:

    1. 安装Conda:确保您的系统上安装了Conda。
    2. 调整脚本:根据需要调整setup_conda_env.sh脚本(例如,设置正确的CUDA版本)。
    3. 运行脚本:执行以下命令来设置环境:
    bash setup_conda_env.sh

    运行实验

    设置好环境后,您可以运行训练和评估:

    source activate FF
    python -m main

    结果对比

    以下是不同实现的FF算法的测试误差对比:

    实现测试误差 (%)
    论文1.36
    官方Matlab实现1.47
    本仓库1.45

    总结

    FF算法通过引入局部损失和双前向传递,为深度神经网络的训练提供了一种新的方法。该仓库提供的实现不仅验证了FF算法的有效性,还展示了其在实际应用中的潜力。

    资源和许可

    本仓库代码基于MIT许可协议发布,详情请参见LICENSE文件。


    了解更多:

    1. Geoffrey Hinton提出的新前向-前向算法
    2. NeurIPS 2022大会邀请报告:前向-前向算法
    3. [2212.13345] 前向-前向算法:初步研究

  • 深入研究大型语言模型中的专家混合机制

    引言

    随着大型语言模型(LLMs)的出现,自然语言处理领域发生了革命性的变化。研究人员通过增加模型规模和训练数据量,不断推升这些模型的能力。然而,这也带来了训练成本和复杂性的急剧增加,迫切需要新的解决方案来更好地平衡预训练效率和模型性能。专家混合(Mixture-of-Experts, MoE)架构通过动态路由输入到一部分专家,从而在不牺牲计算效率的情况下,实现模型的大规模扩展。

    Mixture-of-Experts 概述

    MoE模型通过用N个并行的前馈网络(FFNs)替换原有的FFNs,并结合一个路由器来增强Transformer。这些并行的FFNs被称为专家,每个专家通过路由器的评分分布来接收输入。公式如下:

    [ \mathbf{y} = \sum_{n \in N} g_{n}(\mathbf{x}; \mathbf{G}, k) E_{n}(\mathbf{x}) ]

    当Top-k小于N时,仅有部分专家参与计算,这被称为稀疏专家混合(SMoE)。

    方法概述

    本文选取了Mixtral 8x7B、DeepSeekMoE和Grok-1三个模型进行分析,并附加了标准的Transformer模型Mistral 7B作为对比。研究分为静态参数分析和动态行为分析两部分。

    静态参数分析

    专家权重矩阵

    在矩阵级别,我们计算了所有专家在每一层的投影矩阵Wup、Wgate和Wdown之间的相似性,并用PCA将这些矩阵扁平化为二维空间。结果显示,不同模型的矩阵相似性模式存在显著差异。

    门嵌入

    门嵌入的相似性分析显示,Mixtral和DeepSeek的门嵌入与专家选择的权重矩阵Wgate之间存在较强的相关性,这表明门嵌入和Wgate可能学习了相似的知识来执行选择操作。

    动态行为分析

    专家输出

    通过输入短序列和长序列,我们测量了专家输出特征向量之间的相似性。结果显示,被选择的专家输出更相似,尤其是在Mixtral模型中。

    专家输出的L2范数和门评分

    在Mixtral模型中,我们发现被选择的专家通常输出范数最大,这表明范数可能是门决策的关键因素之一。这一发现与CompeteSMoE的设计一致,该设计基于输出范数选择专家。

    讨论

    基于我们的分析,我们提出了一些关于MoE模型的建议:

    • 神经元级别的专家:门嵌入决定了专家选择,而Wgate负责选择激活的神经元,两者之间的相似性表明神经元可能是更细粒度的专家。
    • 模型架构:可以考虑在深层增加专家数量,而在最后一层减少专家数量。此外,基于输出范数作为路由机制是合理的。
    • 相关性测量:权重矩阵之间的相似性测量在某种程度上等同于输出特征向量的相似性测量。

    相关工作

    现有的大部分工作从路由器的角度分析MoE,通过观察专家选择来研究其行为。近年来的研究发现标准路由器并未在领域级别表现出明显的专业化,主要基于token ID进行路由。

    结论

    本文首次尝试通过研究参数和输出来揭示MoE模型的内部工作机制。我们总结了实证观察,并提出了一些实用建议。虽然目前还无法全面回答MoE是否学习了异质的专家,但我们的一些实验表明,特定的架构设计和训练框架可能更有利于专家的专业化。

    限制

    我们的分析主要基于观察,缺乏进一步验证的干预措施。

    GitHub – kamanphoebe/Look-into-MoEs: A Closer Look into Mixture-of-Experts in Large Language Models

    这个GitHub仓库包含了论文《A Closer Look into Mixture-of-Experts in Large Language Models》的代码。以下是仓库的主要内容和使用指南:

    概述

    我们首次尝试理解基于MoE的大型语言模型的内部工作机制。具体来说,我们全面研究了三个基于MoE的模型(Mixtral 8x7B, DeepSeekMoE, Grok-1)的参数和行为特征,揭示了一些有趣的观察结果,包括:

    • 神经元像细粒度专家一样行为:门嵌入决定了专家选择,而专家的投影矩阵则负责选择激活的神经元。它们的相似性值显示出关联性,这表明专家神经元可能是细粒度的专家。
    • MoE的路由器通常选择输出范数较大的专家:以Mixtral为例,我们发现输出特征向量范数最大的专家最有可能被门赋予最高分数。
    • 专家多样性随着层数增加而增加,但最后一层是一个例外:在多个实验中,我们观察到专家之间的相似性在深层中通常较低,而在最后一层相似性增加。

    基于这些观察结果,我们还为MoE实践者提供了一些建议,如路由器设计和专家分配。

    使用指南

    1. 下载模型检查点
      默认情况下,我们的代码从ckpt目录加载预下载的模型。你也可以修改代码直接从HuggingFace下载。我们使用的模型下载链接如下:
    • Mixtral 8x7B Base
    • Mixtral 8x7B Instruct
    • Mistral
    • DeepSeekMoE
    • Grok-1
    1. 创建conda环境
       git clone https://github.com/kamanphoebe/Look-into-MoEs.git
       cd Look-into-MoEs
       conda create -n analyze --file env.txt

    创建conda环境后,需要将其选为Jupyter内核。

    1. 运行实验
      两个Jupyter notebooks(static_analysis.ipynb和dynamic_analysis.ipynb)分别包含了关于静态参数和动态行为的实验代码。你可以简单地运行每个实验对应的代码块,这些代码块的标题与论文中的实验名相同。

    引用

    如果你觉得我们的工作有用,请引用我们的论文:

    @misc{lo2024closerlookmixtureofexpertslarge,
          title={A Closer Look into Mixture-of-Experts in Large Language Models}, 
          author={Ka Man Lo and Zeyu Huang and Zihan Qiu and Zili Wang and Jie Fu},
          year={2024},
          eprint={2406.18219},
          archivePrefix={arXiv},
          primaryClass={cs.CL},
          url={https://arxiv.org/abs/2406.18219}, 
    }

    致谢

    我们的模型配置和建模文件借用了HuggingFace仓库中的相应文件,感谢这些作者的出色工作。

    通过这个GitHub仓库,研究者可以复现论文中的实验,并进一步探索MoE模型的内部机制。

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网 沪ICP备2024052574号-1