需要补充的

深度卷积神经网络

卷积神经网络(Convolutional Neural Networks,CNN)也是一种前馈神经网络,其特点是每层的神经元节点只响应前一层局部区域范围内的神经元(全连接网络中每个神经元节点响应前一层的全部节点)。

一个深度卷积神经网络模型通常由若干卷积层叠加若干全连接层组成,中间也包含各种非线性操作以及池化操作。

卷积神经网络同样可以使用反向传播算法进行训练,相较于其他网络模型,卷积操作的参数共享特性使得需要优化的参数数目大大缩减,提高了模型的训练效率以及可扩展性。由于卷积运算主要用于处理类网格结构的数据,因此对于时间序列以及图像数据的分析与识别具有显著优势。提高了模型的可扩展性是什么?为什么卷积运算主要用于处理网格结构的数据?什么是网格结构的数据?有别的结构的数据吗?还有什么也可以用于处理网格结构的数据吗?

图9.14是卷积神经网络的一个经典结构示意图。这是 LeCun Yann 在 1998 年提出的卷积神经网络结构,输入在经历几次卷积和池化层的重复操作之后,接入几个全连通层并输出预测结果,已成功应用于手写体识别任务。为什么这个地方是接入几个全连接层呢?而不是一个呢?从现在的角度看,这个网络有什么问题吗?有哪些可以改进的地方?而且,为什么他当时设计的时候是选择的这种结构?而不是别的结构?

图像处理,深度学习,自然语言处理

卷积操作的本质特性包括稀疏交互和参数共享,具体解释这两种特性及其作用。

稀疏交互?卷积操作的本质有这个吗?

稀疏交互(Sparse Interaction)

在传统神经网络中,网络层之间输入与输出的连接关系可以由一个权值参数矩阵来表示,其中每个单独的参数值都表示了前后层某两个神经元节点之间的交互。对于全连接网络,任意一对输入与输出神经元之间都产生交互,形成稠密的连接结构。嗯,这么一说就知道稀疏交互是什么意思了。

如图9.15所示,神经元 \(s_i\) 与输入的所有神经元 \(x_j\) 均有连接。

而在卷积神经网络中,卷积核尺度远小于输入的维度,这样每个输出神经元仅与前一层特定局部区域内的神经元存在连接权重(即产生交互),我们称这种特性为稀疏交互。

如图9.16所示。可以看到与稠密的连接结构不同,神经元 \(s_i\) 仅与前一层中的 \(x_{i−1}\)\(x_i\)\(x_{i+1}\)相连。具体来讲,假设网络中相邻两层分别具有 \(m\) 个输入和 \(n\) 个输出,全连接网络中的权值参数矩阵将包含 \(m×n\) 个参数。对于稀疏交互的卷积网络,如果限定每个输出与前一层神经元的连接数为 \(k\) ,那么该层的参数总量为 \(k×n\)。在实际应用中,一般 \(k\) 值远小于 \(m\) 就可以取得较为可观的效果;而此时优化过程的时间复杂度将会减小几个数量级,过拟合的情况也得到了较好的改善。嗯,优化过程的时间复杂度降低,过拟合的情况也会有所改善。

稀疏交互的物理意义是,通常图像、文本、语音等现实世界中的数据都具有局部的特征结构,我们可以先学习局部的特征,再将局部的特征组合起来形成更复杂和抽象的特征。以人脸识别为例,最底层的神经元可以检测出各个角度的边缘特征(见图9.17(a));位于中间层的神经元可以将边缘组合起来得到眼睛、鼻子、嘴巴等复杂特征(见图9.17(b));最后,位于上层的神经元可以根据各个器官的组合检测出人脸的特征(见图9.17(c))。对于这个地方还有个问题,那边是最底层的神经元?那边是上层的神经元?

参数共享(Parameter Sharing)

参数共享是指在同一个模型的不同模块中使用相同的参数,它是卷积运算的固有属性。同一个模型的不同模块中使用相同的参数?有吗?

全连接网络中,计算每层的输出时,权值参数矩阵中的每个元素只作用于某个输入元素一次;而在卷积神经网络中,卷积核中的每一个元素将作用于每一次局部输入的特定位置上。嗯。作用于每一次局部输入的特定位置时上?嗯?

根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每个位置的每个参数都进行优化,从而大大降低了模型的存储需求。

参数共享的物理意义是使得卷积层具有平移等变性。什么意思?假如图像中有一只猫,那么无论它出现在图像中的任何位置,我们都应该将它识别为猫,也就是说神经网络的输出对于平移变换来说应当是等变的。特别地,当函数 \(f(x)\)\(g(x)\) 满足 \(f(g(x))=g(f(x))\) 时,我们称 \(f(x)\) 关于变换 \(g\) 具有等变性。将 \(g\) 视为输入的任意平移函数,令 \(I\) 表示输入图像(在整数坐标上的灰度值函数),平移变换后得到 \(I^{\prime}=g(I)\) 。例如,我们把猫的图像向右移动 \(l\) 像素,满足 \(I^{\prime} (x, y)=I(x-1, y)\)。我们令 \(f\) 表示卷积函数,根据其性质,我们很容易得到 \(g(f(I))=f\left(I^{\prime} \right)=f(g(I))\) 。也就是说,在猫的图片上先进行卷积,再向右平移l像素的输出,与先将图片向右平移 \(l\) 像素再进行卷积操作的输出结果是相等的。为什么这个地方看不明白了呢?嘶,重看。

常用的池化操作有哪些?池化的作用是什么?

常用的池化操作主要针对非重叠区域,包括:什么是非重叠区域?有重叠区域吗?哦,下面有说,相邻重叠区域。

  • 均值池化(mean pooling)
  • 最大池化(max pooling)
  • 这个 等 里面有什么?

特点如下:

  • 均值池化通过对邻域内特征数值求平均来实现,能够抑制由于邻域大小受限造成估计值方差增大的现象,特点是对背景的保留效果更好。什么是抑制由于邻域大小受限而造成估计值方差增大的现象?没明白什么意思。而且,为什么会对背景的保留效果更好?

  • 最大池化则通过取邻域内特征的最大值来实现,能够抑制网络参数误差造成估计均值偏移的现象,特点是更好地提取纹理信息。什么是 抑制网络参数误差造成估计均值偏移的现象?为什么能更好的提取纹理信息?

池化操作的本质是降采样。 例如,我们可以利用最大池化将 \(4×4\) 的矩阵降采样为 \(2×2\) 的矩阵,如图9.18所示。

图中的池化操作窗口大小为 \(2×2\) ,步长为 \(2\)。每次在 \(2×2\) 大小的窗口上进行计算,均值池化是求窗口中元素的均值,最大池化则求窗口中元素的最大值;然后将窗口向右或向下平移两格,继续操作。

此外,特殊的池化方式还包括对相邻重叠区域的池化以及空间金字塔池化。哇塞,空间金字塔池化有知道,相邻重叠区域的池化之前不知道。

  • 相邻重叠区域的池化,顾名思义,是采用比窗口宽度更小的步长,使得窗口在每次滑动时存在重叠的区域。是的。但是这么做的意义是什么?有什么理论依据吗?有真是的使用吗?
  • 空间金字塔池化主要考虑了多尺度信息的描述,例如同时计算 \(1×1\)\(2×2\)\(4×4\) 的矩阵的池化并将结果拼接在一起作为下一网络层的输入。这个不同矩阵的池化结果是怎么拼接的?而且,效果到底怎么样?有真正的对于多尺度信息的提取的优化吗?有真实的使用场景吗?

池化操作除了能显著降低参数量外,还能够保持对平移、伸缩、旋转操作的不变性。

  • 平移不变性是指输出结果对输入的小量平移基本保持不变。例如,输入为(1,5,3),最大池化将会取 5,如果将输入右移一位得到(0,1,5),输出的结果仍将为 5。嗯,这个是的。
  • 对伸缩的不变性(一般称为尺度不变性)可以这样理解,如果原先神经元在最大池化操作之后输出 5,那么在经过伸缩(尺度变换)之后,最大池化操作在该神经元上很大概率的输出仍然是 5。因为神经元感受的是邻域输入的最大值,而并非某一个确定的值。
  • 旋转不变性可以参照图9.19。图中的神经网络由3个学得的过滤器和一个最大池化层组成。这3个过滤器分别学习到不同旋转方向的 “5”。当输入中出现 “5” 时,无论进行何种方向的旋转,都会有一个对应的过滤器与之匹配并在对应的神经元中引起大的激活。最终,无论哪个神经元获得了激活,在经过最大池化操作之后输出都会具有大的激活。什么意思?这个不是过滤器的功劳吗?怎么是最大池化的功劳?而且,不对呀??这个最大池化怎么能对接到不同的检测单元?是这样吗?补充下。

卷积神经网络如何用于文本分类任务?

卷积神经网络的核心思想是捕捉局部特征,起初在图像领域取得了巨大的成功,后来在文本领域也得到了广泛的应用。对于文本来说,局部特征就是由若干单词组成的滑动窗口,类似于 N-gram。

卷积神经网络的优势在于能够自动地对 N-gram 特征进行组合和筛选,获得不同抽象层次的语义信息。不错,很好。

由于在每次卷积中采用了共享权重的机制,因此它的训练速度相对较快,在实际的文本分类任务中取得了非常不错的效果。嗯。

图 9.20 是一个用卷积神经网络模型进行文本表示,并最终用于文本分类的网络结构[20]:

我擦嘞,这个图画的怎么看不懂了呢?嗯,看了下面的解释,非常清晰。感觉与图像的那个连接图是有一些不同,是一维的。

  • 输入层是一个 \(N×K\) 的矩阵,其中 \(N\) 为文章所对应的单词总数,\(K\) 是每个词对应的表示向量的维度。每个词的 \(K\) 维向量可以是预先在其他语料库中训练好的,也可以作为未知的参数由网络训练得到。这两种方法各有优势,一方面,预先训练的词嵌入可以利用其他语料库得到更多的先验知识;另一方面,由当前网络训练的词向量能够更好地抓住与当前任务相关联的特征。嗯,听起来都有道理,一般来说用那种比较好呢?因此,图中的输入层实际采用了两个通道的形式,即有两个 \(N×K\) 的输入矩阵,其中一个用预先训练好的词嵌入表达,并且在训练过程中不再发生变化;另外一个也由同样的方式初始化,但是会作为参数,随着网络的训练过程发生改变。嗯,是的,那么是怎么随着训练的过程发生变化的?

  • 第二层为卷积层。在输入的 \(N×K\) 维矩阵上,我们定义不同大小的滑动窗口进行卷积操作:\(c_{i}=f\left(w \cdot x_{i:i+h-1}+b\right)\)。其中 \(x_{i:i+h-1}\) 代表由输入矩阵的第 \(i\) 行到第 \(i+h−1\) 行所组成的一个大小为 \(h×K\) 的滑动窗口, \(w\)\(K×h\) 维的权重矩阵,\(b\) 为偏置参数。假设 \(h\)\(3\),则每次在 \(2×K\) 的滑动窗口上进行卷积,并得到 \(N−2\) 个结果,再将这 \(N−2\) 个结果拼接起来得到 \(N−2\) 维的特征向量。每一次卷积操作相当于一次特征向量的提取,通过定义不同的滑动窗口,就可以提取出不同的特征向量,构成卷基层的输出。嗯,不同的滑动窗口提取到的特征向量是怎么拼接的?

  • 第三层为池化层,比如图中所示的网络采用了 1-Max 池化,即为从每个滑动窗口产生的特征向量中筛选出一个最大的特征,然后将这些特征拼接起来构成向量表示。哇塞,这也太粗暴了吧?真的可行吗?这样太池化了吧?不过的确就把边长的文本转化成了定长的向量。嗯,厉害。也可以选用 K-Max 池化(选出每个特征向量中最大的K个特征),或者平均池化(将特征向量中的每一维取平均)等,K-Max 池化比 1-Max 池化好在哪里?平时真的有用这个吗?之前好像很少听说 K-Max 池化。达到的效果都是将不同长度的句子通过池化得到一个定长的向量表示这个倒真的是,机智!

  • 得到文本的向量表示之后,后面的网络结构就和具体的任务相关了。本例中展示的是一个文本分类的场景,因此最后接入了一个全连接层,并使用 Softmax 激活函数输出每个类别的概率。嗯。

挺好的这一段,说明的非常清楚。

原文与相关

  • 《百面机器学习》