掌握深度学习:用分段估计近似非线性的艺术 第3部分

掌握深度学习的艺术:第3部分- 运用分段估算近似非线性

大家好!欢迎来到我关于深度学习的系列文章的第三篇。这篇文章是前两篇的结尾,标题为《通过分段估计来逼近非线性的艺术》。在前两篇文章中,我们深入探讨了深度神经网络的内部工作原理。在这最后一部分,我们将通过了解神经网络如何处理多维输入和输出来结束我们的探索,这更符合现实情况。在我们深入内容之前,我收到了一个建议,那就是尝试更好更易理解地可视化高维输入空间的折叠。让我们快速探索一下这个想法,然后继续吧!

可视化潜在表示的简单神经网络

让我们考虑一个简单的神经网络,如上图所示。第二隐藏层中的每个神经元,用hₖ’表示,使用以下格式估计一个超平面:

hₖ’ = θ’ₖ₁h₁ + θ’ₖ₂h₂ + β₁

上面的方程表示了在h₁h₂空间中的二维超平面。类似地,我们可以得到输出y如下:

y = ∑ ₀¹⁰ Ωᵢhᵢ’ + β₂

正如我们在之前的博客文章中探讨过的,我们可以展开上面的方程,以了解从x到y的映射。然而,我们目前的重点不是具体的映射,而是要可视化每个神经元如何贡献到折叠的过程中。

上面的神经网络被训练来估计以下函数:f(x) = sin(2x) + cos(x) + x。每个hₖ’表示可以可视化的二维曲面。下面是一个图示,展示了第二隐藏层中每个神经元估计的各种曲面。

十个不同的神经元以十种独特的方式折叠定义在h₁、h₂和hₖ上的曲面。

每个神经元都以独特的方式折叠了曲面,为我们提供了对这种折叠的各种方式的洞察。在x的潜在估计中,hₖ’实际上是一条线,它是上面描绘的曲面的一个组成部分。你可以把这个曲面想象成我们在上面画这条线的纸,这个过程类似于在折叠的纸上切割,而不是直接切割线本身。

现在,让我们探索神经网络如何处理多个输入,考虑下面这个简单的浅层神经网络。

具有两个输入的简单浅层神经网络

现在,我们不仅有隐藏单元上的一个权重,还有两个权重和一个偏差。通过这个改变,每个神经元估计的是一个平面,而不是一条线,但整体机制保持相似。现在,让我们尝试使用不同容量的浅层神经网络来估计映射f(x₁, x₂) = sin(2x₁)sin(2x₂) + cos(x₁)cos(x₂) + x₁ + x₂,并可视化它们的估计结果。

使用具有12个隐藏单元的浅层神经网络估计f(x₁,x₂)的情况。
使用具有32个隐藏单元的浅层神经网络估计f(x₁,x₂)的情况。
使用具有64个隐藏单元的浅层神经网络估计f(x₁,x₂)的情况。

随着隐藏单元数量的增加,我们所努力建模的表面估计将继续改善。每个神经元估计一个平面,ReLU函数可以在其中四边的任意一边切割这些平面,从而创建分段线性的表面。正如之前提到的,我们有越多片段,就越能近似目标函数。值得注意的是,估计的表面严格是分段线性的,尽管它可能给人非线性表面的印象。如果我们放大足够多,我们会清楚地看到这些分段线性区域。

了解了如何处理多维输入,没有任何限制阻止我们使用深度神经网络进行此类估计。与具有相同数量神经元的浅层网络相比,深度网络可以创建更多这些线性区域。例如,如果我们考虑具有100个神经元的浅层网络和包含50个神经元的两层深度网络,仅两个隐藏层之间的参数总数就超过了整个浅层网络的参数总数。尽管两个网络都有相同数量的神经元,但在更多的参数成本下获得了额外的估计能力。

下面的图显示了使用每个隐藏层中具有6个隐藏单元的深度网络进行的相同估计,我们可以观察到这一估计与具有32个神经元的浅层神经网络获得的估计一样好

使用具有两个包含6个隐藏单元的隐藏层的深度神经网络估计f(x₁,x₂)的情况。

让我们继续探索神经网络如何估计多维输出。为了更好地理解,让我们考虑两个函数,sin(x)cos(x),这两个函数都是关于实值变量x的函数。我们的目标是同时从输入x学习这两个函数。我们将训练一个简单的浅层神经网络,如下所示,来估计y₁y₂。在之前的例子中,我们估计了一个具有多个变量的函数,但现在我们正在估计多个函数。

一个简单的浅层神经网络,同时估计两个不同的函数y₁和y₂。
模型使用3个隐藏单元产生的估计函数f₁(x)和f₂(x)。

我们可以观察到,估计结果呈现出四个线性区域,对应于每个神经元所做的三个切割。有趣的是,这两个估计函数在相同的点上都有切割。这种现象是因为最后一层的神经元估计上一层神经元所做的估计的线性组合,并且这些线性组合经过了ReLU运算,在最终估计之前产生了切割。因此,最终的估计由这些函数的两个不同线性组合组成,导致这两个函数在 precisely the same locations 上都有切割。

The estimated values of y₁ and y₂ as produced by the model

现实生活中的问题通常涉及输入和输出两个方面的多个变量。下面提供的图表示了一个通用的浅层神经网络,可以接受多个输入并返回多个输出。神经网络使我们能够同时估计多个多变量函数,使其成为估计复杂数学函数的极为强大的工具。

A generic shallow neural network that accepts multivariate inputs to simultaneously estimate multiple mappings.

这篇博客从Simon J.D. Prince的书《Understanding Deep Learning》中获得了重要的灵感(udlbook.github.io/udlbook/)。在接下来的文章中,我们将深入研究损失函数,并从最大似然估计导出损失函数。我用来生成这些图形的代码可以在下面找到。如果你觉得这篇博客有启发性,我会非常感谢你的支持,给它点个赞。

Understanding-Deep-Learning/Mastering_Deep_Learning_The_Art_of_Approximating_Non_Linearities_with_Pi…

Contribute to Raagulbharatwaj/Understanding-Deep-Learning development by creating an account on GitHub.

github.com