深度学习最常见的 26 个模型 – 含实现代码

本文首先从 4 个方面(张量、生成模型、序列学习、深度强化学习)追踪深度学习几十年的发展史,然后再介绍主流的 26 个深度学习模型。

1. 深度学习发展史

主要按最早研究出现的时间,从 4 个方面来追踪深度学习的发展史。

1.1 张量

  • 1958 年 Frank 提出感知机,但后来被一些学者发现因算力的不足,制约了较大神经网络的计算,导致很长时间发展缓慢。
  • Fukushima 在 1979 年左右提出 Neocognitron,感觉这是卷积和池化的雏形。
  • Hinton 在 1986 年提出反向传播的思想和多层感知机(BPNN/MLP),有非常大的意义,对未来几十年(可以说直到现在)影响深远。
  • 接下来比较重要的发展是,LeCun 在 1998 年提出 LeNet-5,7 层的 CNN 做数字识别。
  • 然后 AlexNet 在 12 年在 ImageNet 夺冠,主要是 CNN+Dropout+Relu,又是 Hinton 极大的带动了 DL 的发展,大佬的地位毋庸置疑。另外相似的还有 15 年的 GoogLeNet。
  • 总算有华人大佬作出大贡献了,16 年何恺明(CV领域应该无人不知)提出 Resnet,还拿了 best paper,影响较大,当然效果也很好。另外相似的还有 17 年的 DenseNet。
  • 17年 Capsule Network 登场了,又是 Hinton。我比较看好胶囊网络在 NLP 领域的发展,虽然现在还没太明显的效果。因为用胶囊网络来做文本的特征表示的话,可以极大的丰富特征,更适合处理文本这种比较灵活的数据

1.2 生成模型

  • 上世纪 80 年代提出 RBM,06 年叠加成 Deep Belief Network(DBN),这算是重新叠加网络的一个比较重要的开始吧。
  • 上世纪 80 年代 Hinton 提出 Auto-Encode,过了较长时间 Bengio 在 08 年提出 Denoise Auto-Encode。Welling 在 13 年提出 Variational Auto-Encode。
  • 接下来,在 14 年 Goodfellow 和 Bengio 等提出 GAN,从此生成网络不仅是 AE 以及其变种(Denoise Auto-Encode、Variational Auto-Encode等)了,可以这么说:GAN 的出现极大的提高了生成模型的地位和热点,GAN 也是席卷 NLP、CV、AI 等领域的各大顶会,甚至是一些 best paper。另外,陆续出现很多很多 GAN 的变种,比如 DCGAN、CGAN、PGGAN、LAPGAN、InfoGAN、WGAN、F-GAN、SeqGAN、LeakGAN 等。

1.3 序列学习

  • 1982 年提出 hopfield network,1997 年 Schmidhuber 提出 LSTM。Hinton 组在 13 年把 RNN 用在语音识别上取得巨大突破,RNN 立马爆火。
  • 03 年提出 LM(语言模型),13 年提出 w2v,佩服 Bengio,这也是我为啥千里迢迢跑去找 Benign 合影的原因之一。w2v 带来的影响不言而喻,目前 NLP 领域基本上所有 Paper 都会用到词向量,包括也影响了后面出现的 Glove、FastText、ELMo( 18 年 2 月)、Transformer( 18 年 6 月)、Bert ( 18 年 10 月提出,Jacob 一战封神,我感觉至少是 18 年 NLP 领域最大的发展,甚至可以说是近几年最大的发展)等。Bert 的出现,很可能改变所有主流 NLP 任务的打法和 Baseline
  • 还有一个分支,14 年出现 Seq2Seq,这个重要性也无需赘述了,NLP 领域的都知道。然后 15 年出现Charater  CNN ,17 年出现 self-attention。

1.4 深度强化学习

  • 提到强化学习就不得不提这 Deep Mind 、AlphaGo 以及其变种、Silve r。13 年提出 Deep Q-learning 15 年提出 Double DQN,16 年提出 Dueling Net。 15 年的 DDPG 和 16 年的 A3C 都是 NN+Policy Gradient,也应用在不少领域。16 年的 AlphaGo(除了 AI 领域,很多不懂AI的人都知道,甚至可以说是 AI 爆火的最大助力),17 年出现更疯狂的 Alpha Zero。

2. 深度学习模型

深度学习模型
深度学习模型

2.1 Feed forward neural networks (FF or FFNN) and perceptrons (P)

前馈神经网络和感知机,信息从前(输入)往后(输出)流动,一般用反向传播(BP)来训练。算是一种监督学习。

前馈神经网络和感知机
前馈神经网络和感知机

对应的代码:

https://github.com/danijar/layered

https://github.com/civisanalytics/muffnn

2.2 Radial basis function (RBF)

径向基函数网络,是一种径向基函数作为激活函数的 FFNNs(前馈神经网络)。

径向基函数网络
径向基函数网络

对应的代码:

https://github.com/eugeniashurko/rbfnnpy

2.3 Hopfield network (HN)

Hopfield 网络,是一种每个神经元都跟其它神经元相连接的神经网络。

Hopfield 网络
Hopfield 网络

对应的代码:

https://github.com/yosukekatada/Hopfield_network

2.4 Markov chains (MC or discrete time Markov Chain, DTMC)

马尔可夫链 或离散时间马尔可夫链,算是 BMs 和 HNs 的雏形。

马尔可夫链
马尔可夫链

对应的代码:

Markov chains:https://github.com/jsvine/markovify

DTMC:https://github.com/AndrewWalker/dtmc

2.5 Boltzmann machines (BM)

玻尔兹曼机,和 Hopfield 网络很类似,但是:一些神经元作为输入神经元,剩余的是隐藏层。

玻尔兹曼机
玻尔兹曼机

对应的代码:

https://github.com/yell/boltzmann-machines

2.6 Restricted Boltzmann machines (RBM)

受限玻尔兹曼机,和玻尔兹曼机 以及  Hopfield 网络 都比较类似

受限玻尔兹曼机
受限玻尔兹曼机

对应的代码:

https://github.com/echen/restricted-boltzmann-machines

2.7 Autoencoders (AE)

自动编码,和 FFNN 有些类似,它更像是 FFNN 的另一种用法,而不是本质上完全不同的另一种架构。

自动编码
自动编码

对应的代码:

https://github.com/caglar/autoencoders/blob/master/ae.py

2.8 Sparse autoencoders (SAE)

稀疏自动编码,跟自动编码在某种程度比较相反

稀疏自动编码
稀疏自动编码

对应的代码:

https://github.com/caglar/autoencoders/blob/master/sa.py

2.9 Variational autoencoders (VAE)

变分自动编码,和 AE 架构相似,不同的是:输入样本的一个近似概率分布。这使得它跟 BM、RBM 更相近。

变分自动编码
变分自动编码

对应的代码:

https://github.com/mattjj/svae

2.10 Denoising autoencoders (DAE)

去噪自动编码,也是一种自编码机,它不仅需要训练数据,还需要带噪音的训练数据。

去噪自动编码
去噪自动编码

对应对应的代码:

https://github.com/caglar/autoencoders/blob/master/da.py

2.11 Deep belief networks (DBN)

深度信念网络,由多个受限玻尔兹曼机或变分自动编码堆砌而成。

深度信念网络
深度信念网络

对应的代码:

https://github.com/albertbup/deep-belief-network

2.12 Convolutional neural networks (CNN or deep convolutional neural networks, DCNN)

卷积神经网络,这个不解释也都知道。

卷积神经网络
卷积神经网络

对应的代码:

CNN:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_CNN.py

DCNN:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_DeepCNN.py

2.13 Deconvolutional networks (DN)

去卷积网络,又叫逆图形网络,是一种逆向的卷积神经网络。

去卷积网络
去卷积网络

对应的代码:

https://github.com/ifp-uiuc/anna

2.14 Deep convolutional inverse graphics networks (DCIGN)

深度卷积逆向图网络,实际上是 VAE,且分别用 CNN、DNN 来作编码和解码。

深度卷积逆向图网络
深度卷积逆向图网络

对应的代码:

https://github.com/yselivonchyk/TensorFlow_DCIGN

2.15 Generative adversarial networks (GAN)

生成对抗网络,Goodfellow 的封神之作,这个模型不用解释也都知道

生成对抗网络
生成对抗网络

对应的代码:

https://github.com/devnag/pytorch-generative-adversarial-networks

2.16 Recurrent neural networks (RNN)

循环神经网络,这个更不用解释,做语音、NLP 的没有人不知道,甚至非 AI 相关人员也知道。

循环神经网络
循环神经网络

对应的代码:

https://github.com/farizrahman4u/recurrentshop

2.17 Long / short term memory (LSTM)

长短期记忆网络, RNN 的变种,解决梯度消失/爆炸的问题,也不用解释,这几年刷爆各大顶会。

长短期记忆网络
长短期记忆网络

对应的代码:

https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_LSTM.py

2.18 Gated recurrent units (GRU)

门循环单元,类似 LSTM 的定位,算是 LSTM 的简化版。

门循环单元
门循环单元

对应的代码:

https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_GRU.py

2.19 Neural Turing machines (NTM)

神经图灵机,LSTM 的抽象,以窥探 LSTM 的内部细节。具有读取、写入、修改状态的能力

神经图灵机
神经图灵机

对应的代码:

https://github.com/MarkPKCollier/NeuralTuringMachine

2.20 Bidirectional recurrent neural networks, bidirectional long / short term memory networks and bidirectional gated recurrent units (BiRNN, BiLSTM and BiGRU respectively)

双向循环神经网络、双向长短期记忆网络和双向门控循环单元,把 RNN、双向的 LSTM、GRU 双向,不再只是从左到右,而是既有从左到右又有从右到左。

对应的代码:

BiRNN:https://github.com/cstghitpku/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/tree/master/models

BiLSTM:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_BiLSTM.py

BiGRU:https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorch/blob/master/models/model_BiGRU.py

2.21 Deep residual networks (DRN)

深度残差网络,是非常深的 FFNN,它可以把信息从某一层传至后面几层(通常2-5层)。

深度残差网络
深度残差网络

对应的代码:

https://github.com/KaimingHe/deep-residual-networks

2.22 Echo state networks (ESN)

回声状态网络,是另一种不同类型的(循环)网络。

回声状态网络
回声状态网络

对应的代码:

https://github.com/m-colombo/Tensorflow-EchoStateNetwork

2.23 Extreme learning machines (ELM)

极限学习机,本质上是随机连接的 FFNN。

极限学习机
极限学习机

对应的代码:

https://github.com/dclambert/Python-ELM

2.24 Liquid state machines (LSM)

液态机,跟 ESN 类似,区别是用阈值激活函数取代了 sigmoid 激活函数。

液态机
液态机

对应的代码:

https://github.com/kghose/Liquid

2.25 Support vector machines (SVM)

支持向量机,入门机器学习的人都知道,不解释。

支持向量机
支持向量机

对应的代码:

https://github.com/ajtulloch/svmpy

2.26 Kohonen networks (KN, also self organising (feature) map, SOM, SOFM)

Kohonen 网络,也称之为自组织(特征)映射。

Kohonen 网络
Kohonen 网络

对应的代码KN/SOM:

https://github.com/mljs/som