阅读 478

渐进学习前馈神经网络

从人工智能这个词流行起来以后,神经网络这个词也变得家喻户晓了,很多人想要去学习一下神经网络方面的知识,但看到神经网络深奥的概念以及复杂的公式时,也只能放弃。不要惊慌,这篇文章会由浅入深再加例子的形式帮助你理解前馈神经网络,希望对你有帮助。

为了帮助你更好的理解前馈神经网络,我会分三部分进行讲解:

  • 第一部分使用例子帮你建立基础概念
  • 第二部分在概念的基础上融合数学
  • 第三部分使用数学说明前馈神经网络

一 先从小明说起

小明的面前有五堆文档,每一堆都有1000份,其中的四堆已经按照,英语、法语、德语、意大利语分类好,小明现在要做的事情就是将第五堆未分类的文档进行分类。

小明并没有学习过那么多的语言,所以他现在看到第五堆文档就头大。

小明现在已经没有时间去学习这四种语言了,但是小明想到了一个办法,他先看了一遍已经分好类的四种语言都有哪些特征,例如英语中的哪些字符是其他语言中没有的,意大利语的字母一般都是什么样子的。

当小明学习完了这些语言的特征以后,小明就将左侧未分类的文档一个个的看一遍,当他读取第一篇文档的时候发现了Ä字符时,就会将这篇文档放在德语类别中,当看到文档中有很多的“th”二元字符对的时候,就会将此篇文档放在英语类别中。

就这样小明经过不断的读文档->看特征->按照特征分类,最后他将所有的文档都进行了正确的分类。

但是有意思的是小明还是不懂这几种语言,但是他还是能够正确的进行分类。

二 使用数学解析小明

上面的小明并不懂语言,但是却做到了正确的分类,接下来我们使用数学解析一下这个事情。

小明找到特征

上面的小明并不是直接将未分类的1000分文档进行分类的,他是先学习了一遍已分好类的文档中都有哪些特征,如果使用X代表每一个文档中的二元字符对出现的频率,使用Y代表最终的分类,那么数学公式可以这样表示:

Y英语 = Xaa * Waa英语 + Xab * Wab英语 + Xac * Wac英语 + ...... + Xzz * Wzz英语

Y法语 = Xaa * Waa法语 + Xab * Wab法语 + Xac * Wac法语 + ...... + Xzz * Wzz法语

Y德语 = Xaa * Waa德语 + Xab * Wab德语 + Xac * Wac德语 + ...... + Xzz * Wzz德语

Y意大利语 = Xaa * Waa意大利语 + Xab * Wab意大利语 + Xac * Wac意大利语 + ...... + Xzz * Wzz意大利语

注:W代表权重

对于上面的公式,小明已经知道了X与Y,他学习特征的目的就是获取每种语言最优的权重,也就是学习W。

小明进行分类

当小明在自己的脑子里面学习到了W这个体系以后,他就开始对未分类的文档进行分类了,也就是不断的输入X,最后小明使用上面的公式,输入X和W得到了文档的最终分类。

其中W指的就是我们通俗理解上的模型。小明整个分类的过程就是先使用已知的X与Y求出W,然后再使用已知的X与W求出Y。

对于上面的这种训练模式我们叫做有监督学习。

三 公式下的前馈神经网络

针对于上面文档分类来说,输入就是一些待分类的文档,输出就是文档最终所属的类别,而小明就是作为黑盒存在,现在让我们将这个黑盒打开。

图中就是前馈神经网络的一个示意了,为什么叫前馈呢?这是因为每一个神经元都只与前一层的神经元相连接。

上面的输入层就是我们待分类的文档,输出层就是文档的类别,中间的三个隐藏层就是各种特征的计算。

让我们先拿一个输入神经元与第一层隐藏层中的一个神经元出来:

输入层的每一个神经元都是一个二元字符对的频率,在得到第一个隐藏层时将二元字符对频率乘了一个权重,并且添加了一个偏置项b,公式表示:

NNMLP1(x) = x*W1 + b1

为了我们计算的便捷性,需要在神经网络中使用一些非线性函数处理隐藏层数据,以往经常使用的非线性函数是sigmoid函数,但是研究人员发现在最后结果的表现上,ReLU(修正线性单元)函数是优于sigmoid函数的。

上图就是ReLU函数的图像。

那么上面的公式就会是:

NNMLP1(x) = Re1(x*W1 + b1)

那么最后我们将一层推广到最终结果时:

NNMLP3(x) = P

h1 = Re1(x*W1 + b1)

h2 = Re2(h1*W2 + b2)

h3 = Re3(h2*W3 + b3)

P = h3 * W3

为了方便查看上面的公式我将每一层就单独例举了出来。

在上面的公式中我们可以看到最后的P只是使用h3 * W3,我们将偏置向量强制为0.

最终我们得到的就是一个关于文档分类的概率。

值得注意的是,X输入是一个向量,W是一个向量矩阵,最后得到的P也是一个向量。

总结

上面我们通过小明的例子,解释了一下什么是前馈神经网络,以及其公式的表示,对于神经网络我们可以使用一些已经标记好的数据,训练得到一个合适的模型也就是W,然后我们就可以将这个模型应用在未知的数据中去。

实际上在应用前馈神经网络的时候,我们需要结合自己的诉求来界定隐藏层的层数以及偏置项,而为了防止过拟合情况的发生,我们在训练的时候也会使用正则化或者丢弃法的方式。

欢迎关注"腾讯DeepOcean"微信公众号,每周为你推送前端、人工智能、SEO/ASO等领域相关的原创优质技术文章:

看小编这么辛苦,关注一个呗:)