告警智能分析dnn训练层(智能告警系统)

来源网友投稿 472 2023-03-22

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。
本篇文章给大家谈谈告警智能分析dnn训练层,以及智能告警系统对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享告警智能分析dnn训练层的知识,其中也会对智能告警系统进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

CNN、RNN、DNN的一般解释

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
转自知乎 科言君  的回答

神经网络技术起源于上世纪五、六十年代,当时叫 感知机 (perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。 (扯一个不相关的:由于计算技术的落后,当时感知器传输函数是用线拉动变阻器改变电阻的方法机械实现的,脑补一下科学家们扯着密密麻麻的导线的样子…)
但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力(比如最为典型的“异或”操作)。连异或都不能拟合,你还能指望这货有什么实际用途么o(╯□╰)o

随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)发明的 多层感知机 (multilayerperceptron)克服。多层感知机,顾名思义,就是有多个隐含层的感知机(废话……)。好好,我们看一下多层感知机的结构:

图1 上下层神经元全部相连的神经网络——多层感知机

多层感知机可以摆脱早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。对,这货就是我们现在所说的 神经网络 NN ——神经网络听起来不知道比感知机高端到哪里去了!这再次告诉我们起一个好听的名字对于研(zhuang)究(bi)很重要!

多层感知机解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。相信年轻如Hinton当时一定是春风得意。

多层感知机给我们带来的启示是, 神经网络的层数直接决定了它对现实的刻画能力 ——利用每层更少的神经元拟合更加复杂的函数[1]。

(Bengio如是说:functions that can be compactly

represented by a depth k architecture might require an exponential number of

computational elements to be represented by a depth k − 1 architecture.)

即便大牛们早就预料到神经网络需要变得更深,但是有一个梦魇总是萦绕左右。随着神经网络层数的加深, 优化函数越来越容易陷入局部最优解 ,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。同时,另一个不可忽略的问题是随着网络层数增加, “梯度消失”现象更加严重 。具体来说,我们常常使用sigmoid作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。

2006年,Hinton利用预训练方法缓解了局部最优解问题,将隐含层推动到了7层[2],神经网络真正意义上有了“深度”,由此揭开了深度学习的热潮。这里的“深度”并没有固定的定义——在语音识别中4层网络就能够被认为是“较深的”,而在图像识别中20层以上的网络屡见不鲜。为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说, 全连接的 DNN 和图 1 的多层感知机是没有任何区别的 。

值得一提的是,今年出现的高速公路网络(highway network)和深度残差学习(deep residual learning)进一步避免了梯度消失,网络层数达到了前所未有的一百多层(深度残差学习:152层)[3,4]!具体结构题主可自行搜索了解。如果你之前在怀疑是不是有很多方法打上了“深度学习”的噱头,这个结果真是深得让人心服口服。

图2 缩减版的深度残差学习网络,仅有34 层,终极版有152 层,自行感受一下

如图1所示,我们看到 全连接 DNN 的结构里下层神经元和所有上层神经元都能够形成连接 ,带来的潜在问题是 参数数量的膨胀 。假设输入的是一幅像素为1K*1K的图像,隐含层有1M个节点,光这一层就有10^12个权重需要训练,这不仅容易过拟合,而且极容易陷入局部最优。另外,图像中有固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)可以利用,显然应该将图像处理中的概念和神经网络技术相结合。此时我们可以祭出题主所说的卷积神经网络CNN。对于CNN来说,并不是所有上下层神经元都能直接相连,而是 通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。 两层之间的卷积传输的示意图如下:

图3 卷积神经网络隐含层(摘自Theano 教程)

通过一个例子简单说明卷积神经网络的结构。假设图3中m-1=1是输入层,我们需要识别一幅彩色图像,这幅图像具有四个通道ARGB(透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为100*100,共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。用w1在ARGB图像上进行卷积操作,可以得到隐含层的第一幅图像;这幅隐含层图像左上角第一个像素是四幅输入图像左上角100*100区域内像素的加权求和,以此类推。同理,算上其他卷积核,隐含层对应100幅“图像”。每幅图像对是对原始图像中不同特征的响应。按照这样的结构继续传递下去。CNN中还有max-pooling等操作进一步提高鲁棒性。

图4 一个典型的卷积神经网络结构,注意到最后一层实际上是一个全连接层(摘自Theano 教程)

在这个例子里,我们注意到 输入层到隐含层的参数瞬间降低到了 100*100*100=10^6 个 !这使得我们能够用已有的训练数据得到良好的模型。题主所说的适用于图像识别,正是由于 CNN 模型限制参数了个数并挖掘了局部结构的这个特点 。顺着同样的思路,利用语音语谱结构中的局部信息,CNN照样能应用在语音识别中。

全连接的DNN还存在着另一个问题——无法对时间序列上的变化进行建模。然而, 样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要 。对了适应这种需求,就出现了题主所说的另一种神经网络结构——循环神经网络RNN。

在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在 RNN 中,神经元的输出可以在下一个时间戳直接作用到自身 ,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!表示成图就是这样的:

图5 RNN 网络结构

我们可以看到在隐含层节点之间增加了互连。为了分析方便,我们常将RNN在时间上进行展开,得到如图6所示的结构:

图6 RNN 在时间上进行展开

Cool, ( t+1 )时刻网络的最终结果O(t+1) 是该时刻输入和所有历史共同作用的结果 !这就达到了对时间序列建模的目的。

不知题主是否发现,RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!正如我们上面所说, “梯度消失”现象又要出现了,只不过这次发生在时间轴上 。对于t时刻来说,它产生的梯度在时间轴上向历史传播几层之后就消失了,根本就无法影响太遥远的过去。因此,之前说“所有历史”共同作用只是理想的情况,在实际中,这种影响也就只能维持若干个时间戳。

为了解决时间上的梯度消失,机器学习领域发展出了 长短时记忆单元 LSTM ,通过门的开关实现时间上记忆功能,并防止梯度消失 ,一个LSTM单元长这个样子:

图7 LSTM 的模样

除了题主疑惑的三种网络,和我之前提到的深度残差学习、LSTM外,深度学习还有许多其他的结构。举个例子,RNN既然能继承历史信息,是不是也能吸收点未来的信息呢?因为在序列信号分析中,如果我能预知未来,对识别一定也是有所帮助的。因此就有了 双向 RNN 、双向 LSTM ,同时利用历史和未来的信息。

图8 双向RNN

事实上, 不论是那种网络,他们在实际应用中常常都混合着使用,比如 CNN 和RNN 在上层输出之前往往会接上全连接层,很难说某个网络到底属于哪个类别。 不难想象随着深度学习热度的延续,更灵活的组合方式、更多的网络结构将被发展出来。尽管看起来千变万化,但研究者们的出发点肯定都是为了解决特定的问题。题主如果想进行这方面的研究,不妨仔细分析一下这些结构各自的特点以及它们达成目标的手段。入门的话可以参考:

Ng写的Ufldl: UFLDL教程 - Ufldl

也可以看Theano内自带的教程,例子非常具体: Deep Learning Tutorials

欢迎大家继续推荐补充。

当然啦,如果题主只是想凑个热闹时髦一把,或者大概了解一下方便以后把妹使,这样看看也就罢了吧。

参考文献:

[1]

Bengio Y. Learning Deep

Architectures for AI[J]. Foundations Trends® in Machine Learning, 2009,

2(1):1-127.

[2]

Hinton G E, Salakhutdinov R R.

Reducing the Dimensionality of Data with Neural Networks[J]. Science, 2006,

313(5786):504-507.

[3]

He K, Zhang X, Ren S, Sun J. Deep

Residual Learning for Image Recognition. arXiv:1512.03385, 2015.

[4]

Srivastava R K, Greff K,

Schmidhuber J. Highway networks. arXiv:1505.00387, 2015.

嵌入式与神经网络(四):DNN算法

姓名:王央京    学号:18050100052   学院:电子工程学院

转自:https://zhuanlan.zhihu.com/p/29815081

【嵌牛导读】本文介绍了DNN中的前后向传播算法

【嵌牛鼻子】DNN(深度神经网络)

【嵌牛提问】对于DNN进行初步学习,需要了解的具体算法有哪些?

【嵌牛正文】

DNN前向传播算法数学原理

对于下图的三层DNN,利用和感知机一样的思路,我们可以利用上一层的输出计算下一层的输出,也就是所谓的DNN前向传播算法。

4 DNN前向传播算法

所谓的DNN前向传播算法就是利用若干个权重系数矩阵W,偏倚向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。

输入: 总层数L,所有隐藏层和输出层对应的矩阵W,偏倚向量b,输入值向量x

输出:输出层的输出。

5 DNN反向传播算法要解决的问题

如果我们采用DNN的模型,即我们使输入层n_in个神经元,而输出层有n_out个神经元。再加上一些含有若干神经元的隐藏层。此时需要找到合适的所有隐藏层和输出层对应的线性系数矩阵W,偏倚向量b,让所有的训练样本输入计算出的输出尽可能的等于或很接近样本输出。怎么找到合适的参数呢?

可以用一个合适的损失函数来度量训练样本的输出损失,接着对这个损失函数进行优化求最小化的极值,对应的一系列线性系数矩阵W,偏倚向量b即为我们的最终结果。在DNN中, 损失函数优化极值求解的过程 最常见的一般是通过梯度下降法来一步步迭代完成的,也可以是其他的迭代方法比如牛顿法与拟牛顿法。

6 DNN反向传播算法的基本思路

在进行DNN反向传播算法前,我们需要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失。

DNN可选择的损失函数有不少,为了专注算法,这里使用最常见的均方差来度量损失。即对于每个样本,我们期望最小化下式:

损失函数有了,用梯度下降法迭代求解每一层的w,b。

首先是输出层第 L层 。注意到输出层的W,b满足下式:

对于输出层的参数,损失函数变为:

求解W,b的梯度:

7 DNN反向传播算法过程

由于梯度下降法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里我们以最基本的批量梯度下降法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度下降法。区别仅仅在于迭代时训练样本的选择。

输入:总层数 L,以及各隐藏层与输出层的神经元个数,激活函数,损失函数,迭代步长 a,最大迭代次数 max与停止迭代阈值 ,输入的m个训练样本

输出:各隐藏层与输出层的线性关系系数矩阵W和偏倚向量。

深度神经网络dnn怎么调节参数

深度神经网络(DNN)目前是许多现代AI应用的基础。
自从DNN在语音识别和图像识别任务中展现出突破性的成果,使用DNN的应用数量呈爆炸式增加。这些DNN方法被大量应用在无人驾驶汽车,癌症检测,游戏AI等方面。
在许多领域中,DNN目前的准确性已经超过人类。与早期的专家手动提取特征或制定规则不同,DNN的优越性能来自于在大量数据上使用统计学习方法,从原始数据中提取高级特征的能力,从而对输入空间进行有效的表示。
然而,DNN超高的准确性是以超高的计算复杂度为代价的。
通常意义下的计算引擎,尤其是GPU,是DNN的基础。因此,能够在不牺牲准确性和增加硬件成本的前提下,提高深度神经网络的能量效率和吞吐量的方法,对于DNN在AI系统中更广泛的应用是至关重要的。研究人员目前已经更多的将关注点放在针对DNN计算开发专用的加速方法。
鉴于篇幅,本文主要针对论文中的如下几部分详细介绍:
DNN的背景,历史和应用
DNN的组成部分,以及常见的DNN模型
简介如何使用硬件加速DNN运算
DNN的背景
人工智能与深度神经网络
深度神经网络,也被称为深度学习,是人工智能领域的重要分支,根据麦卡锡(人工智能之父)的定义,人工智能是创造像人一样的智能机械的科学工程。深度学习与人工智能的关系如图1所示:
图1:深度神经网络与人工智能的关系
人工智能领域内,一个大的子领域是机器学习,由Arthur Samuel在1959年定义为:让计算机拥有不需要明确编程即可学习的能力。
这意味着创建一个程序,这个程序可以被训练去学习如何去做一些智能的行为,然后这个程序就可以自己完成任务。而传统的人工启发式方法,需要对每个新问题重新设计程序。
高效的机器学习算法的优点是显而易见的。一个机器学习算法,只需通过训练,就可以解决某一领域中每一个新问题,而不是对每个新问题特定地进行编程。
在机器学习领域,有一个部分被称作brain-inspired computation。因为人类大脑是目前学习和解决问题最好的“机器”,很自然的,人们会从中寻找机器学习的方法。
尽管科学家们仍在探索大脑工作的细节,但是有一点被公认的是:神经元是大脑的主要计算单元。
人类大脑平均有860亿个神经元。神经元相互连接,通过树突接受其他神经元的信号,对这些信号进行计算之后,通过轴突将信号传递给下一个神经元。一个神经元的轴突分支出来并连接到许多其他神经元的树突上,轴突分支和树突之间的连接被称为突触。据估计,人类大脑平均有1014-1015个突触。
突触的一个关键特性是它可以缩放通过它的信号大小。这个比例因子可以被称为权重(weight),普遍认为,大脑学习的方式是通过改变突触的权重实现的。因此,不同的权重导致对输入产生不同的响应。注意,学习过程是学习刺激导致的权重调整,而大脑组织(可以被认为是程序)并不改变。
大脑的这个特征对机器学习算法有很好的启示。
神经网络与深度神经网络
神经元的计算是输入值的加权和这个概念启发了神经网络的研究。这些加权和对应于突触的缩放值以及神经元所接收的值的组合。此外,神经元并不仅仅是输入信号的加权和,如果是这样的话,级联的神经元的计算将是一种简单的线性代数运算。
相反的是,神经元组合输入的操作似乎是一种非线性函数,只有输入达到某个阈值的时候,神经元才会生成输出。因此,通过类比,我们可以知道神经网络在输入值的加权和的基础上应用了非线性函数。
图2(a)展示了计算神经网络的示意图,图的最左边是接受数值的“输入层”。这些值被传播到中间层神经元,通常也叫做网络的“隐藏层”。通过一个或更多隐藏层的加权和最终被传播到“输出层”,将神经网络的最终结果输出给用户。
图2:神经网络示意图
在神经网络领域,一个子领域被称为深度学习。最初的神经网络通常只有几层的网络。而深度网络通常有更多的层数,今天的网络一般在五层以上,甚至达到一千多层。
目前在视觉应用中使用深度神经网络的解释是:将图像所有像素输入到网络的第一层之后,该层的加权和可以被解释为表示图像不同的低阶特征。随着层数的加深,这些特征被组合,从而代表更高阶的图像特征。
例如,线可以被组合成形状,再进一步,可以被组合成一系列形状的集合。最后,再训练好这些信息之后,针对各个图像类别,网络给出由这些高阶特征组成各个对象的概率,即分类结果。
推理(Inference)与训练(Training)
既然DNN是机器学习算法中的一员,那么它的基本编程思想仍然是学习。DNN的学习即确定网络的权重值。通常,学习过程被称为训练网络(training)。一旦训练完成,程序可以使用由训练确定的权值进行计算,这个使用网络完成任务的操作被被称为推断(inference)。
接下来,如图3所示,我们用图像分类作为例子来展示如何训练一个深度神经网络。当我们使用一个DNN的时候,我们输入一幅图片,DNN输出一个得分向量,每一个分数对应一个物体分类;得到最高分数的分类意味着这幅图片最有可能属于这个分类。
训练DNN的首要目标就是确定如何设置权重,使得正确分类的得分最高(图片所对应的正确分类在训练数据集中标出),而使其他不正确分类的得分尽可能低。理想的正确分类得分与目前的权重所计算出的得分之间的差距被称为损失函数(loss)。
因此训练DNN的目标即找到一组权重,使得对一个较大规模数据集的loss最小。
图3:图像分类
权重(weight)的优化过程类似爬山的过程,这种方法被称为梯度下降(gradient decent)。损失函数对每个权值的梯度,即损失函数对每个权值求偏导数,被用来更新权值(例:第t到t+1次迭代:,其中α被称为学习率(Learning rate)。梯度值表明权值应该如何变化以减小loss。这个减小loss值的过程是重复迭代进行的。
梯度可以通过反向传播(Back-Propagation)过程很高效地进行计算,loss的影响反向通过网络来计算loss是如何被每个权重影响的。
训练权重有很多种方法。前面提到的是最常见的方法,被称为监督学习,其中所有的训练样本是有标签的。
无监督学习是另一种方法,其中所有训练样本都没有标签,最终目标是在数据中查找结构或聚类。半监督学习结合了两种方法,只有训练数据的一小部分被标记(例如,使用未标记的数据来定义集群边界,并使用少量的标记数据来标记集群)。
最后,强化学习可以用来训练一个DNN作为一个策略网络,对策略网络给出一个输入,它可以做出一个决定,使得下一步的行动得到相应的奖励;训练这个网络的过程是使网络能够做出使奖励(即奖励函数)最大化的决策,并且训练过程必须平衡尝试新行为(Exploration)和使用已知能给予高回报的行为(Exploitation)两种方法。
用于确定权重的另一种常用方法是fine-tune,使用预先训练好的模型的权重用作初始化,然后针对新的数据集(例如,传递学习)或新的约束(例如,降低的精度)调整权重。与从随机初始化开始相比,能够更快的训练,并且有时会有更好的准确性。

相比传统运维工具,AIOps的优势在哪里

所谓的AIOps告警智能分析dnn训练层,简单理解就是基于自动化运维,将AI和运维很好的结合起来。

AIOps的落地在多方面直击传统运维的痛点,AI算法承担起分析海量运维数据的重任,能够自动、准确地发现和定位问题,从决策层面提高运营效率,为企业运营和运维工作在成本、质量和效率方面的优化提供告警智能分析dnn训练层了重要支持。

可见,AIOps 在企业中的作用正在进一步放大。但事实上,很多企业对于AIOps 能解决什么问题并不清晰,今天我们就以博睿数据的AIOps 的三大场景和算法说起。

博睿数据的AIOps 实践

作为中国领先的智能可观测平台,在AIOps实践方面,多年来博睿数据积极拥抱人工智能、机器学习等新技术变革的浪潮,并基于AI和机器学习技术,自主研发了“数据接入、处理、存储与分析技术”核心技术体系,全面布局智能基线、异常检测、智能告警、关联分析、根因分析等丰富且广泛的智能运维功能,并将AIOps能力融入端到端全栈监控产品线,可为传统企业提供强大的数据处理、存储和分析的软件工具,帮助客户整合各类IT运维监控数据,实现数据的统一存储和关联分析,打破数据孤岛,构建统一的IT运维管理平台,让企业的IT运维更加智能化、自动化。

在此基础上,博睿数据还依托完整的IT运维监控能力,利用大数据和机器学习技术持续构建先进的智能运维监控产品,2021年先后推出了搭载了AI能力的新一代APM产品Server7.0和新版的统一智能运维平台Dataview,不断落地智能异常检测、根因分析、故障预测等场景。基于人工智能的能力实现运维监控场景的信息整合、特征关联和业务洞察,帮助企业确保数字化业务平稳运行,并保障良好的数字化体验。

目前,博睿数据在AIOps 技术方面主要落地了三大场景。即智能基线预测、异常检测及告警收敛。

随着企业业务规模扩大,云原生与微服务的兴起,企业IT架构复杂性呈现指数级增长。而传统的IT运维手段面临故障发生后,查找故障原因困难,故障平均修复时间周期长,已无法满足新的运维要求。因此运用人工智能赋能运维,去取代缓慢易错的人力决策,快速给出运维决策建议,降低问题的影响并提前预警问题就成为了必然。AIOps作为目前运维发展的最高阶目标,未来将会赋能运维带给用户全新的体验。

但需要注意的是,当前智能运维的很多产品和项目在企业侧落地效果并不理想,究其原因可归类为三点告警智能分析dnn训练层:一是数据采集与AI平台割裂,多源数据之间的关联关系缺失导致AI平台缺乏高质量的数据,进而导致模型训练效果不佳;二是数据采集以metric和log为主,导致应用场景较窄且存在数据孤岛问题;三是AI平台能力尚有提升空间。当前落地的场景多以异常检测与智能告警为主,未来需要进一步提升根因分析与故障预测的能力。

因此,未来企业首先要建设一体化监控运维平台,一体化是智能化的基础。基于一体化监控运维平台采集的高质量的可观测数据数据以及数据之间的关联关系,进一步将AIOps的能力落地到一体化监控运维平台中,从而实现问题精准定位与见解能力。

此外,在实际应用中,依据信通院的相关调查,其受访企业中只有不足20%的企业具有智能化监控和运维决策能力,超过70%的企业在应用系统出现故障的10分钟内一筹莫展。

各行业的数字化转型正在改变这一现状,不仅互联网企业,更多传统企业的数字化转型为智能运维开拓了更广阔的市场,智能运维有着巨大的发展空间,这也是博睿数据等行业领先企业发力的大好时机。

提升创新能力,推广智能运维不仅是相关服务商自身发展的要求,也是提升我国企业应用管理和运维水平的使命。

中国企业数字化转型加速,无论是前端的应用服务迭代更新,还是后端IT运维架构的复杂度提升,都在加速培育智能运维的成长。

如何用kaldi训练好的DNN模型做在线识别

训练配置:batchsize=128caffe自有告警智能分析dnn训练层的imagenetwithcuDNN模型快于googlenetwithcuDNNVGG16层不用cuDNN慢于caffe自有的imagenetwithcuDNN模型VGG19层不用cuDNN慢于caffe自有的imagenetwithcuDNN模型一、CAFFE自带配置告警智能分析dnn训练层,使用cuDNNForward速度:220msBackward速度:360ms二、CAFFE自带配置,不使用cuDNNForward速度:300msBackward速度:410ms三、GoogleNet,使用cuDNNForward速度:614msBackward速度:1377ms四、GoogleNet,不使用cuDNNForward速度:1145msBackward速度:2009ms五、VGG16层,使用cuDNNForward速度:3101msBackward速度:8002ms六、VGG19层,使用cuDNNForward速度:3972msBackward速度:8540ms回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢!

【心理学与AI】2019年9月DNN模型压缩-综述

Cheng, Y., Wang, D., Zhou, P., Zhang, T. (2017). A survey of model compression and acceleration for deep neural networks. arXiv preprint arXiv:1710.09282.

目前的DNN太庞大,使得计算需要的时间和空间都很大。为了优化这个问题,科学家们提出了压缩模型的各种方法。

牛逼的那些DNN到底有多大?
2012的CNN(已经算参数少的了),6千万个参数,5卷积层+3全连接。在NVIDIA K40的机器上要训练2-3天 (Krizhevsky et al. , NIPS , 2012) 。人脸识别网络,几亿个参数 (Taigman et al., CVPR , 2014; Lu et al., CoRR , 2016)。纯靠全连接的网络甚至有几十亿个参数 (Dean et al., NIPS , 2012) 。

在移动设备上的使用局限
移动设备的内存,CPU,续航能力都有限,经不起那么大的网络折腾。比如ResNet-50有50个卷积层,仅处理一个图片就需要95M和38亿次的浮点数乘法。经过优化之后可以减少75%的参数,节省50%的计算时间。

*卷:卷积层;全:全连接层
*新:从头训练的模型(train from scratch);预:预训练模型(pre-trained model)

这些方法各有各的优势,有些可以结合着使用效果更佳,接下来我们就分别对这些方法进行描述。

包括用K-means 聚类减少参数数量[6,7],把参数压缩到8-bit[8], 16-bit[9],用霍夫曼编码(Huffman coding)来压缩码表[10]。用二阶偏导来衡量网络参数的重要性[11]。最极端情况干脆二值化参数,也就是参数只有可能是0或1,形成二值网络[12-14]。

缺点 二值网络在简化大型网络的时候损失较大

最早的剪枝算法是偏差权重衰减(Biased Weight Decay) [18].

The Optimal Brain Damage [19] and the Optimal Brain Surgeon [20] methods 根据the Hessian of the loss function来削减链接的数量。
这几种方法需要从头训练模型。

近来开始流行对预训练的模型进行剪枝[21,22],用哈希码表来储存参数,实现参数共享[23]。也已经有工作把上述的压缩,剪枝,参数贡献融合在一个统一的流程中[24]。

也有一些新兴的工作,将稀疏约束(sparsity constraints)加入到CNN的训练中[25-28]。大大减少了卷积核的数量,甚至是层数。

缺点 剪枝有很多需要手动调整的地方,对于某些应用场景来说太复杂了。

由于全连接层的参数过多,而且f(x,M) = σ(Mx),这里的σ(·)不是一个线性变化(因为引入了层间的非线性变换,如Relu),是对于每个元素特异的变换。

也就是说本来这个矩阵中每个值之间完全没有关系,我就得把每个值都单独存下来, 计算量也是O(mn)。现在我创建一种关系来约束部分的参数,那我只需要存这个关系就好了,不用存那么多值了。

缺点 人为地进行约束会降低模型地准确率,而且对特定任务找到合适的约束关系本身就很难,现在还没有一种靠谱的理论来定位这个约束关系。

这个方法的核心是对卷积核进行低秩分解,分解之后重要的信息被保留下来,计算的速度也提高了。

对于预训练的模型,可以一层一层的分解卷积核,分解完一层之后这层的参数就固定了,但是因为会有损失,下一层要先继续调参,再分解。

也有人提出基于低秩因子分解从头训练的做法[40]。Canonical Polyadic (CP)[39],Batch Normalization (BN)[40]这两种方法都可以做分解,效果都很好,但是前者存在有时候找不到一个最优的秩(best rank-K)的情况。具体是什么数学方法没有看。

全连接层是二维的矩阵,同样也可以用这种方法进行降维。

缺点 分解本身需要的计算量很大;只能逐层分解,不能进行全局的优化;为了达到跟原模型相近的效果,需要重新训练的量较大(因为每一层分解之后都要重新调参)。

(这句话也没有引用,但是感觉说的挺有道理在这里存个档。)

这个方法的核心思想其实跟结构矩阵挺像的,只不过这个方法是针对卷积层做的处理。

由于卷积层中有大量的卷积核,如果对他们进行随机的初始化,会发现最后训练出来也有很多的冗余。比如,有一些卷积核,是另一些卷积核的-1倍。这样我们还不如在一开始定义一些卷积核的约束规则,比如直接定义有一些核是另一些的-1倍[45]。(文献中的方程4)

反正定不定义训练出来都是类似的特征,为什么要定义这个约束呢?当然是首先节省了储存卷积核的空间,同时也节省了训练所需要的计算量。

虽然理论上不知道为什么,但是实际训练显示,如果卷积核之间有些关联的话效果甚至会更好。

缺点
这个方法对比较宽的浅层网络(e.g. VGG)效果较好,但是对窄而深的网络(e.g. GoogleNet,Residual Net)效果不好。另外,这种约束定义之后有时候会造成训练结果的不稳定。

要把一个复杂模型进行压缩,有人想到可以通过迁移的方法来把核心信息提取出来,但是之前这个方法只限于在浅层模型上操作[50]。

知识蒸馏这个概念是后来提出来的,它把复杂模型比作老师,目标的压缩模型,即简单模型比作学生,把老师的知识迁移到学生身上,并让学生在处理问题上的表现尽可能去逼近老师,就是知识蒸馏的核心算法。

数学方法的主要步骤就是,把学生网络和老师网络的输出结果看成两个分布,我要让这两个分布尽可能的接近。那么我首先要把输出结果(例如代表A类的输出神经元的值为0.8,B类的0.2,C类的0.2)转化为标准化的分布,并且我想尽可能突出最大值。这里就用到softmax函数,把输出结果映射到(0,1)上的分布,并且让值的和为1。

接下来我要基于当前两个分布的差异,来定义一个损失函数,我的目标就是让这个损失尽可能的小。这里常用的损失函数就是交叉熵损失函数(CrossEntropy Loss)。

一般我们用KL散度的值表示俩概率分布之间的差异,而交叉熵是等于KL散度加上一个常量(信息熵),其公式相比KL散度更容易计算,因此在机器学习中常常使用交叉熵损失函数而不是KL散度。

现有的KD算法中,FitNets[53] 提出如何将宽而浅的模型,压缩成窄而深的模型。这些算法在各大数据集(e.g. MNIST, CIFAR-10, CIFAR-100, SVHN, AFLW) 都得到了有效的验证,学生网络有的时候甚至比老师网络的效果更好。

之后的工作[54-57]进一步优化了这个算法的计算速度,或是寻找一下更宽松的训练条件(e.g. Attention Transfer (AT) [57]),又能达到相近的效果。

缺点 这个方法只能用在用softmax+crossentrophy loss训练的网络上,所以也有一些局限。另一方面,这个方法有时候约束条件太严格了,不一定训练得出来。

基于注意的算法是最近比较新的趋势,它的核心思想是,在训练时,选择性地关注那些和任务相关的网络结构,而不是整个网络,通过这种方式来大幅节省计算量。

Dynamic capacity network (DCN) [59] 的设计包括了两个网络,一个小型网络和一个大型网络,训练数据先经过小网络,确定一下主要激活的是哪些区域,然后再喂给大网络,这时只需计算那些重要区域的权重就可以了。

Sparsely-gated mixture-of-experts Layer (MoE) [60] 的思想也是只计算那些重要的梯度,这个MoE模块是由很多个专家网络构成的,并且另外有一个负责做选择的网络,通过训练它可以对不同的输入数据,选择不同的专家网络的组合来学习。

针对残差网络的压缩,也有几项研究提出随机深度(stochastic depth)的算法[63-65],相当于对于每个输入数据(batch),随机(或者根据某种规则)抽掉几层网络进行训练。(感觉跟dropout差不多)

还有一些研究对池化层(pooling)进行优化,但是仅仅是提高计算速度,没有压缩空间。

压缩工作要基于一些基准的模型进行改进,或者跟他们的效果进行比较,现有的一些基准模型大概如表格所列。

评估一个压缩工作的效果主要是两方面,空间的压缩程度和计算速度的提升程度。这两方面分别由 压缩率(compression rate) 和 加速率(speedup rate) 。

压缩率是用基准模型的参数量a,除以压缩后模型的参数量a*得到的。(也有用右边这种的)

加速率则是用基准模型需要的训练时间s,除以压缩后模型的训练时间s*得到的。

对于小模型来说,这两个评估指标通常是高度相关的。但是不同的模型这两个指标的关系也会有差异。比如图像处理的CNN,它主要是刚开始几层的大量卷积操作,浮点数计算比较耗时间。但有些DNN(几百层的)很瘦的,主要是全连接层的参数占据了大多数的空间和时间。

总的来说并没有一个统一的准则,而是根据具体的应用场景来的。作者提供了一些参考建议。

目前对于深度网络的压缩算法还处于一个比较初级的阶段,面临很多的困难和挑战。

关于告警智能分析dnn训练层和智能告警系统的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 告警智能分析dnn训练层的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于智能告警系统、告警智能分析dnn训练层的信息别忘了在本站进行查找喔。
上一篇:BETA说 | 北塔软件智慧运维助力南雄市人民医院
下一篇:做好以下几点,搞定大型商业地产企业远程运维
相关文章

 发表评论

暂时没有评论,来抢沙发吧~