在CNN的学习过程中我会提供相应的手算例子帮助理解训练过程。
其他关于神经网络的学习链接如下:
一、了解卷积神经网络
卷积神经网络的作用
总的来说,卷积神经网络的第一个主要作用是对图像进行特征提取,所谓特征提取,就是明白图像的那部分重要,哪部分不重要,然后我们就得到了一个能够识别图像的机器。当我们输入其他的图像,这个机器可以对新输入的图像进行判断,也就是进行相应的任务(分类,目标检测)。
比如,假如我用人眼分辨不出猫和狗,需要机器来帮我。当然,我们能分清猫狗,但是当有更复杂的图像处理任务时,就需要机器帮忙分辨。
一般的CNN训练过程会用到两个数据集。第一个是训练集(Train set),一个是测试集(Test set)。
1.训练过程
训练集里面猫狗都有,并且有正确的标签,所谓的标签就是这个训练集里面的每一张图片都有正确的分类。比如我们用0代替猫,用1来代替狗,训练集里面的每张图都有对应的0,1值。我们将训练集里面的每张图输入到CNN中去训练,让这个机器知道猫狗的不同特征,让它能够判断什么是猫,什么是狗。
我们的目的是优化CNN模型,让CNN模型具有分类猫狗的能力。所有对于无论什么优化任务,我们需要有目标函数,CNN里常用的损失函数叫做交叉熵损失函数,我们的目的是让分类损失最小。其实归根到底,就是数学中的最优化问题,找到最优解。这些内容我会在稍后的章节中一一说明,本章的学习任务是理解CNN的运作过程。
训练过程可以分解为前向传播(Forward Propagation)和反向传播(Backpropagation),以下的解释以分类猫狗为例。
(1)前向传播
- 目的: 前向传播旨在从输入的图像数据中提取特征,并预测图像是属于“猫”还是“狗”。
- 作用: 通过前向传播,CNN能够识别图像中的纹理、形状和模式等特征,为分类提供依据。
过程:
- 输入层: 输入待分类的图像(例如,一个灰度或彩色图像)。
- 卷积层: 图像通过一个或多个卷积层,这些层使用不同的卷积核(或滤波器)来提取图像的局部特征,如边缘、纹理等。
- 激活函数: 通常在卷积层之后应用ReLU激活函数,引入非线性,帮助网络学习更复杂的特征表示。
- 池化层(可选): 使用最大池化或平均池化来降低特征图的空间尺寸,减少参数数量,提取主要特征。
- 全连接层: 卷积层和池化层的输出被展平并通过一个或多个全连接层,这些层将学习到的特征映射到最终的分类结果。
- 输出层: 最后,通过一个具有两个输出单元的全连接层(对应于两个类别:“猫”和“狗”),通常使用Softmax激活函数来计算每个类别的概率。
(2)反向传播
- 目的: 反向传播用于调整网络的权重和偏置,以最小化预测输出和实际标签之间的差异。
- 作用: 通过反向传播,网络能够根据分类误差自我修正,提高分类准确性。
过程:
- 损失函数计算: 计算输出层的预测概率和实际标签(“猫”或“狗”)之间的误差,通常使用交叉熵损失。
- 梯度计算: 利用链式法则计算损失相对于网络中每个参数的梯度,从输出层逆向传递至输入层。
- 权重更新: 根据计算得到的梯度和预设的学习率,更新网络中的权重和偏置,以减少未来的预测误差。
- 迭代优化: 通过多次迭代前向传播和反向传播,不断优化网络参数,直到模型在猫狗分类任务上达到较高的准确率。
2.测试过程
训练完之后,我们将测试集里面的图片输进去,CNN就能给出一个预测值了,是猫或者狗,当然,也有可能预测错误。这个过程叫测试,测试能让我们知道我们训练的CNN模型到底好不好。
什么时候训练完,达到什么状态可以停止这个CNN模型的训练,这些内容在之后的章节中都会一一解释。
预测的正确率可以让我们判断不同CNN的性能好坏。比如一个CNN能将输进去的图全部预测正确,那性能就非常强了。顺带一提,输入到CNN模型的测试集里面的所有图片是不带标签的,但是我们为了了解CNN的性能,也就是为了知道它到底预测得对不对,在训练完之后的评估阶段,会用带标签的测试集评估,我们有一系列的指标评估模型性能,这些指标稍后得章节里面会提到。
3.标签问题
但是当我们用CNN实战应用的时候,比如依靠病人的肺部X光判断他有没有得肺炎,我们肯定是不知道正确答案的。所以训练一个性能强大的CNN是非常重要的,这有助于我们之后的实战应用。当人脑不足以做出判断时,机器会加以辅助。就按这个例子来说,一个已经过测试性能优秀的CNN来判断肺炎与否,当医生用自己的专业知识对这个病人的诊断结果不太确定时,机器的预测结果可以辅助医生进行诊断。这就是CNN强大的应用价值。
总结卷积神经网络其主要作用包括:
- 特征提取:CNN能够自动从输入数据中提取特征,特别适用于图像的边缘、纹理、颜色等特征的提取。
- 图像分类:CNN在图像分类任务中表现出色,被广泛用于对象识别和图像分类任务中。
- 目标检测:用于检测图像中的物体并定位它们。
- 图像生成:CNN还可以用于生成新的图像,例如通过生成对抗网络(GANs)。