机器学习-卷积神经网络入门(一)

基本概念

本文旨在提炼并总结卷积神经网络中出现的一些细碎概念和知识点,初学者读完后应该能对基本概念有更深的了解。

提出卷积神经网络的原因:连接层每个输出节点都与所有输入节点相连,导致参数太多,限制了神经网络向更深处发展。

卷积层的提出:不需要连接所有输入节点,根据局部相关性,某个像素点只找和它相关性强的点,利用周围所有点到该像素点的欧氏距离,最终得到一个边长为k(重要性最高的前k个节点)的正方形。这个正方形称为感受野。每个输出节点仅与感受野k*k个输入节点相连。

填充的意义:每次利用卷积核和感受野计算时,都会使得输出的区域不断减小,导致只能用几层卷积层,无法继续加深。

步幅的意义:如果图片像素较大,可能计算很多次也得不到想要的结果,可以增加步幅来快速得到预期输出。

单通道输入和单卷积核:单通道输入是由于是黑白图片只有一个通道。首先需要明白卷积核和感受野计算的方式是使用哈达马积(Hadamard Product),通俗来说就是两个矩阵对应元素相乘之后所有的积求和。不断移动感受野,最终得到一个输出矩阵。

多通道输入和单卷积核:多通道输入更常见,以一般的彩色图片为例,由R/G/B三个通道组成。再这种情况下,卷积核的通道数要和输入的通道数量匹配。卷积核的第i个通道和输入的第i个通道利用哈达马积计算得出第i个输出矩阵(同单通道输入和单卷积核计算方法),最后所有通道对应位置的元素相加得到最终的输出矩阵,注意相加过程矩阵形状不变。输入通道数量决定了卷积核的通道数量,,但是一个卷积核只能得到一个输出矩阵,和通道数量无关。

多通道输入和多卷积核:一般来说一个卷积核只能提取某一种逻辑特征,因此可以使用多卷积核来提取多种特征。计算方法和上面相同,每个卷积核得到一个矩阵,紧接着多个矩阵在通道维度上进行拼接,最终得到输出矩阵。特殊的1*1卷积核,它不识别空间模式,只用于融合通道。

多输入通道和多输出通道的意义:每个输出通道可以识别特定的模式,输入通道识别并组合输入中的模式。每个通道的卷积核是不一样的,同一层不同通道的卷积核大小是一样的。

池化层:最大池化层取感受野中最大的元素放入输出矩阵对应位置,不再使用哈达马积。平均池化层从感受野中计算平均值放入输出矩阵对应位置。池化层可以允许输入像素偏移,而不用分的那么仔细。池化层一般用来降低特征图的尺寸。

空洞卷积:感受野较小时提取的特征有限,感受野增大时会增加参数量和计算代价。因此空洞卷积在普通卷积的感受野上增加一个Dilation Rate参数,控制感受野中每个采样点之间的间隔。如此一来使得感受野可以提取更大面积的特征值,同时又不会增加参数。layers.Conv2D()类的 dilation_rate 参数来选择使用普通卷积还是空洞卷积,dilation_rate =1为普通卷积,大于1为空洞卷积。

深度残差网络:网络层数越深越可能获得更好的泛化能力,但随着模型加深,会变得难以训练。浅层神经网络训练简单,可以让深层神经网络跳回到浅层神经网络。ResNet(深度残差网络) 通过在卷积层的输入和输出之间添加 Skip Connection 实现层数回退机制。输入通过两个卷积层,得到特征变换后的输出f(),与输入进行对应元 素的相加运算,得到最终输出h(),但是x需要与f(x)的shape相同,因此需要Skip Connection 上添加额外的卷积运算环节将输入变换到与f()相同的 shape。

一些细碎知识点:卷积是对位置信息比较敏感,输出时第i行j列实际上就是输入的i行j列的附近的信息。

你可能感兴趣的:(python,机器学习,卷积神经网络,tensorflow)