李宏毅anomaly detection_异常检测(7/7)

课程视频地址ref:

文章目录

  • # 7- 1
  • # 7-2 类一_CASE1
  • # 7-3
  • # 7-4
  • # 7-5 类二_CASE2
  • # 7-6
  • #7-7 加入更多features

# 7- 1

设训练数据(Training data)为(x1,x2,…,xN),x为输入

目的:构造一个function,以探究侦测出输入x与训练集数据到底是否相似
李宏毅anomaly detection_异常检测(7/7)_第1张图片

  • 如何定义异常(anomaly)——不同的traning data会导致不同的侦测结果
  • 应用:
  1. 诈欺侦测
    李宏毅anomaly detection_异常检测(7/7)_第2张图片
  2. 网络攻击侦测
    李宏毅anomaly detection_异常检测(7/7)_第3张图片
  3. 癌症侦测
    在这里插入图片描述
  • 怎么做异常侦测?
    ——是否可以视为二分类(binary classification)问题,给出nomal&anomaly的数据呢?
    不太行,因为“异常”的情况包含太多了,变化太大;而且“异常数据”往往更难获取。
  • 将异常检测分为两类
  1. Open-set Recognition(开集识别): 给定training data以及分属类别label,训练出一个classifier
    李宏毅anomaly detection_异常检测(7/7)_第4张图片
  2. Close-set Recognition(闭集识别):训练数据training data是没有label的,又可以分为clean和polluted两类。较常遇到的是后者——我们有训练资料但是很难保证它是完全clean没有包含异常数据的。
    李宏毅anomaly detection_异常检测(7/7)_第5张图片

# 7-2 类一_CASE1

  • 问题:识别辛普森家庭成员
  • training输入:(x1,x2,…,xN)图片 &
    (y1,y2,…,yN)人物标注
    李宏毅anomaly detection_异常检测(7/7)_第6张图片
  • 实际上,我们期待分类器可以输出分类和一个表征预测自信度的分值(c)
    我们设置一个信心阈值λ,若信心分数大于λ就说明是来自于辛普森家庭
    李宏毅anomaly detection_异常检测(7/7)_第7张图片
    李宏毅anomaly detection_异常检测(7/7)_第8张图片那么结果将会是——
    李宏毅anomaly detection_异常检测(7/7)_第9张图片
  • 信心分值如何从定性→定量呢?
    1、将分类器输出的分布中,概率最高的值作为confidence score
    2、对分类器输出的分布作交叉熵,交叉熵越大说明越评价,越难以判别检测,c值会越低
  • 输入大量数据得到的c值分布
    1、若输入的是辛普森家庭的人物
    李宏毅anomaly detection_异常检测(7/7)_第10张图片红色点表示辨识错误,蓝色反之;几乎所有蓝色样本点都集中在1.0处,c值很高
    2、 若输入的是非辛普森人物
    仍然会有10%的图片具有较高的信心c值,而剩下的大部分都分布在分值较低的区域
    李宏毅anomaly detection_异常检测(7/7)_第11张图片复习以上框架:
    我们有大量的训练资料,且训练资料具有标注(辛普森家庭哪个人物),因此我们可以训练一个分类器。不管你用什么方法,总可以从分类器中得到对所有图片的信心分数。然后就根据信心分数建立异常侦测的系统,若信心分数高于某个阀值(threshold)时就认为是正常,若低于某个阀值(threshold)时就认为是异常

    李宏毅anomaly detection_异常检测(7/7)_第12张图片

# 7-3

  • Dev Set-验证集:用于调整超参数,防止过拟合,同样地,也需要提供label
    计算分类器在验证集上的表现结果,用来衡量参数、阈值(threshold)的设置优劣
  • 如何来评估一个异常侦测系统的好坏呢?
    一个系统很可能有很高的正确率,但是means nothing,因为真实系统里本身“正常-故障”样本数的比例就是很悬殊的
  • 该选择什么作为“评估指标”?
    异常侦测中有两种错误:一种错误是异常的资料被判断为正常的资料,另外一种是正常的资料被判为异常的资料
    【画混淆矩阵】
    李宏毅anomaly detection_异常检测(7/7)_第13张图片
    false alarm和missing在不同问题中,严重程度不一,也就有不同的cost→有一个【Cost Tabel】李宏毅anomaly detection_异常检测(7/7)_第14张图片
  • 常用的评估指标:Area under ROC curve(AUC)。
    若使用这种衡量的方式,你就不需要决定阀值(threshold),而是看你将测试集的结果做一个排序(高分至低分),根据这个排序来决定这个系统好还是不好

# 7-4

之前已经解决了一些问题,假设现在做一个猫和狗的分类器,将属于的一类放在一边,属于狗的一类放在一边。若输入一系列没有猫的特征也没有狗的特征的数据,机器不知道该放在哪一边,就可能放在这个boundary上,得到的信息分数就比较低,你就知道这些资料是异常的。
但是有些资料会比猫更像猫(老虎),比狗还像狗(狼)。机器在判断猫和狗时是抓一些猫的特征跟狗的特征,也许老虎在猫的特征上会更强烈,狼在狗的特征上会更强烈。对于机器来说虽然有些资料在训练时没有看过(异常),但是它有非常强的特征会给分类器很大的信心看到某一种类别。
但是显然这样的分类是不对的。
李宏毅anomaly detection_异常检测(7/7)_第15张图片李宏毅anomaly detection_异常检测(7/7)_第16张图片

这一问题的解决:
其中的一个解决方法是:假设我们可以收集到一些异常的资料,我们可以教机器看到正常资料时不要只学会分类这件事情,要学会一边做分类一边看到正常的资料信心分数就高,看到异常的资料就要给出低的信心分数
但是会遇到的问题是:很多时候不容易收集到异常的数据。有人就想出了一个神奇的解决方法就是:既然收集不到异常的资料,那我们就通过Generative Model生成异常的资料。这样你可能遇到的问题是:生成的资料太像正常的资料,那这样就不是我们所需要的。所以还要做一些特别的constraint,让生成的资料有点像正常的资料,但是又跟正常的资料又没有很像。接下来就可以使用上面的方法来训练你的classifier

# 7-5 类二_CASE2

  • 只有training data没有它们的label
  • 问题:多用户联机游戏下的小学生用户侦测
  • 输入:每一个x代表一个玩家,首先这个玩家能够表示为feature vector。向量的第一维可以是玩家说垃圾话的频率,第二维是统计玩家无政府状态发言……(x_1,x_2,…)
  • 我们期待找到一个能够定义“小学生用户”(异常信号)的模型,它能告诉我们这个用户是小学生的概率P(x),当某个用户大于某个阈值,则认为是正常用户;反之则为小学生
    李宏毅anomaly detection_异常检测(7/7)_第17张图片从这个图上可以很直觉的看出一个玩家落在说垃圾的话几率低,通常在无政府状态下发言,这个玩家有可能是一个正常的玩家。假设有玩家落在有五成左右的几率说垃圾话,二成的几率在无政府状态下发言;或者落在有七成左右的几率说垃圾话,七成的几率在无政府状态下发言,显然这个玩家比较有可能是一个不正常的玩家。
    我们直觉上明白这件事情,但是我们仍然希望用一个数值化的方法告诉我们玩家落在哪里会更加的异常。

# 7-6

  • 假设概率密度函数fθ(x)能够帮助我们描述这个概率P(x)。θ是未知的,需要从数据中获取,并且是概率密度函数的参数。
  • 我们需要likelihood这个概念:我们收集到n笔资料,假设我们有一个概率密度函数fθ(x),假设这个概率密度函数生成了我们所看到的数据,而我们所做的事情就是找出这个概率密度函数究竟是多少。
  • likelihood表征根据fθ(x)的数据几率有多大。其计算公式如下李宏毅anomaly detection_异常检测(7/7)_第18张图片
    所以θ的选择对于fθ(x)至关重要,从而决定了likelihood的取值→我们的目的就是确定一个将可能性最大化的θ值

李宏毅anomaly detection_异常检测(7/7)_第19张图片在这里插入图片描述
李宏毅anomaly detection_异常检测(7/7)_第20张图片

#7-7 加入更多features

当然可以加入更多特征:
李宏毅anomaly detection_异常检测(7/7)_第21张图片

  • 上述是用生成模型(Generative Model) 来进行异常侦测这件事情,我们也可以使用Auto-encoder来做这件事情
    李宏毅anomaly detection_异常检测(7/7)_第22张图片
    李宏毅anomaly detection_异常检测(7/7)_第23张图片
    我们把所有的训练资料训练一个Encoder,Encoder所做的事情是将输入的图片(辛普森)变为code(一个向量),Decoder所做事情是将code解回原来的图片。训练时Encoder和Decoder是同时训练,训练目标是希望输入和输出越接近越好。
    测试时将一个图片输入Encoder,Decoder还原原来的图片。如果这张图片是一个正常的照片,很容易被还原为正常的图片。因为Auto-encoder训练时输入的都是辛普森家庭的图片,那么就特别擅长还原辛普森家庭的图片。李宏毅anomaly detection_异常检测(7/7)_第24张图片

你可能感兴趣的:(李宏毅anomaly detection_异常检测(7/7))