卷积神经网络(CNN)

**卷积神经网络(Convolutional Neural Network, CNN)**是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

卷积神经网络主要结构有:卷积层、池化层、和全连接层。通过堆叠这些层结构形成一个卷积神经网络。将原始图像转化为类别得分,其中卷积层和全连接层拥有参数,激活层和池化层没有参数。参数更新通过反向传播实现。

cnn

卷积神经网络通常包含以下几种层:

  • 卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。

  • 线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)。

  • 池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。

  • 全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。

    其中A1为上一层的输出,D1为用随机数生成的一组dropout向量,然后将其与保留概率prob做比较得到一个布尔向量,再将其与A1做乘积即可得到失活后的A1,按理说dropout到这里应该也就完成了,但最后还有一个将A1除以保留概率的操作。所以这里有个疑问,为什么在dropout之后还要做个rescale的除法?

​ 其实,这种实现dropout的方法也叫Inverted Dropout,是一种经典的dropout实现方法。先不说Inverted Dropout,我们来看正常dropout应该是怎样的:当我们使用了dropout后,在模型训练阶段只有占比为p部分的神经元参与了训练,那么在预测阶段得到的结果会比实际平均要大1/p,所以在测试阶段我们需要将输出结果乘以p来保持输出规模不变。这种原始的dropout实现方式也叫Vanilla Dropout。Vanilla操作有一个重大缺陷,那就是预测过程需要根据训练阶段所使用的dropout策略做调整,比较麻烦,所以一般情况下都不会使用这种方法。

​ 既如此,相必大家也知道了,我们目前用的都是Inverted Dropout方法,为了能够在神经网络训练完成后安安心心的做预测,我们可以把全部心思都放在训练阶段,所有的设置都在训练阶段完成。所以为了保证神经网络在丢弃掉一些神经元之后总体信号强度不变和预测结果稳定,也有一种说法叫保证Bernoulli二项分布的数学期望不变,我们在Inverted Dropout方法中对dropout之后的做了除以p的rescale操作。

​ 反向传播时同理,梯度计算时需要除以保留概率:

参考文献

  1. https://blog.csdn.net/liangchunjiang/article/details/79030681
  2. https://easyai.tech/ai-definition/cnn/
  3. https://juejin.cn/post/6920928949576925191
  4. https://cloud.tencent.com/developer/article/1745012