首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用

摘要 随着云计算和人工智能的兴起,如何安全有效地利用数据,对持有大量数字资产的企业来说至关重要。同态加密,是解决云计算和分布式机器学习中数据安全问题的关键技术,也是隐私计算中,横跨多方安全计算,联邦学习和可信执行环境多个技术分支的热门研究方向。 本文对经典同态加密算法Pailier算法及其相关技术进行介绍,重点分析了Paillier的实现原理和性能优化方案,同时对基于公钥的加密算法中的热门算法进行了横向对比。最后介绍了Paillier算法的一些实际应用。 【关键词】:同态加密,多方安全计算,联邦学习,隐私计算 1 背景知识 1.1 同态加密 同态加密(Homomorphic Encryption,HE)[1]是将数据加密后,对加密数据进行运算处理,之后对数据进行解密,解密结果等同于数据未进行加密,并进行同样的运算处理。同态加密的概念最初在1978年,由Ron Rivest,Leonard Adleman和Michael L. Dertouzos共同提出,旨在解决在不接触数据的前提下,对数据进行加工处理的问题。 目前,同态加密支持的运算主要为加法运算和乘法运算。按照其支持的运算程度,同态机密分为半同态加密(Partially Homomorphic Encryption, PHE)和全同态加密(Fully Homomorphic Encryption, FHE)。半同态加密在数据加密后只持加法运算或乘法运算中的一种,根据其支持的运算的不同,又称为加法同态加密或乘法同态加密。半同态加密由于机制相对简单,相对于全同态加密技术,拥有着更好的性能。全同态加密对加密后的数据支持任意次数的加法和乘法运算。 1.2 复合剩余类问题 如果存在一个数 那么符合公式z ≡ yn (mod n2)的数z,称为y的模n2的n阶剩余。复合剩余类问题(decisional composite residuosity assumption , DCRA),指的是给定一个合数n和整数z,很难确定模n2的n阶剩余数z是否存在。 1.3 中国剩余定理 中国剩余定理(Chinese Remainder Theorem, CRT),又称为孙子定理,源于《孙子算经》,是数论中的一个关于一元线性同余方程组的定理,说明了一元线性同余方程组有解的准则以及求解方法。 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何? 翻译为数学语言为: 其通用方程为: 中国剩余定理的解法流程为: 2 Paillier算法原理 2.1 Paillier简介 在Paillier算法出现之前,基于公钥加密的算法主要有两个分支: 以RSA为代表的,基于大数因数分解难题的公钥加密算法 以ElGama为代表的,基于大数离散对数难题的公钥加密算法 Paillier加密算法,由Pascal Paillier于1999年发表,给出了公钥加密算法的一个新的分支领域。Paillier基于复合剩余类难题,满足加法同态和数乘同态,具有非常高效的运行时性能。 2.2 一个典型的应用场景 图1 传统联邦学习 同态加密算法使得密文数据,在没有额外数据泄露的情况下,可以在第三方平台进行进一步加工处理。随着大规模云计算的兴起,尤其是涉及到敏感数据的云计算,同态加密算法将是其中至关重要的技术基础。我们以一个典型的联邦学习的例子为切入点,看看Paillier算法的原理和在实践中应用的问题。 假设Alice和Bob想共同训练一个网络模型,Alice和Bob各自持有一部分训练数据,并且他们不想把自己的数据泄露给对方。那么在训练期间,Alice和Bob需要交互各自训练的梯度数据,并根据双方的梯度数据,共同计算一个对双方都合适的梯度值,用来执行联合梯度下降过程。 2019年,Ligeng Zhu等人发表的“Deep Leakage from Gradients”论文中给出了一种算法,可以从几次迭代的梯度数据中,推断出训练的数据,标签,模型等一系列隐私信息。这使得在分布式机器学习中,通过传输梯度数据来进联合模型训练变得不再安全。那么如果在梯度数据传输的过程中,传输的是加密后的梯度数据,并且这些加密数据可以进行二次计算,那么便可以规避梯度数据传输过程带来的安全风险。 2.3 Paillier算法 2.3.1 密钥生成 类似于RSA算法,Paillier也拥有公钥和私钥对。 在上述过程中,Alice总计生成了6个数字: p = 11 q = 19 n = 209 λ = 90 g = 147 μ = 153 Alice将 n 和g 封装成公钥public-key = (n, g) 将λ和μ封装成私钥:private-key = (λ, μ) 2.3.2 加密 假设Bob需要加密明文m, 0 <= m < n. 且Bob收到了Alice发送过来的公钥(n, g) Bob选择一个随机数r,满足0 < r < n Bob计算加密后的密文 c = gm.rn mod n2 m = 8 r = 3 n_square = pow(n, 2) # n_square = 43681 c = gmpy2.mod(pow(g, m)*pow(r, n), n_square) # c = 32948 2.3.3 解密 假设c是Bob发送过来的密文,且$c\in {\mathbb Z}_{{n^{{2}}}}^{{*}}$ Alice计算明文 m = L(cλ mod n2) * μ mod n c = 32948 m = gmpy2.mod(L(gmpy2.mod(pow(c, lam), n_square), n) * mu, n) # m = 8 正确性证明 为了证明解密操作的正确性,我们把加密的公式代入: 根据卡米切尔定理(Carmichael’s function)有: 继续化简得: 由于g ∈ Zn2*, n + 1 ∈ Zn2*, 那么一定存在唯一一对(a, b)使得: ② gλ mod n2 = (1 + naλ) * bnλ mod n2 = 1 + aλn mod n2 把上述公式带入,高阶多项式按二项式定理展开,得: DEC(c) = L( (1 + naλ) * bnλ mod n2 ) * μ mod n = L(1 + amλ*n mod n2) * μ mod n 这里我们再看下μ的取值,同样按照公式②展开,得 μ = L(gλ mod n2)-1 mod n = L(1 + aλn mod n2)-1 mod n 最后把函数L展开,得: DEC(c) = (amλ mod n2) * (a * λ mod n2)-1 mod n = m 2.3.4 同态加 假设Alice计算的梯度数据为m1, Bob计算的梯度数据为m2,Bob需要计算双方梯度数据的均值(m1 + m2)/ 2, 作为分布式梯度下降的梯度数据。 同态加的原理是利用了幂函数的ax1 * ax2 = ax1+x1的特性。对于Alice持有的数据m1的密文c1和Bob持有数据m2的密文c2,Bob使用如下公式计算同态加法运算: c = c1 * c2 mod n2 Alice使用私钥计算DEC(c) = m1 + m2 正确性证明 为了证明同态加的正确性, 我们把加密的公式代入同态加运算: c = ((gm1rn mod n2) * (gm2rn mod n2)) mod n2 = (gm1rngm2rn) mod n2 = (gm1 + m2r2n) mod n2 = ENC(m1 + m2) 解密c等价于: DEC(c) = DEC(ENC(m1 + m2)) = m1 + m2 对于密文和明文相加的同态运算,我们当然可以先对明文加密,之后再对两个密文进行同态加运算的方式来计算。不过从上面的公式可以看出,扰动数据rn中的r是一个任意值。那么我们可以把计算密文c1和明文m2的和的计算转换为: c1 + m2 = (gm1rn mod n2 * gm2 mod n2) mod n2 = gm1+krn mod n2 = E(m1+m2) 这样少了一次计算rn的运算量,提升了明文和密文相加运算的效率。 2.3.5 同态数乘 Paillier算法目前只支持明文和密文相乘的计算方式,不支持密文和密文相乘。 同态数乘的原理是利用了幂函数的axk = akx的特性。 Bob使用Alice对明文m1加密后的密文c1和明文k,计算 c = c1k mod n2 Alice使用私钥计算DEC(c) = k*m1 正确性证明 为了证明同态数乘的正确性, 我们把加密的公式代入同态数乘运算: c = c1k mod n2 = (gm1*rn mod n2)k mod n2 = gk*m1* r1n mod n2 = E(k*m1) 解密c等价于: DEC(c) = DEC(ENC(k * m1)) = k * m1 2.4 算法优化 2.4.1 参数g优化 在原始Paillier方案中,g的取值只需满足 。Ivan和Mads在论文中给出了使用g = n + 1 的优化方案[3],并且证明了使用此方案后,可以和原始Paillier算法保持相同的安全性。 在使用g = n + 1后,实现密钥生成和加密过程的性能提升。 密钥生成: 把g = n + 1带入μ的生成公式,得 μ = L(gλ mod n2)-1 mod n = L((n + 1)}λ mod n2)}-1 mod n = L((1 + λ * n) mod n2)-1 mod n = λ-1 mod n μ 生成可以直接取λ 对 n的模反元素。 加密: 把g = n+1,带入加密公式,得c = gmrn mod n2 = (n + 1)mrn mod n2 = (n * m + 1) * rn mod n2 加密过程把计算g的m次幂的操作,变成了简单的乘法操作: c = (n*m+1)*rn mod n2 2.4.2 高阶幂运算优化 在优化了原始Paillier加密过程的gm幂运算后,加密操作中最耗性能的操作就是对rn高阶幂函数的计算。2010年,Ivan Damg˚ard, Mads Jurik 和 Jesper Buus Nielsen给出了优化rn这个高阶幂函数计算的方案[5],并证明了使用此方案后,可以和原始Paillier算法保持相同的安全性。 密钥生成: 要求p ≡ q ≡ 3 (mod 4), 且gcd(p – 1, q – 1) = 2. λ = (p - 1)(q - 1) / 2 选择一个随机数x,且$x ∈Zn*, h = -x2 mod n。 选择一个自然数s,对于原版Paillier, 相当于为s设定了s = 1 hs = hns mod ns + 1 优化后,新的公钥为public-key=(n, hs) 加密: 生成一个随机数α, , 其中k是密钥长度 优化后使用如下公式进行加密操作: c = (n * m + 1)hsα mod ns + 1 因为取值α << n, 使得加密计算过程中,计算hsα的性能,优于计算rn的性能. 2.4.3 使用中国剩余定理 用中国剩余定理,可以把诸如 ax mod n形式的高阶幂函数取模操作,分解为低阶幂函数对n的因子取模的操作。 由于分解操作,需要使用到生成私钥的关键数据p和q,所以使用中国剩余定理对高阶幂函数取模操作的优化,只能应用在使用私钥的解密操作中。 解密: 使用中国剩余定理优化解密算法的步骤如下: 定义分解因子p和q对应的函数 Lp(x) = (x-1) / p, Lq(x) = (x - 1) / q 计算hp ≡ (p - 1) * q (mod p), hq ≡ (q - 1) * p (mod q) 计算mp = Lp(cp - 1 mod p2) hp mod p, mq = Lq(cq - 1 mod q2) hq mod q 计算m = CRT(m_p, m_q) mod n, m 即为使用中国剩余定理优化的解密后的明文 2.4.4 性能优化对比 算法使用Python代码实现,密钥长度取2048bit, s参数取1,取模之前的幂运算均采用模幂方法优化。其中后面的优化均是在前面优化的基础上进行的优化。 图2 paillier性能优化对比 从表1和图2中可以看到,经过参数g优化和幂运算优化后,加密运算的效率较之原版方案提升了约3.26倍。经过使用中国剩余定理优化后,解密运算的效率较之原版方案提升了约3.32倍。在密钥生成上,使用了幂运算优化后,密钥生成的时间增加了约42%。考虑到密钥生成运算的次数,通常远小于加解密运算的次数,相比之下密钥生成的性能损失通常可以忽略不计。 2.5 来自多方计算的安全问题 在上面Alice和Bob使用Paillier同态加密来进行分布式梯度值计算时,Alice持有私钥,对Bob加密后的梯度数据,进行同态运算,并生成最终分布式梯度计算的梯度值。这里有一个问题,在这个场景下,虽然Alice没有获得Bob的直接或加密后的梯度数据,但Alice知道最终的梯度值,这使得Alice可以根据差分结果,猜测出Bob本次计算的梯度数据,从而产生安全问题。 在多方安全计算中,由于同态计算的算法,不一定能够提供安全保证,使得我们必须应对计算过程中可能出现的安全问题。对于Alice和Bob的计算分布式梯度值的场景,可以根据当前的学习率引入合适的扰动数据来规避差分隐私问题,或者参与计算的多方至少是三方。 3 功能扩展 在原版Paillier中,明文m的定义域是[0, n)。在Alice和Bob的进行的分布式机器学习场景中,需要能够对浮点和负数进行加密运算。在实际应用中,如果只能加密正整数,那么Paillier的应用场景会受到较大的限制。实际上,计算机的布尔电路只能对0和1的二进制数据进行计算,无论是浮点数还是负数,甚至是整数的计算,都是通过特定的计算规则来完成的,我们可以参照这些规则,实现Paiiler算法对浮点数和负数的支持。 3.1 浮点数支持 IEEE 754标准中,单精度浮点表示采用1位符号,8位阶码和23位分数。 对于浮点数,我们可以将所有参与计算的数值,编码为更小的单位,在计算完成后再解码。比如浮点数3.14,可以预先乘以100, 即3.14 = 314 * 10-2。之后计算过程中,整数部分和指数部分分别运算。 在计算机中,浮点数以符号位(Sign),阶码(Exponent)和分数(Fraction)三部分联合来标识,底数(Base)固定为2。我们仍旧以3.14为例,3.14 = 0.785 * 22 = [11.0010001]2。实际使用中,为了表示更大的范围,分数部分的取值范围要求 1 <= fraction < 2, 这样保证了分数部分的首位总是为1,这样小数部分可以隐藏首位的1。为了使阶码可以使用负数,浮点标准规定了指数部分使用一个偏移值(Bias),这样浮点数的值的计算方式为: x = -1sign * (1 + Fraction) * 2(Exponent - Bias) 在扩充Paillier算法定义域到浮点数时,浮点数各个部分的计算,均需程序来实现。这里我们参照浮点数的表示法,且不使用隐藏位,假设给定Bias=8,那么3.14就可以编码为(E = 2,F=200(0.785 * 28))。我们再把整数2,经过同样的编码,得到(E=2, F=128) 在Paillier计算中,由于阶码相同,3.14 + 2 = (E = 2, F = 328)。最终执行解码,得到328 * 2-8} * 22 = 5.125。计算结果存在较大的精度损失,实际应用中,我们可以通过增大Bias的值,来提升计算结果的精度。 对于同态数乘来说,由于不需要阶码对齐,那么只需对F值做数乘,即可得到正确的结果。同样对于3.14, 乘以3后得到(E = 2, F = 600),之后解码,得到600 * 2-8 * 22 = 9.375。同样由于示例中Bias取值问题,计算结果出现了较大的误差。 3.2 负数支持 在计算机中,负数是以补码的方式标识的。整数和负数相加,是通过溢出来使得计算结果符合预期值,如果我们把负数的字节扩充,那么会得到一个原有字节空间的最大值和对应负数之和的正数,在此基础上使用此正数进行四则运算,之后再缩容到原来的字节空间,那么得到的仍旧是正确的结果。 类似的,为了使Paillier能够支持负数的计算,我们可以给负数m_1增加一个周期值n, 来把负数m_1转换为正整数。那么对于同态加运算来说,计算结果c=ENC(m1 + m2 + n)。 此时同态加计算的结果为: 当 m1 + m2 >= 0时,DEC(c) = m1 + m2 当-n <= m1 + m2 < 0时, DEC(c) = m1 + m2 + n 当m1 + m2 < -n 时,计算结果不正确 同态数乘的计算结果为: 当k * m1 >= 0 , 时DEC(c) = k * m1 当-n <= k * m1 < 0时,DEC(c) = k * m1 + n 当k * m1 < -n时,计算结果不正确 为了统一以上出现的各种场景,我们可以做如下限定: 操作数在参与同态计算前对n取模,用来统一正数可以直接参与计算,负数则需要补n再进行计算的问题。 设定操作数的最大值MAX_VALUE,比如32位整型的最大值。并使得n的取值大于3 * MAX_VALUE,这样使得对于合法的m1和m2,不存在m1+ m2 < -n的场景,且m1 + m1 < 0时,计算结果总是大于MAX_VALUE。 至此,我们可以使用统一的规则,来处理负数参与同态运算时的各种场景。 4 主要公钥加密算法对比 Paillier,RSA和ELGamal算法均为典型的基于公钥的加密算法,我们从功能指标和性能指标两个方向,来对比这些加密算法的区别和联系。 4.1 功能指标对比 4.2 性能指标对比 对4096-bit大小的明文进行加密: 对1-bit大小的数据进行加密和解密运算,统计数据单位为ms。 5 同态加密的应用 图3 同态加密的应用 同态加密使得云计算和人工智能时代的数据,算法,算力可以解耦,对于一家企业来说,无需完整具备以上三个条件也可以在云计算和人工智能时代获取一席之地。 我们可以假设这样一个场景,协和医院拥有大量的高价值医疗行业数据,并想通过京东云服务的云计算和人工智能来进行数据分析。在同态加密之前,能够采取的方案要么时协和将隐私数据的明文提供给京东云计算来进行数据分析,使得隐私数据外泄;要么是京东为持有敏感数据的企业,采用传统的On-Premise模式,放弃云计算带来的各种便利。而同态加密,使得协和可以以安全的方式向京东云服务提供隐私数据,京东云计算也可以在不解密的情况下使用这些数据进行数据分析,从而解决了这个两难问题。依靠同态加密,使得基于数理统计相关的算法和数据可以独立开来,既可以依托于云计算的算法和算力,又完美地保护了客户的隐私数据。 同态加密的应用不止限于简单的数据分析,在以下很多场景下都有其用武之地: 隐私集合求交 在隐私集合求交中,其中一个参与方构建如下的多项式 其中ri为随机数,ci 是另一参与方提供的求交数据的同态加密之后的密文,x是己方持有的求交数据同态加密后的密文。如果ci 和x中任一数据相同,那么得到的di,在解密后的值为0,否则不为0。 联邦学习 在联邦学习过程中,联邦学习的参与者之间使用同态加密传递学习过程中的中间信息,从而避免信息接收方推断出其它参与联邦学习的参与方的私密信息,保证了联邦学习过程中的信息安全性。 门限签名 门限签名是秘密共享和数字签名技术的一种结合。传统的签名技术,私钥被保存在一个可信的中心节点中。(t, n)门限签名方案,把秘密分发给n个成员,组成一个签名群体。在这个群体中,单个成员不再具有签名的权限,只有集齐了t个或更多诚实的成员,才能对数据进行数字签名,这个的t即是门限值。门限签名防止了单个中心节点导致的秘密泄露或职权滥用,在证书颁发,多方身份识别,资产托管,电子投票等诸多领域具有应用价值。 联合风控 在银行或金融机构进行风险评估时,需要大量关于企业和个人的隐私信息。对于参与联合风控的数据提供方来说,不希望自身的隐私数据暴露给银行或金融机构,而银行和金融机构也不希望风控规则在三方环境下执行。参与联合风控的数据提供方,通过对自身数据进行同态加密,使得银行或金融机构能够正常进行风险评估,同时又不泄露数据提供方的数据信息。 同态加密技术被誉为隐私计算技术“皇冠上的明珠”,这项技术使得我们在不需要信赖云服务提供商的前提下,使用云服务提供商的计算和存储能力,从而解决了云计算中的隐私数据保护问题。同态加密技术的特点,使其在数字货币,金融应用,医疗保健等领域有着非常广泛的应用场景和实践价值。同态加密技术为云计算和云存储在应对隐私数据时,提供了一种可靠的解决方案。对同态加密技术的关注和研究,使得企业具有更多的理论和方案,来应对和解决私密信息的计算和存储问题,为数据的全面互联互通,提供了一种行之有效的解决方案。 作者:孙晓军 参考文献 [1] P. Paillier, “Public-key cryptosystems based on composite degree residuosity classes,” in Proceedings of Advances in Cryptology (EUROCRYPT’99),pp. 223–238, Prague, Czech Republic, May 1999. [2] Zhu, L., Liu, Z., Han, S.: Deep leakage from gradients. In: Annual Conference on Neural Information Processing Systems (NeurIPS) (2019) [3] D. Choi, S. Choi, and D. Won, “Paillier’s cryptosystem revisited,” in Proceedings of the 8th ACM Conference on Computer and Communications Security(CCS’01), pp. 206–214, Philadelphia, Pennsylvania, USA, Nov. 2001 [4] I. Damgard and M. Jurik. A generalization, of Paillier's Eurocrypt '99, volume 1592 of LNCS. IACR,Springer-Verlag, 1999. [5] I. Damg˚ard, J. Jurik, and J. Nielsen, “A generalization of paillier’s public-key system with applications to electronic voting,” International Journal of Information Security, no. 9, pp. 371–385, 2010. [6] Cao, Z. and Liu, L., "The Paillier's Cryptosystem and Some Variants Revisited." arXiv preprint arXiv:1511.05787,2015.

优秀的个人博客,低调大师

京东云开发者|提高IT运维效率,深度解读京东云AIOps落地实践

基于深度学习对运维时序指标进行异常检测,快速发现线上业务问题 时间序列的异常检测是实际应用中的一个关键问题,尤其是在 IT 行业。我们没有采用传统的基于阈值的方法来实现异常检测,而是通过深度学习提出了一种无阈值方法:基于 LSTM 网络的基线(一个 LSTM 框架辅助几个优化步骤)和无监督检测(神经网络和多种机器学习算法的组合)协同综合分析时间序列。当时间序列显示出清晰的周期性形态的情况下基线表现良好,而无监督检测在效率要求高且周期性不太清晰的情况下表现出色。通过两个并行模块的互补设计,可以在不依赖阈值设定和调整的情况下实现无阈值异常检测。京东云内部实践证明,我们所提出的无阈值方法获得了准确的预测和可靠的检测。 在过去的几年中,aiops业界提出了各种解决异常检测问题的方法。机器学习 (ML) 和深度学习 (DL) 颇受欢迎。在传统的 ML 中,通常采用 K-means、基于密度的空间聚类和隔离森林 (IForest)等聚类方法。除了 ML,由于其强大的逼近能力,使用深度神经网络 (DNN) 进行时间序列预测和异常检测被越来越多的算法同学使用。多层感知器 (MLP) 是一种基本的 DNN 架构,用于评估时间序列上异常检测的性能。此外,循环神经网络 (RNN) 及其变体,如长短期记忆 (LSTM) 网络和门控循环单元 (GRU) 是解决与时间序列相关的问题的常用方法。 对于大多数上述用于解决异常检测的方法,一般是时间序列是否超出预定义的上限和下限。然而,固定阈值无法表征具有内在动态趋势变化的时间序列,从而导致异常分析不准确。此外,由于单个阈值无法涵盖所有​异常情况,因此该方法也容易遗漏异常。此外,设置上限和下限的过程是一项复杂且重要的任务,总是需要为各种情况定义新的阈值,耗时长且迁移性差。 为了解决上述问题,我们介绍一种新方法,即通过 DL 进行无阈值异常检测。 我们的方法不需要预定义上限和下限,而是通过抽取一些易于调整的参数,在小范围内自动搜索适配不同场景的监控数据,进而实现无阈值异常检测:基于 LSTM 网络的基线模块(LnB)和无监督检测模块(UnD)。具体来说,LnB 生成基线,该基线能够以自适应和自动的方式表征时间序列的动态特征。 LnB 的框架是用 LSTM 网络构建的,长短周期识别方法是此框架的贡献之一,它引入了一种纠正机制,可以实现更准确的拟合,生成的基线描述了检测到的时间序列的主要特征,提供了替代传统阈值的限制。 UnD是一种DL和多种ML算法的合并模型,基于投票机制从各个角度检测到的时间序列是否正常。两个模块中的任何一个检测到异常表明发生了异常。两个模块的融合使我们所提出的方法能够以互补和全面的方式有效地分析具有不确定性或各种周期性的时间序列。 时间序列X=(x1, x2, ..., xt),我们的目标是确定下一步 xt+1 的值是否异常。历史值有助于模型学习指标当前和未来的状态,但与预测值距离越近的点对模型预测的影响越大。因此,我们选择使用时间序列 Xt-T:t 的序列,而不是取时间序列的单个步长或整个历史序列来进行异常检测。 T 是选择作为模型训练输入的序列长度。下图1为无阈值异常检测的总体框架包括两个阶段,即训练过程和在线检测。 LnB 和 UnD两个模块都可以单独完成异常检测。但是两个模块有不同的擅长方面,每个模块的结构差异为检测到的时间序列提供了不同维度的检测结果。其中,LnB将更长时期的历史数据输入到模块中,它可以很好地说明特定时间序列的长期行为,但是 LnB 对那些周期性不明确的指标的异常检测能力较弱。相反,UnD 从一个 DL 模型和多个 ML 模型中获得投票结果,对具有不确定性或各种周期性的时间序列具有更强的鲁棒性。此外,UnD 在输入的检测指标的历史数据不足的情况下提供了更合理的检测。 图 1 中的实线箭头表示前向流,而虚线箭头表示反向传播训练。在得到每个模块的检测结果后,根据为每个模块设置的损失函数分别对LnB和UnD进行反向传播训练,LnB和UnD都进行更新,即模型训练。在模型训练之后,LnB 学习生成一个自适应基线,同时,LnB为UnD赋予 基于无监督学习预测未来异常状态的能力。 在线检测不需要训练步骤,所以按入参格式输入时间序列,可直接得到检测结果。这训练和在线检测两个模块的详细介绍如下: 其中 f 表示模型学习所采用的网络,Ti 表示第 i 天的数据。 在训练阶段,a 和 b 会及时随着传入的指标数据自动更新,形成可适应的基线。在测试状态下,y ' final 是我们的最终预测。长短周期识别的重点是引入校正项,为历史上最有价值的“记忆”赋予更多的权重。 如上所述,有两种方法用于识别长短周期,即峰值检测和 SBD距离计算。每天的峰值数量、每天的峰值最大值以及每天第一和第二个最大值的残差是用于识别长短周期,除了这种峰值检查,SBD 是识别长短周期的替代方法。假设我们有两个输入序列 X 和 Y(在我们的例子中,14 天的数据被平均分成两部分)。两个序列的SBD结果可以根据以下等式计算, 其中 SBD 的范围从 0 到 2,在我们的案例中 s=0。 SBD 越小,说明两个序列属于同一周期的相似度越高。 最佳开始时间通过寻找不同时间粒度(如10s 和 1min)下的最佳开始时间来关注拟合精度。待检测的时间序列总是遵循一定的周期性,但根据我们的实验验证,在不同位置选择的开始时间可能会导致拟合精度不同。我们选取均方根误差 (RMSE) 用作优化搜索过程的目标函数: 其中 y' 代表预测结果,而 y 代表基本事实。 k 表示检测到的序列中的第 k 个起始位置。采用L-BFGS通过最小化目标函数实现自动搜索。 基线生成 LnB 的核心过程是基线生成。与RNN相比,LSTM包含了三个门,即遗忘门、输入门和输出门,这种门设计在识别历史中的重要信息方面表现出更好的性能,减轻了对远程历史的依赖和梯度消失。输入数据经 LSTM,输出理论上暗示了正常数据的期望。因此,我们将损失函数训练为: 通过减少实际值和预测值之间的误差,网络可以学习预测时间序列的正常行为。 我们选择 95% 置信区间,计算基线的上限和下限: LnB 的最后一步是自适应调整,这是实现“自适应”的关键步骤。通过 LSTM 获得的上限和下限是初始基线。然后通过极值点平滑和插值修改初始基线。即初始基线中的所有峰点和谷点都形成了初始上限和下限。然后采用拉格朗日插值进行细粒度数据填充以形成平滑的基线。 DL (GRU) 和 ML(IForest、基于角度的异常值检测-ABOD 和基于集群的局部异常值因子-CBLOF)从多个级别检测异常,不需要标签信息或阈值定义。作为回归任务,GRU 学习给定时间序列的正态分布并输出对未来的预测。与 LSTM 从长期历史中捕捉内在特征的能力相比,GRU 在数据量不足且需要效率的情况下理论上表现良好。与 LnB 不同,UnD 将较短的序列作为输入。因此,UnD 中的 GRU 单元是 LnB 的补充。另一方面,IForest、ABOD 和 CBLOF 是用于异常检测的三种基于 ML 的聚类算法。 UnD的最终检测是GRU、IForest、ABOD和CBLOF通过投票方案的合并结果。 对于 GRU,我们采用与 LnB 相同的损失函数。区别在于输入长度(在下一节中解释)。训练有素的 GRU 会给出预测的准确值 y'。在这里,定义异常权重 (AW) 以确定预测是否异常。 AW 是异常识别的关键决定因素,并且根据经验知识自动学习以满足在我们的案例中检测到的异常百分比应在 1%-3% 以内的条件。当涉及到不同的领域或数据集时,也可以根据经验知识确定 AW。 IForest、ABOD和CBLOF是常用的异常值检测方法,它们的输出结果可以看作是一个描述异常概率的分数。然后将所有 GRU、IForest、ABOD 和 CBLOF 的检测结果编码并拼接成一个 one-hot 矩阵,其中 0 表示正常,1 表示异常,如图 3 所示的示例。接下来,我们得到每个时间步对应的“1”的总数。通过与投票数 n (在我们的例子中 n = 2)的比较,如果“1”的总数不小于 n ,则合并结果被检测为异常,反之亦然。 n 是一个参数,需要通过几个简单的试验来确定,例如逐渐增加值或缩小范围。 通过投票方案的合并结果可以从不同方面揭示内在特征,因为 GRU 的回归结果包含显示增加或减少趋势的精确值,而 ML 结果呈现 0 或 1 仅表示异常与否,但具有更准确的决策,因为这些模型可以利用从附加维度或测量中捕获的信息(例如,基于角度视角的 ABOD 和基于概率视角的 CBLOF)。因此,多个高级算法的合并结果可以充分利用给定的数据进行全面的预测。 我们的模型主要有三个步骤,详细介绍如下: 第一步:数据预处理 LnB和UnD对数据拆分和连接有不同的要求,两个模块的输入数据是不同的。例如,当前时间为 t,时间序列的周期性为 T(如 7 天)。我们的目标是检测 t+1 时刻的值是否异常。在这种情况下,LnB 的输入是过去 2*T 周期(即 14 天)收集的历史数据。选择 2*T 周期的原因是 14 天之前的历史数据重要性较低,如果只收集一个周期的数据,可能会受到异常事件的影响。相反,UnD采用最相关的信息而不是使用长历史,并且选择三个滑动窗口覆盖的序列作为输入数据。三个窗口的长度分别为 30 分钟、60 分钟和 60 分钟。 从图4可以看出,UnD输入中有3个段串联,即[Xt-30min:t, Xt+1-1day-30min:t+1- 1day+30min, Xt+1-7days-30min: t+1-7 天+30 分钟]。这种连接提供了一种新的输入结构设计,为特征学习和未来预测提供了最相关的信息。总之,LnB 将过去 14 天的序列作为输入,而 UnD 将过去 30 分钟、1 天前的 60 分钟和 7 天前的 60 分钟作为输入。 数据填充采用 K-NN 作为数据填充方法,以确保所有输入样本的长度相同且可读。数据过滤为保证输入数据的有效性,对输入数据进行平滑过滤,以消除因噪声引起的毛刺。数据转换对训练结果和快速收敛非常重要。在输入训练过程之前,原始数据还需要一个转换过程,包括归一化和对数转换,如(7)所示。 归一化避免了不同维度的副作用,有利于模型快速收敛。此外,它还确保输出不会超过输入的最小值和最大值,因为在输出上实施了指数变换。同时,对数变换可以在不改变数据特征和数据相关性的情况下,减轻方差,平滑变化。 第二步:模型训练 如图 1 中的流程图所示,LnB 和 UnD 都是根据训练数据分别训练的。但是,如上所述,两个模块的输入是不同的。 LnB 将较长的历史数据作为输入,并尝试捕获检测到的时间序列的丰富信息,而 UnD 将最相关但较短的序列部署为训练数据。 UnD 中的GRU和 LnB通过减少第二部分中介绍的损失函数来学习检测到的序列的正常行为。同时,IForest、ABOD 和 CBLOF 学习了无监督聚类模型。上述单元的所有输出都是一步超前的异常检测。 第三步:在线异常检测 在运行时,传入的数据首先进入预处理模块,然后同时进入LnB和UnD。输入数据的格式应与训练阶段一致。如果两个模块的任一结果异常,则提示待检测数据异常。LnB和UnD的融合机制对时间序列进行了全面的检测,降低了潜在异常遗漏的概率。另一方面,LnB 中较长的历史输入和 UnD 中的多模型投票方案有效地避免了将正常的误认为是异常的。 经过京东内部多场景多组数据验证,模型在线上运行的效果评估如下表所示: 此外,可以灵活选择“and”或“or”来整合LnB和UnD的结果。没有统一的规则,要看实际场景的需求。在我们的落地实践场景中,这两个数据集都需要保证召回率,因此我们采取“或”操作,这意味着无论哪个检测到异常都会报警。如果需要较低的警告级别,我们可以选择“和”作为积分运算。选择三个流行的基线 IForest、ABOD 和 CBLOF 进行比较。此外。我们还比较了我们的方法和单独使用 LnB 或 UnD 的方法的结果,如上表所示。从定量比较中,很明显,所提出的方法,即 LnB+UnD 在两者中都获得了最高的 F1 分数数据集。 LnB+UnD 的组合比单独采用 LnB 或 UnD 效果更好。而且我们的模型优于其他三个基线,这也证明了我们并行机制的有效性和必要性。 我们提出的一种用于时间序列分析的无阈值异常检测方法,即 LSTM 构建的 LnB和DL、ML 模型融合机制构建的 UnD,以互补和智能的方式实现异常检测。在具有不同长短周期和变化趋势的真实实践场景的两个数据集上进行了实验,比较结果证明了我们方法的有效性和准确性。 Threshold-free Anomaly Detection for Streaming Time Series through Deep Learning. ICMLA. ieeexplore检索:https://ieeexplore.ieee.org/abstract/document/9680175 作者:张静

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册