Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >反向传播、前向传播都不要,这种无梯度学习方法是Hinton想要的吗?

反向传播、前向传播都不要,这种无梯度学习方法是Hinton想要的吗?

作者头像
机器之心
发布于 2025-04-09 02:15:16
发布于 2025-04-09 02:15:16
1570
举报
文章被收录于专栏:机器之心机器之心

机器之心报道

编辑:张倩、+0

Noprop:没有反向传播或前向传播,也能训练神经网络。

「我们应该抛弃反向传播并重新开始。」早在几年前,使反向传播成为深度学习核心技术之一的 Geoffrey Hinton 就发表过这样一个观点。

image.png
image.png

而一直对反向传播持怀疑态度的也是 Hinton。因为这种方法既不符合生物学机理,与大规模模型的并行性也不兼容。所以,Hinton 等人一直在寻找替代反向传播的新方法,比如 2022 年的前向 - 前向算法。但由于性能、可泛化性等方面仍然存在问题,这一方向的探索一直没有太大起色。

最近,来自牛津大学和 Mila 实验室的研究者向这一问题发起了挑战。他们开发了一种名为 NoProp 的新型学习方法,该方法既不依赖前向传播也不依赖反向传播。相反,NoProp 从扩散和流匹配(flow matching)方法中汲取灵感,每一层独立地学习对噪声目标进行去噪。

image.png
image.png
  • 论文标题:NOPROP: TRAINING NEURAL NETWORKS WITHOUT BACK-PROPAGATION OR FORWARD-PROPAGATION
  • 论文链接:https://arxiv.org/pdf/2503.24322v1

研究人员认为这项工作迈出了引入一种新型无梯度学习方法的第一步。这种方法不学习分层表示 —— 至少不是通常意义上的分层表示。NoProp 需要预先将每一层的表示固定为目标的带噪声版本,学习一个局部去噪过程,然后可以在推理时利用这一过程。

他们在 MNIST、CIFAR-10 和 CIFAR-100 图像分类基准测试上展示了该方法的有效性。研究结果表明,NoProp 是一种可行的学习算法,与其他现有的无反向传播方法相比,它实现了更高的准确率,更易于使用且计算效率更高。通过摆脱传统的基于梯度的学习范式,NoProp 改变了网络内部的贡献分配(credit assignment)方式,实现了更高效的分布式学习,并可能影响学习过程的其他特性。

在看了论文之后,有人表示,「NoProp 用独立的、无梯度的、基于去噪的层训练取代了传统的反向传播,以实现高效且非层次化的贡献分配。这是一项具有开创性意义的工作,可能会对分布式学习系统产生重大影响,因为它从根本上改变了贡献分配机制。

其数学公式中涉及每层特定的噪声模型和优化目标,这使得无需梯度链即可进行独立学习。其优势在于通过让每一层独立地对一个固定的噪声目标进行去噪,从而绕过了反向传播中基于顺序梯度的贡献分配方式。这种方式能够实现更高效、可并行化的更新,避免了梯度消失等问题,尽管它并未构建传统的层次化表示。」

image.png
image.png

还有人表示,「我在查看扩散模型架构时也产生过这样的想法…… 然而,我认为这可能是一种非最优的方法,所以它现在表现得如此出色让我感到很神秘。显而易见的是其并行化优势。」

image.png
image.png
image.png
image.png

为什么要寻找反向传播的替代方案?

反向传播虽是训练神经网络的主流方法,但研究人员一直在寻找替代方案,原因有三:

  1. 生物学合理性不足:反向传播需要前向传递和后向传递严格交替,与生物神经系统运作方式不符。
  2. 内存消耗大:必须存储中间激活值以计算梯度,造成显著内存开销。
  3. 并行计算受限:梯度的顺序传播限制了并行处理能力,影响大规模分布式学习,并导致学习过程中的干扰和灾难性遗忘问题。

目前为止,反向传播的替代优化方法包括:

  • 无梯度方法:如直接搜索方法和基于模型的方法
  • 零阶梯度方法:使用有限差分近似梯度
  • 进化策略
  • 基于局部损失的方法:如差异目标传播(difference target propagation)和前向 - 前向算法

但这些方法因在准确性、计算效率、可靠性和可扩展性方面的限制,尚未在神经网络学习中广泛应用。

方法解析

NoProp

设 x 和 y 是分类数据集中的一个输入 - 标签样本对,假设从数据分布 q₀(x,y) 中抽取,z₀,z₁,...,zₜ ∈ Rᵈ 是神经网络中 T 个模块的对应随机中间激活值,目标是训练该网络以估计 q₀(y|x)。

定义两个分布 p 和 q,按以下方式分解:

image.png
image.png

p 分布可以被解释为一个随机前向传播过程,它迭代地计算下一个激活值 zₜ,给定前一个激活值 zₜ₋₁ 和输入 x。实际上,可以看到它可以被明确表示为一个添加了高斯噪声的残差网络:

image.png
image.png

其中 Nᵈ(・|0,1) 是一个 d 维高斯密度函数,均值向量为 0,协方差矩阵为单位矩阵,aₜ,bₜ,cₜ 是标量(如下所示),bₜzₜ₋₁ 是一个加权跳跃连接,而 ûθₜ(zₜ₋₁,x) 是由参数 θₜ 参数化的残差块。注意,这种计算结构不同于标准深度神经网络,后者没有从输入 x 到每个模块的直接连接。遵循变分扩散模型方法,也可以将 p 解释为给定 x 条件下 y 的条件隐变量模型,其中 zₜ 是一系列隐变量。可以使用变分公式学习前向过程 p,其中 q 分布作为变分后验。关注的目标是 ELBO,这是对数似然 log p (y|x)(即证据)的下界:

image.png
image.png

遵循 Sohl-Dickstein 和 Kingma 等人的方法,将变分后验 q 固定为一个易于处理的高斯分布。在这里使用方差保持的 Ornstein-Uhlenbeck 过程:

image.png
image.png

其中 uᵧ 是类别标签 y 在 Rᵈ 中的嵌入,由可训练的嵌入矩阵 W (Embed) ∈ Rᵐˣᵈ 定义,m 是类别数量。嵌入由 uᵧ = {W (Embed)}ᵧ 给出。利用高斯分布的标准性质,我们可以得到:

image.png
image.png

其中 ᾱₜ = ∏ₛ₌ₜᵀαₛ,μₜ(zₜ₋₁,uᵧ) = aₜuᵧ + bₜzₜ₋₁,aₜ = √(ᾱₜ(1-αₜ₋₁))/(1-ᾱₜ₋₁),bₜ = √(αₜ₋₁(1-ᾱₜ))/(1-ᾱₜ₋₁),以及 cₜ = (1-ᾱₜ)(1-αₜ₋₁)/(1-ᾱₜ₋₁)。为了优化 ELBO,将 p 参数化以匹配 q 的形式:

image.png
image.png

其中 p (z₀) 被选为 Ornstein-Uhlenbeck 过程的平稳分布,ûθₜ(zₜ₋₁,x) 是由参数 θₜ 参数化的神经网络模块。给定 zₜ₋₁ 和 x 对 zₜ 进行采样的结果计算如残差架构(方程 3)所示,其中 aₜ,bₜ,cₜ 如上所述。最后,将此参数化代入 ELBO(方程 4)并简化,得到 NoProp 目标函数:

image.png
image.png

其中 SNR (t) = ᾱₜ/(1-ᾱₜ) 是信噪比,η 是一个超参数,U {1,T} 是在整数 1,...,T 上的均匀分布。我们看到每个 ûθₜ(zₜ₋₁,x) 都被训练为直接预测 uᵧ,给定 zₜ₋₁ 和 x,使用 L2 损失,而 p̂θout (y|zₜ) 被训练为最小化交叉熵损失。每个模块 ûθₜ(zₜ₋₁,x) 都是独立训练的,这是在没有通过网络进行前向或反向传播的情况下实现的。

实现细节

NoProp 架构如图 1 所示。

image.png
image.png

在推理阶段,NoProp 架构从高斯噪声 z₀开始,通过一系列扩散步骤转换潜变量。每个步骤中,潜变量 zₜ通过扩散动态块 uₜ演化,形成序列 z₁→z₂→...→zₜ,其中每个 uₜ都以前一状态 zₜ₋₁和输入图像 x 为条件。最终,zₜ通过线性层和 softmax 函数映射为预测标签ŷ。

训练时,各时间步骤被采样,每个扩散块 uₜ独立训练,同时线性层和嵌入矩阵与扩散块共同优化以防止类别嵌入崩溃。对于流匹配变体,uₜ表示 ODE 动态,标签预测通过寻找与 zₜ在欧几里得距离上最接近的类别嵌入获得。

训练所用的模型如图 6 所示,其中左边为离散时间情况的模型,右边为连续时间情况的模型。

image.png
image.png

作者在三种情况下构建了相似但有区别的神经网络模型:

  1. 离散时间扩散:神经网络 ûθt 将图像 x 和潜变量 zt−1 通过不同嵌入路径处理后合并。图像用卷积模块处理,潜变量根据维度匹配情况用卷积或全连接网络处理。合并后的表示通过全连接层产生 logits,应用 softmax 后得到类别嵌入上的概率分布,最终输出为类别嵌入的加权和。
  2. 连续时间扩散:在离散模型基础上增加时间戳 t 作为输入,使用位置嵌入编码并与其他特征合并,整体结构与离散情况相似。
  3. 流匹配:架构与连续时间扩散相同,但不应用 softmax 限制,允许 v̂θ 表示嵌入空间中的任意方向,而非仅限于类别嵌入的凸组合。

所有模型均使用线性层加 softmax 来参数化相应方程中的条件概率分布。

对于离散时间扩散,作者使用固定余弦噪声调度。对于连续时间扩散,作者将噪声调度与模型共同训练。

实验结果

作者对 NoProp 方法进行了评估,分别在离散时间设置下与反向传播方法进行比较,在连续时间设置下与伴随敏感性方法(adjoint sensitivity method)进行比较,场景是图像分类任务。

结果如表 1 所示,表明 NoProp-DT 在离散时间设置下在 MNIST、CIFAR-10 和 CIFAR-100 数据集上的性能与反向传播方法相当,甚至更好。此外,NoProp-DT 在性能上优于以往的无反向传播方法,包括 Forward-Forward 算法、Difference Target 传播以及一种称为 Local Greedy Forward Gradient Activity-Perturbed 的前向梯度方法。虽然这些方法使用了不同的架构,并且不像 NoProp 那样显式地对图像输入进行条件约束 —— 这使得直接比较变得困难 —— 但 NoProp 具有不依赖前向传播的独特优势。

image.png
image.png

此外,如表 2 所示,NoProp 在训练过程中减少了 GPU 内存消耗。

image.png
image.png

为了说明学习到的类别嵌入,图 2 可视化了 CIFAR-10 数据集中类别嵌入的初始化和最终学习结果,其中嵌入维度与图像维度匹配。

image.png
image.png

在连续时间设置下,NoProp-CT 和 NoProp-FM 的准确率低于 NoProp-DT,这可能是由于它们对时间变量 t 的额外条件约束。然而,它们在 CIFAR-10 和 CIFAR-100 数据集上通常优于伴随敏感性方法,无论是在准确率还是计算效率方面。虽然伴随方法在 MNIST 数据集上达到了与 NoProp-CT 和 NoProp-FM 相似的准确率,但其训练速度明显较慢,如图 3 所示。

image.png
image.png

对于 CIFAR-100 数据集,当使用 one-hot 编码时,NoProp-FM 无法有效学习,导致准确率提升非常缓慢。相比之下,NoProp-CT 仍然优于伴随方法。然而,一旦类别嵌入与模型联合学习,NoProp-FM 的性能显著提高。

作者还对类别概率

image.png
image.png

的参数化和类别嵌入矩阵 W_Embed 的初始化进行了消融研究,结果分别如图 4 和图 5 所示。消融结果表明,类别概率的参数化方法之间没有一致的优势,性能因数据集而异。对于类别嵌入的初始化,正交初始化和原型初始化通常与随机初始化相当,甚至优于随机初始化。

image.png
image.png
image.png
image.png

更多详细内容请参见原论文。

© THE END

转载请联系本公众号获得授权

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NIO 读数据和写数据方式
整个 NIO 体系包含的类远远不止这三个,只能说这三个是 NIO 体系的 “核心 API”。上面已经对这三个概念进行了基本的阐述,这里就不多做解释了。
happyJared
2019/08/08
7380
【死磕Netty】-----NIO基础详解
原文出处http://cmsblogs.com/ 『chenssy』 转载请注明原创出处,谢谢! Netty 是基于Java NIO 封装的网络通讯框架,只有充分理解了 Java NIO 才能理解好Netty的底层设计。Java NIO 由三个核心组件组件: Buffer Channel Selector 缓冲区 Buffer Buffer 是一个数据对象,我们可以把它理解为固定数量的数据的容器,它包含一些要写入或者读出的数据。 在 Java NIO 中,任何时候访问 NIO 中的数据,都需要通过缓冲区(B
用户1655470
2018/04/26
1.3K0
【死磕Netty】-----NIO基础详解
Java面试常考的 BIO,NIO,AIO 总结
熟练掌握 BIO,NIO,AIO 的基本概念以及一些常见问题是你准备面试的过程中不可或缺的一部分,另外这些知识点也是你学习 Netty 的基础。
Java技术江湖
2019/09/25
8160
Java面试常考的 BIO,NIO,AIO 总结
彻底搞懂NIO效率高的原理
这篇文章读不懂的没关系,可以先收藏一下。笔者准备介绍完epoll和NIO等知识点,然后写一篇Java网络IO模型的介绍,这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后,再回头看这些博客,会更加有收获。
全菜工程师小辉
2019/08/16
2.6K0
BIO、NIO、IO多路复用模型的演进&Java NIO 网络编程
上文介绍了网络编程的基础知识,并基于 Java 编写了 BIO 的网络编程。我们知道 BIO 模型是存在巨大问题的,比如 C10K 问题,其本质就是因其阻塞原因,导致如果想要承受更多的请求就必须有足够多的线程,但是足够多的线程会带来内存占用问题、CPU上下文切换带来的性能问题,从而造成服务端崩溃的现象。怎么解决这一问题呢?优化呗,所以后面就有了NIO、AIO、IO多路复用。本文将对这几个模型详细说明并基于 Java 编写 NIO。
王二蛋
2024/01/18
7900
Java 中 3 种常见的 IO 模型
如下图,应用程序发出一个 read 调用,内核空间需要经历准备数据的几个阶段,准备好之后返回数据给应用程序。期间如果另一个应用程序也需要 read 调用,那么它必须等待;这就是阻塞。
wsuo
2021/06/24
3050
012. NIO 非阻塞网络编程
1. Java NIO ---- 始于 Java1.4,提供了新的 JAVA IO 操作非阻塞 API。用意是替代 Java IO 和 Java Networking 相关的 API。 三个核心组件 Buffer 缓冲区 Channel 通道 Selector 选择器 2. Buffer 缓冲区 ---- 1. 介绍 缓冲区本质上是一个可以写入数据的内存块(类似数组),然后可以再次读取。此内存块包含在 NIO Buffer 对象中,该对象提供了一组方法,可以更轻松地使用内存块。 相比较直接对数组的操
山海散人
2021/03/03
4190
012. NIO 非阻塞网络编程
一篇文章搞定Netty入门
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户1212940
2019/11/13
4270
java NIO浅析
NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。
Java阿呆
2020/11/04
7190
java NIO浅析
Java NIO?看这一篇就够了![通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 ✎前言 现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城
全栈程序员站长
2022/09/08
3530
Java NIO?看这一篇就够了![通俗易懂]
java nio_(一) Java NIO 概述[通俗易懂]
通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就是线程数量的剧增,大量的线程会增大服务器的开销。大多数的实现为了避免这个问题,都采用了线程池模型,并设置线程池线程的最大数量,这由带来了新的问题,如果线程池中有200个线程,而有200个用户都在进行大文件下载,会导致第201个用户的请求无法及时处理,即便第201个用户只想请求一个几KB大小的页面。传统的 Server/Client模式如下图所示:
全栈程序员站长
2022/09/08
6120
java nio_(一) Java NIO 概述[通俗易懂]
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
《跟闪电侠学Netty》 并不是个人接触的第一本Netty书籍,但个人更推荐读者把它作为作为第一本Netty入门的书籍。
阿东
2023/09/02
5750
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
【面试题精讲】javaIO模型之NIO
NIO(New I/O)是Java提供的一种非阻塞I/O模型,它在JDK 1.4中引入。与传统的I/O模型相比,NIO提供了更高效、更灵活的I/O操作方式。
程序员朱永胜
2023/10/22
2370
NIO简述
一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据
leobhao
2022/06/28
3200
NIO简述
最强开源网络应用框架 Netty,没有之一,直接“榨干”CPU!
👆点击“博文视点Broadview”,获取更多书讯 在开始了解Netty是什么之前,我们先来回顾一下,如果需要实现一个客户端与服务端通信的程序,使用传统的IO编程,应该如何来实现? IO编程 我们简化一下场景:客户端每隔两秒发送一个带有时间戳的“hello world”给服务端,服务端收到之后打印它。 在传统的IO模型中,每个连接创建成功之后都需要由一个线程来维护,每个线程都包含一个while死循环,那么1万个连接对应1万个线程,继而有1万个while死循环,这就带来如下几个问题。 线程资源受限:线程是
博文视点Broadview
2022/03/10
6480
NIO学习四-Selector
前面我们已经简单的学习了channel,知道channel作为通道,可以在通道中进行读写操作,同时知道ByteChannel是双向的。对于NIO的优势在于多路复用选择器上,在Nginx、Redis、Netty中都有多路复用的体现。因此学习Selector是有必要的。
路行的亚洲
2020/07/16
4030
为什么一个还没毕业的大学生能够把 IO 讲的这么好?
Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO 技术,对比 NIO 与 BIO 的区别,然后对 NIO 中重要的三个组成部分进行讲解(缓冲区、通道、选择器),最后实现一个简易的客户端与服务器通信功能。
cxuan
2020/09/14
6310
Java IO 与 NIO:高效的输入输出操作探究
输入输出(IO)是任何编程语言中的核心概念,而在Java中,IO操作更是应用程序成功运行的基石。随着计算机系统变得越来越复杂,对IO的要求也日益增加。在本文中,我们将探讨Java IO和非阻塞IO(NIO)的重要性以及如何在Java中实现高效的输入输出操作。
程序那些事
2023/10/17
2630
Java面试必问通信框架NIO,原理详解
新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O。
李红
2019/05/31
1.3K0
Java面试必问通信框架NIO,原理详解
JavaIO流:NIO梳理
NIO 也叫 Non-Blocking IO 是同步非阻塞的 IO 模型。线程发起 IO 请求后,立即返回。同步指的是必须等待 IO 缓冲区内的数据就绪,而非阻塞指的是,用户线程不原地等待 IO 缓冲区,可以先做一些其他操作,但是要定时轮询检查 IO 缓冲区数据是否就绪。
栗筝i
2022/12/02
3620
JavaIO流:NIO梳理
相关推荐
NIO 读数据和写数据方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档