首页 > 其他分享 >Deep One-Class Classification

Deep One-Class Classification

时间:2023-06-07 16:11:39浏览次数:38  
标签:ell Classification boldsymbol Deep 超球 mathcal SVDD Class

Deep One-Class Classifification

Deep SVDD (Deep Support Vector Data Description)训练一个神经网络,最小化包含数据表征的超球的体积(如图1所示)

image-20230606193307205

Deeo SVDD的目标函数

soft-boundary Deep SVDD

输入空间 \(\mathcal{X} \subseteq \mathbb{R}^d\) 和输出空间 \(\mathcal{F} \subseteq \mathbb{R}^p\)。\(\phi(\cdot ; \mathcal{W}): \mathcal{X} \rightarrow \mathcal{F}\) 为一个拥有 \(L \in \mathbb{N}\) 层隐层的神经网络。\(\mathcal{W}=\left\{\boldsymbol{W}^1, \ldots, \boldsymbol{W}^L\right\}\) ,其中 \(W^{\ell}\) 表示第 \(\ell \in\{1, \ldots, L\}\) 层的权重。\(\phi(\boldsymbol{x} ; \mathcal{W}) \in \mathcal{F}\) 表示输入 \(\boldsymbol{x} \in \mathcal{X}\) 经过参数为 \(\mathcal{W}\) 的神经网络 \(\phi\) 后得到的表征。Deep SVDD的目标是在学习网络参数 \(\mathcal{W}\) 的同时,最小化输出空间 \(\mathcal{F}\) 中半径为 \(R>0\) ,中心为 \(c \in \mathcal{F}\) 的封闭数据超球的体积。给定 \(\mathcal{X}\) 上的一些数据集 \(\mathcal{D}_n=\left\{\boldsymbol{x}_1, \ldots, \boldsymbol{x}_n\right\}\) ,我们将soft-boundary Deep SVDD 目标定义为

\[\begin{aligned} \min _{R, \mathcal{W}} & R^2+\frac{1}{\nu n} \sum_{i=1}^n \max \left\{0,\left\|\phi\left(\boldsymbol{x}_i ; \mathcal{W}\right)-\boldsymbol{c}\right\|^2-R^2\right\} \\ & +\frac{\lambda}{2} \sum_{\ell=1}^L\left\|\boldsymbol{W}^{\ell}\right\|_F^2 \end{aligned} \tag{3} \]

  • 最小化 \(R^2\) 就是最小化超球体的体积。
  • 第二项是对于经过神经网络后落在球外的点的惩罚项,即其距离 \(\| \phi\left(\boldsymbol{x}_i ; \mathcal{W}\right)- \boldsymbol{c} \| > R\)。超参数 \(\nu \in(0,1]\) 控制球体体积与超出边界之间的权衡,即它允许一些点进过映射后,落在超球体外面。参数 \(v\) 实际上允许我们控制模型中异常值的比例。
  • 最后一项是网络参数\(\mathcal{W}\) 上的权重衰减正则器,其中\(\|\cdot\|_F\) 表示F范数.

优化目标(3)让网络学习参数 \(\mathcal{W}\),使数据点紧密映射到超球的中心 \(c\)。为了实现这一目标,网络必须提取数据变化的共同因素。因此,正常样本被紧密映射到中心c,而异常样本则被映射到远离中心或超球外的地方。

One-Class Deep SVDD

对于我们假设大多数训练数据 \(\mathcal{D}_n\) 是正常的情况,这是在单类分类任务中经常出现的情况,我们提出了一个额外的简化目标。我们定义 One-Class Deep SVDD 的目标函数为

\[\min_{\mathcal{W}} \frac{1}{n}\sum_{i=1}^n\| \phi(\boldsymbol{x}_i; \mathcal{W}) - \boldsymbol{c} \|^2 +\frac{\lambda}{2} \sum_{\ell=1}^L\left\|\boldsymbol{W}^{\ell}\right\|_F^2 \tag{4} \]

One-Class Deep SVDD 简单地使用二次损失来惩罚每个网络表示 \(\phi(\boldsymbol{x}_i; \mathcal{W})\) 到 \(c \in \mathcal{F}\) 的距离。第二项是一个带超参数 \(\lambda > 0\) 的网络权衰减正则器。

在soft-boundary Deep SVDD中,超球通过直接惩罚半径和落在球外的数据表示来收缩。与soft-boundary Deep SVDD 不同,One-Class Deep SVDD通过最小化所有数据表示到中心的平均距离来收缩球。惩罚所有数据点的平均距离,而不是允许一些点落在超球之外,这与one-class假设是一致的。

异常分数

对于给定的测试点 \(\boldsymbol{x} \in \mathcal{X}\),我们可以很自然地通过该点到超球中心的距离定义Deep SVDD的两个变体的异常分数,即

\[s(\boldsymbol{x})=\| \phi(\boldsymbol{x}_i; \mathcal{W}^*) - \boldsymbol{c} \|^2 \tag{5} \]

其中 \(\mathcal{W}^*\)是训练模型的网络参数。对于soft-boundary Deep SVDD,我们可以通过减去训练模型的最终半径 \(R^*\) 来调整这个分数,这样异常(具有球外表示的点)具有正分数,而正常具有负分数。

Deep SVDD的优化

我们使用随机梯度下降(SGD)及其变体(例如,Adam),使用反向传播来优化两个深度SVDD目标中的神经网络的参数 \(\mathcal{W}\)

对于soft-boundary Deep SVDD,我们建议使用alternating minimization/block coordinate descent approach,交替优化网络参数 \(\mathcal W\) 和半径 \(R\)。也就是说,在半径 \(R\) 固定的情况下,我们训练 \(k\in \mathbb{N}\) 个epoch的网络参数 \(\mathcal W\)。然后,在每 \(k\) 个epoch之后,我们使用最新更新的网络参数 \(\mathcal W\) 来求解给定网络数据表示的半径 \(R\)。\(R\) 可以很容易地通过行搜索求解。

Deep SVDD的性质

对于不正确的网络或超球中心 \(c\),Deep SVDD会学习琐碎的、无信息的解决方案。

All-zero-weights solution

权重 \(\mathcal W_0\) 是全0的话,网络产生一个常数函数映射到超球中心,即对于任意的 \(x \in \mathcal{X}\), \(\phi(x;\mathcal{W}_0)=c_0\in \mathcal{F}\)。如果 \(c =c_0\),则会Deep SVDD的最优解为 \(\mathcal{W}^*=\mathcal{W}_0,R^*=0\)。我们称呼这种解为“超球体坍缩”(hypersphere collapse),因为超球半径为0。

根据经验,我们发现,将一些训练数据样本进行初始向前传递后产生的网络表示的平均值作为 \(c\) 是一个很好的策略。同时我们发现将 \(c\) 固定在初始网络输出的附近,可以使SGD收敛更快,更鲁棒。

Bias terms

如果网络中的隐藏层有偏移项 bias,则可能会学习到一个常数函数映射,使得其与输入无关,导致超球体坍缩。

对于输入 \(x \in \mathcal{X}\),第 \(\ell\) 层的输出为

\[z^{\ell}(\boldsymbol{x})=\sigma^{\ell}(\boldsymbol{W}^\ell \cdot z^{\ell-1}(\boldsymbol{x})+\boldsymbol{b}^\ell) \]

其中 \(\cdot\) 表示线性变换,\(\sigma^\ell(\cdot)\) 为第 \(\ell\) 层的激活函数,第 \(\ell-1\) 层的输出为 \(z^{\ell-1}(\boldsymbol{x})\) 。当 \(\boldsymbol{W}^\ell=\boldsymbol{0}\) 时,\(z^\ell(\boldsymbol{x})=\sigma^\ell(\boldsymbol{b}^\ell)\) ,第 \(\ell\) 层的输出与输入 \(x\) 无关。

因此具有Deep SVDD的神经网络中不应该使用偏差项,因为该网络可以直接学习到映射到超球中心的常数函数,从而导致超球坍塌。

Bounded activation functions

具有有界激活函数的网络单元可能对一个特征的输入饱和,从而模拟下一层的偏置项,这会导致超球坍缩。

考虑激活函数 \(\sigma\) 的上界 \(B:=\sup_z\sigma(z) \neq 0\),然后特征 \(k\) 在所有输入样本中都大于0即 \(z_i^{(k)}>0,i=1,\dots,n\)。那么,可以选择第 \(k\) 个元素的权重足够大(将所有其他网络单元的权重设置为零),从而导致 \(\sigma(w_kz_i^{(k)})\) 无限接近上界 \(B\)

因此,在Deep SVDD中,应该优先使用像ReLU这样的无界激活函数(或仅以0为界的函数),以避免由于“习得”偏差项而导致的超球崩溃。

总结上面的分析:

  • 超球中心 \(c\) 的选择必须无法得到全零解
  • Deep SVDD中的神经网络应该没有偏置项
  • Deep SVDD中不应该使用有界激活函数

标签:ell,Classification,boldsymbol,Deep,超球,mathcal,SVDD,Class
From: https://www.cnblogs.com/EIPsilly/p/17463572.html

相关文章

  • spring boot 集成 Neo4j org.neo4j.ogm.metadata.DomainInfo.useClassgraph(DomainIn
    springboot版本:2.2.13.RELEASE 问题在于引入后,报错spring-boot-starter-data-neo4j<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId></dependency>  *......
  • DeepBurning:神经网络系列学习加速器自动生成
    介绍一下这篇论文所做的工作。Introduction首先是背景方面,现在出现了CNN、RNN、LSTM等多种神经网络,如何使用硬件加速的方法让这些网络跑的更快?现在已经有的工作:1.GPGPU加速矩阵乘法,可以处理非常大规模的CNN和多种GPU支持的学习框架,但缺点是硬件开销非常大,难以应用在嵌入式......
  • Java 深入学习(3) —— 抽象类(Abstract Class) 与 接口(Interface)的区别
    抽象类(AbstractClass)Java提供一个叫抽象方法的机制,这种方法是不完整的,仅有声明而没有方法体。abstractvoidf();包含抽象方法的类叫做抽象类。如果一个类包含一个或者多个抽象方法,则该类必须被限定为抽象的。如果从一个抽象类继承,并想创建该新类的对象,就必须为基类中的所有抽......
  • spingboot maven 使用简化配置 将本地包加入classpath
    不是使用dependencyManagement<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version><relativePath......
  • java反编译工具jd-gui和插件jd-eclipse,还有插件Enhanced Class Decompiler 3.3.0
    JD-GUI和JD-ECLIPSE可以直接在下面的网址进行下载http://java-decompiler.github.io/ (1)注意:JD-GUI.exe单机版有很多版本,有些旧版本反编译出来的源码和高版本反编译出来的源码是区别的1.低版本的反编译可能和实际源码有出入2.1.6.6版本反编译的源码中有中文无法正常复制? ......
  • 《深度剖析CPython解释器》19. Python类机制的深度解析(第三部分): 自定义类的底层实
    https://www.cnblogs.com/traditional/p/13593927.html楔子Python除了给我提供了很多的类之外,还支持我们定义属于自己的类,那么Python底层是如何做的呢?我们下面就来看看。自定义class老规矩,如果想知道底层是怎么做的,那么就必须要通过观察字节码来实现。classGirl:nam......
  • win10,vs2015深度学习目标检测YOLOV5+deepsort C++多目标跟踪代码实现,源码注释,拿来即
    int8,FP16等选择,而且拿来即用,自己再win10安装上驱动可以立即使用,不用在自己配置,支持答疑。自己辛苦整理的,求大佬打赏一顿饭钱。苦苦苦、平时比较比忙,自己后期会继续发布真实场景项目;欢迎下载。优点:1、架构清晰,yolov5和sort是分开单独写的,可以随意拆解拼接,都是对外接口。2、支持答疑......
  • 2023-06-05 hexo 分页图标不显示,显示的是【<i class="iconfont icon-arrow-left"></i>
    问题描述:如题。注意:我使用的主题为next。解决方案:全局搜索:navclass="pagination"或者找到路径:你的博客\themes\hexo-theme-next\layout\_partials里的【pagination.swig】文件,对其进行修改;修改前:{%ifpage.prevorpage.next%}<navclass="pagination">{{p......
  • C++面试八股文:struct、class和union有哪些区别?
    某日小二参加XXX科技公司的C++工程师开发岗位5面:面试官:struct和class有什么区别?小二:在C++中,struct和class的唯一区别是默认的访问控制。struct默认的成员是public的,而class的默认成员是private的。面试官:struct、class和union有哪些区别?小二:union和struct、class在内存布局上......
  • Java.lang.Class 类
    Java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类(包括类和接口)的信息。当一个类或接口被装入的JVM时便会产生一个与之关联的java.lang.Class对象,可以通过这个Class对象对被装入类的详细信息进行访问。枚举类型是类的一种。注释类型是接口的......