认识卷积神经网络

这篇文章的大部分内容也是来自翻译,不过无论如何,它非常有利于希望了解机器学习和深度神经网络基础的人入门。

介绍

最近几年,深度神经网络在计算机视觉和语音识别领域取得了重大突破,卷积神经网络便是神经网络的一种重要类型。

简单来说,卷积神经网络可以被看成是由相同神经元组成的一类神经网络。这种同构的架构,保证了整个模型中需要被训练的参数个数相对较少。

这种使用相同神经元的多重副本组成计算模型的模式来源于数学和计算机科学中的函数概念。在编程时,我们会写一个函数并多次调用它,而不是每次需要使用时都重写一套,这让编程过程更为高效,同时缺陷更少。同样地,卷积神经网络也能对神经元一次学习后多次使用,使得模型更易学习且有效降低了出错概率。

卷积神经网络的结构

假如你需要使用一个神经网络读取一段音频样本,判断是否有人在说话,你还希望当有人说话时能更进一步分析说话内容。

你拿到了在不同时点对声音数据的抽样样本,样本在时间上是均匀分布的。

最简单的模型是将所有的抽样样本数据同时接入一个全连接层,模型中有一系列的不同神经元,每个神经元都接入全部样本。

考虑到数据中存在的对称性,我们可以设计一个稍微复杂却更有用的模型。比如我们更关注音频样本数据的局部属性:在特定时间段内的声音频率是多少?频率是变高还是变低?等等……

我们会关注相似属性在整个数据段中的分布情况。我们想要了解音频文件开头时的声音频率,也想要了解音频文件中部和尾部的声音频率。这样来看,为了能得到这些属性,我们仅需要应用小的连续窗口来处理输入数据,那么得到的输出数据的序列,很有可能就是我们需要得到的属性的时序分布。

因此,我们可以创建一系列相似的神经元A,每个神经元只会处理一小段的输入数据。被处理的每段数据累加起来,组成了我们的完整音频输入,这些神经元A的作用是通过局部输入数据计算出特定的属性。最后,我们将所有的A的输出再接入到一个全连接层F。

上图的例子中,每个A只会读取输入数据中连续的两个数据点。这并不是一个好的设计。通常情况下,卷积层的窗口需要比这大得多。

下图中,每个A读取了输入数据中连续的三个数据点。这其实也不算是好的设计,只是一个例子。用图直观展示连接很多点的模型会比较复杂,也不直观,不过你可以自己凭想象思考它到底是什么样子。

卷积层有个非常好的特性在于它们可组合。你可以使用一个卷积层的输出作为另一个卷积层的输入。每增加一层,就能检测出更高层级,更抽象的特征信息。

在下面的例子中,我们增加了一组新的神经元B,用B创建了更高层的卷基层接在A的后端。

卷基层间常会使用池化层进行数据整流,其中,一种叫max-pooling的池化层现在使用的非常广泛。

其实从一个更高层的视角来看,我们不会关注特定属性是否严格出现在了音频数据的某个抽样节点上。比如说,某种频率的变化在音频样本中出现的时间稍早或稍晚,其实并没有特别大的影响。

max-pooling池化层则会在输入序列中提取其中的最大值。其实也就是告诉我们在前一层的某段区域中是否出现了某一特性,同时抹去了这一特性出现的具体位置信息。

max-pooling池化层的作用在于可以进行数据聚合。因为它将前一层中的一段输出整合成了一条数据,所以它可以让后续卷积层的神经元处理更长跨度的数据。另一方面,它也帮助我们抹平了数据中的某些微小抖动。

往期文章

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180408G0AAH600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券