社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

你遇见过什么当时很有潜力但是最终没有流行的深度学习算法?

新机器视觉 • 4 年前 • 536 次点击  

点击下方卡片,关注“新机器视觉”公众号

视觉/图像重磅干货,第一时间送达

作者丨霍华德、edisonlee、陀飞轮
来源丨知乎问答

原问题:最近读了一些201x年的论文感觉有一些十分新颖但是也不知道为什么后续没有被重视。在你的科研/工程阅读中遇见过哪些看起来很有潜力的深度学习模型,对他们没有流行起来你有什么见解?

问题链接:https://www.zhihu.com/question/490517834

# 回答一

作者:霍华德

来源链接:https://www.zhihu.com/question/490517834/answer/2169566194

提名Memory Networks原文链接:https://arxiv.org/pdf/1410.3916.pdf

准确说Memory Networks并不只是一个模型,而是一套思路,使用外部的一个memory来存储长期记忆信息,因为当时RNN系列模型使用final state 存储的信息,序列过长就会遗忘到早期信息。

甚至,我觉得Memory Networks的思想后面启发了self-attention和transformer。最重要的就是提出了query - key - value思想,当时的该模型聚焦的任务主要是question answering,先用输入的问题query检索key-value memories,找到和问题相似的memory的key,计算相关性分数,然后对value embedding进行加权求和,得到一个输出向量。这后面就衍生出了self-attention里的Q,K,V表示,在self-attention里的Q=K=V,但早期的Memory Networks中可以看出,QKV其实是三个向量。

如今,Memory Networks已少有人提及,但它的思想已经被transformer继承,而transformer已经横扫NLP和CV等多个领域。突然有了一种“功成不必在我,而功成必定有我"的感慨。又联想到谭嗣同变法虽然失败了,但他又一个学生叫杨昌济,杨昌济又有一个学生叫毛泽东...


# 回答二

作者:edisonlee

来源链接:

https://www.zhihu.com/question/490517834/answer/2171472030

我也提一个:脉冲神经网络(Spiking Neural Networks, SNN),最早由Maass教授[1]于1997年提出的模型。SNN不能说完全消失,每年顶会都有那么几篇,但是总感觉不温不火的。

SNN是基于大脑运行机制的新一代人工神经网络,是目前最接近类脑计算水平的一类生物启发模型,具有可以处理生物激励信号以及解释大脑复杂智能行为的优势,被誉为第三代神经网络(第一代感知机,第二代以CNN为代表的的神经网络)。SNN在本质上与目前广泛使用的人工神经网络(ANN)存在巨大差异,主要体现在如下几点:

  1. SNN使用离散的脉冲序列(0和1)进行消息传递,而ANN使用实值;因此ANN具有更高的运算效率。

  2. SNN分为时间驱动和事件驱动两种。前者利用时间步长仿真信号,后者根据只有在接收或发射脉冲信号时才处于活跃状态;而大部分的ANN架构无法获取时间维度信息(除了RNN类的模型),并且每个神经元永远处于激活状态,因此SNN具有更少的能量消耗。

  3. SNN使用脉冲序列进行通讯,与人脑的消息传播机制更像,因此SNN比ANN更像神经网络。

  4. SNN可以运行在专用的神经形态硬件上,例如Intel Loihi[2],Brainchip Akida[3]等;而ANN主要应用在GPU上进行加速。已有文献证明,基于SNN 架构的芯片能量效率比基于Field Programmable Gate Array(FPGA)实现的卷积神经网络的能量效率高出两个数量级。

第一代与第二代人工神经网络
脉冲神经网络

导致SNN难以流行的原因主要是:

  1. SNN使用离散脉冲序列,其中脉冲发射函数Heaviside step函数具有不可微的性质,因此难以像目前的ANN一样使用梯度下降算法优化。虽然目前有一些替代梯度的方法,但是在效果上还是和ANN有点差距。

  2. 目前的神经形态硬件没有流行。目前主流的计算硬件都是GPU,在GPU上,0-1的脉冲序列都被当成实值进行矩阵运算,无法看出SNN与ANN的差距。

参考文献:

[1] Maass W. Networks of spiking neurons: the third generation of neural network models[J]. Neural networks, 1997, 10(9):1659-1671.

[2] Mike Davies, Narayan Srinivasa, Tsung-Han Lin, Gautham Chinya, YongqiangCao, Sri Harsha Choday, Georgios Dimou, Prasad Joshi, Nabil Imam, Shweta Jain,et al. 2018. Loihi: A neuromorphic manycore processor with on-chip learning.Ieee Micro38, 1 (2018), 82–99.

[3] Anup Vanarse, Adam Osseiran, Alexander Rassau, and Peter van der Made. 2019.A hardware-deployable neuromorphic solution for encoding and classificationof electronic nose data.Sensors19, 22 (2019), 4831.

[4] Cao Y, Chen Y, Khosla D. Spiking deep convolutional neural networks for energy-efficient object recognition[J]. International Journal of Computer Vision, 2015, 113(1):54-66.


# 回答三

作者:陀飞轮

来源链接:https://www.zhihu.com/question/490517834/answer/2169518353

Hinton的胶囊网络(Capsule Network)

原文链接:https://arxiv.org/pdf/1710.09829.pdf

原文链接:https://openreview.net/pdf?id=HJWLfGWRb

Hinton认为人的视觉系统会建立“坐标框架”,并且坐标框架的不同会极大地改变人的认知。而在CNN上却很难看到类似“坐标框架”的东西。Hinton的看法是,我们需要 Equivariance 而不是 Invariance。Invariance,是指表示不随变换变化,比如分类结果等等;而 equivariance 不会丢失这些信息,它只是对内容的一种变换。

Invariance 主要是通过 Pooling 等下采样过程得到的。CNN同样强调对空间的 invariance,也就是对物体的平移之类的不敏感(物体不同的位置不影响它的识别)。对平移和旋转的 invariance(CNN的设计希望有invariance,虽然CNN不是完全的invariance),其实是丢弃了“坐标框架”,Hinton认为这是CNN不能反映“坐标框架”的重要原因。CNN 前面非 Pooling 的部分是 equivariance 的。

于是Hinton 提出了一个猜想:

物体和观察者之间的关系(比如物体的姿态),应该由一整套激活的神经元表示,而不是由单个神经元,或者一组粗编码(coarse-coded,这里意思是指类似一层中,并没有经过精细组织)的神经元表示。只有这样的表示,才能有效表达关于“坐标框架”的先验知识。而这一整套神经元,Hinton认为就是Capsule。

capsule network最大的特点就是“vector in vector out”,而之前的scaler neuron则是“scaler in scaler out”,所以本质上来讲capsule是一种vector neuron。capsule network中的每一层由若干个capsule组成,capsule的输入和输出均为一个向量。

图2:神经元与胶囊的对比

图2对neuron和capsule进行对比。神经网络的输入是一系列的标量,通过对这些标量进行加权求和并经过激活函数,得到一个标量,也就是神经元的最终输出。capsule的输入则是一系列的向量,这些向量首先经过一个编码整体与部分关系的矩阵映射,然后这些向量根据和整体特征的相似度加权平均,得到表示整体的特征向量,最后通过一个squash函数得到capsule的输出。高层特征由低层特征加权得到,而权重又由高层特征和低层特征的相似程度计算得到,这两个问题相互依赖,于是capsule network提出一种动态路由算法(Dynamic Rounting)。

Capsule Network在刚发表的时候,引起了深度学习领域的广泛关注,一度认为可能会替代CNN成为新一代的通用网络架构,谁知道之后被Transformer一统江湖了。

Capsule Network之所以没有流行起来可能有三点原因:

  1. 理解capsule本身就有难度,而且使用了机器学习的一些算法,深度学习当道的年代,机器学习算法就算是高门槛了。

  2. capsule本身有很多细节没想清楚,比如原始的capsule是引入聚类的思想来对特征进行抽象,那有没有其他更合适的方法呢,capsule还存在许多没有解决的问题。

  3. Transformer中的self-attention能够建模pixel之间的相对关系,跟capsule的某些理念不谋而合,而且Transformer整体框架上要比capsule简洁易懂。

关于Capsule Network的来龙去脉可以看这篇介绍:https://zhuanlan.zhihu.com/p/29435406

关于CNN平移不变性的讨论,可以看以下回答:https://www.zhihu.com/question/301522740

—版权声明—

仅用于学术分享,版权属于原作者。

若有侵权,请联系微信号:yiyang-sy 删除或修改!


—THE END—
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/121731