在本教程中,我将将展示如何使用梯度上升来解决如何对输入进行错误分类。
出如何使用梯度上升改变一个输入分类
神经网络是一个黑盒。理解他们的决策需要创造力,但他们并不是那么不透明。
在本教程中,我将向您展示如何使用反向传播来更改输入,使其按照想要的方式进行分类。
人类的黑盒
首先让我们以人类为例。如果我向你展示以下输入:
很有可能你不知道这是5还是6。事实上,我相信我可以让你们相信这也可能是8。
现在,如果你问一个人,他们需要做什么才能把一个东西变成5,你可能会在视觉上做这样的事情:
如果我想让你把这个变成8,你可以这样做:
现在,用几个if语句或查看几个系数不容易解释这个问题的答案。并且对于某些类型的输入(图像,声音,视频等),可解释性无疑会变得更加困难,但并非不可能。
神经网络怎么处理
一个神经网络如何回答我上面提出的同样的问题?要回答这个问题,我们可以用梯度上升来做。
这是神经网络认为我们需要修改输入使其更接近其他分类的方式。
由此产生了两个有趣的结果。首先,黑色区域是我们需要去除像素密度的网络物体。第二,黄色区域是它认为我们需要增加像素密度的地方。
我们可以在这个梯度方向上采取一步,添加梯度到原始图像。当然,我们可以一遍又一遍地重复这个过程,最终将输入变为我们所希望的预测。
你可以看到图片左下角的黑斑和人类的想法非常相似。
让输入看起来更像8怎么样?这是网络认为你必须改变输入的方式。
值得注意的是,在左下角有一团黑色的物质在中间有一团明亮的物质。如果我们把这个和输入相加,我们得到如下结果:
在这种情况下,我并不特别相信我们已经将这个5变成了8。但是,我们减少了5的概率,说服你这个是8的论点肯定会更容易使用 右侧的图片,而不是左侧的图片。
梯度
在回归分析中,我们通过系数来了解我们所学到的知识。在随机森林中,我们可以观察决策节点。
在神经网络中,它归结为我们如何创造性地使用梯度。为了对这个数字进行分类,我们根据可能的预测生成了一个分布。
这就是我们说的前向传播
在前进过程中,我们计算输出的概率分布
代码类似这样:
现在假设我们想要欺骗网络,让它预测输入x的值为“5”,实现这一点的方法是给它一个图像(x),计算对图像的预测,然后最大化预测标签“5”的概率。
为此,我们可以使用梯度上升来计算第6个索引处(即label = 5) (p)相对于输入x的预测的梯度。
为了在代码中做到这一点,我们将输入x作为参数输入到神经网络,选择第6个预测(因为我们有标签:0,1,2,3,4,5,…),第6个索引意味着标签“5”。
视觉上这看起来像: