雷锋网按:本文作者文海宁,银行算法工程师。
深度学习的神经网络训练方法有除了典型的反向传播,也有被Deepmind青睐的正向传播,以及以BAM网络背后的双向传播,本文将对这些训练方法进行简单的探讨,如果你有兴趣,欢迎留言。
1. 典型的BAM网络
深度学习目前非常火爆,追踪溯源,深度学习源于神经网络。BP神经是反向误差训练的典例。因为反向传播需要计算每个参数的梯度,从而能够使用各种梯度下降方法来更新参数。
但是,相比于正向传播,反向传播能解决大部分问题,统领深度学习的天下吗?
双向传播,其中最为典型的还属BAM网络。下图是其简单原理的展现。
当向其中一层加入输入信号时,另一层可得到输出。由于初始模式可以作用于网络的任一层,信息可以双向传播,所以没有明确的输入层或输出层。可将其中的一层称为X层,有n个神经元节点;另一层称为Y层,有m个神经元节点。两层的状态向量可取单极性二进制0或1,也可以取双极性离散值1或-1。如果令由X到Y的权矩阵为W,则由Y到X的权矩阵便是其转置矩阵。
诚然双向传播要有应用的领域,才能更好地检测它的用途,同时也促进自身的发展。那么,场景来了,在IT运维等服务领域,双向网络是大显身手的时候。在介绍双向网络之前,先卖个关子,我们先对反向传播训练和正向传播训练娓娓道来。
反向传播算法简称即BP神经网络,是监督算法(数据给出标签)。其目标是:通过更新网络中的每一个权重,使得最终的输出接近于groundtruth,这样就得到整个网络的误差作为一个整体进行了最小化。其中输出层的链式法则的示意图如下:
其中代表输出网络。下图偏导数方程是用delta规则显示的改变可以多大程度上影响总的误差。表示不同神经元的权重。
金无足赤,反向传播网络也有缺点。因为它是对非线性可微分函数进行权值训练的多层网络。此算法可以使网络权值收敛到一个解,但并不能保证所求为误差超平面的,由此可能是一个局部最小解。
何为正向传播呢?假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,结点w的值如何算?即通过上一层的i,j,k等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如sigmoid函数,最后得到的结果就是本层结点w的输出。不断迭代此运算,得到输出层结果。如下图:
话说2016年李世石与AlphaGo的围棋大战吸引了世界人的目光,其实Google 旗下的 DeepMind 早已成为 AI 领域的明星,它将其算法应用到医疗保健行业,还打造了一个分布式的大型深度强化学习系统并将其命名为Gorila,该系统利用Google Cloud平台大幅提高了训练效率,已开始为谷歌的个性化推荐系统服务。
DeepMind实验室有很多应用正向传播的实例。例如强化学习(涉及熟悉的试错学习项目),连续控制问题,如机器人操作和运动。还有很多深度强化学习方法配合正向传播方法使用,可很好的解决蚂蚁踢球、棋类博弈等问题。
生活在大数据时代的小伙伴们,软件开发已经百花齐放、百家争鸣了,而基础的运维行业因为大数据高并发的压力,日趋需要引入更加完善的AI等算法来给基础机器集群提供更好地服务,给到客户更优质的体验。IOT的发展链接了软硬件,并在智能物联领域发挥着自己独特的作用。其他领域暂且不聊,我们聊聊比较容易入门的运维行业中双向传播的应用。
双向神经网络的预测功能目前是大势所趋。实时告警的精髓在于在告警信息没有发出时,预测到相关集群跑的应用的异常,即指标异常。下图反映的是集中监控平台基线告警的实例。时间粒度为每10分钟预测异常,其中红色为A指标实际值,蓝色为B指标实际值。蓝色区间为基线。
此处注明基线的含义,是包含了上基线和下基线,即一个区间。大多数小伙伴采用的方法是离线计算,用置信区间即可以确定一个范围。但是此方法无法做到实时告警。下图就是利用双向神经网络的威力,做到的10分钟粒度实时告警。
以一个交易类型的指标为例,用R语言做一个简单的实例,并说明双向神经网络是如何工作的。如图7.1—7.4日和8.2-8.3日的总机基线数据缺失,8.9日(七夕)总机基线值达到13252.0,属于节假日类爆发性数据。
单独看看某银行类手机银行业务的总机交易量的数据,如下图:
看到这么有规律的数据,是不是跃跃欲试呢?想知道原理吗?
下图是神经网络最基本的规则:输入层、隐含层、输出层。当我们把银行交易量的数据拿到手后,根据自己的需要进行维度的分析与处理,分别解析入库存储完。输入的标签维度即为输入层,输出层据实际需要维度而定。隐含层就是技巧了。
双向传播在单程的基础上,通过前预测后,后预测前,建立一一对应,互相验证的结构。可以将隐含层数目和隐含因子数目调节的更加精准。
首先展示一下具体预测值(绿线)与实际值(黑线)的对比
其次是平稳性波动区间:黑色圆圈是实际值,绿线是上下基线。采集数据时正常的工作日1天,144个10分钟预测值合成的总1天的预测值。
最后是爆发性波动区间
注: 以上所有图横轴是时间转为的时间戳,纵轴是交易量数据。
双向神经网络的训练过程很有趣,首先要找到某些特定的神经元再进行权值处理,我们称这些神经元为获胜神经元。获胜神经元在输入神经元中找,若输入神经元构成的向量未归一化,可用欧氏距离度量相似度;若归一化即可使用内积法。对获胜神经元权值进行调整时,遵循一下公式:
,w其中是权值,α是系数,为调整的自变量。
训练次数与调整个神经元权值的原理如下图:
每次更新权值,在几何意义里就是旋转一定的角度。确定好输入层,隐含层采用双向传播训练出的参数作为输入,就递送给输出层输出结果啦。
神经网络模式学习训练不再需要同步,可以异步。独立的模式使得可以根据实际情况优化调控每个模块的调用时间。这样当集群压力大的时候,可以动态负载分配资源。这是这个成果最大的意义,将能够因此构建出完全不一样的神经网络模型,训练方式发生完全的改变。
例如各种银行券商都很关注运维的人力问题,如何从24小时值班一刻不离,转换为分清楚机器的生命周期(大致分为上线、部署、投产、下线),从而针对性对投产的机器做重点监控,是一个非常有收益的话题。在如今大部分互联网企业引进六西格玛管理方法来,节约成本已收效显著。用双向传播训练可以进一步在预测领域为监控定为运维服务做的更好。
大家都可以注意到,我们做出的是一个波动区间。输入的维度与输出的维度决定整个问题的目标,隐含层决定了准确度。预想告警告的准确,必然先将数据采集的准确。但是此度无法很好的衡量。大家都处于大数据试水阶段。
在优化过程中,我们会继续考虑维度因素对准确度的影响,减少误报漏报等告警故障。同时银行各套业务系统都是有N个9的准确度衡量的,全年告警时长不超过十几分钟。我们的任务很艰巨。
双向神经网络值得改进探索的地方很多,大家快来加入大数据时代,有别于蓬勃竞争激烈的软件开发之外,基础而充满挑战的IT运维欢乐大家庭吧。
雷锋网注:本文为雷锋网独家约稿文章,未经授权,拒绝转载。