本文首先从 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 网络,是一种每个神经元都跟其它神经元相连接的神经网络。

对应的代码:
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)
卷积神经网络,这个不解释也都知道。

对应的代码:
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 的变种,解决梯度消失/爆炸的问题,也不用解释,这几年刷爆各大顶会。

对应的代码:
2.18 Gated recurrent units (GRU)
门循环单元,类似 LSTM 的定位,算是 LSTM 的简化版。

对应的代码:
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
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 网络,也称之为自组织(特征)映射。

对应的代码KN/SOM: