[nlp] CNN

表征学习:它避免了手动提取特征的麻烦,允许计算机学习使用特征的同时,也学习如何提取特征。
前馈神经网络:每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。
[nlp] CNN_第1张图片
[nlp] CNN_第2张图片
哪里不同呢?
卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。
[nlp] CNN_第3张图片
卷积神经网络通常包含以下几种层:

卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征
线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)。
池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。
[nlp] CNN_第4张图片
卷积层的参数包含一系列过滤器(filter),每个过滤器训练一个深度,有几个过滤器输出单元就具有多少深度。

具体如下图所示,样例输入单元大小是32×32×3, 输出单元的深度是5,
对于输出单元不同深度的同一位置,与输入图片连接的区域是相同的,但是参数(过滤器)不同。

空间排列(Spatial arrangement)

一个输出单元的大小有以下三个量控制:depth, stride 和 zero-padding。

深度(depth) : 顾名思义,它控制输出单元的深度,也就是filter的个数,连接同一块区域的神经元个数。又名:depth column。

步幅(stride):它控制在同一深度的相邻两个隐含单元,与他们相连接的输入区域的距离。如果步幅很小(比如 stride = 1)的话,相邻隐含单元的输入区域的重叠部分会很多; 步幅很大则重叠区域变少

补零(zero-padding) : 我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。

如果计算结果不是一个整数,则说明现有参数不能正好适合输入,步幅(stride)设置的不合适,或者需要补零,下面用一个例子来说明一下。

这是一个一维的例子,左边模型输入单元有5个,即, 边界各补了一个零,即,步幅是1, 即,感受野是3,因为每个输出隐藏单元连接3个输入单元,即,根据上面公式可以计算出输出隐藏单元的个数是:,与图示吻合。右边那个模型是把步幅变为2,其余不变,可以算出输出大小为:,也与图示吻合。若把步幅改为3,则公式不能整除,说明步幅为3不能恰好吻合输入单元大小。
[nlp] CNN_第5张图片
参数共享(Parameter Sharing)

应用参数共享可以大量减少参数数量,参数共享基于一个假设:
如果图像中的一点(x1, y1)包含的特征很重要,那么它应该和图像中的另一点(x2, y2)一样重要。
换种说法,我们把同一深度的平面叫做深度切片(depth slice)((e.g. a volume of size [55x55x96] has 96 depth slices, each of size [55x55])),那么同一个切片应该共享同一组权重和偏置。我们仍然可以使用梯度下降的方法来学习这些权值,只需要对原始算法做一些小的改动, 这里共享权值的梯度是所有共享参数的梯度的总和

我们不禁会问为什么要权重共享呢?一方面,重复单元能够对特征进行识别,而不考虑它在可视域中的位置。另一方面,权值共享使得我们能更有效的进行特征抽取,因为它极大的减少了需要学习的自由变量的个数。通过控制模型的规模,卷积网络对视觉问题可以具有很好的泛化能力。

卷积层与全连接层的区别:

  从上面可以看出,全连接层的权重矩阵是固定的,即每一次feature map的输入过来必须都得是一定的大小(即与权重矩阵正好可以相乘的大小),所以网络最开始的输入图像尺寸必须固定,才能保证传送到全连接层的feature map的大小跟全连接层的权重矩阵匹配。

你可能感兴趣的:(nlp)