⑴卷积神经网络的数学推导及简单实现
我们先看一个网络:
这是一个简单CNN的前半部分,它不包含全连接层,已经有一个卷积层和一个2X2的池化层的步。 为1,Padding为0,池化作为MaxPooling,大小为2x2
我们先看前向计算。 卷积运算没什么好说的。 要了解的话,你只要在百度上搜索一下就可以了。 下面直接写出公式:
是节点的加权输入,是ReLU活函数
计算后。 一切,就是MaxPooling:
卷积层和池化层的前向计算已经完成虽然实际中一般不止一层,但是可以全部应用全连接层:
如图所示,maxpooling的结果是“扁平化”的'所以它是全连接层的输入向量:
这是DNN的早期推导,所以我就不详细说了:
https://www.jianshu.com/p/bed8d5dac958
我们已经知道了如何计算全连接层的误差传播,接下来的问题就是传递。 将误差返回到池化层和卷积层:
上图是FC(全连接)层中输入层的误差,也是池化层下一个的误差。 公式在上一篇文章中已经讨论过:
输入层没有活函数,所以:
得到误差项后,进一步求误差项后再进行池化作如果MaxPooling如下:
上采样作将相同:
推导过程如下:
如果x1是最大值,不难得到以下偏导数:
既然只有最大的一项会影响x5,那么其余项的偏导数都为0,为什么:
,那么:
如下图所示:
池化层没有需要更新的参数,所以只需在顶层传递错误即可。 接下来的问题是知道卷积层顶层(即直接计算的下一层)的误差,找到卷积层的误差,并更新卷积。 核。
首先,上一层所有节点的误差项已知,我们看看如何更新卷积核的梯度。 由于每一个对全部都有影响,根据全导数公式:
上面已经讨论过它是节点的加权输入,所以:
最后,误差继续向上超出,如图:
举个例子:
综上我们可以下图的规则:
公式如下:
写成卷积形式:
终于写完了,不过最后部分有点粗糙,等以后我会改进的将来有时间。
⑵卷积神经网络-CNN
卷积神经网络(CNN)是一种深度学习模型,专门设计用于处理网格结构数据,如图像。 CNN的基础原理在于利用卷积作提取图像特征。
卷积是CNN的核心作,通过使用卷积过滤器(卷积核)在输入数据上滑动,进行点乘运算并求和,从而提取特征。 卷积作能有效捕获部特征,实现权重共享,减少参数量,提高模型效率。
稀疏连接是CNN的特性之一,意味着网络中的神经元仅与部分相邻神经元连接,这有助于减少参数量,防止过拟合。
权重共享(sharedweights)是指同一卷积核在输入数据的不同位置上进行滑动,每次滑动时卷积核的权重保不变。 这样,CNN能够学习到在不同位置上都适用的通用特征,而无需为每个位置单独学习一组参数。
卷积过滤器(convolutionalfilter)是执行卷积作的核函数,它在输入数据上滑动并进行计算,提取特定的特征。
对于数据,不采用全连接层是因为全连接层会引入大量参数,导致模型复杂度过高,学习到的特征可能过于复杂且容易过拟合。 卷积层通过部连接,保输入与输出的空间关系,更适用于图像处理。
在计算卷积神经网络输出大小时,需要考虑步(stride)和填充(padding)。 步决定了卷积核在输入数据上的移动步幅,而填充则在输入四周添加零,以保输出大小不变。
对于单通道输入,卷积神经网络输出值的计算涉及卷积核与输入数据点的点乘和求和。 在多通道输入情况下,每个通道都会通过相同的卷积核进行计算,然后将结果叠加得到最终输出。
填充(padding)在卷积过程中用于保输出大小,而步(stride)则控输出特征图的分辨率。 填充值和步的选择取决于特定任务的需求。
卷积层的参数量和计算量(FLOPs)与其核大小、通道数和输入尺寸有关。 通常情况下,卷积核越大,参数量和计算量越大,但同时也可能捕获更复杂的特征。
1x1卷积的作用是进行通道映射,减小通道数或调整通道维度,降低计算复杂度,用于特征融合或进一步处理。
反卷积(deconvolution)是一种逆作,用于生成图像大小的输出,常用于生成模型中。 输入输出大小的计算需要考虑步和填充。 反卷积与卷积不同,它通过上采样和权重作生成输出。
空洞卷积(Atrousconvolution)通过在卷积核周围添加空洞,增加感受野,即神经元能够查看更大范围的输入信息,而不需要增加参数量。
分组卷积(GroupConvolution)将输入和输出通道划分为多个组,分别进行卷积,减少了参数量,提高了模型效率。 它与深度可分离卷积(DepthwiseSeparableConvolution)的关系在于,前者关注通道之间的关系,后者则同时关注通道与空间的分离。
深度可分离卷积(DepthwiseSeparableConvolution)将卷积分为两个步骤:深度可分离卷积和点卷积。 前者在通道维度上进行卷积,后者在空间维度上进行卷积,大大减少了参数量和计算量。
空间可分离卷积(SpatialSeparableConvolution)进一步将深度可分离卷积的空间卷积步骤分解为两个步骤,进一步降低计算复杂度。
可变形卷积(DeformableConvolution)允许卷积核在输入数据上自由移动,以捕捉复杂形状的特征,提高模型的适应性和准确性。
延迟卷积(LazyConv2d)是一种优化技术,通过在计算过程中延迟某些作,减少内存消耗和计算复杂度。
3D卷积应用于处理三维结构数据,如或点云。 座标卷积(CoordConv)在输入数据中加入坐标信息,帮助模型学习空间关系。
卷积层与池化层的区别在于,卷积层提取部特征,而池化层进行特征降维,减少计算复杂度并增加模型的不变性。
卷积层中的卷积核尺寸通常选择为奇数,以保证输出与输入在尺寸上保一致,避免边界处的额外处理。
卷积核并非越大越好。 较大的卷积核虽然可能捕获更复杂的特征,但同时也增加了计算量和参数量,可能导致过拟合。 选择合适的卷积核大小需综合考虑任务需求、数据特性及模型性能。
卷积作与反卷积(转置卷积)之间存在密切关系,反卷积用于生成或上采样作,而卷积用于特征提取或下采样。 两者均通过权重作生成输出,但具体应用和目标不同。
反卷积(转置卷积)的棋盘效应是常见问题,表现为生成图像中出现方块状图。 这种效应通常由步和填充的特定配置引起。 抑棋盘效应的方法包括调整步、填充或使用不同类型的上采样技术。
空洞卷积(Atrousconvolution)的主要缺点在于增加了计算复杂度,虽然能扩大感受野,但可能对模型的计算效率产生负面影响。
分组卷积(GroupConvolution)适用于需要降低参数量和计算复杂度的场景。 它通过将输入通道划分为多个组,分别进行卷积作,从而减少参数量,提高模型效率。 分组卷积与全深度卷积(GDC)在目标上有所不同,GDC关注的是通道与空间的全连接,而分组卷积则更注重通道内部的独立处理。
分组卷积(GroupConvolution)的限性在于,它对输入通道的划分依赖于特定任务,可能不适用于所有类型的图像处理任务。 此外,分组卷积在一定程度上限了模型对输入通道之间相互作用的捕捉。
深度可分离卷积(DepthwiseSeparableConvolution)通过将卷积分为深度可分离卷积和点卷积两个步骤,显著减少了参数量和计算复杂度。 这种结构不仅提高了模型的效率,而且保了对复杂特征的捕获能力,成为现代深度学习模型中的重要组件。
空间可分离卷积(SpatialSeparableConvolution)通过进一步分解空间卷积步骤,进一步优化计算资源的使用,适用于对计算效率有严格要求的场景。
可变形卷积(DeformableConvolution)通过允许卷积核在输入数据上自由移动,捕捉复杂形状的特征,提高了模型的适应性和准确性,特别适用于包含复杂结构的图像数据。
延迟卷积(LazyConv2d)是一种优化技术,通过延迟某些计算作,减少内存消耗和计算复杂度,适用于需要处理大量数据或对计算资源有严格限的场景。
3D卷积(3DConvolution)和座标卷积(CoordConv)分别用于处理三维结构数据和在输入数据中加入坐标信息,帮助模型学习空间关系。
卷积层与池化层在深度学习模型中发挥着关键作用,卷积层用于特征提取和部特征学习,而池化层用于特征降维和增加模型的不变性。 选择合适的层和参数配置是提升网络性能的关键。
每层卷积不一定只能使用一种尺寸的卷积核,通过调整卷积核尺寸、步和填充,可以在保计算效率的同时,捕获不同尺度的特征。 减少卷积层参数量可以通过采用更小的卷积核、分组卷积、深度可分离卷积或使用其它优化技术实现。
采用宽卷积(宽卷积核)的好处包括提高模型的部感受野,增强对复杂结构特征的捕获能力,但同时可能导致计算复杂度的增加。
全连接、部连接、全卷积与部卷积在深度学习中各有应用。 全连接层用于进行全特征整合,部连接层则保输入与输出之间的空间关系,适用于图像处理任务。 全卷积网络(FCN)将全连接层与卷积层相结合,用于生成高分辨率输出。 部卷积在处理特定子区域时更为有效,适用于需要关注部细节的任务。
为捕获featruemap(特征图)上距离依赖,CNN通常通过多次卷积作和池化作,逐步扩大感受野,捕捉不同尺度和位置的特征。 在CNN架构设计上,提升网络性能的指标通常包括层数、通道数、核大小、步、填充、活函数的选择等。 修改这些参数以优化模型的深度、宽度、分辨率和特征学习能力,是提升CNN性能的关键策略。