APP下载

融合Deep Qlearning强化的动态分类算法研究

2021-10-25张园园周静轩刘治坤

湖北第二师范学院学报 2021年8期
关键词:小龙虾准确率卷积

张园园,杨 露,邹 耀,周静轩,刘治坤,邹 静

(1.国网湖北省电力有限公司技术培训中心,武汉 430027;2.湖北工业大学 电气与电子工程学院,武汉 430068)

处理生产线上分类问题时,由于产品贵重、不宜长时间存放以及缺陷样本比例低等原因,厂家只能提供少量缺陷样本,导致训练的模型分类准确率不高。此外训练的模型无法适应生产过程中因为参数变化、批次品质变化等产生的样本特征变化,造成模型识别的稳定性不足。针对该问题,本文提出在生产过程中不停采集并补充新样本,并通过动态训练更新模型。实验证明该方法不仅能够为厂家节省采集成本和时间,而且通过采集和训练的迭代过程有效解决分类准确率低和稳定性问题。

通过生成对抗网络(GAN)[1]生成缺陷样本可以解决样本不足问题,该网络由Ian Goodfellow提出,是当前深度学习中研究的热点,例如天文图像、[2]手写数字图像、[3]裂缝图像[4]等的生成。GAN的起源来自二人零和博弈,包含一个生成模型和一个判别模型,基本构架由图1可见。生成模型的任务是希望生成的样本能够欺骗判别模型,而判别模型的任务则是希望识别出假的样本,两者通过相互促进在不断地对抗中来更新网络模型并生成可以以假乱真的数据样本。过程如下:首先生成模型G接收到随机噪声Z,生成假的样本;然后将生成的样本和原始真实的样本作为判别模型D的输入判断真假;将结果返回给G和D让两个模型更新参数,G生成新一批的样本来欺骗D,而D更新参数来更准确的区分真假;两个网络模型相互促进更新,直到最后D生成的样本与真实样本有相同分布,G也无法再区分生成样本与真实样本的真假。

图1 GAN基本构架

1 改进GAN方法

实验表明将传统GAN方法应用于小龙虾样本生成,生成的样本只有26.7%可以使用,其余73.3%的样本都是不规则的,不能用于后续的图像分类,这种现象称为模式崩溃。为解决该问题,本文在LeNet[5]基础上结合AlexNet、[6]GoogleNet[7]和ResNet[8]模型改进GAN的判别模型,提高GAN模型特征提取能力。

GAN模型的生成模型和判别模型是相互促进,相互竞争的关系,当判别模型能够准确地识别真实数据样本时,生成模型才能不断地更新生成更加真实的样本,从而提高生成样本的可使用率,解决GAN模型崩溃的问题。因此本文提出采用有监督方式预训练判别模型,然后再以GAN模型的训练方式交替训练生成模型和更新判别模型,该方法减少了GAN模型的训练时间,提高了生成模型生成样本质量。

1.1 判别模型改进

为解决GAN模型存在的模型崩溃和难以训练的问题,根据已有的数据样本,结合多种模型优点设计了改进LeNet模型做为GAN模型的判别模型。该模型包括9层卷积层,3层池化层和1层全连接层。基于改进LeNet的判别模型结构图由图2可见,主要改进如下:

图2 判别模型

使用LeakyReLU激活函数替换Sigmoid。在CNN中常用的激活函数有Sigmoid,[9]ReLU,[10]LeakyReLU[11]等,Sigmoid可以将输出映射到0和1之间,适应于二分类问题,但是反向传播过程中容易出现梯度消失问题;ReLU是最常用的激活函数,属于非饱和函数。反向传播过程中当输入为正数时导数始终为1,可以用来解决梯度消失的问题并且运算速度快,但是当输入为负数时,导数始终为0,容易造成神经元死亡并不再参与训练的问题;LeakyReLU函数是ReLU函数的拓展,保留了ReLU函数的优点并且在负区间其导数不为0,能够解决神经元死亡的问题,但是训练时间相对增加。考虑到改进LeNet不仅需要在已有图像上有好的分类效果而且还要用来识别生成的样本,训练过程中应该尽量保留神经元,所以选择LeakyReLU作为改进LeNet的激活函数。

使用两个3*3卷积替换5*5卷积。堆叠含有小尺寸卷积核的卷积层来代替具有大尺寸的卷积核的卷积层,能够使得感受野大小不变,而且多个3x3的卷积核比一个大尺寸卷积核有更多的非线性。在一定程度上提升了卷积升级网络的提取特征能力。同时,使用两个3*3卷积核所用的参数更少,减少了过拟合。

在每个卷积操作后加入Batchnorm[12]层。CNN的任务主要是学习训练样本的分布,而在每一次训练过程中包含的样本分布都不一样,模型的训练比较困难。Batchnorm层将几乎所有数据映射到激活函数的非饱和区(线性区),仅利用到了线性变化能力,从而降低了神经网络的表达能力,提升了训练的稳定性。

通过1*1卷积叠加[13]增加模型深度和改变维度。从而减少过拟合和提高识别准确率。

为了减少在卷积层之间传递信息时存在梯度消失和难以训练的问题,加入图3所示残差结构。该结构以跳层连接的形式实现,即将单元的输入直接与单元输出加在一起,然后再激活。因此残差网络通过微分特性保护了信息的完整性,只需要学习输入,输出差别的部分,简化了学习目标和难度。

图3 残差结构图

1.2 生成模型改进

为了提高生成图片的质量,设计了反卷积网络做为GAN模型的生成模型,模型结构图由图4可见,主要改进如下:

图4 生成模型

(1)除了输出层保留GAN模型的tanh[14]激活函数,其他层使用ReLU,使用有界限的激活函数可以允许模型更快地学习达到饱和;

(2)输入层外每层都添加Batchnorm,将特征层的输出归一化到一起,增加模型的稳定性;

(3)加入反卷积模块,图像分类问题是输入图片,经过卷积层提取特征,最终得到图片类别的概率。而生成图片则是将该过程反过来,输入随机噪声,经过反卷积层构建图像信息,最终生成图片。

1.3 GAN模型训练方法

为加快改进GAN训练过程以及生成高质量图片,提出对判别模型采用有监督训练方法预训练,然后再以GAN对抗方式训练生成模型和更新判别模型,主要步骤如下:

以已有图像数据为样本数据,按照有监督方法训练判别模型,使用梯度下降算法更新模型参数,直到模型收敛并且有良好的分类准确率,让判别模型对已有图像的特征有足够的敏感度。

训练生成模型。从噪声分布中随机选取一批次的样本,然后使用梯度下降算法更新生成模型的参数,训练50步之后保存当前生成的图片。

随机从真实样本中抽取一批次图片与生成的图片共同作为训练好的判别模型的输入,采用梯度下降算法更新判别模型的参数。

重复步骤2和3训练20000步完成训练。

2 动态分类算法

随着产品批次变化,最开始为产品分类训练的模型逐渐难以适应,需要通过重新训练模型解决。本文基于改进GAN和Deep Q-Learning(DQN)强化设计一种自动模型调整方法,可有效解决模型动态适应性问题。

强化学习是处理动态问题的重要算法,基本原理如图5所示。智能体通过动作与周围环境进行交互,环境会返回一个评分和产生新的状态。如此循环下去,智能体与环境不断地交互从而产生很多数据。强化学习算法利用产生的数据修改自身的动作策略并再与环境交互。经过多次迭代学习后,智能体能最终学到完成相应任务的最优动作。DQN强化学习算法处理任务时,通过神经网络得到Q函数,然后通过训练不断更新Q函数来得到最优状态。

图5 强化学习原理图

2.1 动态算法框架

动态算法任务的设计是动态算法的重要基础,任务设计的准确性直接影响后续算法的设计。由前面强化学习算法原理可知,任务的设计主要是循环系统的设计,即包括智能体、环境、状态空间、动作空间以及评分机制的循环体设计。本文根据实际情况将上述元素设计为:

智能体:改进LeNet算法。

环境:通过GAN算法可以产生新标签样本,同时质检员每天进行现场抽检和对GAN新样本评判可以得到有标签新样本。通过对比智能体的判别和新产生的有标签样本,可以得到环境的奖励。

状态空间:由每一张图片构成的样本空间。

动作空间:0和1,即小龙虾的两个类别,0代表需要自动剔除的坏质量龙虾,1代表需要保留的好质量龙虾。

评分机制:分类正确得分+1分,分类错误得分-1分。

动态算法框架如图6所示。通过智能体改进LeNet和产生样本图片的环境不断交互,不断的学习并自动更新改进LeNet的网络参数,直到最后得到最优策略和最优状态-动作值函数,此时可以获得更优的分类网络。

图6 动态算法框架

2.2 动态算法样本规划

通过不断增加样本数量来模拟生产线上动态过程,由图7可见。以9000张图像为例,将它们分为三个相等的部分,为动态过程的仿真做准备。随机选择其中一个3000张作为第一个实验的数据集,然后将第一个数据集与第二个数据集合并形成6000张图像作为第二个实验的数据集。最后,将所有三部分数据集合并形成9000张图像作为第三次实验的数据集。没有将数据集直接分为3000、6000和9000,而是逐渐添加图像,可以更加准确地模拟数据的逐渐增加过程。选用3000个数据增量作为一档是因为假设选取增量数太小会造成实验差异太小,无法准确判定动态算法是否有效。

图7 动态模拟过程图

2.3 动态分类算法流程

通过结合改进LeNet和DQN来处理动态数据集,将图像分类问题视为一个可以自动调整模型参数以对图像进行分类学习的环境。在不断产生样本的环境中,改进LeNet任务是识别图像内容。一开始改进LeNet随机选择对图像进行分类的动作,环境给改进LeNet反馈一张图片作为更新参数后的输入和一个评分,分类正确得分增加1,分类错误得分减1。改进LeNet的目标是通过不断与环境互动来提高得分,最后当分数高于一定水平时,改进LeNet已经完成了识别图像任务。动态算法的具体步骤如图8所示。

图8 动态算法框架图

步骤1:读取图像样本作为输入数据集。

步骤2:初始化容器D,该容器可以存储模型参数和评分,可保存N条数据。

步骤3:随机初始化改进LeNet的权重获得函数。

步骤4:从数据集中随机选择一张图片作为此时的状态,随机选择动作1和0。动作1和0是好的小龙虾图片和坏的小龙虾图片对应的标签。在动作下,环境向改进LeNet返回了评分和一个状态即下一张图片。

步骤5:根据评分更新改进LeNet权重参数得到一个新的改进LeNet。

步骤6:将环境反馈的图像输入到新的改进LeNet。

步骤7:重复步骤4-6,直到完成一次迭代为止。通过遍历数据集的所有图像,保存得分和改进LeNet权重参数并传递给D。

步骤8:经过50次迭代,D包含50套相应的权重和评分,选择的得分最高的改进LeNet作为当前最优模型。

步骤9:使用当前的最优模型继续与环境互动以产生新的分数和模型参数。

步骤10:每50次迭代记录得分,直到训练完成。

3 实验与分析

通过厂家测试现场采集的龙虾数据集图片样本包含4300张图,但是为了能够更加准确地剔除有问题的小龙虾,4300张图片训练模型是不够的。因此本文选择改进GAN来生成一些小龙虾图片,不仅能够减少厂家的成本而且有利于实施后续的分类检测任务。

实验环境由表1可见,实验步骤如下:首先在已有小龙虾图片数据集上,对比LeNet模型改进前后准确率,验证改进LeNet作为改进GAN判别模型的可行性;然后通过对比GAN改进前后生成小龙虾图片样本的可使用率来验证改进GAN的有效性;最后通过图像分割实验将生成的小龙虾图片做处理得到可以直接用于后续分类的样本。

表1 实验环境表

3.1 GAN判别模型改进验证实验

选择4300张龙虾图片作为样本,样本分为两类,一类为bads(黑虾和受损的虾等),另一类为goods(好的龙虾),对应的标签分别为0和1。将改进LeNet和LeNet应用于已有小龙虾样本的分类,训练10000步结果图如图9所示。相比LeNet,改进LeNet训练集准确率提高14%,测试集准确率提高19%。GAN模型中包含一个判别模型和生成模型,两者之间是相互竞争、相互促进的关系,只有当判别模型能够准确判断图像的真假时才能促进生成模型生成更真实的图片。改进LeNet模型分类准确率可达到99%,对已有小龙虾图像的特征有一定的分辨能力,验证了使用改进LeNet模型作为判别模型的可行性。

(a) LeNet准确率图 (b)改进LeNet准确率图图9 准确率对比图

3.2 改进GAN验证实验

实验按类别生成对应的样本,而不是直接将所有的样本进行一次训练,将Goods类作为第一次实验样本用来生成对应好的龙虾图片,将Bads类作为第二次实验样本用来生成坏的龙虾样本。为后续再分类节省数据整合时间。

(a)GAN生成的图片 (b)改进GAN生成的图片图10 Goods样本结果对比图

将GAN和改进GAN分别生成类别为Goods的小龙虾图像50张图片,每张包括64张小龙虾样本,生成的Good部分样本结果对比由图10可见。其中黑色框标记了可用的小龙虾图片,GAN生成的小龙虾样本,可使用率为12.5%;改进GAN生成的样本可使用率为46.8%。

(a)GAN生成的图片 (b) 改进GAN生成的图片图11 Bad样本结果对比图

将GAN和改进GAN分别用于生成坏的小龙虾样本,同样生成50张图片,每张包括64个小龙虾样本。生成的Bads部分样本结果由图11可见,GAN生成坏的小龙虾样本可使用率不足25%;而改进GAN生成的样本可使用率为57.8%,单张图片的可使用率提高了32.8%。

3.3 分割实验

后续图像分类任务中需要小龙虾图像单独成为一张图片,因此需要将整体图片分割,具体步骤如下。

步骤1:读取文件夹图片,并灰度化。

步骤2:根据全局阈值分割算法将小龙虾与背景分开,并得到含有小龙虾和脏污的区域。

步骤3:将区域做连通操作。

步骤4:根据面积大小选出只含有小龙虾的区域。

步骤5:将区域从左往右,从上往下进行排序,并记录区域的个数number。

步骤6:设置索引i来表示小龙虾的序号,i从1开始一直到number。当i=1时执行以下操作:根据序号选择小龙虾区域;找到该区域的中心点坐标;根据中心点坐标生成一个矩形框;从原图中剪切出矩形框,即剪切出单张小龙虾。直到i=number,得到number个单张小龙虾。

步骤7:将单张小龙虾保存到文件夹中完成一张图片的分割处理。

步骤8:遍历文件夹图片获得所有单张图片。

经过筛选后GAN模型生成的总体可使用的图片为1711张,总体可使用率为26.7%;改进GAN模型生成的总体可使用的图片为3125张,总体可使用率为48.8%,相比GAN模型提升了22.1%。

3.4 模型适应性实验

将改进LeNet应用于动态小龙虾数据集分类问题中,三组实验的结果如图12所示,其中的横坐标表示迭代步数、纵坐标表示分类准确率,实线表示训练集准确率,虚线表示测试集准确率。比较三组实验,当数据集中包含6000张图时训练集和测试集的准确率最高,可以达到99%左右;但是当数据集为3000时,由于样本过少不能获取更多的特征而导致测试集准确率低于90%;当数据集为9000时,训练集和测试集准确率均小于90%,无法准确分类。

图12 改进LeNet三次实验的结果图

由实验结果可以看出单独使用卷积神经网络处理动态数据集分类问题时,数据集中包含的图像样本特征变化导致模型适应性差。如果使用CNN来解决动态问题即增加分类准确性,则需要手动调整CNN的参数和结构,修改后的模型也许能够同时适应本文的3组实验,但是不能保证能适应后续的小龙虾特征,且需消耗大量时间。所以需要设计自动调整参数的动态算法来适应变化的数据集,节省调试时间,提高准确率,保证生产效率。

为让模型适应产品的批次品质变化,进行了模型的参数动态调整实验。将上述改进GAN实验中最终整合得到的9000张小龙虾图像样本分成3份,每份3000张,逐渐增加样本,第一个数据集3000张,第二个6000张,第三个9000张,并根据不同的数据集设计了相应的训练迭代次数。具体的训练集和测试集图像数量分布,相应的迭代次数如表2所示。

表2 数据集分布和迭代次数

实验编程环境采用Keras框架,该框架比Tensorflow编程框架包含的库少,但是编写强化学习算法程序简单,而且强化学习算法的程序训练过程缓慢,使用Keras编写动态分类算法更简单,更节省时间。

3.5 融合Qleaning强化的参数动态调整实验

动态算法的三组实验结果如图所示,其中横坐标表示迭代步数,纵坐标代表得分,红色曲线表示训练集得分,虚线表示测试集得分。为了将改进LeNet与动态算法进行比较,首先需要将得分转换为准确率,转换方法如公式(1)所示,准确率等于最终分数除以数据集包含的图像样本数量。

图13 动态算法三次实验的结果图

结合表2中训练集和测试集的分布,以及图9中得分,通过公式(1)计算出动态分类算法的准确率如表3所示。

表3 动态算法准确率结果

准确率=最终分数/数据集数量

(1)

由表3可知动态分类算法的三组实验训练集和测试集准确率均高于为99%,与单独使用卷积神经网络相比,动态分类算法在数据集为3000时,测试集准确率高出10%左右,当数据集为9000时,实验中的训练集和测试集准确率提高了约10%,验证了动态分类算法在处理动态数据集分类问题时的优势。 在三组动态算法实验中,训练集准确率之间的差异不超过0.2%,测试集准确率之间的差异不超过0.3%,验证了动态算法处理在动态的数据集时的稳定性。

从实验结果可以看出,动态分类算法通过调整参数自适应数据集变化,能适应生产线上不断变化的产品品质变化,最终获得最优模型和最高分数。相比单独使用卷积神经网络分类动态数据集,准确率更高、更稳定。

4 结语

本文在融合LeNet及多种算法基础上,提出了一种GAN改进与分类动态训练算法,实验证明,通过GAN算法改进能有效增加样本数量。提出的分类动态训练算法能有效减少生产线产品批次间品质变化造成的分类准确率不稳定问题。

猜你喜欢

小龙虾准确率卷积
小龙虾不火了?亩赚10000元!快来看看他们是怎么做到的
基于3D-Winograd的快速卷积算法设计及FPGA实现
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
小龙虾
卷积神经网络的分析与设计
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法