阿里妹导读:自然语言处理领域的殿堂标志 BERT 并非横空出世,背后有它的发展原理。今天,蚂蚁金服财富对话算法团队整理对比了深度学习模型在自然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型,深入浅出地介绍了深度学习在 NLP 领域进展,并结合工业界给出了未来的 NLP 的应用方向,相信读完这篇文章,你对深度学习的整体脉络会有更加深刻认识。
一个神经网络结构通常包含输入层、隐藏层、输出层。输入层是我们的 features (特征),输出层是我们的预测 (prediction)。神经网络的目的是拟合一个函数 f:features -> prediction。在训练期间,通过减小 prediction 和实际 label 的差异的这种方式,来更改网络参数,使当前的网络能逼近于理想的函数 f。
神经元(Neural Cell)
神经网络层的基本组成成员为神经元,神经元包含两部分,一部分是上一层网络输出和当前网络层参数的一个线性乘积,另外一部分是线性乘积的非线性转换。(如果缺少非线性转换,则多层线性乘积可以转化为一层的线性乘积)
浅层神经网络( Neural Network )
只有一层隐藏层的,我们称为浅层网络。
深度学习网络(Multilayer Perceptron)
相对于浅层网络结构,有两层、三层及以上隐藏层的我们就可以称为深度网络。
在通常的理解中,一个足够宽的网络,是能够拟合任何函数的。而一个深层网络,则能够用更少的参数来拟合该函数,因为深层的神经元可以获取比浅层神经元更复杂的特征表示。
在图二及三所示网络,我们称为全连接网络,也就是隐藏层的神经元会和上一层所有的神经元输出相关。和全连接网络相对应的,是只和上一层部分神经元输出连接的网络,如下文介绍的卷积网络。
卷积网络(CNN)
卷积网络神经元只和上一层的部分神经元输出是连接的。(在直觉上,是因为人的视觉神经元触突只对局部信息敏感,而不是全局所有信息都对同一个触突产生等价作用)
同一个卷积核从左到右,从上到下和输入做乘积,得到了不同强度的输出。从直觉上来理解,卷积核对原始数据的不同数据分布的敏感度是不一样的。如果把卷积核理解为是某种 pattern,那么符合这种 pattern 的数据分布会得到比较强的输出,而不符合这种 pattern 的输出则得到弱的,甚至是不输出。
一个卷积核是一个 pattern 提取器, 多个卷积核就是多个 pattern 提取器。通过多个特征提取器对原始数据做特征提取转换,就构成了一层卷积。
Alex Net, 因为 GPU 内存的原因,Alex 使用了两块 GPU 对模型做了切割,本质上的卷积层是用于特征提取, 最大池化层用于提取强特征及减少参数,全连接层则是所有高级特征参与到最后分类决策中去。
循环神经网络(RNN)
CNN是对空间上特征的提取, RNN则是对时序上特征的提取。
在RNN中,x1 , x2, x3, xt 是在时序上不一样的输入,而 V, U, W 三个矩阵则是共享。同时 RNN 网络中保存了自己的状态 S。 S 随着输入而改变,不同的输入/不同时刻的输入或多或少影响 RNN 网络的状态 S。而 RNN 网络的状态 S 则决定最后的输出。
在直觉上,我们理解 RNN 网络是一个可模拟任何函数的一个神经网络( action ),加上同时有一份自己的历史存储( memory ),action+memory 两者让 RNN 成为了一个图灵机器。
长短期记忆网络( LSTM )
RNN 的问题是非线性操作 σ 的存在且每一步间通过连乘操作传递,会导致长序列历史信息不能很好的传递到最后,而有了 LSTM 网络。
在 lstmcell 中,