Yann LeCun:深度学习已死,可微分编程万岁!

简介: LeCun又发表惊人言论,继昨天参与深度学习论战、喷机器人Sophia后,今天他在Facebook主页发文,称“深度学习已死,可微分编程万岁!”深度学习真的死了?而可微分编程又是什么呢?

LeCun又语出惊人了,这次直指深度学习——

好,深度学习作为一个流行词,现在时效已过。

深度学习已死,可微分编程万岁!

事情要回溯到前天。

1月4日,AAAI前主席Thomas Dietterich连发10条Twitter,驳斥纽约大学心理学家Gary Marcus对深度学习的批评。其中,Dietterich提到,

深度学习本质上是一种新的编程方式——可微分编程——而且这个领域正试图用这种方式来制定可重用的结构。目前我们已经有:卷积,池化,LSTM,GAN,VAE,memory单元,routing单元,等等。”

这个说法让英伟达的AI架构VP Clement Farabet深表赞同,Farabet还评价说,这是对现今深度学习的最好总结。LeCun也转推此文,表示赞同。

e517357ec551a0055e36ff673b0dee6ea774c20d

但是,光是转发推文,对LeCun来说显然不够。

今天,他在Facebook个人主页上写了一篇短文,不仅支持可微分编程,还用上了“深度学习已死”的表述。不仅如此,他还推出了一个“归化学习”。

先来看LeCun的文章。

Yann LeCun:深度学习已死,可微分编程万岁!

好,深度学习作为一个流行词,现在时效已过。

深度学习已死,可微分编程万岁!

没错,“可微分编程”不过是把现代这套深度学习技术重新换了个叫法,这就跟“深度学习”是现代两层以上的神经网络变体的新名字一样

但重要的一点是,人们现在正在将各种参数化函数模块的网络组装起来,构建一种新的软件,并且使用某种基于梯度的优化来训练这些软件。

越来越多的人正在以一种依赖于数据的方式(循环和条件)来程序化地定义网络,让它们随着输入数据的动态变化而变化。这与是普通的程序非常类似,除了前者是参数化的、可以自动可微分,并且可以训练和优化。动态网络变得越来越流行(尤其是对于NLP而言),这要归功于PyTorch和Chainer等深度学习框架(注意:早在1994年,以前的深度学习框架Lush,就能处理一种称为Graph Transformer Networks的特殊动态网络,用于文本识别)。

现在人们正在积极从事命令式可微分编程语言编译器的工作。这是开发基于学习的AI(learning-based AI)一条非常令人兴奋的途径。

重要提示:这不足以让我们实现“真正的”人工智能。还需要其他的概念,比如我说过的预测性学习,我现在决定将其称为“Imputative Learning”(归化学习)。之后我会详细介绍……

07c26069f2d6d829b3853d60fc201aea6d117771

可微分编程:深度学习的延伸,人工智能成功的关键

那么,在等LeCun大神更详细介绍他的归化学习前,我们更需要关注的是可微分编程,这是深度学习的又一个新名字,还是确实有不同和新的内涵?

MIT媒体实验室的David Dalrymple此前撰文介绍过可微分编程,Dalrymple 9岁登上TED讲台,14进入MIT读研,16岁以5.0的GPA毕业,也是一代奇才。进入MIT媒体实验室后,Dalrymple开发了新的编程范例,如“可重构的异步逻辑自动机(Reconfigurable asynchronous logic automata,RALA)。

Dalrymple认为,深度学习的成功有两大关键,一是反向传播,而是权重相关(weight-tying),而这两大特性与函数编程(functional programing)中调用可重用函数十分相同。可微分编程有成为“timeless”的潜力。

过去几年里,人工智能领域几十年来一直没有得到解决的一系列经典挑战,突然被AI纯粹主义者长期以来一直颇为鄙视的“统计方法”征服。这种方法主要从大量的数据中学习概率分布,而不是检查人类解决问题的技巧,并试图以可执行的方式对这些技巧进行编码。

这种方法最初被称为“神经网络”,现在则叫“深度学习”,强调对过去的神经网络的定性改进。深度学习的成功很大程度上归功于大的数据集和更强大的计算系统,大型科技公司对该领域突然兴起的兴趣也有一定关系。深度学习已经取得了令人难以置信的进步。许多其他方法也有所改善,但程度较低。

那么,将深度学习与其他学习区分开来的关键是什么?首先是反向传播。这实际上是一个以非常优雅的方式应用的链式规则,一个简单的微积分技巧。它是连续和离散数学的深度整合,使复杂的潜在解决方案族可以通过向量微积分自主改进。

关键是将潜在解决方案的模式(template)组织为有向图(例如,从照片到生成的图说,其间有许多节点)。反向遍历这个图,算法能够自动计算“梯度向量”,这个向量能引导算法寻找越来越好的解决方案。

从这个意义上看,现代的深度学习技术与传统的神经网络在结构上相似度不大,但在幕后,反向传播算法对于新旧架构都至关重要。

但是,即便使用了反向传播,以前的神经网络也远远不及现在的深度学习技术,哪怕是在今天的硬件和数据集条件下。因此,深度学习的第二大关键,是一个网络的组件可以同时在多个地方使用。

随着网络的优化,每个组件的每个副本都被迫保持一致(这个想法被称为 “weight-tying”)。这对权重相关的组件施加了额外的要求:它们必须学会在许多地方同时有用,而不是专门针对特定的地点。Weight-tying 会使网络学习更泛化的能力,因为单词和物体可能出现在文本块或图像的多个位置。

在网络的许多地方放置一个通用的组件,就类似于在一个程序中编写一个函数,并在多个地方调用它,这是函数编程(functional programming)的基本概念。函数编程将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。与编程相比,权重相关(weight-tied)的组件,实际上与编程中可重用函数的概念相同。不仅如此,过去几年中,许多最成功的架构,它们对组件的重用方式,与函数编程中通用的“高阶函数”生成组件的方式完全相同。这表明函数编程中的一些著名算子,可能是深度学习架构的一个很好的灵感。

能够直接在函数程序上运行反向传播的新语言,将最便于探索那些被训练成深度学习网络的函数结构。事实证明,隐藏在实现/部署的细节中,函数程序实际上被编译成类似于反向传播所需的计算图。图的各个组成部分也必须是可微的,但是Grefenstette等人最近发布了几个简单的数据结构(栈,队列和双向)的可微分构造,表明进一步的可微分实现,可能只是数学上巧妙设计的问题。这方面的进一步工作可能会打开一个新的编程范式——可微分编程。

用这样一种语言编写程序,就好像构建函数结构时,把细节留给优化器——语言会使用反向传播根据整个程序的目标自动学习细节,就像优化深度学习中的权重一样。

可微分编程是一个比较新的概念,是反向传播和weight-tying这些想法的延伸。在各种架构、技术来了又去去了又来的眼下,这些核心概念仍然是人工智能成功的关键。

神经网络是“软件2.0”:开发通用人工智能的基础

这些都让人想到了深度学习和计算机视觉专家、特斯拉人工智能部门主管Andrej Karpathy此前提出的“软件2.0”概念。

Karpathy说,软件1.0(Software 1.0)是用Python、C++等语言编写的,它由程序员编写的对计算机的明确指令组成。通过编写每行代码,程序员可以确定程序空间中的某个特定点。

相比之下,Software 2.0 是用神经网络权重编写的。没有人参与这段代码的编写过程。在软件2.0的情况下,人类对一个理想程序的行为指定一些约束(例如,一个样本的输入输出对数据集),并使用可用的计算资源来搜索程序空间中满足约束条件的程序。在神经网络的例子中,我们把搜索限制在程序空间的一个连续的子集,在这个空间中,搜索过程可以利用反向传播和随机梯度下降奏效。

Karpathy认为,在现实世界中,大部分问题都是收集数据比明确地编写程序更容易。未来,大部分程序员不再需要维护复杂的软件库,编写复杂的程序,或者分析程序的运行时间。他们需要做的是收集、整理、操作、标记、分析和可视化提供给神经网络的数据。

0f3962b6904402fdf63b6c9ca8696b0327b2a416

从长远来看, Software 2.0的未来是光明的,因为越来越多的人清楚,当我们开发通用人工智能(AGI)时,肯定会写成Software 2.0。

Software 3.0?那就需要到AGI的时代了。


原文发布时间为:2018-01-06

本文作者:文强

本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”微信公众号

原文链接:Yann LeCun:深度学习已死,可微分编程万岁!

相关文章
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
4月前
|
机器学习/深度学习 SQL 自然语言处理
深度学习之编程错误自动修复
基于深度学习的编程错误自动修复(Automated Code Repair Using Deep Learning)是一种利用深度学习技术自动检测、定位并修复代码中的错误的技术。它旨在减少开发者手动调试和修复代码的时间,并提高代码的质量和可靠性。
93 3
|
5月前
|
机器学习/深度学习 数据挖掘 PyTorch
🎓PyTorch深度学习入门课:编程小白也能玩转的高级数据分析术
踏入深度学习领域,即使是编程新手也能借助PyTorch这一强大工具,轻松解锁高级数据分析。PyTorch以简洁的API、动态计算图及灵活性著称,成为众多学者与工程师的首选。本文将带你从零开始,通过环境搭建、构建基础神经网络到进阶数据分析应用,逐步掌握PyTorch的核心技能。从安装配置到编写简单张量运算,再到实现神经网络模型,最后应用于图像分类等复杂任务,每个环节都配有示例代码,助你快速上手。实践出真知,不断尝试和调试将使你更深入地理解这些概念,开启深度学习之旅。
82 1
|
5月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的编程实践:从Python到深度学习的探索之旅
【9月更文挑战第6天】 在人工智能的黄金时代,编程不仅仅是一种技术操作,它成为了连接人类思维与机器智能的桥梁。本文将通过一次从Python基础入门到构建深度学习模型的实践之旅,揭示编程在AI领域的魅力和重要性。我们将探索如何通过代码示例简化复杂概念,以及如何利用编程技能解决实际问题。这不仅是一次技术的学习过程,更是对人工智能未来趋势的思考和预见。
|
6月前
|
机器学习/深度学习 Java TensorFlow
深度学习中的图像识别:从理论到实践Java中的多线程编程入门指南
【8月更文挑战第29天】本文将深入探讨深度学习在图像识别领域的应用,从基础理论到实际应用案例,带领读者一步步理解如何利用深度学习技术进行图像识别。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库实现一个基本的图像识别模型。无论你是初学者还是有一定经验的开发者,都能从中获得启发和学习。 【8月更文挑战第29天】在Java世界里,线程是程序执行的最小单元,而多线程则是提高程序效率和响应性的关键武器。本文将深入浅出地引导你理解Java多线程的核心概念、创建方法以及同步机制,帮助你解锁并发编程的大门。
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Reduction归约和自动微分操作讲解及实战(附源码 超详细必看)
PyTorch深度学习基础之Reduction归约和自动微分操作讲解及实战(附源码 超详细必看)
157 0
|
机器学习/深度学习 人工智能 自然语言处理
深度学习十年后是撞墙了吗?Hinton、LeCun、李飞飞可不这么认为
深度学习十年后是撞墙了吗?Hinton、LeCun、李飞飞可不这么认为
|
机器学习/深度学习 人工智能 自然语言处理
Yann LeCun深度学习公开课4万字笔记,125页干货都在这了
Yann LeCun深度学习公开课4万字笔记,125页干货都在这了
155 0
|
机器学习/深度学习 存储 关系型数据库
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
464 0
【吴恩达课后编程作业】第三周作业 (附答案、代码)隐藏层神经网络 神经网络、深度学习、机器学习
|
机器学习/深度学习 存储 移动开发
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习
434 0
【吴恩达课后编程作业】第二周作业 (附答案、代码) Logistic回归 神经网络、深度学习、机器学习