1.2.1 监督学习
监督学习的目标是从已有的标记数据中学习一个函数,用于对新的未标记数据进行预测或分类。在监督学习中,模型通过学习输入数据和对应的输出结果之间的关系,期望输出与预期输出相同的结果。通过反复训练,模型可以自动地调整自己的权重和偏差,以最小化预测结果与真实结果之间的误差。
根据标记数据类型的不同,可以将监督学习分为分类问题和回归问题两种。
分类问题是指将输入数据分为预先定义好的类别,模型直接预测这个离散的类别,也就是说,模型会将输入变量与离散的类别对应起来。例如,给定一组乳腺癌肿瘤的医学数据,通过肿瘤的大小来预测该肿瘤是恶性肿瘤还是良性肿瘤,这就是一个分类问题,可以输出两个离散的值0、1来分别代表良性肿瘤和恶性肿瘤。
分类问题的输出类型也可以多于两个,例如,在该例子中肿瘤可能分为良性、第一类肿瘤、第二类肿瘤、第三类肿瘤4个类型,此时则可以用0、1、2、3四个离散值作为输出代表肿瘤类型。
图1.1对这个分类问题进行了描绘,图中X轴表示肿瘤的大小,Y轴表示是否是恶性肿瘤。当给定肿瘤大小时,需要判断出肿瘤是恶性肿瘤还是良性肿瘤。
图1.1 肿瘤的分类问题
上述示例中只使用了肿瘤大小这一个特征,但是更多时候人们会使用两个或者多个特征,如图1.2所示。此时X轴表示肿瘤的大小,Y轴表示患者年龄,用O表示良性肿瘤,X表示恶性肿瘤,我们可以从图1.2清楚地看出肿瘤的类型与患者肿瘤的大小以及年龄的关系。
图1.2 多个特征的肿瘤分类问题
除了这两个特征外,还可以有其他特征,如肿瘤厚度、细胞大小的均匀性以及细胞形状的均匀性等。
回归问题是指预测一个连续的输出变量,即模型会将输入变量和输出用一个连续函数对应起来。例如,图1.3通过房地产市场的数据,预测一个给定面积的房屋的价格就是一个回归问题。此时的房屋价格可以看作是面积的函数,是一个连续的输出值。
图1.3 房屋价格预测的回归模型
监督学习的主要发展进程如下。
首先是20世纪50年代,Rosenblatt发明了第一个感知机模型,这是一个二元分类器,它使用一种称为Hebbian Learning规则的简单学习算法,可以对线性可分的数据进行分类。
20世纪80年代,决策树算法开始流行起来,主要有ID3、C4.5、CART等算法。其中,ID3算法是第一个被广泛采用的决策树算法之一,它利用熵和信息增益作为分裂准则,可以对非线性数据进行分类。
20世纪90年代,支持向量机(SVM)由Vapnik等人提出。SVM是一种非常优秀的二类分类方法,支持向量机通过构造最优的超平面来实现分类任务,可以对高维和非线性数据进行分类和预测。
20世纪90年代后期,集成学习算法被引入。集成学习是一种将多个分类器组合起来进行分类的算法,可以提高分类准确率和鲁棒性。
进入21世纪后,深度学习开始快速发展,神经网络算法逐渐成为监督学习的主流算法之一。神经网络算法是一种模拟人脑神经系统的计算模型,它可以通过多层神经元的组合来实现复杂的非线性映射关系,相比于之前基于统计的方法更加适用于非线性的现实场景。
1.决策树
决策树是20世纪监督学习中基于统计的代表性算法。决策树是一种树结构,可以用于分类和回归任务。在决策树中,每个节点代表一个特征,每个分支代表一个可能的值。
通过不断地分裂数据集,决策树可以将数据集分为不同的类别。图1.4是一棵基于西瓜分类的决策树,可以分别根据西瓜的纹理、根蒂、色泽以及触感来对西瓜的好坏进行分类。
决策树算法可以分为以下4个步骤。
(1)特征选择:从数据集中选择最优的特征来构建决策树。通常使用信息增益、信息增益比、基尼指数等方法来选择特征。
(2)决策树的生成:根据特征选择方法,递归地生成决策树。从根节点开始,根据选择的特征将数据集分成多个子集,每个子集对应一个分支。不断重复该过程,直到数据集中的所有数据都被正确分类或者无法再分为止。
(3)剪枝:生成的决策树可能存在过拟合的问题,需要进行剪枝处理。剪枝分为预剪枝和后剪枝两种方式。预剪枝是在决策树生成的过程中进行剪枝,即在决策树生成时,如果节点的划分不能带来决策树泛化性能的提升,则停止划分。后剪枝是在决策树生成完成之后,从底部开始,递归地对非叶子节点进行剪枝,即用叶子节点代替其子树,并检验剪枝后的决策树性能是否有所提升。
图1.4 利用决策树模型对西瓜的好坏进行分类
(4)分类:使用生成好的决策树对新数据进行分类。
2.神经网络
神经网络的原理是基于神经元(Neuron)的计算模型。神经元是一种处理和传递信息的基本单元,它由细胞体、树突、轴突和突触等组成。神经元接收来自其他神经元的输入信号,并通过轴突将信号传递给其他神经元。神经元的输出信号是由输入信号加权和经过激活函数处理得到的,通常是一个非线性函数。
神经网络是由大量神经元组成的计算模型,它的基本结构是由输入层、隐藏层和输出层构成的多层神经元网络。神经网络的输入层接收外部输入,隐藏层和输出层则通过神经元之间的连接进行信息传递。神经网络的学习过程是通过调整神经元之间的连接权重和偏置来实现的,通常采用梯度下降等优化算法来最小化误差函数。实际应用中,网络输入层的每个神经元代表了一个特征,输出层个数代表了分类标签的个数,而隐藏层层数以及隐藏层神经元是由人工设定。一个基本的两层神经网络如图1.5所示。
图1.5 两层神经网络
神经网络的发展经历了多个阶段,从最初的单层感知机到现在的深度神经网络。其中,最重要的发展是反向传播算法的提出,它是一种基于梯度下降的优化算法,可以有效地训练多层神经网络。同时,随着计算机硬件的发展,神经网络的规模和复杂度也得到了大幅提升。
3.LeNet
随着神经网络的发展,LeNet由Yann LeCun于1998年提出,这是一种经典的卷积神经网络(Convolutional Neural Network, CNN),该网络首次采用了卷积层、池化层这两个全新的神经网络组件,是第一个成功应用于手写数字识别的卷积神经网络,并且取得了瞩目的准确率。卷积层的权重共享特点使得它相较于全连接层,节省了相当多的计算量与内存空间,同时卷积层的局部连接特点可以保证图像的空间相关性。LeNet的结构包括7层:2个卷积层、2个池化层和3个全连接层。
4.AlexNet
AlexNet由Alex Krizhevsky于2012年提出,是在2012年ImageNet大规模视觉识别挑战赛(ILSVRC)中首次获得冠军的神经网络模型,其top5预测的错误率为16.4%,远超第一名。AlexNet采用8层的神经网络,5个卷积层和3个全连接层(3个卷积层后面加了最大池化层),包含6亿3000万个连接,6000万个参数和65万个神经元。其网络结构如图1.6所示。
图1.6 AlexNet的网络结构
AlexNet第一次将深度卷积神经网络应用于图像识别任务中,它的深度结构让其可以学习到更复杂的特征,从而提高准确性。除此以外,它还有如下创新点。
(1)AlexNet使用了ReLU激活函数,相比于传统的Sigmoid激活函数,ReLU可以加速训练过程并提高准确性。
(2)AlexNet使用了Dropout技术来防止过拟合。Dropout随机地将一些神经元的输出置为0,从而可以减少神经元之间的依赖性,提高模型的泛化能力。
(3)AlexNet使用了数据增强技术,通过对训练数据进行随机旋转、裁剪、翻转等操作来扩充训练集,从而提高了模型的泛化能力。
AlexNet的贡献是推动了深度学习的发展,使得深度神经网络在计算机视觉领域获得了很大成功。AlexNet的深度结构和卷积神经网络的应用,极大提高了图像识别任务的准确性,同时也促进了深度学习在其他领域的应用,为后续更加复杂的VGG、ResNet等网络的出现铺平了道路。