写点什么

神经网络实验解析:从数学表示到训练动态可视化

作者:qife122
  • 2025-09-29
    福建
  • 本文字数:2373 字

    阅读完需:约 8 分钟

ADD / XOR / ROL

一个关于逆向工程、数学、政治、经济等主题的博客...


2025 年 4 月 5 日 星期六

帮助我更好理解神经网络的实验,第 2 篇

在这篇文章中,我将解释目前对神经网络的思考。在之前的文章中,我解释了"神经网络的折纸视角"(在某些圈子里也称为"多面体透镜")的直观理解。本文将深入探讨其数学细节。


神经网络层的标准教科书解释通常如下:


σ(Wx + b)


其中 σ: R → R 是非线性函数(sigmoid 或 ReLU 等),W 是连接到神经元输入边的权重矩阵,b 是"偏置"向量。个人而言,我觉得这种表示法有些繁琐,更喜欢将偏置向量并入权重矩阵中,这样可以将神经网络视为"矩阵乘法与非线性函数应用的交替"。


我实在不喜欢考虑除 ReLU 和 leaky ReLU 以外的非线性函数——也许随着时间的推移我将不得不接受它们的存在,但目前我考虑的所有神经网络都是 ReLU 或 leaky ReLU。暂时我们还假设网络最终输出实向量,因此它(还)不是分类器。


假设我们有一个 k 层网络,每层的神经元数量为 n₁,...,nₖ。该网络在维度为 i 和 o 的实向量空间(或其近似)之间映射:


NN: Rⁱ → Rᵒ


我想首先将偏置向量并入矩阵乘法中,因为这大大简化了表示法。因此,输入向量 x 通过附加 1 来扩展,偏置向量 b 附加到 W 上:


W' = [W b], x = [x 1]


现在我们可以写成σ(W'x)而不是σ(Wx + b)。


在我们的情况下,σ始终是 ReLU 或 leaky ReLU,因此"1"将再次映射为"1"。为了便于后续组合,我也希望σ(W'x)的输出像我们的输入向量 x 一样,最后一个分量为 1。为了实现这一点,我需要向 W'附加一行全零并以 1 结尾。最终我们得到:


W = [W b


0,...1], x = [x 1]


上一篇文章解释了为什么神经网络将输入空间划分为多面体,在这些多面体上近似函数将完全是线性的。考虑数据点 x₁。如果在 x₁上评估神经网络,一些 ReLU 将激活(因为它们的输入数据总和大于 0),而一些不会。对于给定的 x₁,将有 k 个布尔向量表示神经网络中每个 ReLU 的激活(或非激活)。这意味着我们有一个函数,对于给定的输入向量、层和层中的神经元编号,在 ReLU 情况下返回 0 或 1,在 leaky ReLU 情况下返回 0.01 和 1。


我们称此函数为 a。我们可以使其成为具有三个参数(层、神经元索引、输入向量)的函数,但我更喜欢将层和神经元索引移到索引中,因此我们有:


对于 ReLU:aₗ,ₙ: Rⁱ → {0,1}


对于 leaky ReLU:aₗ,ₙ: Rⁱ → {0.01,1}


这为我们提供了整个网络的非常线性代数的表达式:


NN(x) = W₁A₁...WₖAₖx = ∏ᵢ₌₀ᵏ(WᵢAᵢ)x


其中 Aₖ的形式为:


Aₖ = (aₖ,₁(x) ... 0 0


... ... ... ...


0 ... aₖ,ₙₖ(x) 0


0 0 0 1)


现在我们可以非常清楚地看到,一旦激活模式确定,整个函数就变成线性的,只是一系列矩阵乘法,其中每第二个矩阵是对角矩阵,对角线上是激活模式的像。


这种表示向我们展示,只要激活模式不变,函数就保持相同(且线性)——同一多面体上的点将具有相同的激活模式,因此我们可以使用激活模式作为"多面体标识符"——对于任何输入点 x,我可以通过网络运行它,如果第二个点 x′具有相同的模式,我知道它位于同一多面体上。


因此,我可以采用第 1 部分中创建的单层神经网络的动态可视化——我们可以将任意二维图像作为我们希望学习的未知分布,然后可视化训练动态:展示输入空间如何被切割成不同的多面体,在这些多面体上函数然后被线性近似,并展示这种划分和近似在不同形状网络的训练过程中如何演化。


我们采用 1024x1024 大小的输入图像,因此有一兆字节的字节大小值,并从中采样 5000 个数据点——约占图像总点数的 0.4%。我们为 MLP 指定一个形状,并训练 6000 步,可视化进展。


为简单起见,我们尝试学习白色背景上的黑色圆环,具有清晰界定的边缘——首先使用每层 14 个神经元、6 层深的网络。


在左侧,我们看到评估的神经网络及其为分割输入空间生成的多面体边界。在中心,我们只看到神经网络的输出——神经网络到目前为止"学习"重现的内容。在右侧,我们看到原始图像,几乎难以察觉的红点是 5000 个训练点,蓝点是 1000 个验证点。


以下是训练运行动态的视频:


这相当整洁,不同形状的神经网络如何?如果我们在训练过程中强制神经网络通过 2 个神经元的瓶颈会发生什么?


最后一个网络有 10 层,每层 10 个神经元,然后是一层 2 个神经元,然后是另外 3 层,每层 10 个神经元。就参数数量而言,它与其他网络大致相当,但表现出明显不同的训练动态。


如果我们 dramatically 过度参数化网络会发生什么?它会过拟合我们的基础数据,并找到一种方法来分割输入空间以减少训练集上的误差,而不重现圆形吗?


让我们试试——一个有 20 个神经元、40 层深的网络怎么样?这应该使用大约 20k 个浮点参数来学习 5000 个数据点,所以也许它会过拟合?


结果表明这个例子没有过拟合,但当我们观察它时,它提供了特别丰富的动态:大约在第 1000 个 epoch,我们可以看到网络似乎已经弄清了圆形的一般形状,大多数多面体边界似乎迁移到这个圆形。网络有点摇摆但似乎有进展。到第 2000 个 epoch,我们认为我们已经看到了一切,网络将只是围绕圆形巩固。在第 3000 到 4000 个 epoch 之间,某些东西破裂了,损失飙升,似乎网络正在解体,训练正在发散。到第 4000 个 epoch,它已经重新稳定,但输入空间划分的配置非常不同。这个视频大约在第 5500 个 epoch 结束。


这非常引人入胜。没有过拟合的迹象,但我们可以看到随着网络变深,训练变得不那么稳定:圆形似乎摇摆得更厉害,并且我们有这些奇怪的看似灾难性的相变,之后网络必须重新稳定。尽管只有相对较少的数据点和足够的能力来过拟合它们,但网络似乎准确捕捉了"圆形"形状。


只要时间允许,我将继续深入研究这一点,希望这既有趣又有信息量。我的下一个任务是构建一个工具,对于输入空间中的给定点,提取描述该点所在多面体的线性不等式系统。如果您想讨论任何这些内容,请随时联系!更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
神经网络实验解析:从数学表示到训练动态可视化_神经网络_qife122_InfoQ写作社区