ADD / XOR / ROL:帮助我更好理解神经网络的实验(第1篇)
虽然我一直对在对抗性(安全)场景中使用机器学习和人工智能持怀疑态度,但我也很高兴AI/ML变得重要——至少这让我觉得我的数学硕士(和夭折的数学博士)没有白读。我是"自底向上"数学方法的坚定支持者:通过大量实例操作形成猜想后再进行理论处理。我倾向于通过大量实验来建立直觉;部分是因为我在纯形式化操作方面存在严重弱点,部分是因为我的数学思维很大程度上基于"几何直觉"——例如我依赖几何直觉来理解问题和陈述。
多年来,我一直想建立对深度神经网络实际"做什么"的更好直觉。社区中有人说"我们无法理解它们",也有人说"我们相信机制可解释性,我们已经找到了识别狗的神经元";我发现这两种说法都不特别有说服力。
因此,今年早些时候,我终于抽出时间拿起纸笔和废纸篓,开始思考当数据通过由ReLU单元组成的神经网络时会发生什么。为什么只关注ReLU?我的猜想是ReLU与其他任何激活函数一样有效,而且它们既相对容易理解,又实际用于机器学习应用。它们也是可供研究的"最简单示例"之一,而我是尝试简单示例的忠实粉丝。
这篇博客文章分享了我的一些实验和见解;我称之为"深度学习的纸飞机或折纸视角"。后来我发现有一些人在"多面体透镜"的名称下写过这些概念,尽管这在更广泛的可解释性社区中似乎是一个边缘概念(我觉得这很奇怪,因为——毫不意外——我相当确信这是理解神经网络的正确方式)。
让我们开始吧。为了建立直觉,我们将使用一个应该学习从R^2到R的函数的神经网络——本质上是学习灰度图像。这有几个优点:
- 我们可以直观地理解神经网络在学习什么。
- 我们可以通过获取高分辨率图像并在低分辨率样本上训练来模拟训练误差和泛化误差。
- 我们暂时停留在低维几何领域,这是我们大多数人有直观理解的领域。高维度很快就会带来各种复杂性。
让我们从理解二维ReLU神经元开始——本质上是函数f(x, y) = max( ax + by + c, 0),其中a、b和c取不同值。
这看起来有点像一张有折痕的纸:
如果我们改变参数a、b或c,这个函数会如何变化?让我们从改变a开始:
现在让我们看看改变b的情况:
最后让我们看看改变c的情况:
所以参数a、b、c实际上只是决定平面应该"以哪种方式"折叠/起皱,以及非平坦部分的陡度和方向。它将平面划分为半空间;结果函数在一个半平面上为0,在另一个半平面上为线性(或仿射)的。
下一步,让我们想象一个单层ReLU网络,它获取平面的(x,y)坐标,然后将其输入10个不同的ReLU神经元,然后通过使用单独权重求和来组合结果。
由此产生的网络将为每个神经元学习3个参数:a、b和c。每个"神经元"将代表平面的一个独立副本,然后将通过线性、加法、带权重的方式组合到输出函数中。训练过程将移动纸张中的"折痕",直到结果很好地近似所需输出。
让我们在尝试学习圆形图片时绘制这个过程:原始图片在这里:
这向我们展示了网络如何尝试逐步移动折痕,以便在由折痕创建的每个凸区域上,它可以选择不同的仿射函数(条件是函数在"折痕"处取值相同)。
让我们做另一个动画,这次使用更多第一层神经元——500个。让我们看看我们最终能多好地近似圆形。
除了观看令人着迷外,这也有点有趣并引发了一系列问题:
我对Adam作为优化器了解不够,无法理解优化过程中非常明显的"脉冲"来自哪里。这里发生了什么?
我对这么多折痕最终变得极其相似感到非常惊讶——是什么导致它们以这种方式聚集成组?圆形是完全旋转不变的,但视觉上折痕似乎比随机分布所暗示的更倾向于聚集成组。为什么?
学习"锐利"边缘似乎出人意料地困难,上图中黑白之间的边缘异常柔和。我原本期望通过具有非常大a/b常数的窄多面体来创建锐利边缘会更容易,但不知何故这很困难?这是正则化通过保持权重有界来防止锐利边缘出现吗?
显然,还有工作要做。现在,来点娱乐:训练相同的500神经元单层网络来学习重现我满脸氧化锌防晒霜的照片:
有趣的是(也许并不令人惊讶),重现的图像在视觉上感觉像折叠的纸。
无论如何,这是第一篇文章。随着我的实验和理解加深,我会写更多关于这些东西的内容。
我将在不久的将来解释的步骤:
- 当你加深网络结构时会发生什么?
- 如果你在分类数据上使用交叉熵训练网络,而不是使用MSE的连续输出,会发生什么?
- 我们可以从这些实验中学到关于泛化、过拟合和过参数化的什么?
再见。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码