李宏毅机器学习周报第五周

摘要

在做分类问题时,理想的情况是得到该类的所有的数据集,根据该数据集获得一个较好的阈值h。但是现实中找不到该分类所有的数据集,所以应尽可能找到与 D a l l D_{all} Dall尽可能相似的优质训练集,来得到较好的结果。CNN是一种深度学习模型,广泛应用于图像识别、目标检测等计算机视觉任务。CNN通过卷积、池化和全连接等层的组合,能够从输入数据中提取和学习特征,并用于分类任务。CNN可以自动学习具有层级结构的特征表示,并通过反向传播和优化算法进行训练。

Abstract

In a classification problem, the ideal situation is to have the entire dataset of the class and obtain a good threshold value h based on that dataset. However, in reality, it is often difficult to find the complete dataset for the class. Therefore, the goal is to find a high-quality training set that is as similar as possible to the entire dataset D_all of that class in order to achieve good results. CNN, short for Convolutional Neural Network, is a deep learning model widely used in computer vision tasks such as image recognition and object detection. CNN utilizes combinations of convolution, pooling, and fully connected layers to extract and learn features from input data, enabling it to be used for classification tasks. CNN has the ability to automatically learn hierarchical feature representations and undergo training through backpropagation and optimization algorithms.

一、神奇宝贝和数码宝贝分类器

1.1 Function with unknown parameters

数码宝贝和宝可梦的画风复杂度是不同的。通常数码宝贝的画风比宝可梦的要复杂。所以在对它们进行分类时,可以使用边缘检测技术。边缘检测是一种计算机视觉和图像处理技术,用于检测图像中的边缘或边界。边缘通常是图像中亮度、颜色或纹理发生突变的地方,表示物体之间或物体与背景之间的边界。边缘检测在图像分析、对象识别和图像处理中具有重要的应用。边缘检测的目标是在图像中标记出不同区域之间的边界线或轮廓。通过检测边缘,我们可以捕捉到图像中的关键特征和结构信息,有助于进一步的图像分析和理解。
在下图的例子中,使用边缘检测来计算出精灵轮廓的像素点数,接着找出一个函数来对目标进行分类。这是一个带阈值h的函数,h的值通常是自己定义的。当输出的值大于等于h,该目标为数码宝贝;小于h时,该目标为宝可梦。
在这里插入图片描述

1.2 Loss of a function

其定义的损失函数为 L ( H , D ) = 1 N ∑ n = 1 N l ( h , x n , y ^ n ) L(H,D)=\frac{1}{N} \sum_{n=1}^{N} l(h,x^{n},\hat{y}^{n}) L(H,D)=N1n=1Nl(h,xn,y^n),其中 l ( h , x n , y ^ n ) l(h,x^{n},\hat{y}^{n}) l(h,xn,y^n) I ( f h ( x n ) ≠ y ^ n ) \mathrm{I}(f_{h}(x^{n})\ne\hat{y}^{n}) I(fh(xn)=y^n),即当 f h ( x n ) ≠ y ^ n f_{h}(x^{n})\ne\hat{y}^{n} fh(xn)=y^n时输出为1,否则输出为0。这种损失函数可以直接计算出错误率。虽然这种损失函数无法通过微分进行优化,但是|H|的个数是有限的,可以通过穷举来找出最优点。
在这里插入图片描述

1.3 Training examples

在理想的状况下,如果能获得所有宝可梦和数码宝贝的数据集 D a l l D_{all} Dall,就可以通过穷举法得到最好的阈值 h a l l h^{all} hall。但是在现实中,数码宝贝和宝可梦还在继续更新,我们无法现在就得到拥有所有宝可梦和数码宝贝的数据集。现在的数据集 D t r a i n D_{train} Dtrain D a l l D_{all} Dall中的一部分,所以在现实情况下,只能得到在 D t r a i n D_{train} Dtrain上的最优阈值 h t r a i n h^{train} htrain。为了得到一个好的结果, L ( h t r a i n , D a l l ) L(h^{train},D_{all}) L(htrain,Dall) L ( h a l l , D a l l ) L(h^{all},D_{all}) L(hall,Dall)的值越接近越好。
在这里插入图片描述
如何找到一个优质的 D t r a i n D_{train} Dtrain?只需要使该数据集上的 h t r a i n h^{train} htrain满足 L ( h t r a i n , D a l l ) − L ( h a l l , D a l l ) ≤ δ L(h^{train},D_{all})-L(h^{all},D_{all})\le \delta L(htrain,Dall)L(hall,Dall)δ。而 D t r a i n D_{train} Dtrain需要满足对于 H H H上的所有h,有 L ( h , D t r a i n ) − L ( h , D a l l ) ≤ δ / 2 L(h,D_{train})-L(h,D_{all})\le\delta/2 L(h,Dtrain)L(h,Dall)δ/2。满足上式的话,可以看出 D t r a i n D_{train} Dtrain D a l l D_{all} Dall较为相似,所以会得到较好的结果。推导过程如下。
在这里插入图片描述
在这里插入图片描述
选到一个坏的数据集对后续的操作会有很大的影响。所以得想办法降低得到坏的数据集的概率。在H中至少存在一个h,满足 L ( h , D t r a i n ) − L ( h , D a l l ) > ε L(h,D_{train})-L(h,D_{all})>\varepsilon L(h,Dtrain)L(h,Dall)>ε,那么这个数据集是较差的。在下图中,蓝色的点表示一组较好的数据集,橙色的点表示一组较差的数据集。而三个框中的橙色点表示这些数据分别是在h1,h2,h3上得到较差的结果。在框交叉的部分,说明这些数据集上有多个h值使得该数据集较差。
在这里插入图片描述
霍夫丁不等式(Hoeffding’s inequality)是概率论中一种重要的不等式,用于估计独立随机变量的和的概率上界。这里使用霍夫丁不等式来计算坏数据集的概率如下图所示。可以看出,得到较坏的数据集的概率与训练集中资料的数目和 |H|有关。当训练集的数目越大以及|H|的值越小,得到较坏的数据集的概率越低。
在这里插入图片描述

二、卷积神经网络(CNN)

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,主要用于处理和分析具有网格结构的数据,特别是图像和视频数据。CNN的基本概念和作用如下:

  1. 卷积层(Convolutional Layer):CNN中的核心组件,用于从输入数据中提取特征。卷积层通过应用多个滤波器对输入数据进行卷积操作,以捕捉不同层次的特征。每个滤波器学习到了不同的特征,如边缘、纹理和形状等。

  2. 池化层(Pooling Layer):池化层用于减小特征图的尺寸并提取主要特征。它通过对特征图的局部区域进行聚合(如最大池化或平均池化),从而减少特征图的维度,并保留主要的特征信息。

  3. 全连接层(Fully Connected Layer):全连接层将前一层的特征映射转换为最终的输出。每个神经元与上一层的所有神经元相连,形成了一个完全连接的网络结构。全连接层的作用是将低级特征进行组合和整合,提取更高级别的抽象特征,并进行分类、回归或其他任务的决策。

  4. 激活函数(Activation Function):激活函数引入非线性变换,使得神经网络能够对非线性关系进行建模。常见的激活函数包括ReLU、Sigmoid和Tanh等,它们通过引入非线性性质,增强网络的表达能力和学习能力。

  5. 权重共享(Weight Sharing):CNN中的卷积层通过共享权重来减少参数数量。这种共享权重的方式使得网络具有一定的平移不变性,能够在不同位置上识别相同特征。

  6. 多层网络结构:CNN通常由多个卷积层、池化层和全连接层构成。这种多层结构允许网络在不同层次上提取特征,从边缘和纹理到更高级别的语义特征,使网络能够对复杂的输入数据进行深层次的学习和表示。

CNN在计算机视觉任务中取得了显著的成功,如图像分类、目标检测、人脸识别等。其基本概念和作用的核心是通过卷积、池化和全连接等层来实现特征提取、降维和决策。通过学习和优化网络参数,CNN能够自动从数据中学习到特征表示,并在各种视觉任务中取得优秀的性能。

对于计算机来说,一张图片是一个三维的张量(tensor)。其中一维代表图片的宽,另外一维代表图片的高,还有一维代表图片的Channel的数目。将这个张量拉直成一个向量,就可以将其作为函数的输入。
在这里插入图片描述

2.1 Observation 1

对一个图像识别的系统而言,一个图像识别的类神经网络的神经要做的就是侦测说现在这张图片中有没有出现一些特别重要的Pattern。例如在一张鸟的图片中,只要识别到鸟的嘴,鸟的眼睛或者鸟的爪子就可以将其识别出来。因此我们在图像识别上不需要使用Fully Connect network来解决问题。
在这里插入图片描述
可以同感受野(Receptive Field)来简化上述问题。它是神经元或卷积神经网络中的一个单元对输入数据的感知范围。在图像处理和计算机视觉领域中,感受野定义了一个单元对输入图像的局部区域的大小。在下图中,定义一个3 × \times × 3 × \times × 3的感受野,每一个 Neuron 都只关心各自的感受野里发生的事情。
在这里插入图片描述
感受野的各个属性可以根据具体情况自行定义,下面介绍一般情况下感受野的更新参数。

  • 卷积核尺寸(Kernel Size):卷积核的尺寸决定了感受野的大小。较小的卷积核可以捕捉到局部的细节特征,而较大的卷积核可以捕捉到更大范围的上下文信息。下图设置的卷积核尺寸为3 × \times × 3 × \times × channel数

  • 步幅(Stride):步幅指的是卷积操作时卷积核在输入特征图上滑动的步长。较大的步幅会导致输出特征图的尺寸减小,从而影响感受野的大小。下图中步幅设置为2。

  • 填充(Padding):填充是在输入特征图周围添加额外的像素或边界,以控制卷积操作后特征图的尺寸。常用的填充方式有零填充(Zero Padding),它可以保持特征图尺寸不变,从而保持感受野的大小。

这些设计参数可以通过调整来控制感受野的大小,从而影响卷积神经网络的性能和特征提取能力。较大的感受野可以捕捉到更全局的上下文信息,适用于涉及长程依赖的任务。而较小的感受野可以捕捉到局部的细节特征,适用于需要高精度的局部信息的任务。
在这里插入图片描述

2.2 Observation 2

同样的 Patter可能会出现在不同图片的不同区域中。如下图,在不同的鸟的图片中,鸟嘴这个特征的位置并不相同。如果在每一个感受野中都设置一个识别鸟嘴的神经元,那么会导致参数过大,可能出现过拟合的现象。因此可以采用权重共享(Weight Sharing)来解决这个问题。
在这里插入图片描述
使用权重共享,即两个神经元的weights完全是一样的,如下图所示。通过权重共享,每个神经元使用相同的权重参数进行卷积操作。这意味着在输入数据的不同位置上,相同的权重参数被应用于卷积操作。因此,不同位置的输入数据经过卷积操作后会产生相同的输出,即具有相同的特征表示。
在这里插入图片描述

2.3 Convolutional Layer

卷积层(Convolutional Layer)是卷积神经网络(CNN)中的关键组件之一。它是用于图像处理和特征提取的核心层。卷积层通过应用多个滤波器(也称为卷积核)对输入数据进行卷积操作。每个滤波器是一个小的二维矩阵或张量,用于从输入数据中提取特定的特征。通过在输入数据上滑动滤波器,进行局部特征的提取,生成输出特征图。
在卷积层中,每个滤波器都学习到了不同的特征。低层次的滤波器可以捕捉到边缘、线条等基本特征,而高层次的滤波器可以捕捉到更抽象的特征,如纹理、形状或物体的部分。通过使用多个滤波器,卷积层能够并行地提取多个特征,从而获得更丰富的图像表示。
初始时,滤波器中的参数通常是随机初始化的。然后,通过将输入数据与滤波器进行卷积操作,网络计算得到输出结果,并与真实标签进行比较来计算损失(误差)。接着,通过反向传播算法,网络根据损失的梯度逐渐调整滤波器中的参数,以使损失最小化。在训练过程中,通过反复迭代和优化,网络逐渐学习到适应任务的滤波器参数。这意味着滤波器中的参数会根据输入数据和损失信号进行调整,以更好地捕捉输入数据中的有用特征。
在这里插入图片描述
滤波器通过与输入数据进行卷积操作来捕捉数据中的特定模式和特征。滤波器是一个小的矩阵或张量,它的权重参数决定了它对输入数据的响应模式。在卷积操作中,滤波器通过在输入数据上进行滑动,并与对应位置的输入数据进行点积操作,得到一个输出值。这个输出值表示了输入数据在当前位置上与滤波器的匹配程度,即该位置上的特征强度。
通过在整个输入数据上滑动滤波器,就是一次卷积操作。做完一次卷积操作就可以生成一个特征图,其中每个位置对应一个特定的特征值。滤波器的设计和权重参数决定了它能够捕捉到的特征模式。在这里插入图片描述
做完一次卷积操作后,将结果可以看成另外一张图片。如下图所示,由于有64个滤波器,因此卷积后的结果是一个有64个通道(channel)的“图片”。这个图片叫做特征图(feature map)。对特征图可以继续做卷积操作。
在这里插入图片描述
使用多个卷积层可以帮助提高观察范围和感受野,使网络能够捕捉更广泛的模式和上下文信息。当网络有多个卷积层时,每个卷积层都可以学习和提取不同级别的特征。初始的卷积层可能会捕捉到较低级别的局部特征,而后续的卷积层则可以逐渐捕捉到更高级别和更抽象的特征。通过叠加多个卷积层,每个卷积层都使用不同大小的滤波器,网络可以逐渐扩大感受野。较早的卷积层使用较小的滤波器来捕捉局部特征,而后续的卷积层使用较大的滤波器来捕捉更大范围的上下文信息。这样,网络能够逐渐组合和处理输入数据中不同层次的特征,从而实现对更大范围模式的感知。
在这里插入图片描述

2.4 Observation 3

为了减小特征图的尺寸以获取更高级别的特征,可以采用“池化”来解决。如下图所示,把偶数的列和奇数的行都去掉,图片的大小变为原来的1/4,但是不会影响图片的观看,即把一张大的图片缩小。在这里插入图片描述
池化操作的主要作用包括:

  • 降低维度:池化操作通过减小特征图的尺寸,降低了数据的维度。这有助于减少模型的参数数量和计算负担,提高网络的计算效率。

  • 提取高级特征:池化操作能够通过汇聚输入区域的信息,提取更高级别的特征表示。这有助于网络学习到更具抽象性和鲁棒性的特征,对于识别和分类任务更有效。

  • 平移不变性:池化操作在一定程度上提供了对输入数据的平移不变性。即使输入数据在某个区域发生微小平移,

池化操作可以保持该区域的特征不变,从而提高网络对位置变化的鲁棒性。
下图中使用的是最大池化,每个区域内的最大特征值被选择作为输出值,以突出区域内最显著的特征。这有助于保留最强的特征并减少局部变化的影响。
在这里插入图片描述

CNN的整体过程如下:

  1. 输入层:将图像或其他网格结构的数据作为输入。图像通常表示为多维数组,每个元素表示像素值。

  2. 卷积层:在卷积层中,通过将输入数据与滤波器(也称为卷积核)进行卷积操作来提取特征。滤波器与输入数据的局部区域进行点积运算,生成特征图。每个滤波器负责检测输入数据中的某种特定模式或特征。

  3. 激活函数:将卷积层的输出通过激活函数进行非线性变换,引入非线性特性,增加网络的表达能力。常用的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid和Tanh等。

  4. 池化层:池化层用于降低特征图的尺寸,减少计算量。常见的池化操作有最大池化和平均池化,通过对输入区域的汇聚或统计来提取主要特征。

  5. 全连接层:将池化层的输出展平为一维向量,并通过全连接层连接到输出层。全连接层中的神经元与前一层中的所有神经元相连接,用于学习和组合更高级别的特征表示。

  6. 输出层:输出层根据具体的任务进行设计。对于分类问题,通常使用Softmax函数将输出转化为类别的概率分布。

  7. 损失函数:根据任务的性质选择适当的损失函数,用于度量预测值与真实值之间的差异。

  8. 反向传播与优化:通过反向传播算法,根据损失函数的梯度逐层更新网络的参数,以最小化损失函数。常用的优化算法包括随机梯度下降(SGD)和其变种(如Adam、RMSProp等)。

  9. 训练与测试:使用训练数据进行网络的训练,不断调整参数,使网络能够学习到数据的特征和模式。训练完成后,使用测试数据评估网络的性能和泛化能力。

在这里插入图片描述

总结

本周学习了在无法找到一个分类所有的数据集的情况下,要满足什么条件,才能找到与之相似的另外一个训练集,在分类的问题上能得到较好的结果。并且学习了卷积神经网络的基本概念,对图像处理上有很大的帮助。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值