神经网络后门攻击原始数据集和外部数据集-神经网络后门攻击sota

hacker|
253

AlphaGo的神奇全靠它,详解人工神经网络!

01

Alphago在不被看好的情况下,以4比1击败了围棋世界冠军李世石,令其名震天下。随着AlphaGo知名度的不断提高,人们不禁好奇,究竟是什么使得AlphaGo得以战胜人类大脑?AlphaGo的核心依托——人工神经网络。

什么是神经网络?

人工神经网络是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具,常用来对输入和输出间复杂的关系进行建模,或用来探索数据的模式。

神经网络是一种运算模型,由大量的节点(或称“神经元”,或“单元”)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。

例如,用于手写识别的一个神经网络是被可由一个输入图像的像素被激活的一组输入神经元所定义的。在通过函数(由网络的设计者确定)进行加权和变换之后,这些神经元被激活然后被传递到其他神经元。重复这一过程,直到最后一个输出神经元被激活。这样决定了被读取的字。

它的构筑理念是受到人或其他动物神经网络功能的运作启发而产生的。人工神经网络通常是通过一个基于数学统计学类型的学习方法得以优化,所以人工神经网络也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。

人工神经网络是一个能够学习,能够总结归纳的系统,也就是说它能够通过已知数据的实验运用来学习和归纳总结。人工神经网络通过对局部情况的对照比较(而这些比较是基于不同情况下的自动学习和要实际解决问题的复杂性所决定的),它能够推理产生一个可以自动识别的系统。与之不同的基于符号系统下的学习方法,它们也具有推理功能,只是它们是建立在逻辑算法的基础上,也就是说它们之所以能够推理,基础是需要有一个推理算法则的集合。

2AlphaGo的原理回顶部

AlphaGo的原理

首先,AlphaGo同优秀的选手进行了150000场比赛,通过人工神经网络找到这些比赛的模式。然后通过总结,它会预测选手在任何位置高概率进行的一切可能。AlphaGo的设计师通过让其反复的和早期版本的自己对战来提高神经网络,使其逐步提高获胜的机会。

从广义上讲,神经网络是一个非常复杂的数学模型,通过对其高达数百万参数的调整来改变的它的行为。神经网络学习的意思是,电脑一直持续对其参数进行微小的调整,来尝试使其不断进行微小的改进。在学习的第一阶段,神经网络提高模仿选手下棋的概率。在第二阶段,它增加自我发挥,赢得比赛的概率。反复对极其复杂的功能进行微小的调整,听起来十分疯狂,但是如果有足够长的时间,足够快的计算能力,非常好的网络实施起来并不苦难。并且这些调整都是自动进行的。

经过这两个阶段的训练,神经网络就可以同围棋业余爱好者下一盘不错的棋了。但对于职业来讲,它还有很长的路要走。在某种意义上,它并不思考每一手之后的几步棋,而是通过对未来结果的推算来决定下在哪里。为了达到职业级别,AlphaGp需要一种新的估算方法。

为了克服这一障碍,研究人员采取的办法是让它反复的和自己进行对战,以此来使其不断其对于胜利的估算能力。尽可能的提高每一步的获胜概率。(在实践中,AlphaGo对这个想法进行了稍微复杂的调整。)然后,AlphaGo再结合多线程来使用这一方法进行下棋。

我们可以看到,AlphaGo的评估系统并没有基于太多的围棋知识,通过分析现有的无数场比赛的棋谱,以及无数次的自我对战练习,AlphaGo的神经网络进行了数以十亿计的微小调整,即便每次只是一个很小的增量改进。这些调整帮助AlphaGp建立了一个估值系统,这和那些出色围棋选手的直觉相似,对于棋盘上的每一步棋都了如指掌。

此外AlphaGo也使用搜索和优化的思想,再加上神经网络的学习功能,这两者有助于找到棋盘上更好的位置。这也是目前AlphaGo能够高水平发挥的原因。

3神经网络的延伸和限制回顶部

神经网络的延伸和限制

神经网络的这种能力也可以被用在其他方面,比如让神经网络学习一种艺术风格,然后再将这种风格应用到其他图像上。这种想法很简单:首先让神经网络接触到大量的图像,然后来确认这些图像的风格,接着将新的图像带入这种风格。

这虽然不是伟大的艺术,但它仍然是一个显著的利用神经网络来捕捉直觉并且应用在其他地方的例子。

在过去的几年中,神经网络在许多领域被用来捕捉直觉和模式识别。许多项目使用神经这些网络,涉及的任务如识别艺术风格或好的视频游戏的发展战略。但也有非常不同的网络模拟的直觉惊人的例子,比如语音和自然语言。

由于这种多样性,我看到AlphaGo本身不是一个革命性的突破,而是作为一个极其重要的发展前沿:建立系统,可以捕捉的直觉和学会识别模式的能力。此前计算机科学家们已经做了几十年,没有取得长足的进展。但现在,神经网络的成功已经大大扩大,我们可以利用电脑攻击范围内的潜在问题。

事实上,目前现有的神经网络的理解能力是非常差的。神经网络很容易被愚弄。用神经网络识别图像是一个不错的手段。但是实验证明,通过对图像进行细微的改动,就可以愚弄图像。例如,下面的图像左边的图是原始图,研究人员对中间的图像进行了微小的调整后,神经网络就无法区分了,就将原图显示了出来。

另一个限制是,现有的系统往往需要许多模型来学习。例如,AlphaGo从150000场对战来学习。这是一个很庞大额度数字!很多情况下,显然无法提供如此庞大的模型案例。

神经网络中的对抗攻击与对抗样本

对抗攻击

对抗攻击论文参考:

《Intriguing properties of neural networks》

《神经网络有趣的特性》

《Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey》,以下简称『Survey』。

图片做适当修改后能欺骗深度学习模型的可能性

1.举例理解:

左边是一张能够被GoogLeNet正常分类为熊猫的图片,在添加一定的噪音后变成右图,在人的肉眼看来,它还是熊猫,但GoogLeNet会判定为长臂猿。这种被修改后人类无法明显察觉,却被机器识别错误的数据即为 对抗样本 ,而这整个过程就可以理解为 对抗攻击 。

2.数学理解:

神经网络中每层神经元的输入 a = g(Wx+b),其中 g 为激活函数,W 为权重参数,x 为上一层的样本数据,b 为偏置参数,那么从拓扑学角度来看,在一个二维平面上,这个过程相当于哪几个步骤呢?

(1)一次使用权重参数矩阵 W 的线性变换

(2)一次使用偏执向量 b 的移动

(3)一次应用非线性激活函数 g 的变换

在 二维平面 ,其实是将整个平面进行了 旋转、移动和拉伸 三步。

分类问题

简单分类问题:通过较少几次变换将问题转换为一条直线可分割的空间。

既是一层神经网络就可以完成分类,通过变换空间布局,最终通过一条直线完成分类。

举例:

简单转换ing........

转换结果看下图

复杂分类问题:通过多几次的转换完成将问题转换为一条直线可分割的空间。

就是多层神经网络完成分类,通过变换空间布局,最终通过一条直线完成分类。

举例:

动态多步转换

以上是从低维度理解神经网络的训练,其中也有难以拉伸的例外,下图所示的圆套圆的情况,就是难以在二维空间将其拉伸到理想的位置的例子。

但,增加神经元,可以在 三维空间 中轻松将其分离。

看!

归纳 同样对于复杂问题可以通过,增加神经元在高维度通过更长且复杂的方式解决。

但是例如两个相互套起来的环,按照推测需要在四维空间中才能完全分开,然而我们难以想象四维空间,在现实世界的数据集中,这种死结或者缠绕问题可能会更复杂。

对于神经网络来,可以选择 将打成死结的数据尽可能拉伸开,而不是完全解开 ,如下图,对于分类问题来说,已经具有较高的准确率和召回率。

部分情况下,为了更精确地分类,较宽的神经网络可能相对深度来说更重要。

综上所述

1. 神经网络中包含语义信息的不在每个独立的神经单元,而是整个空间。 神经网络在最后一层能将样本中诸多变化的因子理清楚并理解其语义,并不是因为某个独立神经元中包含了什么特定的语义,而是 对整个空间进行变换后从最终的表征层中学到的 ,经过学习,神经网络会 放大某些相关因子,同时缩小某些无关因子 。

2. 神经网络学习到的输入到输出的映射在很大程度上是不连续的。 就像上面图中为了解开一个死结所做的拉伸结果一样, 在人看来,在拉伸距离较大的地方我们可以认为这种映射是连续的, 然而 对于仍然缠绕在一起的部分,之前可以用来划分界限的直线或者超平面已经无法连续 。

通过仔细观察可以区分出来,但是上文只是一个简单的例子,现实世界中的真实数据较为复杂,对于肉眼来说可能很难分清楚缠绕在一起的部分。对于神经网络来说, 对抗样本已经严重的跨过了用于分类的界限 ,而对于肉眼其实还 看不出来它有移动。

()线性特性的攻击行为()和()高效制造对抗样本的方法()

参考论文:

《Explaining and harnessing adversarial examples》

《对抗性例子的解读和掌握》

深度神经网络在高纬空间中的线性特性已经足以产生这种攻击行为 ,并提出了一种 更高效生成对抗样本的方法 ,接下来我们就简单分析一下这一理论和方法。

目前神经网络为了提高训练效率所使用的激活函数在局部都过于线性。

例如:

类比先前举出的拓扑学例子,在 最后的表征层 都是 通过直线或超平面完成的分类 ,在线性的假设下,暂且不通过二维或三维空间来理解,先从一个简单的数学公式角度开始。

数学解释

公式内容解释:

w 是训练好的参数向量

x 表示真实样本数据向量

η 表示给图像加入的噪音向量

x ~表示加入噪音后新生成的样本

当加入足够小的 η 时,肉眼无法区分出 x 的变化,直观感觉上左边的式子可能也不会变化很大。

事实上 ,然而 η 当的方向与 w 完全一致的时候,即使很小,也会使整个激活值变化很大。

假设证明:

如果 w 是一个 n 维向量,而其权值的平均大小为 m,那么激活值将会增加 nm。可见,在一个肉眼几乎无法差觉的扰动干扰下,对神经网络最终激活层的计算会产生巨大的干扰,从而迷惑神经网络训练出来的模型。

寻找正确方向

当 η 与 w 的方向一致时会使激活值最大,那么,如何找到这个正确的方向呢?

结论,那就是损失函数在待构造样本上的梯度方向,即下面的式子。

ε 是一个调节系数

sign() 是一个符号函数,代表的意思也很简单,就是取一个值的符号

(当值大于 0 时取 1,当值等于 0 时取 0,当值小于 0 时取 -1)

▽ 表示求 x 的梯度,可以理解为偏导,

J 是训练模型的损失函数。

结论的由来

在正常的神经网络模型训练过程中,有一个过程叫反向传播,就是对参数求偏导,然后将参数更新,我们结合下面这张图看一下。

假设图中的函数即为 损失函数 ,为了使损失函数降到最低,我们会根据当前值的梯度去调整。

当梯度小于 0 的时候我们可以看出,当前值需要右移。

而当梯度大于 0 的时候,当前值需要左移。

这个过程实际上就是用 θ 减去 θ。扩展到损失函数 J(θ, x, y) 中,θ 即为 我们要调整的参数 ,因此在样本 x 和 y 不改变的情况下,我们会**不断去调整参数 θ **以寻求局部最优解,即 θ = θ - θ 。

生成对抗样本,也可以采用类似的方法,那就是 固定参数 θ,调整 x 同时使损失函数增大 ,而不是变小,此时就应该让 x 往相反的方向走,即 x = x + x ,这样是不是很容易可以理解上面 η 的定义呢?在实践中,我们还需要通过 ε 这个参数来 调节噪音的大小 ,这种方法相比之前提到的优化方法非常高效,基本只需要一次计算就可以找到对抗样本,因此作者将这种方法叫做 快速梯度符号法 (Fast Gradient Sign Method,FGSM)。总结一下FGSM,这种方法通过替换目标值 y 就可以 让攻击样本朝着指定的分类目标走 ,即,可以做任意目标的欺骗。

将线性假设简化到二维空间,我们要求的 η 其方向正好就接近于参数 w 的方向,不再展开说明,有兴趣的读者可以自行画一画。

建立在一个高维空间线性的假设或猜测前提下,需要 实验 支撑,根据下列图片分析展开。

图片解释

这张图是对数据集CIFAR-10的分类器的决策边界示意图。

其中每个小格子代表的是不同的CIFAR-10样本,

每个小格子中:

横向从左往右代表的是FGSM算法中的梯度方向,

纵向代表的是FGSM梯度方向的正交方向,

白色表示模型能分类正确的情况

彩色代表预测出错的情况

不同的颜色代表不同的错误预测分类。

可以看出,在出错的区域都程线性分布,另外,如果横轴的方向走的不够远,即便再往其他方向走都无法使模型出错,而一单进入这个区域,就会出现大量的对抗样本。而在随机找到的对抗样本中,这种分布也是很随机的,甚至很难找到,见下图。

从实验结果表明

高维空间中的线性假设也是合理的

举例

一匹叫做 Clever Hans 的马,刚出现的时候人们认为这匹马会做算术,但实际上它只是会阅读人的表情,当它点马蹄的次数接近正确答案时,人们的表情会更兴奋,它就知道该这个时候停止了。

隐喻神经网络,一个测试效果良好的分类器,其实并不像人类一样学习到了所分类样本的真正底层概念,只不过刚好构建了一个在训练数据上运行相当良好的模型,所以,你以为你以为的就是你以为的吗?

分类器能够在训练集的不同子集上训练时获得大致相同的分类权重,因为机器学习算法能够泛化, 基础分类权重的稳定性反过来又会导致对抗性样本的稳定性。因此, 对抗攻击可以认为是存在于任何神经网络模型。

以上是论文二的线性特性的攻击行为

高效制造对抗样本的方法

目前来看还没有能够完全抵抗这种攻击的方法,其实结合攻击的原理也不难看出,即便分类器做得再好,总能使一个样本用最小的干扰走到错误的分类区域,我们能做的更多是如何构造鲁棒性更强的模型,同时也保持对这个领域的关注。『Survey』(注意第一篇论文的引用有注释)中总结的目前抵御攻击的办法可以分为三大类:

1.修改训练样本 ———— 通过添加更多的对抗样本到训练集中可以有效避免一部分攻击 ,但这更像是一种无奈的做法, 当扩大样本集的时候,其实分类边界有可能也在随之扩大 。

2.修改训练网络 ,这类方法会对训练网络做出一定调整,其中有一种方式是模拟生物学 在最后一层使用更加非线性的激活函数 ,但这种方式又会 导致训练效率和效果下降 。修改训练网络的方法分为 完全抵抗 和 仅检测 两种方式,完全抵抗其实就是让模型能将对抗样本识别为正确的分类,而仅检测是为了发现这种攻击样本,从而拒绝服务。

3.附加网络 ,这种方式是在 不改变原有模型的情况下使用额外的网络进行辅助 ,这样可以使原有网络保持不变,其中最有效的一种方式是生成式对抗网络——GAN。同样的,这种方式也分为 完全抵抗 和 仅检测 两种方式。

总结一下

定义:

对抗样本:是指在数据集中通过故意添加细微的干扰所形成的输入样本,会导致模型以高置信度给出一个错误的输出。

原因分析:

对抗样本出现的主要原因之一是过度线性, 神经网络主要是基于线性块构建的,实现的整体函数被证明是高度线性的,如果一个线性函数具有许多输入,那么它的值可以非常迅速地改变。

参考:

神经网络架构搜索——可微分二值搜索(BATS)

本文提出了二进制架构搜索(BATS),这是一个通过神经架构搜索(NAS)大幅缩小二进制神经网络与其实值对应的精度差距的框架。实验表明,直接将NAS 应用于二进制领域的结果非常糟糕。为了缓解这种情况,本文描述了将 NAS 成功应用于二进制领域的 3 个关键要素:

实验重新结果证明了所提出的方法的有效性和直接在二进制空间中搜索的必要性。并且,在CIFAR10、CIFAR100 和 ImageNet 数据集上设计了 SOTA 的二元神经网络架构。

标准 DARTS 搜索空间下搜索得到的网络结构二值化训练是无法收敛的 ,原因如下:

二值神经网络搜索空间与标准 DARTS 搜索空间对比如下图所示:

主要存在以下几方面的修改:

尽管 DARTS 取得了成功,但根据随机种子的不同,DARTS 的精度在运行之间可能会有很大的差异。事实上,在有些情况下,随机搜索获得的架构甚至比搜索得到的架构通过表现的更好。此外,特别是当训练时间较长或在较大的数据集上进行搜索时,DARTS可能会出现 Skip-Connect 富集的问题。常用的解决方法包括:

但是,这种机制仍然会导致大量的随机性,而且并不总是有效的:例如,它可能会用池化层(没有学习能力)取代跳过连接,或者搜索的架构跳连包含的太少。当搜索是在二进制域中直截了当地进行时,这样的问题就更加明显了。鉴于在搜索过程中,节点 j 的输入是通过对所有输入边的加权和来获得的,为了最大限度地提高信息流,架构参数 α 倾向于收敛到相同的值,使得最终架构的选择存在问题,并且容易受到噪声的影响,导致拓扑结构的性能可能比随机选择更差。此外,搜索高度偏向于实值操作(池化和跳连),使得搜索在早期阶段可以提供更大的收益。

为了缓解上述问题,并使得搜索程序更具辨别力,迫使其做出 "harder" 的决策,本文借鉴知识蒸馏的思路,建议使用温度因子 T1 的正则策略,定义从节点i到j的流程如下公式所示:

采用温度正则方法可以 使架构参数的分布不那么均匀,更加尖锐(即更有辨别力) 。在搜索过程中,由于信息流是使用加权进行聚合的,所以网络不能从所有信息流中提取信息,来平等地(或接近平等地)依赖所有可能的操作。相反,为了确保收敛到一个满意的解决方案,它必须将最高的概率分配给一个非0操作的路径,由一个次元温度(T 1)强制执行。这种行为也更接近评估过程,从而减少搜索(网络从所有路径中提取信息)和评估之间的性能差异。

上图中,图1描述了给定单元在不同温度下的架构参数分布。对于低温(T=0.2),网络被迫做出更多的判别性决策,这反过来又使它减少了对 Skip-Connect 的依赖。图2 进一步证实了这一点,它描述了在不同温度下搜索过程结束时,在 Normal Cell 中各操作被选择的概率。

尽管二值网络具有加速和节省空间的特点,但与实值网络相比,二值网络的训练仍然比较困难,其方法通常需要一个预训练阶段或仔细调整超参数和优化器。对于搜索二值网络的情况,直接实现二值权重和激活的架构搜索,在大多数尝试中,要么导致退化的拓扑结构,要么训练简单地收敛到极低的精度值。此外,直接在实域中执行搜索,然后对网络进行二值化是次优的。

为了缓解这个问题,本文提出了一个两阶段的优化过程, 在搜索过程中,激活是二值化的,而权重是实值化的,一旦发现了最佳架构,我们在评估阶段也要对权重进行二值化 。【更具体地说,在评估过程中,首先从头开始训练一个具有二值激活和实值权重的新网络,然后对权重进行二值化。最后,在测试集上对完全二值化的网络进行评估。】这是因为实值网络的权重通常可以被二值化,而不会显著降低精度,但激活的二值化就不一样了,由于可能的状态数量有限,网络内部的信息流急剧下降。因此,本文提出将问题有效地分成两个子问题:权重和特征二值化,在搜索过程中,尝试解决最难的一个问题,即激活的二值化。一旦完成了这一点,权重的二值化以下总是会导致精度的小幅下降(~1%)。

0条大神的评论

发表评论