神经网络与神经语言模型

神经网络

神经网络的神经一词来源于 McCulloch and Pitts 在 1943 年提出的 “McCulloch-Pitts 神经元”,这是一种对人类神经元的简化结构,但是是用来表示命题逻辑的计算单元。早期神经网络来源于生物学启发,现代神经网络表示一个计算单元,接受一个向量输入,并产生一个单个输出值。

神经网络和深度学习的关系?

现代神经网络一般被称为深度学习,因为现代神经网络一般层数很深(有大量隐藏层)。

神经网络和对数回归的关系

神经网络和对数回归有很强的相似性,其实一个单层的神经网络,如果把激活函数改成对数函数,那就是一个对数回归模型了,但是神经网络的神奇之处在于,只要给网络结构添加仅仅一个隐层,模型就可以学习出任意函数了。而对数回归则不行。

另一方面,神经网络和对数回归的训练差别很大。对于对数回归,我们一般需要基于领域知识开发大量的特征模板,来解决各类不同的需求。而对于神经网络,我们反而会避免认为选取特征,我们一般偏向于把原始信息作为输入通通放进模型,自动产生特征也是神经网络处理的重要过程。尤其是要解决的问题十分复杂,并且有充足的数据的时候。

神经元

神经网络的基本计算单元接受一组输入值,对他们首先进行加权求和,并添加一个偏置项。对于给定的输入 x1,x2… xn,一个计算单元有着与之对应的权重 w1,w2,…,wn,以及一个偏置项 b,最终的带权和 z 可以表示为:

一般我们会写成向量形式:

式子中的 z 是关于输入的一个线性函数,神经网络一般会对 z 应用一个非线性函数 f,并且把函数输出的值称为激活值。一般来说我们用三种非线性函数(sigmod函数、tanh函数、线性整流函数):

Sigmod函数

Sigmod函数又称挤压函数,可以把变化范围较大的输入值挤压到(0,1)输出。

tanh函数

tanh函数是Sigmod函数的一个变种,区别是将输入值压缩到了(-1,+1)之间。

整流函数 (ReLu)

整流函数是最简单的激活函数。

XOR 问题

感知机指的是不使用非线性激活函数,对于输入产生一个二值输出的简单神经元。感知机可以很容易的解决 AND 和 OR 问题。但是对于 XOR (亦或)计算则可以证明是无能为力的。

解决方案就是使用神经网络。一个多层神经网络可以解决非线性计算。譬如下图是 Goodfellow 《深度学习》(2016)一书中展示的一个使用整流函数作为激活函数来解决 XOR 问题的双层神经网络:

横线上的数字指的是权重,灰色的数字指的是节点偏置项。

值得注意的是,我们可以观察一下该神经网络的中间结果可以发现,隐藏层其实是对神经网络对输入形成的一个表示。

前馈神经网络

前馈神经网络是神经网络中最简单的一种,每层神经元与下一层神经元全链接,神经元之间不存在同层链接,也不存在跨层链接,不存在环路(存在环路的神经网络被称为循环神经网络)。

因为历史原因,前馈神经网络有时候被称为多层感知机(multi-layer perceptrons,MLP)。这种叫法是不合理的,因为感知机的激活函数是纯线性的,而现代神经网络使用非线性的激活函数,但由于约定俗成,还是可能会这样称呼。

如下图就是一个简单 MLP 结构。

我们把输入层和隐藏层之间的参数表示成一个矩阵 W,偏置参数表示成矩阵 b。