CNN基本内容
首先需要理解传统机器学习和深度学习的区别:传统机器学习我们需要手动处理数据,人为选择出我们所需要的特征,获得更有价值的一些输入。而深度学习,会自己在其中选择合适的特征,解决了机器学习当中“人工”的问题。
传统网络和卷积网络的区别:
譬如说输入一张28×28×1的图像,传统网络会将784个像素点,化为一列特征或者说是向量,当作输入层直接输入,再经过隐藏层后,得到输出层,而在卷积神经网络中,不会将图像数据先化为向量,而是会以H×W×C的形式,直接对图像特征进行提取,若是用画图表示的话,那就是以长方体的形式进行输入。
整体架构:输入层、卷积层、池化层、全连接层
输入层
以刚才28×28×1的图像来讲,输入层就是这个28×28×1的图像。
卷积层
卷积层用于提取特征。比如一张彩色照片,其有R、G、B三个通道,那么这张三通道的图片的特征就是由这三个通道的特征进行组成而成。卷积层是通过运算进行提取图片特征的。计算机看到的图像就是一个个矩阵,其中的卷积操作就是通过卷积核(卷积核也是矩阵,可能是1×1的矩阵,3×3的矩阵等等)对每个通道的矩阵从左到右、从上至下进行滑动,并进行互相关运算运算,其中滑动的步长是个超参数。互相关运算的意思就是对应位置相乘后再相加。卷积层可以由很多卷积核,通过进行越来越多的卷积,提取到的图像特征也会越来越抽象。
池化层
池化层用于压缩特征。CNN中通常会在相邻的卷积层之间加入一个池化层,池化层可以有效地缩小参数矩阵的尺寸,从而减少最后连接层的中的参数数量。所以加入池化层可以加快计算速度和防止过拟合的作用。池化一般具有平均池化、最大池化,其首要作用就是下采样,即用于压缩特征,可以降维、去除冗余信息、对特征进行压缩、简化网络复杂度、减小计算量、减小内存消耗等等。各种说辞吧,总的理解就是减少参数量。还可以扩大感知野(感知野的定义是:卷积神经网络每一层输出的特征图上的像素点映射回输入图像上的区域大小。通俗点的解释是,特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域)。一般池化中包含平均池化和最大池化,平均池化是计算图像区域的平均值作为该区域池化后的值,最大池化是选图像区域的最大值作为该区域池化后的值。然后还有空间金字塔池化,就是用不同大小池化窗口作用于上层的卷积特征,并把结果输出给全连接层,每一个不同大小的池化,都可以看成是空间金字塔的一层,那么这个空间金字塔池化的好处就是可以把任意尺度的卷积特征转化到相同维度,那么CNN在处理任意尺度的图像时,可以避免导致一些信息的丢失。
全连接层
全连接层一般位于整个卷积神经网络的最后,负责将卷积输出的二维特征图转化成一维的一个向量,由此实现了端到端的学习过程(即:输入一张图像或一段语音,输出一个向量或信息)。全连接层的每一个结点都与上一层的所有结点相连因而称之为全连接层。由于其全相连的特性,一般全连接层的参数也是最多的。全连接层负责将前面层中提取到的特征映射转换为最终的输出。在分类任务中,全连接层的输出通常与类别数量相对应,用于输出每个类别的概率分布或类别得分。 全连接层的作用包括:
- 特征整合: 将前面层提取到的特征整合到最终的表示中,以便进行分类、回归或其他任务。
- 非线性映射: 全连接层通常会在特征整合后应用非线性激活函数,如ReLU、sigmoid或tanh,以增加网络的表达能力。因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入非线性激活函数之后,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
- 参数调节: 全连接层的权重和偏置项是可以学习的参数,通过反向传播算法进行优化,以使网络能够更好地拟合训练数据。
- 输出预测: 在分类任务中,全连接层的输出用于预测输入属于各个类别的概率分布,或者直接输出类别得分。