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个。让我们看看我们最终能多好地近似圆。除了看起来令人着迷之外,这也有点 intriguing 并引发了一系列问题:
我对Adam作为优化器了解不够,无法理解优化过程中非常明显的“脉冲”来自哪里。这里发生了什么?我对这么多折痕最终变得极其相似感到非常惊讶——是什么导致它们以这种方式捆绑成组?圆是完全旋转不变的,但视觉上折痕似乎比随机分布所暗示的更多地聚集成组。为什么?
学习“锐利”边缘似乎出奇地困难,上图中黑白之间的边缘出奇地柔和。我原本期望更容易学会具有非常大大a/b常数的窄多面体来创建锐利边缘,但 somehow 这很困难?这是正则化通过保持权重有界来防止锐利边缘的出现吗?
显然,还有工作要做。现在,一些娱乐:训练相同的500神经元单层网络来学习重现我满脸锌防晒霜的图片:有趣的是(也许并不奇怪)重现的图像在视觉上感觉像折叠的纸。
无论如何,这是第一篇。随着我玩得更多和理解得更多,我会写更多关于这些东西的内容。我将在不久的将来解释的步骤:
- 当你加深网络结构时会发生什么?
- 如果你在分类数据上训练网络并使用交叉熵而不是具有MSE的连续输出,会发生什么?
- 我们可以从这些实验中学到关于泛化、过拟合和过参数化的什么?
再见。