欢迎光临散文网 会员登陆 & 注册

深度学习之宝可梦和数码宝贝分类案例

2023-09-16 17:12 作者:白泽火凤  | 我要投稿

通过宝可梦和数码宝贝分类案例对深度学习的模型复杂度和样本量进行分析讨论,研究二者对深度学习精度的影响。

1.任务描述

输入一个图像,输出对图像的分类结果,让深度学习模型判断这张图像里的动物是宝可梦还是数码宝贝,这是一个典型的二分类任务。

2.定义分类模型函数

由文章“众里寻他千百度”-深度学习的本质可知,训练一个深度学习模型的步骤包括三个。第一步是定义一个含有未知参数的函数。在多数情况下,如果对拿到的任务没有任何想法,首先需要对问题进行分析,找到任务输入的关键特征,基于此建立模型,定义一个适合该任务的模型函数。

通过对宝可梦和数码宝贝样本的随机抽样,如下方图所示。上方是从样本库中随机抽取5张数码宝贝图像的结果,下方是从样本库中随机抽取5张宝可梦图像的结果。经过对抽样图像的特征进行分析,发现宝可梦的线条轮廓比较简单,而数码宝贝的线条轮廓比较复杂。


一个可行的方案是,通过边缘检测(Edge detection)技术将图像中的数码宝贝和宝可梦的轮廓、线条提取出来,计算这些轮廓、线条的像素数量,作为一个区分数码宝贝和宝可梦的主要特征。如上图所示,上方是宝可梦,提取轮廓、线条后有3558个像素点;下方是数码宝贝,提取轮廓、线条后有7389个像素点。

经过上述分析,可以定义含有未知参数的函数如下,输入一张图片,通过边缘检测技术提取线条的复杂程度。当线条的复杂程度大于某阈值h时,分类模型将图像判定为数码宝贝;当线条的复杂程度小于某阈值h时,分类模型将图像判定为宝可梦。式中的阈值h即为未知参数。可认为未知参数小h的取值范围在大H集合中,本例中,大H的取值范围为整数,可设为1至10000,将大H的数量称之为模型的复杂度,那么该模型的复杂度即为10000。

3. 定义损失函数

 定义损失函数的过程如图所示。给定数码宝贝和宝可梦的数据集D,D则为由特征x和标签y构成样本对的集合,x为图像,y为数码宝贝和宝可梦的标签。损失函数即为给定数据集D和阈值h的每个样本对损失的平均值。每个样本的损失结果可通过示性函数(Indicator function)来表示,即如果模型函数的预测与真实结果不一致,损失为1;如果模型函数的预测结果与真实结果一致,损失为0。当损失取示性函数时,损失函数的计算结果即为错误率(Error rate)。

4. 模型的训练

值得注意的是,此时定义的损失函数是错误率,它不是一个可微分的函数,因此无法使用梯度下降法在数据集上找到一个最优的参数h。但本例参数比较特殊,h是个有限集合,可以通过暴力枚举的方法找到最优的参数,完成模型的训练。

假定%7BD%7D_%7Ba%20l%20l%7D为宝可梦和数码宝贝所有的数据集,可以在给定%7BD%7D_%7Ba%20l%20l%7D的情况下通过最小化损失函数的形式得到最优的参数h%5E%7Ba%20l%20l%7D,见式(1)。

h%5E%7Ba%20l%20l%7D%3D%5Carg%20%5Cmin%20_%7Bh%7D%20L%5Cleft(h%2C%20%5Cmathcal%7BD%7D_%7Ba%20l%20l%7D%5Cright)%20(1)

事实上式(1)是最理想的情况,在现实的情况下无法获得%7BD%7D_%7Ba%20l%20l%7D,只能搜集得到来自%7BD%7D_%7Ba%20l%20l%7D的部分抽样结果%7BD%7D_%7Btrain%7D作为模型的训练集样本。将在%7BD%7D_%7Btrain%7D上计算得到的最优参数记为h%5E%7Btrain%7D,则有式(2)。

h%5E%7Btrain%7D%3D%5Carg%20%5Cmin%20_%7Bh%7D%20L%5Cleft(h%2C%20%5Cmathcal%7BD%7D_%7Btrain%7D%5Cright)%20(2)

一个好的训练结果是h%5E%7Btrain%7D%7BD%7D_%7Ba%20l%20l%7D上的损失与h%5E%7Ba%20l%20l%7D%7BD%7D_%7Ba%20l%20l%7D上非常接近。

4.1实验结果

假定,已经获取了所有宝可梦和数码宝贝的数据集,共计获得1736张图片,即%7BD%7D_%7Ba%20l%20l%7D的数量为1736。通过枚举的方法可以计算得到使得损失函数最低的h%5E%7Ba%20l%20l%7D为4824,此时模型的损失为0.28。

第一次随机从%7BD%7D_%7Ba%20l%20l%7D中抽取200个样本作为D_%7Btrain1%7D,计算得h%5E%7Btrain1%7D为4727,此时h%5E%7Btrain1%7DD_%7Btrain1%7D上的损失为0.27,h%5E%7Btrain1%7D%7BD%7D_%7Ba%20l%20l%7D上的损失也是0.28,此时,训练出的参数h%5E%7Btrain1%7D效果较好。

第二次随机从%7BD%7D_%7Ba%20l%20l%7D中抽取200个样本作为D_%7Btrain2%7D,计算得h%5E%7Btrain2%7D为3642,此时h%5E%7Btrain2%7DD_%7Btrain2%7D上的损失为0.20,h%5E%7Btrain2%7D%7BD%7D_%7Ba%20l%20l%7D上的损失也是0.37,此时,训练出的参数h%5E%7Btrain2%7D效果较差。

4.2数学表示与启示

对于上述模型任务,最好的结果是h%5E%7Btrain%7D%7BD%7D_%7Ba%20l%20l%7D上的损失与h%5E%7Ball%7D%7BD%7D_%7Ba%20l%20l%7D上山的差异足够的小,即满足式(3),%20%5Cdelta是一个很小的数。

L%5Cleft(h%5E%7B%5Ctext%20%7Btrain%20%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%20%7D%7D%5Cright)-L%5Cleft(h%5E%7B%5Ctext%20%7Ball%20%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%20%7D%7D%5Cright)%20%5Cleq%20%5Cdelta%20%20%20%EF%BC%883%EF%BC%89

公式(3)等价于,对于任意的h,h在D_%7Btrain%7D上的损失与h在%7BD%7D_%7Ba%20l%20l%7D的损失差距均小于%5Cdelta%20%2F%202。此时意味着,D_%7Btrain%7D数据集可以近似代表所有的数据集%7BD%7D_%7Ba%20l%20l%7D

%5Cforall%20h%20%5Cin%20%5Cmathcal%7BH%7D%2C%5Cleft%7CL%5Cleft(h%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%5Cright)-L%5Cleft(h%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%20%7D%7D%5Cright)%5Cright%7C%20%5Cleq%20%5Cdelta%20%2F%202%20%20%20%EF%BC%884%EF%BC%89

可以通过数学理论来推导(4)式成立,(3)式必然成立。由于h%5E%7Btrain%7D是任意h的其中一个,且h%5E%7Btrain%7DD_%7Btrain%7D上的损失是最小的,因此,h%5E%7Btrain%7DD_%7Btrain%7D上的损失小于h%5E%7Ball%7DD_%7Btrain%7D上的损失。再次代入公式(4),得h%5E%7Ball%7DD_%7Btrain%7D上的损失小于等于h%5E%7Ball%7DD_%7Ball%7D上的损失,由此式(4)可以写成式(5)的形式,式(3)得到证明。

L%5Cleft(h%5E%7B%5Ctext%20%7Btrain%20%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%20%7D%7D%5Cright)%20%5Cleq%20L%5Cleft(h%5E%7B%5Ctext%20%7Btrain%20%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%5Cright)%2B%5Cdelta%20%2F%202%5Cleq%20L%5Cleft(h%5E%7B%5Ctext%20%7Ball%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%5Cright)%2B%5Cdelta%20%2F%202%5Cleq%20L%5Cleft(h%5E%7B%5Ctext%20%7Ball%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%7D%7D%5Cright)%2B%5Cdelta%20%2F%202%2B%5Cdelta%20%2F%202%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%EF%BC%885%EF%BC%89

综上,训练深度学习模型的关键在于取得一个具有代表性的数据集,让理想损失和真实损失足够接近。

公式(3)表明如果D_%7Btrain%7D是一个坏数据集,至少存在一个h使得h在D_%7Btrain%7D和h在%7BD%7D_%7Ba%20l%20l%7D上的损失足够的大。利用这一点可以计算得出随机抽样出D_%7Btrain%7D是一个坏数据集的概率。下图中,每个点代表随机抽取的训练样本,橙色的点表示训练样本为坏数据集,蓝色的点表示随机抽样出的D_%7Btrain%7D是一个具有代表性的数据集。在橙色矩形框中的点,均可找到参数h1,使得h1在D_%7Btrain%7D上的损失和h1在D_%7Ball%7D上的损失差距足够大。类似的粉色矩形框中的点可以找到参数h2,绿色矩形框中的点可以找到参数h3。

 

 由此可知D_%7Btrain%7D是一个坏的数据集的概率为所有参数h导致坏数据集概率的连积,该式的上界为所有h导致坏数据集的概率之和,见式(6)。

%5Cbegin%7Baligned%7D%0A%0AP%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20%7D%5Cright)%20%26%20%3D%5Cbigcup_%7Bh%20%5Cin%20%5Cmathcal%7BH%7D%7D%20P%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20due%20to%20%7D%20h%5Cright)%20%5C%5C%0A%0A%26%20%5Cleq%20%5Csum_%7Bh%20%5Cin%20%5Cmathcal%7BH%7D%7D%20P%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20due%20to%20%7D%20h%5Cright)%0A%0A%5Cend%7Baligned%7D%20%20%20(6)

L%5Cleft(h%5E%7B%5Ctext%20%7Btrain%20%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%20%7D%7D%5Cright)-L%5Cleft(h%5E%7B%5Ctext%20%7Ball%20%7D%7D%2C%20%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Ball%20%7D%7D%5Cright)%20%5Cgeq%20%5Cepsilon%20%20(7)

由于D_%7Btrain%7D是个坏数据集时,至少存在一个h满足公式(7),且此时D_%7Btrain%7D是来自D_%7Ball%7D的样本,计算的损失是错误率在0至1之间。因此式(7)满足霍特林不等式(Hoeffding’s Inequality),其中N为训练集样本的数量。

P%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20due%20to%20h%7D%5Cright)%20%5Cleq%202exp(-2N%5Cepsilon%5E%7B2%7D)%20%20%20%20%20%20%20(8)

由(8)式,易知式(6)转换为式(9)。由式(9)可知D_%7Btrain%7D是个坏数据集的概率上界取决于参数h的个数和训练集样本量个数N。如果期望抽样到坏数据集的概率变小,就要减少参数h的个数或者增加训练样本量的个数N。

%5Cbegin%7Baligned%7D%0A%0AP%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20%7D%5Cright)%20%26%20%3D%5Cbigcup_%7Bh%20%5Cin%20%5Cmathcal%7BH%7D%7D%20P%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20due%20to%20%7D%20h%5Cright)%20%5C%5C%0A%0A%26%20%5Cleq%20%5Csum_%7Bh%20%5Cin%20%5Cmathcal%7BH%7D%7D%20P%5Cleft(%5Cmathcal%7BD%7D_%7B%5Ctext%20%7Btrain%20%7D%7D%20%5Ctext%20%7B%20is%20bad%20due%20to%20%7D%20h%5Cright)%5Cleq%5Csum_%7Bh%20%5Cin%20%5Cmathcal%7BH%7D%7D2exp(-2N%5Cepsilon%5E%7B2%7D)%20%5Cleq%7C%5Cmathcal%7BH%7D%7C2exp(-2N%5Cepsilon%5E%7B2%7D)%0A%0A%5Cend%7Baligned%7D%20%EF%BC%889%EF%BC%89

如下图所示,实验结果表明,当增加训练集样本量的个数,减小参数的范围,能够明显增加蓝色的点,即增加选择好的训练集的概率。

 

 综合以上分析可知,当面临深度学习任务时,往往期望“理想”和“现实”的距离越接近越好,即保证δ越小越好。可以通过增大样本量或者降低模型的复杂度两种方式来减小δ的数量,然而,在现实的任务和落地场景中,往往要获取更多的样本需要付出昂贵的成本和代价,因此,相对成本较低的方式就是降低模型的复杂度。如果降低模型的复杂度,意味着理想的损失函数会变得更大,这就导致了一个“糟糕”的理想,即使现实的损失函数与理想的损失函数再接近,也是没有意义的。因此,深度学习工程师往往陷入两难的处境,在样本量与模型的复杂度上进行选择和折中。

 


深度学习之宝可梦和数码宝贝分类案例的评论 (共 条)

分享到微博请遵守国家法律