这篇文章是李宏毅老师的在线课程youtube.com/watch? 的笔记内容,推荐大家去看原视频。

异常检测,简单的说,就是给定一个训练集 {x^1, x^2,...,x^N}

我们希望可以找到一个函数,是的可以检测Input x是否和训练集相似。

我们找出来的内容是与训练数据集不太一致的内容。

异常检测的应用

异常检测有很多应用,比如

  • 欺诈检测:信用卡刷卡行为
  • 网路侵入检测:哪些是正常连线,哪些是攻击行为?
  • 癌细胞检测

一个很直觉的想法是收集一堆异常数据,收集一堆正常数据,然后来做二分类?问题没有那么简单。一般来说,收集异常的资料比较困难。比如就信用卡侦测,多数的资料都是正常的交易,而异常的数据非常难收集。针对这些问题,会有各种各样的上采样、下采样方法,数据增量的策略。不过这篇文章先不涉及这些啦,之后再慢慢解释。

异常检测会有三种,一种是每一笔数据都有label,但是当遇到新数据时,如果说新数据不属于之前的任何一类,分类器要能够把这一类标注为"unknown",一个是所有的训练数据都是正例。第三种是手上的资料都是正常的,但是有一部分是异常的混了进来。

使用分类器来做异常检测

最常用的异常检测方法,就是使用分类器来做异常检测的原理是,分类器不但需要输出类别,还会输出一个置信度c,然后异常检测的时候

f(x)= egin{equation}   left{                egin{array}{**lr**}                normal, &c(x)geq lambda  \               anomaly, &c(x)leq lambda.\                end{array}   
ight.   end{equation}

像下面这张图片,这个分类器是用来判断图片是否是辛普森家庭的。根据最大的类别的分数,可以确定是否是异常。

那么这就是论文Network for Confidence Estimation的内容啦,就是用分类器产出置信度

使用分类器带来的问题

比如说我们看看下图,虽然说猫猫和狗狗的确可以通过分类器辨别开,但是接收到一些新事物,比如说老虎,狼等具有和分类器能辨别的类别类似的对象时,可能会产生误判。

针对这点,现在的理论说通过GAN的方式来生成一些异常的数据。

无监督学习

假设我们的数据是没有标签的,那么异常检测又怎么做呢?

我们的做法是,假设我们的数据是从一个分布 f_	heta(x) sample出来的,我们需要找到一组 参数	heta ,使得在这组参数下,这个分布能够产生出这组数据的可能性最大。也就是计算这组数据的最大似然:

L(	heta) = f_{	heta}(x^1)f_{	heta}(x^2)...f_{	heta}(x^N)

我们要找到一组 	heta ,让上式中的 L(	heta) 最大,也就是找到 	heta^* , 使得

	heta^* = argmax_	heta L(	heta)

那么f(x) 又长什么样呢?我们常用的一个是高斯分布,也就是:

f_{mu,sum}(x) = frac{1}{(2pi)^{D/2}} frac{1}{|sum|^{1/2}}exp{-frac{1}{2}(x-mu)^TSigma^{-1}(x-mu)}

这个公式可以看成输入一个向量x, 输出的是该条件分布产生x的概率。这个公式是由 mu, Sigma 这两个参数来决定的,这两个参数也就是上文我们说的 	heta 。也就是说,上式中的最大似然计算公式变为:

L(mu, Sigma) = f_{mu, Sigma}(x^1)f_{mu, Sigma}(x^2)...f_{mu, Sigma}(x^N)

然后我们穷举所有找到的 mu, Sigma ,看看那一组可以使得 L(mu, Sigma) 最大,也就是:

mu^*, Sigma^* = argmax_{mu, Sigma}L(mu, Sigma)

如果是下图,则可以看到在密集区域的 mu 的最大似然会比在稀疏区域找到的 mu 会有更大的最大似然

一般来说,其实 mu, Sigma 的计算是有公式的啦。这一块的内容涉及概率统计,有兴趣的同学可以再去看看。

mu^* = frac{1}{N} sum_{n=1}^N x^n\ Sigma^* = frac{1}{N} sum_{n=1}^N(x-mu^*)(x-mu^*)^T \

我们找到了这组参数后,就可以来做异常检测了。 其实和有监督的异常检测是类似的。

f(x)= egin{equation}   left{                egin{array}{**lr**}                normal, &f_{mu^*, Sigma^*}(x)geq lambda  \               anomaly, &f_{mu^*, Sigma^*}(x)leq lambda.\                end{array}   
ight.   end{equation}

其余的办法:Auto-Encoder

还有一些别的方法,比如说Auto-Encider等。训练的时候,同时训练Encoder 和Decoder,就是把输入进行Encoder解码成一个向量后,再通过Decoder解回来。如果是异常的图片,还原度就会很低,如果是正常的图片,则还原度会高。

异常检测的评估指标

异常检测的case中,往往数据集非常不均衡。异常的资料要远少于正常的资料。如果用常用的分类指标accuracy来衡量的话,那么一个把所有的内容都判别为正例的系统(其实完全没有起作用)也能有很高的accuracy。所以一般我们会用TPRFPR的指标来看,而真正例和假正例会根据系统的不同状况乘上不同的权重。比如说如果做癌症检测,那么查全率更加重要。当然还有ROC curve这样的指标也很常用。


推荐阅读:
相关文章