2.845

2023影响因子

(CJCR)

  • 中文核心
  • EI
  • 中国科技核心
  • Scopus
  • CSCD
  • 英国科学文摘

留言板

尊敬的读者、作者、审稿人, 关于本刊的投稿、审稿、编辑和出版的任何问题, 您可以本页添加留言。我们将尽快给您答复。谢谢您的支持!

姓名
邮箱
手机号码
标题
留言内容
验证码

基于双尺度约束模型的BN结构自适应学习算法

戴晶帼 任佳 董超 杜文才

饶川, 陈靓影, 徐如意, 刘乐元. 一种基于动态量化编码的深度神经网络压缩方法. 自动化学报, 2019, 45(10): 1960-1968. doi: 10.16383/j.aas.c180554
引用本文: 戴晶帼, 任佳, 董超, 杜文才. 基于双尺度约束模型的BN结构自适应学习算法. 自动化学报, 2021, 47(8): 1988-2001 doi: 10.16383/j.aas.c180226
RAO Chuan, CHEN Jing-Ying, XU Ru-Yi, LIU Le-Yuan. A Dynamic Quantization Coding Based Deep Neural Network Compression Method. ACTA AUTOMATICA SINICA, 2019, 45(10): 1960-1968. doi: 10.16383/j.aas.c180554
Citation: Dai Jing-Guo, Ren Jia, Dong Chao, Du Wen-Cai. BN structure adaptive learning algorithm based on dual-scale constraint model. Acta Automatica Sinica, 2021, 47(8): 1988-2001 doi: 10.16383/j.aas.c180226

基于双尺度约束模型的BN结构自适应学习算法

doi: 10.16383/j.aas.c180226
基金项目: 

国家国际科技合作专项 2015DFR10510

国家自然科学基金 61562018

国家海洋局南海维权技术与重点实验室开放基金 1704

海口市重点科技计划项目 2017041

详细信息
    作者简介:

    戴晶帼    海南大学信息科学技术学院博士研究生. 主要研究方向为贝叶斯网络, 智能优化.E-mail: djgolivia_edu@126.com

    董超    国家海洋局南海调查技术中心副研究员. 主要研究方向为智能控制.E-mail: dongchaoxj888@126.com

    杜文才    中国澳门城市大学数据科学研究院教授, 海南大学信息科学技术学院教授. 主要研究方向为数据挖掘, 物联网技术. E-mail: wencai@hainu.edu.cn

    通讯作者:

    任佳    海南大学信息科学技术学院教授. 主要研究方向为智能控制, 机器学习. 本文通信作者.E-mail: renjia@hainu.edu.cn

BN Structure Adaptive Learning Algorithm Based on Dual-scale Constraint Model

Funds: 

International Science and Technology Cooperation Projects of China 2015DFR10510

National Natural Science Foundation of China 61562018

Open Foundation of Key Laboratory of Technology and Application for Safeguarding of Marine Rights and Interests 1704

Key Science and Technology Projects of Haikou, Hainan Province 2017041

More Information
    Author Bio:

    DAI Jing-Guo    Ph. D. candidate at the College of Infomation and Technology, Hainan University. Her research interest covers Bayesian network and intelligent optimization

    DONG Chao    Associate professor at South China Sea Marine Engineering surveying Center of State Oceanic Administrtion. His main research interest is intelligent control

    DU Wen-Cai    Professor at the Institute of Data Science, City University of Macau, China and the College of Infomation and Technology, Hainan University. His research interest covers data mining and internet of things

    Corresponding author: REN Jia    Professor at the College of Infomation and Technology, Hainan University. His research interest covers intelligent control and machine learning. Corresponding author of this paper
  • 摘要: 在无先验信息的情况下, 贝叶斯网络(Bayesian network, BN)结构搜索空间的规模随节点数目增加呈指数级增长, 造成BN结构学习难度急剧增加. 针对该问题, 提出基于双尺度约束模型的BN结构自适应学习算法. 该算法利用最大互信息和条件独立性测试构建大尺度约束模型, 完成BN结构搜索空间的初始化. 在此基础上设计改进遗传算法, 在结构迭代优化过程中引入小尺度约束模型, 实现结构搜索空间小尺度动态缩放. 同时, 在改进遗传算法中构建变异概率自适应调节函数, 以降低结构学习过程陷入局部最优解的概率. 仿真结果表明, 提出的基于双尺度约束模型的BN结构自适应学习算法能够在无先验信息的情况下保证BN结构学习的精度和迭代寻优的收敛速度.
    Recommended by Associate Editor ZHU Jun
  • 近年来, 深度神经网络在解决机器学习任务时取得了巨大的成功. 2012年, Krizhevsky等[1]首次使用深度神经网络, AlexNet在ILSVRC (ImageNet large scale visual recognition competition)[2]分类任务上获得了冠军, 他们的结果相比传统的机器学习算法在识别精度上提升了近10个百分点, 引起学术界和工业界巨大轰动.从那时起, 各种不同结构的深度神经网络模型如雨后春笋般不断涌现. 2014年英国牛津大学的Visual Geometry Group提出了VGG[3]模型, 同时谷歌的研究人员提出了GoolgLeNet[4], 2015年He等提出了ResNet[5-6].这些模型的网络结构越来越深, 从而能学习到更好的特征以提升模型的性能.然而, 由于内存和计算能力有限, 随着网络变得越来越深, 对包括移动设备在内的有严格时延要求的有限资源平台而言, 随之增加的模型参数需要消耗更多的计算和存储资源, 难以直接应用于手机等移动嵌入式设备.

    虽然将深度神经网络部署到云服务器端, 移动端将数据上传服务端处理, 能很好解决上述问题, 但服务器需要耗费昂贵的硬件成本, 导致计算成本过高, 其次移动端在使用的过程对网络要求高, 需要将移动端本地的数据上传到云端服务器进行保存, 在处理一些隐私数据时, 还会存在信息的泄露.所以将深度学习算法部署到移动端本地非常有意义, 但常用的深度模型具有大量的储存量, 比如AlexNet的模型大小量超过200 MB, VGG的模型大小量超过500 MB, 如果将这些网络结构直接运用到手机APP中, 用户需要大量的流量下载APP文件, 还会占用用户手机的大量内存.同时, 巨大的模型文件会带来另外一个问题, 手机设备的能源消耗问题, 手机在调用这些文件时会存在大量的能源消耗, 会让手机设备产生大量的热量, 因此深度模型压缩是非常有必要的.

    为了解决这一问题, 各种深度模型压缩方法被提出, 这些方法主要有:模型剪枝、知识精炼(Knowledge distillation)、低秩分解、精细化的模型结构以及权重共享.本文主要关注基于权重共享的方法来压缩模型, 权重共享是通过卷积滤波器中相近的权重共享同一量化值从而达到对深度神经网络压缩的目的.权重共享的方法大致可以分为三类:聚类编码法、二值/三值量化编码和指数量化编码.

    聚类编码法, 指使用聚类的方法, 将权重聚类为若干类, 取每类的聚类中心作为共享的权重.例如, Gong等[7]通过对全连接层参数进行聚类, 取聚类中心作为量化编码, 可以将深度模型AlexNet压缩20倍, 而Top-5准确率仅仅下降1 %.类似的, Chen等[8]提出了HashedNets对全连接层进行量化, 利用哈希函数随机的将权重分到不同的哈希桶(Hash bucket), 同一哈希桶的权重具有相同的量化值. Han等[9]提出了一种深度压缩(Deep compression)方法, 通过对卷积层和全连接层的权重进行剪枝, 然后通过K-Means聚类进行量化, 最后使用霍夫曼编码(Huffman coding)对模型进行保存, 极大的压缩了模型的规模.但是, 聚类编码法需要大量额外的计算开销用于聚类分析, 算法的训练效率低.

    二值/三值量化编码, 将网络的权重、激活值量化为二值或者三值.例如, Courbariaux等[10]提出了一种二值连接(Binary connect)方法, 将权重进行二值量化(量化为${-1, 1}$), 可以将一个深度模型直接压缩32倍; 他们随后提出了Binarized neural networks[11], 将权重和激活值同时进行二值量化, 在压缩网络的同时还可以提高运算效率. Rastegari等[12]提出的二值权重网络(Binary weight networks)和XNOR-Net, 在把权重量化为+1和$-1$的基础上乘以一个尺度因子, 在大数据集ImageNet上取得了不错的压缩效果. Li等[13]提出的HORQ, 相对于XNOR只使用到一阶阈值, HORQ还用到二阶阈值, 让二阶阈值逼近一阶阈值的残差, HORQ在对准确率影响很小的情况下能将模型缩小32倍, 同时加速30倍左右. Li等[14]提出的TWN (Ternary weight networks), 在二值网络的基础中引入0作为量化权重值. Zhu等[15]提出的TTQ (Trained ternary quantization), 将网络的权重量化为+1和$-1$的基础上, 分别乘上两个不同的尺度因子. Cai等[16]提出HWGQ-Net通过改变网络的激活函数, 将权重量化1个比特网络的激活值量化为2个比特, 网络只有微小的性能损失.尽管这类方法将模型中的每一个权重、激活值压缩为一到两位来表示, 但是模型的识别精度也有一定幅度的下降.

    指数量化编码, 将权重量化为2的(为整数)次幂, 以便于嵌入式系统进行二进制移位操作.该方法由Zhou等[17]首次提出, 利用预训练模型获取固定的指数量化的码本, 然后通过增量量化过程来逐渐量化整个网络.在使用5-bit量化时, 压缩模型的识别率能够保持与原模型一致.这种方法在量化时, 可以高效率对深度神经网络量化, 但在网络重训练时, 他们提出的增量网络量化方法需要分多个阶段训练, 训练效率较低.

    鉴于以上几点, 本文提出一种基于动态量化的深度模型压缩方法, 不同与从预训练模型获取固定码本, 动态量化在训练的过程中也更新码本.这种量化方式在保证模型性能的同时, 还加快了效率.同时为了方便嵌入式系统进行移位操作, 本文对所有网络的权值采用指数量化编码, 并通过理论证明得出, 绝对值较大权值参数的量化对模型的精度影响越大.因此, 本研究通过动态编码使得码本能自适应网络中绝对值较大的权值参数.本文的主要贡献有以下三点:

    1) 提出动态更新码本自适应网络中绝对值较大的权值参数, 尽可能减小这些参数的量化对模型精度的影响;

    2) 提出交替迭代算法用于模型训练, 使得权值参数和码本交替更新, 加快训练过程的收敛速度;

    3) 大量的对比实验表明, 本文所提的基于动态编码的模型压缩方法总体上优于静态编码的方法.

    本文剩余部分的组织结构如下:第1节介绍现有的深度神经网络压缩方法; 第2节介绍本文提出的方法, 包括基于权重的动态编码过程以及压缩模型的训练过程; 第3节通过大量的对比实验验证本文方法的有效性; 第4节总结与展望.

    本节主要介绍不同的深度神经网络压缩方法.除了上一节重点介绍的权重共享的方法, 深度神经网络压缩的方法还包括:模型的剪枝、知识精炼(Knowledge distillation)、低秩分解以及精细化的模型结构.

    模型的剪枝, 通过评定预训练模型中参数的重要性, 剔除网络中不重要的网络连接, 主要有权重剪枝和滤波器剪枝两种方法.权重剪枝主要通过判断权重的大小来决定重要性, 一般设定一个阈值进行剔除, 或者根据设定剪切比例进行剔除, 优先将那些权重较小的值剔除例如Song等[18]采用此方法将AlexNet模型的参数量减少了9倍, VGG模型的参数量减少13倍, 而并没有造成模型精度的下降; Anwar等[19]按照一定的比例对每层中的权重随机裁剪, 统计多种随机剪裁下局部最优的作为最终剪裁.滤波器剪枝则是剔除网络中那些对网络影响较小的卷积滤波器, Li等[20]通过对卷积滤波器所有元素绝对值求和, 剔除那些求和较小的滤波器, 从而实现对模型的剪枝; Luo等[21]对卷积滤波器剪切前和剪切后激活值的损失进行评定, 剪切那些对损失影响不大的滤波器; Hu等[22]通过判定卷积录波器中权重为0的参数量来评定剪切标准; Luo等[23]提出了一种基于熵值的裁剪方式, 通过特征层的概率分布来评价卷积滤波器的重要性; Yang等[24]通过每层需要消耗的能量来进行裁剪, 优先修剪那些消耗大的层.相对而言, 滤波器剪枝会产生规则的稀疏矩阵, 而权重剪枝则会产生大量不规则的稀疏矩阵, 因此, 在加速方面滤波器剪枝更加有效.

    知识精炼, 利用大模型指导小模型, 从而让小模型学到大模型相似的函数映射. Hinton等[25]利用训练好的复杂模型指导小模型的训练, 小模型通过优化复杂模型的输出交叉熵和自身的交叉熵, 在模型性能和训练速度上均有所提高. Romero等[26]提出的FitNets通过添加网络模型中间层的特征作为监督信号, 有效解决由于网络层数过深造成的学习困难. Zagoruyko等[27]同样采用大模型的中间特征作对小模型进行监督学习, 让小模型同时学到低、中、高层三个层次的特征输出.

    低秩分解, 将原来的矩阵分解成若干个小矩阵, 对分解的小矩阵进行优化调整. Zhang等[28]将卷积矩阵变换为二维的矩阵, 结合SVD分解, 将VGG-16模型加速4倍而精度只有微小的下降. Lebedev等[29]使用CP分解的方法, 将每层网络分解成若干个低复杂度的网络层, 将AlexNet的第二个卷积层的速度提升了4倍却只增加1 %的分类误差.

    精细化的模型结构, 通过使用小的卷积单元或者改变卷积方式对模型进行压缩和加速. Iandola等[30]提出的SqueezeNet使用$1 \times 1$卷积核对上层特征进行卷积降维, 然后使用$1 \times 1$和$3 \times 3$卷积进行特征堆叠, 大大减小了卷积的参数数量. Howard等[31]提出的MobileNets对每个通道的特征单独卷积, 之后再使用$1 \times 1$卷积对不同通道特征进行拼接. Zhang等[32]提出的ShuffleNet则是对多通道特征先进行分组后再执行卷积, 避免信息流不通畅的问题.这些轻量化的模型设计, 极大了减小了模型的参数量和计算量.

    这些方法在对深度神经网络的压缩, 使得网络的性能在一定程度上有所下降, 有些压缩算法实现步骤繁琐, 甚至有些方法还对原始的网络结构进行了改变.而与这些方法相比, 权重共享的方法只对深度神经网络中的权重进行量化, 实现简单, 不会改变模型的网络结构, 本文对深度神经网络的压缩采用了权重共享的方式.

    本文提出的方法由两部分组成:权重量化与动态编码, 以及基于动态编码的量化模型训练, 本节将详述这两部分内容.

    为了方便嵌入式系统进行移位运算, 本文采用类似文献[15]中的方法, 采用2的$n$次幂的形式对神经网络中的权值进行量化, 即当权重量化为$b$比特时, 码本最多有$2^{b}$个取值.码本可以表示为:

    $ \begin{equation} P_{l}=\left \{ \pm 2^{n} \right \}, n\in [n_{1}, n_{2}], n\in {\bf Z} \end{equation} $

    (1)

    式中, $l$代表深度神经网络的第$l$层, $n_{1}$和$n_{2}$是两个整数, 满足$n_{1} < n_{2}$.由于$n_{1}$和$n_{2}$之间有$n_{2}-n_{1}+1$个整数, 且码本中正负整数的个数是相等的, 因此码本中总的取值有$2\times (n_{2}-n_{1}+1)=2^{b}$个, 即:

    $ \begin{equation} n_{2}-n_{1}+1=2^{b-1} \end{equation} $

    (2)

    亦可引入0作为量化值对权重进行编码, 具体形式为:

    $ \begin{equation} P_{l}=\left \{ \pm 2^{n}, 0 \right \}, n\in [n_{1}, n_{2}], n\in {\bf Z} \end{equation} $

    (3)

    由于0无法表示成2的$n\ (n$为整数)次幂, 需要额外的一个比特来表示0这个量化值.当$n_{1}$和$n_{2}$保持不变时, 式(3)需要$b+1$比特来量化权重.即:

    $ \begin{equation} n_{2}-n_{1}+1=2^{b} \end{equation} $

    (4)

    虽然将0作为量化值引入码本需要增加一个比特, 但是会让网络中产生大量的稀疏矩阵, 有利于网络的正则化, 能在一定程度上抑制过拟合.

    无论是否引入0进行编码, 当量化的位数确定时, 只要确定$n_{1}$或$n_{2}$中任意一个的值, 根据式(2)或式(4)求得另外一个参数, 从而根据式(1)或式(3)得到码本.假设给定预训练的模型, 并将此模型中的网络权值量化为2的$n$次幂.可采用以下式(5)使量化误差最小化:

    $ \begin{equation} \begin{split} &\underset{n}{\min}\ err =\underset{n}{\min}(|w^{+}-2^{n}|), w^{+}\in |W_{l}|\\ &{\rm s. t.}\quad{\ n\in [n_{1}, n_{2}], n\in Z} \end{split} \end{equation} $

    (5)

    式中, $err$为量化误差, $W_{l}$为预训练模型的第$l$层权重, $w^{+}$为$|W_{l}|$中的任一正值权重.假设$|W_{l}|$中的两个值$w_{1}^{+}$和$w_{2}^{+}$, $w_{1}^{+} < w_{2}^{+}$, 同时近似满足$2^{q}w_{1}^{+}\approx w_{2}^{+}$, $q$为正整数. $w_{1}^{+}$和$w_{2}^{+}$分别量化为$2^{m_{1}}$和$2^{m_{2}}$, $2^{m_{1}}$和$2^{m_{2}}$应满足$2^{q}2^{m_{1}}=2^{m_{2}}$, 则$w_{1}^{+}$和$w_{2}^{+}$的量化误差$err_{1}$和$err_{2}$满足以下关系:

    $ \begin{align} err_{1}= &|w_{1}^{+}-2^{m_{1}}|\rightarrow \Delta \approx 0\nonumber\\ err_{2}= &\left|w_{2}^{+}-2^{m_{2}}\right|=2^{q}\times \left|\frac{1}{2^{q}}w_{2}^{+}-2^{m_{1}}\right|\approx\nonumber\\ & 2^{q}\times |w_{1}^{+}-2^{m_{1}}|=2^{q}err_{1}\geq err_{1} \end{align} $

    (6)

    由于量化模型的权值调整大小是由反向传播的梯度和学习率的乘积来决定, 而这两个量都非常的小, 因此$2^{q}w_{1}^{+}\approx w_{2}^{+}$这一假设是容易满足的, 从而可以根据式(6)得出当模型进行指数量化时, 量化权值的绝对值越大, 量化误差也越大.

    基于这一结论, 我们在量化的过程中优先量化那些权重绝对值较大的值, 即根据$|W_{l}|$中的最大值确定上限$n_{2}$的取值.具体的计算过程如下:

    $ \begin{equation} n_{2}=~{\bf floor}({\rm log}_{2}(\max(|W_{l}|))) \end{equation} $

    (7)

    其中, floor$(\cdot)$表示的是向下取整操作, max$(\cdot)$表示的取最大值操作.确定了$n_{2}$, 就可以通过式(2)或式(4)得到下限$n_{1}$的取值, 从而确定码本$P_{l}$.

    对于式(1)定义的码本, 每个网络权值用码本中最近的量化值进行编码, 具体量化规则如图 1所示.

    图 1  网络权值的量化规则
    Fig. 1  Quantization rules for network weights

    可用如下的公式来计算:

    $ \begin{equation} \hat{w} = \begin{cases} 2^{n_{2}}\times I(w), &|w|\geq \dfrac{3}{2}\times 2^{n_{2}}\\ 2^{k}\times I(w), &\dfrac{3}{4}\times 2^{k}\leq |w| < \dfrac{3}{2} \times 2^{k}, \\ & k\in [n_{1}, n_{2}], k\in {\bf Z}\\ 2^{n_{1}}\times I(w), &|w|\leq \dfrac{3}{4}\times 2^{n_{1}} \end{cases} \end{equation} $

    (8)

    式中, $\hat{w}$为量化后的权重, $2^{k}$为权重$w$的绝对值$|w|$的量化值; $I(w)$为指示函数, 用于区分网络中的正负权值.当$w$大于0时, $I(w)$为1; $w$为小于或等于0时, $I(w)$为$-1.$

    对于式(3)定义的码本, 只需要根据码本下限进行截断取0值即可, 对应的量化公式如下:

    $ \begin{equation} \hat{w} = \begin{cases} 2^{n_{2}}\times I(w), &|w|\geq \dfrac{3}{2}\times 2^{n_{2}}\\ 2^{k}\times I(w), &\dfrac{3}{4}\times 2^{k}\leq |w| < \dfrac{3}{2}\times 2^{k}, \\ & k\in [n_{1}, n_{2}], k\in {\bf Z}\\ 0, &|w| < \dfrac{3}{4}\times 2^{n_{1}} \end{cases} \end{equation} $

    (9)

    本节主要介绍量化模型的训练过程.对于初始的深度神经网络模型, 首先基于式(7)根据网络中的最大权值确定码本, 然后根据码本对网络权值采用式(8)或式(9)进行量化, 量化的深度神经网络通过前向传播过程计算网络的损失.再根据网络损失通过反向传播过程, 对网络权值进行更新.网络权值的更新会破坏原有的量化, 因此有必要对码本进行更新, 然后使用新的码本对网络权值进行再一次的量化.整个训练过程码本和权重交替迭代更新, 直到网络损失收敛为止.在整个迭代过程中, 码本根据网络权值的变化进行动态的更新, 码本的更新和深度神经网络的训练交替进行, 训练流程如图 2所示.以下介绍量化模型训练的具体实现细节.

    图 2  动态量化编码压缩方法的训练流程
    Fig. 2  The process of dynamic quantization coding

    对于普通的深度神经网络, 其训练由两个基本过程构成, 即前向传播过程和反向传播过程.在前向传播过程中, 分层网络的前一层的输出作为后一层的输入, 直到传入网络的最后一层得到整个深度神经网络的输出.根据输出和标签之间的差异计算损失函数, 其中损失函数的定义如下:

    $ \begin{equation} \begin{split} &\underset{w_{l}}{\min}\ E(\hat{w_{l}})=L(\hat{w_{l}})+\lambda R(\hat{w_{l}})\\ &{\rm s. t.}\quad\ \hat{w_{l}}\in P_{l}, 1\leq l\leq L \end{split} \end{equation} $

    (10)

    式中, $E(\hat{w_{l}})$是网络的损失, $R(\hat{w_{l}})$是正则项, 本文采用$L_{2}$正则项, $\lambda$是正则项的权值系数.在反向传播过程中, 网络的残差由后一层逐层向前传递, 网络的权重根据残差计算的梯度进行更新:

    $ \begin{equation} w_{l}^{k+1}\leftarrow w_{l}^{k}-\gamma \frac{\partial E}{\partial w_{l}^{k}} \end{equation} $

    (11)

    式中, $w_{l}^{k+1}$是更新后的权重, $\gamma$是学习率.但是, 对于量化模型来说, 对式(8)或式(9)中指示函数$I(w)$进行求导会导致得到的梯度为0, 无法更新参数.需采用STE (Straight-through estimator)方法[33]来处理:

    $ \begin{equation} \begin{split} &\mbox{前向过程:}\ q\sim {\rm Bernoulli}(p)\\ &\mbox{反向过程:}\ \frac{\partial E}{\partial p}=\frac{\partial E}{\partial q} \end{split} \end{equation} $

    (12)

    其中, $q$是二项分布函数, $p\in [0, 1]$的概率.根据$STE$的处理方法, 在反向求导的过程中, 我们可以这样处理模型中的权重$w_{l}^{k}$:

    $ \begin{equation} \frac{\partial E}{\partial w_{l}^{k}}=\frac{\partial E} {\partial \hat{w}_{l}^{k}} \end{equation} $

    (13)

    因此在进行反向传播过程时, 式(11)可以写成:

    $ \begin{equation} w_{l}^{k+1}\leftarrow {w}_{l}^{k}-\gamma \frac{\partial E}{\partial\hat{w}_{l}^{k}} \end{equation} $

    (14)

    采用动态量化编码的方式对深度神经网络压缩, 使得网络的权重在一个动态更新的范围量化.与静态量化的码表相比, 动态量化后的权重与模型最新更新的权重之间误差更小.另外, 由于动态更新的码本在训练过程会随着网络的训练误差而间接更新, 所以动态更新码本的方法无需一个预训练的模型作为初始化也能最终使模型收敛.

    为了验证本文方法的有效性, 我们在标准数据集MNIST[34]、CIFAR-10[35]上进行了实验.其中, MNIST数据集是一个手写字符数据集, 大小为$28\times 28$的单通道图像, 包含训练集60 000张, 测试集为10 000张; CIFAR-10是一个图像分类数据集, 所有的图像都是大小为$32\times 32$的三通道彩色图像, 包含60 000张图片, 其中训练集为50 000, 验证集为10 000.

    在MNIST数据集上, 先使用LeNet[35]在不同的损失函数下训练全精度32位的模型.在压缩过程中, 使用预训练的全精度模型作为压缩模型的初始化.使用的三种损失函数为Softmax-loss、Softmax-loss加上L1正则项、Softmax-loss加上L2正则项, 分别对应码本中有无0两种情况, 实验过程中正则项系数为0.001, 具体实验结果如下:

    通过表 1~表 3可以看到, 无论在码本中是否引入0, 本文的方法均能有效地对网络进行压缩.同时还可以看到, 在损失函数中引入L2正则项有比较好的结果, 因此在后续的实验中只使用Softmax-loss加上L2正则项作为损失函数.

    表 1  LeNet在Softmax-loss下量化效果
    Table 1  Quantization performance of LeNet under Softmax-loss
    位宽 码本无0 码本有0
    3 99.29 % 99.22 %
    4 99.30 % 99.25 %
    5 99.35 % 99.32 %
    下载: 导出CSV 
    | 显示表格
    表 2  LeNet在Softmax-loss+L1下量化效果
    Table 2  Quantization performance of LeNet under Softmax-loss and L1
    位宽 码本无0 码本有0
    3 98.69 % 99.25 %
    4 99.09 % 99.25 %
    5 99.14 % 99.27 %
    下载: 导出CSV 
    | 显示表格
    表 3  LeNet在Softmax-loss+L2下量化效果
    Table 3  Quantization performance of LeNet under Softmax-loss and L2
    位宽 码本无0 码本有0
    3 99.26 % 99.29 %
    4 99.29 % 99.28 %
    5 99.36 % 99.28 %
    下载: 导出CSV 
    | 显示表格

    为了清晰地看到压缩前和压缩后的变化, 我们先使用不同深度的ResNet训练了全精度32位的模型.在压缩过程中, 为了尽量避免初始化不同对最终实验结果的影响, 以及加快量化模型的训练收敛速度, 均使用预训练好的32位模型作为量化模型的初始化.在预训练和量化压缩过程中, 数据预处理都使用了数据增强的方法, 在原32 $\times $ 32的图像边界上填补0扩充为36 $\times $ 36的图像, 再随机的裁剪为32 $\times $ 32的图像, 然后随机左右翻转.在训练过程中, 都迭代了80 000轮, 每轮送进网络一个批次的数据是128, 初始的学习率为0.1, 当训练达到40 000次学习率为0.01, 达到60 000次之后学习率为0.001, 训练中使用正则项, 其权值系数设置为0.001.

    3.2.1   对比不同码本的性能

    本文在第3.1节引入了两种码本, 在量化同样的位数下, 一种在码本中引入了0另外一种没有.将0作为量化值引入码表, 会使滤波器产生大量的稀疏矩阵, 这会在一定程度抑制过拟合.但由于0不能表示为2的$n$ (为整数)次幂这种形式, 需要额外的一个比特来表示, 会影响码表的丰富性.为了说明这两种量化的差别, 我们做了如下实验:

    表 4~7中可以看到, 两种量化方式均能有效压缩深度神经网络.当量化位数一定时, 网络越深量化效果越好:当网络深度一定时, 量化位数越大量化效果越好.特别在量化位数较大且网络较深时, 采用这种动态量化编码的方法, 甚至可以提升网络的性能.

    表 4  ResNet-20在不同码本下量化效果
    Table 4  Quantization performance of ResNet-20 under different codebook
    位宽 码本无0 码本有0
    3 90.07 % 90.78 %
    4 91.71 % 91.91 %
    5 92.63 % 92.82 %
    下载: 导出CSV 
    | 显示表格
    表 5  ResNet-32在不同码本下量化效果
    Table 5  Quantization performance of ResNet-32 under different codebook
    位宽 码本无0 码本有0
    3 91.44 % 92.11 %
    4 92.53 % 92.36 %
    5 92.87 % 92.33 %
    下载: 导出CSV 
    | 显示表格
    表 6  ResNet-44在不同码本下量化效果
    Table 6  Quantization performance of ResNet-44 under different codebook
    位宽 码本无0 码本有0
    3 92.68 % 92.53 %
    4 93.14 % 93.37 %
    5 93.28 % 93.14 %
    下载: 导出CSV 
    | 显示表格
    表 7  ResNet-56在不同码本下量化效果
    Table 7  Quantization performance of ResNet-56 under different codebook
    位宽 码本无0 码本有0
    3 92.72 % 92.69 %
    4 93.54 % 93.39 %
    5 93.21 % 93.24 %
    下载: 导出CSV 
    | 显示表格
    3.2.2   对比静态量化编码(SQC)方法

    本文使用的是动态的码本(Static quantitative coding, DQC), 每次迭代都会对码本进行更新.为了说明DQC的有效性, 我们比较了基于SQC和DQC的模型性能.其中, SQC方法与DQC方法不同的地方在于量化模型的训练过程中不对码本进行更新.基于SQC方法的实验结果如表 8, 通过表 8可以看到深度模型的网络结构越深, 量化的位数越大, 量化效果越好.

    表 8  固定码本下量化效果
    Table 8  Quantization performance of SQC
    网络 3 bits码本 3bits码本 3 bits码本 3 bits码本 3 bits码本 3 bits码本
    SQC无0 SQC有0 SQC无0 SQC有0 SQC无0 SQC有0
    ResNet-20 92.72 % 92.69 % 92.72 % 92.69 % 92.72 % 92.69 %
    ResNet-32 93.54 % 93.39 % 92.72 % 92.69 % 92.72 % 92.69 %
    ResNet-44 93.21 % 93.24 % 92.72 % 92.69 % 92.72 % 92.69 %
    ResNet-56 93.21 % 93.24 % 92.72 % 92.69 % 92.72 % 92.69 %
    下载: 导出CSV 
    | 显示表格

    为了更加清楚地显示SQC和DQC两种方法训练得到模型性能的差异, 我们将静态码表的结果减去动态码表的结果, 具体结果如图 3图 4所示.

    图 3  码本中无0, SQC和DQC的量化比较
    Fig. 3  Quantization performance of SQC and DQC with 0 in codebook
    图 4  码本中有0, SQC和DQC的量化效果比较
    Fig. 4  Quantization performance of SQC and DQC without 0 in codebook

    图 3图 4中可以看到, 除了个别情况, 绝大数情况动态变化的码本比固定码本对深度神经网络的压缩效果更好, 特别是在网络较浅时, 动态量化编码的效果比静态量化的效果更加明显.在使用动态更新的码本方法时, 码本随着权重的更新而更新, 深度神经网络的权重在新的码本内量化, 这会在一定程度上减小由于量化造成的误差; 而固定的码本只与预训练的权重有关系, 量化得到的模型权重与预训练模型中权重误差较小.显然, 采用动态量化编码的方式, 能更好的减小由于量化造成的影响.

    本文与Deep compression[9]做了对比, 由于文献[9]是对网络进行了剪枝之后再进行量化.为了对比的公平性, 我们在此处做了和文献[9]同样的处理, 使用的数据集是MNIST, 将LeNet第一个卷积层66 %的小权重置为0, 第二个卷积层12 %较小权重置为0, 第一个全连接层8 %的小权重置为0, 第二个全连接层19 %的小权重置为0.对于这些置为0的权重, 在更新过程中不进行求导运算.此处本文的方法码本中没有引入0, 具体实验结果如下:

    表 9可以看到, 在相同条件下, 我们的方法有一定的优势.

    表 9  Deep compression与DQC的实验比较
    Table 9  Comparison of deep compression and DQC
    压缩方法 位宽 准确率
    Deep compression 5 99.20 %
    DQC 5 99.70 %
    下载: 导出CSV 
    | 显示表格

    为了进一步说明我们的方法, 本文与INQ[15]的结果做了比较.这里主为了实验的客观性, 只与INQ做了对比实验, 由于本文的量化方法与INQ相近, 都是将权重量化为2的$n~(n$为整数)次幂这种形式, 从而在对比实验时避免编码形式的影响.我们使用相同的数据、初始网络结构, 压缩到同样的位数, INQ使用4个步骤进行量化, 每次量化比例: 0.50, 0.75, 0.85, 1.00, 两种方法均量化5 bits, 结果如下:

    表 10可知, 无论网络的层数多深, 码本中是否引入0, 使用动态量化编码的结果均优于INQ的方法, 进一步说明了我们方法的有效性.

    表 10  量化为5 bits时INQ和DQC在CIFAR-10上的准确率比较
    Table 10  Compare the accuracy of INQ and DQC on CIFAR-10 with 5 bits
    网络 INQ DQC码本无0 DQC码本有0
    ResNet-20 91.01 % 92.63 % 92.82 %
    ResNet-32 91.78 % 92.87 % 92.33 %
    ResNet-44 92.30 % 93.28 % 93.14 %
    ResNet-56 92.29 % 93.21 % 93.24 %
    下载: 导出CSV 
    | 显示表格

    本文提出了一种基于动态量化编码的深度神经网络压缩方法.为了方便在嵌入式系统采用移位操作, 本文对网络中的权值采用指数量化编码, 通过理论推导得出, 将模型量化为指数形式时, 绝对值较大权值参数的量化对模型引起的误差也越大.为此, 本文采用动态量化编码, 在反向传播更新网络权值后, 对码本进行更新以自适应模型中的绝对值较大的权值参数, 减小这些参数的量化对模型精度的影响.本文还讨论了静态和动态两种不同码本进行编码时压缩模型的性能.通过实验表明, 深度神经网络越深, 压缩位数越大, 压缩效果越好; 动态量化编码的方法优于静态量化的方法; 本文方法在网络压缩10.67倍时准确率还有提升.虽然本文为了说明动态量化的优越性能, 使用不同深度和量化位宽对深度神经网络压缩进行了大量实验, 但目前只对小数据集进行实验, 后续将在更大的数据集上进行实验.


  • 本文责任编委 朱军
  • 图  1  DSC-AL算法框架示意图

    Fig.  1  The framework of DSC-AL algorithm

    图  2  小尺度约束模型工作原理

    Fig.  2  The working principle of small-scale constraint model

    图  3  DSC-AL算法流程图

    Fig.  3  The flowchart of DSC-AL algorithm

    图  4  节点顺序交叉方法

    Fig.  4  The crossover of node order

    图  5  三种标准BN结构示意

    Fig.  5  Three benchmark BNs

    图  6  6种算法在ASIA-1000数据集下的3种性能指标的误差条形图

    Fig.  6  Error bar graph of 3 measures for 6 algorithms on ASIA-1000 data set

    图  7  ASIA-1000下最优结构BIC评分平均值变化曲线

    Fig.  7  The curves of BIC scores for optimal structures on ASIA-1000 data set

    图  8  ASIA-1000下优于上一代种群的个体数平均值变化曲线

    Fig.  8  The curves of number of better individuals on ASIA-1000 data set

    图  9  6种算法在CAR_DIAGNOSIS2-2000数据集下的3种性能指标的误差条形图

    Fig.  9  Error bar graph of 3 measures for 6 algorithms on CAR_DIAGNOSIS2-2000 data set

    图  10  CAR_DIAGNOSIS2-2000下最优结构BIC评分平均值变化曲线

    Fig.  10  The curves of BIC scores for optimal structures on CAR_DIAGNOSIS2-2000 data set

    图  11  CAR_DIAGNOSIS2-2000下优于上一代种群的个体数平均值变化曲线

    Fig.  11  The curves of number of better individuals on CAR_DIAGNOSIS2-2000 data set

    图  12  ALARM-2000下最优结构BIC评分平均值变化曲线

    Fig.  12  The curves of BIC scores for optimal structures on ALARM-2000 data set

    图  13  ALARM-5000下最优结构BIC评分平均值变化曲线

    Fig.  13  The curves of BIC scores for optimal structures on ALARM-5000 data set

    表  1  ASIA模型下不同算法结果对比

    Table  1  Comparisons of different methods on ASIA network

    数据集 算法 IBIC BIC SHD RT BG
    ASIA-1 000 (−2 325.3) DSC-AL −2 375.1 (3.6570) −2 320.5 (2.1782) 1.3667 (0.7184) 103.4270 (17.5317) 29.6667 (25.1812)
    DGA −2 406.9 (15.1353) −2 329.5 (6.8571) 4.9333 (1.2576) 173.9571 (7.9109) 47.2333 (42.1775)
    K2 / −2 342.1 (14.0940) 7.5667 (2.1284) / /
    DSC-AL + RdInit −2 421.9 (19.5248) −2 324.7 (4.7155) 3.8333 (2.0186) 104.3722 (23.3174) 44.7000 (49.7165)
    DSC-AL + FixAlp −2 372.3 (0.2821) −2 320.2 (1.7524) 1.4333 (0.9353) 62.6387 (9.6306) 28.6333 (20.8450)
    DSC-AL + RdAlp −2 374.4 (2.7308) −2 321.7 (3.3730) 2.1667 (1.7237) 85.2060 (7.6515) 39.1000 (28.7250)
    DSC-AL + FixP −2 374.8 (2.9988) −2 322.0 (3.2387) 2.4000 (1.7927) 68.6206 (12.4026) 47.2667 (51.1205)
    下载: 导出CSV

    表  2  CAR DIAGNOSIS2模型下不同算法结果对比

    Table  2  Comparisons of different methods on CAR DIAGNOSIS2 network

    数据集 算法 IBIC BIC SHD RT BG
    CAR DIAGNOSIS2-2000 (−11 922) DSC-AL −13 865 (186.3612) −11 774 (43.2254) 6.8000 (1.1861) 520.6599 (74.8401) 144.0667 (45.2601)
    DGA −15 546 (271.5482) −11 795 (51.1551) 13.2000 (1.7301) 856.7351 (85.2662) 222.7667 (21.2630)
    K2 / −12 111 (198.0365) 23.5667 (5.4752) / /
    DSC-AL + RdInit −15 661 (415.5809) −12 034 (181.5865) 13.8333 (3.0181) 508.8949 (67.7425) 194.5000 (67.9111)
    DSC-AL + FixAlp −13 557 (87.5065) −11 745 (22.6139) 10.7000 (3.0867) 583.9935 (9.6306) 226.6667 (33.6988)
    DSC-AL + RdAlp −13 883 (177.8057) −11 820 (37.1534) 9.9000 (2.0060) 426.4885 (63.1594) 172.5667 (57.0485)
    DSC-AL + FixP −13 860 (143.4086) −11 825 (41.7158) 9.8667 (2.2242) 364.3424 (90.1956) 159.2667 (42.1303)
    下载: 导出CSV

    表  3  ALARM模型下不同算法结果对比

    Table  3  Comparisons of different methods on ALARM network

    数据集 算法 SHD RT BG
    ALARM-2000 (−20 294) DSC-AL 15.1000 (2.7669) 2 898.8 (267.3125) 225.8000 (95.5671)
    DGA 33.5000 (3.5071) 2 910.5 (122.4261) 498.1667 (1.4720)
    BNC-PSO 25.3333 (5.5000) 2 689.1 (153.1974) 267.7778 (63.5227)
    ALARM-5000 (−48 724) DSC-AL 13.5000 (0.9718) 2 322.7 (106.2002) 203.4000 (85.6364)
    DGA 28.6667 (1.2111) 2 435.5 (239.3540) 498.3333 (3.1411)
    BNC-PSO 16.3000 (3.6833) 1616.3 (473.0926) 315.9000 (98.0583)
    下载: 导出CSV
  • [1] Mohammadfam I, Ghasemi F, Kalatpour O, Moghimbeigi A. Constructing a Bayesian network model for improving safety behavior of employees at workplaces. Applied Ergonomics, 2017, 58: 35-47 doi: 10.1016/j.apergo.2016.05.006
    [2] Zarei E, Azadeh A, Khakzad N, Aliabadi M M, Mohammadfam I. Dynamic safety assessment of natural gas stations using Bayesian network. Journal of Hazardous Materials, 2017, 321: 830-840 doi: 10.1016/j.jhazmat.2016.09.074
    [3] Landis W G, Ayre K K, Johns A F, Summers H M, Stinson J, Harris M J, et al. The multiple stressor ecological risk assessment for the mercury-contaminated South River and upper Shenandoah River using the Bayesian network-relative risk model. Integrated Environmental Assessment and Management, 2017, 13(1): 85-99 doi: 10.1002/ieam.1758
    [4] 王静云, 刘三阳, 朱明敏. 基于条件独立测试的链图结构学习算法. 电子学报, 2017, 45(10): 2443-2448 doi: 10.3969/j.issn.0372-2112.2017.10.019

    Wang Jing-Yun, Liu San-Yang, Zhu Ming-Min. Structure learning of chain graphs using the conditional independence tests. Acta Electronica Sinica, 2017, 45(10): 2443-2448 doi: 10.3969/j.issn.0372-2112.2017.10.019
    [5] Madsen A L, Jensen F, Salmerón A, Langseth H, Nielsen T D. A parallel algorithm for Bayesian network structure learning from large data sets. Knowledge-Based Systems, 2017, 117: 46-55 doi: 10.1016/j.knosys.2016.07.031
    [6] Villanueva E, Maciel C D. Efficient methods for learning Bayesian network super-structures. Neurocomputing, 2014, 123: 3-12 doi: 10.1016/j.neucom.2012.10.035
    [7] 邸若海, 高晓光, 郭志高. 小数据集BN建模方法及其在威胁评估中的应用. 电子学报, 2016, 44(6): 1504-1511 doi: 10.3969/j.issn.0372-2112.2016.06.035

    Di Ruo-Hai, Gao Xiao-Guang, Guo Zhi-Gao. The modeling method with Bayesian networks and its application in the threat assessment under small data sets. Acta Electronica Sinica, 2016, 44(6): 1504-1511 doi: 10.3969/j.issn.0372-2112.2016.06.035
    [8] 邸若海, 高晓光, 郭志高. 基于改进BIC评分的贝叶斯网络结构学习. 系统工程与电子技术, 2017, 39(2): 437-444 https://www.cnki.com.cn/Article/CJFDTOTAL-XTYD201702031.htm

    Di Ruo-Hai, Gao Xiao-Guang, Guo Zhi-Gao. Bayesian networks structure learning based on improved BIC scoring. System Engineering and Electronics, 2017, 39(2): 437-444 https://www.cnki.com.cn/Article/CJFDTOTAL-XTYD201702031.htm
    [9] Adabor E S, Acquaah-Mensah G K, Oduro F T. SAGA: a hybrid search algorithm for Bayesian network structure learning of transcriptional regulatory networks. Journal of Biomedical Informatics, 2015, 53: 27-35 doi: 10.1016/j.jbi.2014.08.010
    [10] Masegosa A R, Moral S. An interactive approach for Bayesian network learning using domain/expert knowledge. International Journal of Approximate Reasoning, 2013, 54(8): 1168-1181 doi: 10.1016/j.ijar.2013.03.009
    [11] 高晓光, 叶思懋, 邸若海, 寇振超. 基于融合先验方法的贝叶斯网络结构学习. 系统工程与电子技术, 2018, 40(4): 790-796 https://www.cnki.com.cn/Article/CJFDTOTAL-XTYD201804012.htm

    Gao Xiao-Guang, Ye Si-Mao, Di Ruo-Hai, Kou Zhen-Chao. Bayesian network structures learning based on approach using incoporate priors method. System Engineering and Electronics, 2018, 40(4): 790-796 https://www.cnki.com.cn/Article/CJFDTOTAL-XTYD201804012.htm
    [12] Gasse M, Aussem A, Elghazel H. A hybrid algorithm for Bayesian network structure learning with application to multi-label learning. Expert Systems with Applications, 2014, 41(15): 6755-6772 doi: 10.1016/j.eswa.2014.04.032
    [13] 李明, 张韧, 洪梅, 白成祖. 基于信息流改进的贝叶斯网络结构学习算法. 系统工程与电子技术, 2018, 40(6): 1385-1390 https://www.cnki.com.cn/Article/CJFDTOTAL-XTYD201806028.htm

    Li Ming, Zhang Ren, Hong Mei, Bai Cheng-Zu. Improved structure learning algorithm of Bayesian network based on information flow. System Engineering and Electronics, 2018, 40(6): 1385-1390 https://www.cnki.com.cn/Article/CJFDTOTAL-XTYD201806028.htm
    [14] 刘彬, 王海羽, 孙美婷, 刘浩然, 刘永记, 张春兰. 一种通过节点序寻优进行贝叶斯网络结构学习的算法. 电子与信息学报, 2018, 40(5): 1234-1241 https://www.cnki.com.cn/Article/CJFDTOTAL-DZYX201805031.htm

    Liu Bin, Wang Hai-Yu, Sun Mei-Ting, Liu Hao-Ran, Liu Yong-Ji, Zhang Chun-Lan. Learning Bayesian network structure from node ordering searching optimal. Journal of Electronics and Information Technology, 2018, 40(5): 1234-1241 https://www.cnki.com.cn/Article/CJFDTOTAL-DZYX201805031.htm
    [15] Wong M L, Leung K S. An efficient data mining method for learning Bayesian networks using an evolutionary algorithm-based hybrid approach. IEEE Transactions on Evolutionary Computation, 2004, 8(4): 378-404 doi: 10.1109/TEVC.2004.830334
    [16] 冀俊忠, 张鸿勋, 胡仁兵, 刘椿年. 一种基于独立性测试和蚁群优化的贝叶斯网学习算法. 自动化学报, 2009, 35(3): 281-288 doi: 10.3724/SP.J.1004.2009.00281

    Ji Jun-Zhong, Zhang Hong-Xun, Hu Ren-Bing, Liu Chun-Nian. A Bayesian network learning algorithm based on independence test and ant colony optimization. Acta Automatica Sinica, 2009, 35(3): 281-288 doi: 10.3724/SP.J.1004.2009.00281
    [17] Li B H, Liu S Y, Li Z G. Improved algorithm based on mutual information for learning Bayesian network structures in the space of equivalence classes. Multimedia Tools and Applications, 2012, 60(1): 129-137 doi: 10.1007/s11042-011-0801-6
    [18] Lee J, Chung W, Kim E. Structure learning of Bayesian networks using dual genetic algorithm. IEICE Transactions on Information and Systems, 2008, 91(1): 32-43 http://dl.acm.org/citation.cfm?id=1522665
    [19] Gheisari S, Meybodi M R. BNC-PSO: Structure learning of Bayesian networks by particle swarm optimization. Information Sciences, 2016, 348: 272-289 doi: 10.1016/j.ins.2016.01.090
    [20] Cooper G F, Herskovits E. A Bayesian method for the induction of probabilistic networks from data. Machine Learning, 1992, 9(4): 309-347 http://dl.acm.org/citation.cfm?id=145259
    [21] Robinson, R W. Counting unlabeled acyclic digraphs. In Proceedings of the 5th Australian Conference on Combinatorial Mathematics, Melbourne, Australia: Springer, 1976. 28-43
    [22] de Campos L M, Castellano J G. Bayesian network learning algorithms using structural restrictions. International Journal of Approximate Reasoning, 2007, 45(2): 233-254 doi: 10.1016/j.ijar.2006.06.009
    [23] 刘建伟, 黎海恩, 罗雄麟. 概率图模型学习技术研究进展. 自动化学报, 2014, 40(6): 1025-1044 doi: 10.3724/SP.J.1004.2014.01025

    Liu Jian-Wei, Li Hai-En, Luo Xiong-Lin. Learning technique of probabilistic graphical models: a review. Acta Automatica Sinica, 2014, 40(6): 1025-1044 doi: 10.3724/SP.J.1004.2014.01025
    [24] 汪春峰, 张永红. 基于无约束优化和遗传算法的贝叶斯网络结构学习方法. 控制与决策, 2013, 28(4): 618-622 https://www.cnki.com.cn/Article/CJFDTOTAL-KZYC201304027.htm

    Wang Chun-Feng, Zhang Yong-Hong. Bayesian network structure learning based on unconstrained optimization and genetic algorithm. Control and Decision, 2013, 28(4): 618-622 https://www.cnki.com.cn/Article/CJFDTOTAL-KZYC201304027.htm
    [25] Larrañaga P, Karshenas H, Bielza C, et al. A review on evolutionary algorithms in Bayesian network learning and inference tasks. Information Sciences, 2013, 233: 109-125 doi: 10.1016/j.ins.2012.12.051
    [26] Omara F A, Arafa M M. Genetic algorithms for task scheduling problem. Journal of Parallel and Distributed Computing, 2010, 70(1): 13-22 doi: 10.1016/j.jpdc.2009.09.009
  • 加载中
  • 图(13) / 表(3)
    计量
    • 文章访问数:  696
    • HTML全文浏览量:  284
    • PDF下载量:  138
    • 被引次数: 0
    出版历程
    • 收稿日期:  2018-04-17
    • 录用日期:  2019-02-25
    • 刊出日期:  2021-08-20

    目录

    /

    返回文章
    返回