ADD / XOR / ROL
一些帮助我更好理解神经网络的实验(第1篇/N篇)
虽然我一直对在对抗性(安全)场景中使用ML和AI持怀疑态度,但我也很喜欢AI/ML变得重要这一事实,哪怕只是为了让我觉得我的数学硕士(和夭折的数学博士)没有白读。
我是"自底向上"数学的大力支持者:通过大量实例来形成猜想,稍后再处理。我倾向于进行许多实验来建立直觉;部分是因为我在纯形式操作方面存在严重弱点,部分是因为我的数学大多基于某种"几何直觉"——例如,我很大程度上依赖几何直觉来理解问题和陈述。
几年来,我一直想建立对深度神经网络实际"做什么"的更好直觉。社区中有人说"我们无法理解它们",也有人说"我们相信机械可解释性,我们已经找到了识别狗的神经元";我从未发现这两种说法特别有说服力。
因此,今年早些时候,我终于抽出时间拿起笔、纸和废纸篓,开始思考当数据通过由ReLU单元组成的神经网络时会发生什么。为什么只使用ReLU?嗯,我的猜想是ReLU和其他任何东西一样好,而且它们既相对容易理解,又实际用于实用的ML应用。它们也是可以使用的"最简单示例"之一,我非常喜欢先尝试简单示例。
这篇博客文章分享了我的一些实验和见解;我称之为"深度学习的纸飞机或折纸视角"。后来我发现有一些人在"多面体透镜"的名称下写过这些概念,尽管这似乎在更广泛的可解释性社区中是一个边缘概念(我觉得这很奇怪,因为——毫不奇怪——我相当确信这是思考神经网络的正确方式)。
让我们开始吧。为了建立直觉,我们将使用一个应该学习从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的连续输出,会发生什么?
- 我们可以从这些实验中学到关于泛化、过拟合和过参数化的什么?
再见。