Yann LeCun开怼谷歌研究:目标传播早就有了,你们创新在哪里?

news/2024/7/5 1:51:56

视学算法报道

机器之心编辑部

在昨日的学术圈,图灵奖得主Yann LeCun对谷歌的一项研究发起了质疑。

前段时间,谷歌 AI在其新研究《LocoProp: Enhancing BackProp via Local Loss Optimization》中提出了一种用于多层神经网络的通用层级损失构造框架LocoProp,该框架在仅使用一阶优化器的同时实现了接近二阶方法的性能。

更具体来讲,该框架将一个神经网络重新构想为多层的模块化组合,其中每个层都使用自己的权重正则化器、目标输出和损失函数,最终同时实现了性能和效率。谷歌在基准模型和数据集上实验验证了其方法的有效性,缩小了一阶和二阶优化器之间的差距。

此外,谷歌研究者表示他们的局部损失构造方法是首次将平方损失用作局部损失。


b0240700329512d5f6a0b56676befcb8.png图源:@Google AI

对于谷歌的这项研究,一些人的评价是棒极了、有趣。不过,也有一些人表达出了不同的看法,其中包括图灵奖得主Yann LeCun。

他认为,我们现在称为目标传播(target prop)的版本有很多,有些可以追溯至1986年。所以,谷歌的这个LocoProp与它们有什么区别呢?


cec8ff61b741388ca8deda1f00cc14e1.png图源:@Yann LeCun

对于LeCun的这种疑问,即将成为UIUC助理教授的Haohan Wang表示赞同。他表示,有时真的惊讶为什么有些作者认为这么简单的想法是历史首创。或许他们做出了一些与众不同的事情,但宣传团队却迫不及待地出来声称一切……


cad80963e61c675cd9caaac18edfd333.png图源:@HaohanWang

不过,有人对 LeCun「不感冒」,认为他是出于竞争的考虑提出疑问,甚至「引战」。LeCun 对此进行了回复,声称自已的疑问无关竞争,并举例自己实验室的前成员Marc'Aurelio Ranzato、Karol Gregor、koray kavukcuoglu等都曾使用过一些版本的目标传播,如今他们都在谷歌DeepMind工作。


abd2e0084e207c8bd5d8744ed9546fbe.png图源:@Gabriel Jimenez@Yann LeCun

更有人调侃起了Yann LeCun,「当无法击败Jürgen Schmidhuber,就成为他吧。」


16ea9251ce2c30af4807c9a2fa8fcdcb.png

Yann LeCun到底说的对不对呢?我们先来看谷歌这项研究到底讲了啥,有没有突出创新呢?


谷歌LocoProp:用局部损失优化增强反向传播

这项研究由来自谷歌的 Ehsan Amid 、 Rohan Anil、 Manfred K. Warmuth 三位研究者合作完成。


049d5c19d7028248e88f45a630560479.png

论文地址:https://proceedings.mlr.press/v151/amid22a/amid22a.pdf


本文认为,深度神经网络(DNN)成功的关键因素有两个:模型设计和训练数据,但很少有研究者讨论更新模型参数的优化方法。我们在训练训练DNN时涉及最小化损失函数,该函数用来预测真实值和模型预测值之间的差异,并用反向传播进行参数更新。

最简单的权值更新方法是随机梯度下降,即在每一个step中,权值相对于梯度负方向移动。此外,还有高级的优化方法,如动量优化器、AdaGrad等。这些优化器通常被称为一阶方法,因为它们通常只使用一阶导数的信息来修改更新方向。

还有更高级的优化方法如Shampoo 、K-FAC等已被证明可以提高收敛性,减少迭代次数,这些方法能够捕获梯度的变化。利用这些额外的信息,高阶优化器可以通过考虑不同参数组之间的相关性来发现训练模型更有效的更新方向。缺点是,计算高阶更新方向比一阶更新在计算上更昂贵。

谷歌在论文中引入了一个训练DNN模型的框架:LocoProp,其将神经网络构想为层的模块化组合。一般来说,神经网络的每一层对输入进行线性变换,然后是非线性的激活函数。在该研究中,网络每一层被分配了自己的权重正则化器、输出目标和损失函数。每一层的损失函数被设计成与该层的激活函数相匹配。使用这种形式,训练给定的小batch局部损失可以降到最低,在各层之间迭代并行地进行。

谷歌使用这种一阶优化器进行参数更新,从而避免了高阶优化器所需的计算成本。

研究表明 LocoProp 在深度自动编码器基准测试中优于一阶方法,并且在没有高内存和计算要求的情况下与高阶优化器(如 Shampoo 和 K-FAC)性能相当。

780d8ea29dc43f02b608ebc37d51e335.pngLocoProp:通过局部损失优化增强反向传播

通常神经网络被视为复合函数,其将每一层的输入转换为输出表示。LocoProp 在将网络分解为层时采用了这种观点。特别是,LocoProp 不是更新层的权重以最小化输出的损失函数,而是应用特定于每一层的预定义局部损失函数。对于给定的层,选择损失函数以匹配激活函数,例如,将为具有 tanh 激活的层选择 tanh 损失。此外,正则化项确保更新后的权重不会偏离当前值太远。

78a55187961c3a88c2eb52517e35c173.gif

与反向传播类似,LocoProp应用前向传递来计算激活。在反向传递中,LocoProp为每一层的的神经元设置目标。最后,LocoProp将模型训练分解为跨层的独立问题,其中多个局部更新可以并行应用于每层的权值。

谷歌在深度自动编码器模型中进行了实验,这是评估优化算法性能的常用基准。他们对多个常用的一阶优化器进行广泛的优化,包括 SGD、具有动量的SGD 、AdaGrad、RMSProp、Adam,以及高阶优化器,包括Shampoo 、K-FAC,并将结果与LocoProp比较。研究结果表明,LocoProp方法的性能明显优于一阶优化器,与高阶优化器相当,同时在单个GPU上运行时速度明显更快。


bfdbe185c2b2d815f98467dc3624670c.png

© THE END 

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

98e9e942a6478ad47e7a11104e457413.png

outside_default.png

点个在看 paper不断!


http://lihuaxi.xjx100.cn/news/257854.html

相关文章

什么是SESSION?(三)

本微信图文通过一个利用数据库的方式存储Session的例子,深入介绍了对Session机制的理解。本微信图文由钟锦提供。

C#趣味程序---个位数为6,且能被3整出的五位数

using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){int count 0;int k;for (int i 1000; i < 9999; i){k i * 10 6;if (k % 3 0){Console.WriteLine(k);count;}}Console.WriteLine(count); }} }

详解Linux内核IO技术栈

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典在开始正式的讨论前&#xff0c;我先抛出几个问题&#xff1a;谈到磁盘时&#xff0c;常说的HDD磁盘和SSD磁盘最大的区别是什么&#xff1f;这些差异会影响我们的系统设计吗&#xff1f;单线程写文件有点慢&#xff0c;那…

App调用safar

/调用safar打开网页 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"http://www.cnblogs.com/foxmin"]]; 调用app store (省略号后面加的是产品的id等一些参数) // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"i…

南大最新综述论文:基于模型的强化学习

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达来源&#xff1a;专知强化学习(RL)通过与环境交互的试错过程来解决顺序决策问题。虽然RL在允许大量试错的复杂电子游戏中取得了杰出的成功&#xff0c;但在现实世界中犯错总…

【HDOJ】3275 Light

这就是个简单线段树延迟标记。因为对bool使用了~而不是&#xff01;&#xff0c;wa了一下午找不到原因。 1 /* 3275 */2 #include <iostream>3 #include <sstream>4 #include <string>5 #include <map>6 #include <queue>7 #include <set>…

C#类的修饰符

访问修饰符:public&#xff1a;访问不受限制。protected&#xff1a;访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.Internal&#xff1a;访问仅限于当前程序集。只有当前工程可以存取.protected internal&#xff1a;访问仅限于当前程序集或…

golang源码分析-启动过程概述

golang源码分析-启动过程概述 golang语言作为根据CSP模型实现的一种强类型的语言&#xff0c;本文主要就是通过简单的实例来分析一下golang语言的启动流程&#xff0c;为深入了解与学习做铺垫。 golang代码示例 package mainimport "fmt"func main(){fmt.Println(…