查看原文
其他

《神经网络和深度学习》系列文章三十四:多个输入变量

Nielsen 哈工大SCIR 2021-02-05

出处: Michael Nielsen的《Neural Network and Deep Learning》,点击末尾“阅读原文”即可查看英文原文。

声明:我们将在每周四连载该书的中文翻译。

本节译者:朱小虎 、张广宇。转载已获得译者授权,禁止二次转载。


  • 使用神经网络识别手写数字

  • 反向传播算法是如何工作的

  • 改进神经网络的学习方法

  • 神经网络可以计算任何函数的可视化证明

    • 两个预先声明

    • 一个输入和一个输出的普遍性

    • 多个输入变量

    • S型神经元的延伸

    • 修补阶跃函数

    • 结论

  • 为什么深度神经网络的训练是困难的

  • 深度学习


让我们把结果扩展到有很多个输入变量的情况下。这听上去挺复杂,但是所有我们需的概念都可以在两个输入的情况下被理解。所以让我们处理两个输入的情况。

我们从考虑当一个神经元有两个输入会发生什么开始:


这里,我们有输入 ,分别对应于权重 ,以及一个神经元上的偏置 。让我们把权重 设置为 ,然后反复琢磨第一个权重 和偏置 ,看看他们如何影响神经元的输出:

正如你能看到的,在 时输入 对神经元的输出没有影响。它就像 是唯一的输入。鉴于此,你认为当我们增加权重 ,同时 保持 不变时会发生什么?如果你没有立即明白答案,思考一下问题,看看你能否知道会发生什么。然后尝试一下,看看你是否是对的。下面的图形序列展示了会发生什么:


正如我们前面讨论的那样,随着输入权重变大,输出接近一个阶跃函数。不同的是,现在的阶跃函数是在三个维度。也如以前一样,我们可以通过改变偏置的位置来移动阶跃点的位置。阶跃点的实际位置是

让我们用阶跃点位置作为参数重绘上面的阶跃函数:


这里,我们假设 输入上的权重有一个大的值(我使用了 )而权重。神经元上的数字是阶跃点,数字上面的小 提醒我们阶跃在 轴方向。当然,通过使得 输入上的权重取一个非常大的值(例如,),上的权重等于 ,即 ,来得到一个 轴方向的阶跃函数也是可行的,

再一次,神经元上的数字是阶跃点,在这个情况下数字上的小 提醒我们阶跃是在 轴方向。我本来可以明确把权重标记在 输入上,但是决定不这么做,因为这会把图示弄得有些杂乱。但是记住小 标记含蓄地告诉我们 权重是个大的值, 权重为 我们可以用我们刚刚构造的阶跃函数来计算一个三维的凹凸函数。为此,我们使用两个神经元,每个计算一个 方向的阶跃函数。然后我们用相应的权重 将这两个阶跃函数混合,这里 是凸起的期望高度。所有这些在下面图示中说明:


试着改变高度 的值。观察它如何和网络中的权重关联。并看看它如何改变右边凹凸函数的高度。

另外,试着改变与顶部隐藏神经元相关的阶跃点 。见证它如何改变凸起形状。当你移动它超过和底部隐藏神经元相关的阶跃点 时发生了什么?

我们已经解决了如何制造一个 方向的凹凸函数。当然,我们可以很容易地制造一个 方向的凹凸函数,通过使用 方向的两个阶跃函数。回想一下,我们通过输入的权重变大, 输入的权重为 来这样做。这是结果:


这看上去和前面的网络一模一样!唯一的明显改变的是在我们的隐藏神经元上现在标记有一个小的 。那提醒我们它们在产生 方向的阶跃函数,不是 方向的,并且 上输入的权重变得非常大, 上的输入为 ,而不是相反。正如前面,我决定不去明确显示它,以避免图形杂乱。

让我们考虑当我们叠加两个凹凸函数时会发生什么,一个沿 方向,另一个沿 方向,两者都有高度

为了简化图形,我丢掉了权重为 的连接。现在,我在隐藏神经元上留下了 的标记,来提醒你凹凸函数在哪个方向上被计算。后面我们甚至为丢掉这些标记,因为它们已经由输入变量说明了。

试着改变参数 。正如你能看到,这引起输出权重的变化,以及 上凹凸函数的高度。

我们构建的有点像是一个塔型函数


如果我们能构建这样的塔型函数,那么我们能使用它们来近似任意的函数,仅仅通过在不通位置累加许多不同高度的塔:


当然,我们还没有解决如何构建一个塔型函数。我们已经构建的看起来像一个中心塔,高度为 ,周围由高原包围,高度为

但是我们能制造一个塔型函数。记得前面我们看到神经元能被用来实现一个 {if-then-else} 的声明:

if input >= threshold: output 1
else: output 0

这是一个只有单个输入的神经元。我们想要的是将一个类似的想法应用到隐藏神经元的组合输出:

if combined output from hidden neurons >= threshold: output 1
else: output 0

如果我们选择适当的阈值。比如,,这是高原的高度和中央塔的高度中间的值 ——我们可以把高原下降到零,并且依旧矗立着塔。

你能明白怎么做吗?试着用下面的网络做实验来解决。请注意,我们现在正在绘制整个网络的输出,而不是只从隐藏层的加权输出。这意味着我们增加了一个偏置项到隐藏层的加权输出,并应用 S 型函数。你能找到 的值,能产生一个塔型吗?这有点难,所以如果你想了一会儿还是困住,这是有两个提示:(1)为了让输出神经元显示正确的{if-then-else} 行为,我们需要输入的权重(所有 )变得很大;(2) 的值决定了 {if-then-else} 阈值的大小。

在初始参数时,输出看起来像一个前面图形在它的塔型和高原上的平坦的版本。为了得到期望的行为,我们增加参数 直到它变得很大。这就给出了 {if-then-else} 做阈值的行为。其次,为了得到正确的阈值,我们选择 。尝试一下,看看它是如何工作的!

这是它看起来的样子,我们使用


甚至对于这个相对适中的 值,我们得到了一个相当好的塔型函数。当然,我们可以通过更进一步增加 并保持偏置 来使它如我们所希望的那样。

让我们尝试将两个这样的网络组合在一起,来计算两个不同的塔型函数。为了使这两个子网络更清楚,我把它们放在如下所示的分开的方形区域:每个方块计算一个塔型函数,使用上面描述的技术。右边的图上显示了第二个隐藏层的加权输出,即,它是一个加权组合的塔型函数。


尤其你能看到通过修改最终层的权重能改变输出塔型的高度。同样的想法可以用在计算我们想要的任意多的塔型。我们也可以让它们变得任意细,任意高。结果,我们可以确保第二个隐藏层的加权输出近似与任意期望的二元函数:


尤其通过使第二个隐藏层的加权输出为 的近似,我们可以确保网络的输出可以是任意期望函数 的近似。

超过两个变量的函数会怎样?

让我们试试三个变量 。下面的网络可以用来计算一个四维的塔型函数:


这里, 表示网络的输入。 等等是神经元的阶跃点。即,第一层中所有的权重是很大的,而偏置被设置为给出阶跃点 。第二层中的权重交替设置为 ,其中 是一个非常大的数。输出偏置为

这个网络计算这样一个函数,当三个条件满足时: 之间; 之间; 之间,输出为 。其它情况网络输出为 。即,这个塔型在输入空间的一个小的区域输出为 ,其它情况输出

通过组合许多个这样的网络我们能得到任意多的塔型,如此可近似一个任意的三元函数。对于 维可用完全相同的思想。唯一需要改变的是将输出偏置设为 ,为了得到正确的夹在中间的行为来弄平高原。% 翻译成稳定平面?

好了,所以现在我们知道如何用神经网络来近似一个多元的实值函数。对于 的向量函数怎么样?当然,这样一个函数可以被视为 个单独的实值函数: 等等。所以我们创建一个网络来近似 ,另一个来近似 ,如此等等。然后简单地把这些网络都组合起来。 所以这也很容易应付。

问题

我们已经看到如何使用具有两个隐藏层的网络来近似一个任意函数。你能否找到一个证明,证明只有一个隐藏层是可行的?作为一个提示,试着在只有两个输入变量的情况下工作,并证明:

  1. 可以得到一个不仅仅在 方向,而是在一个任意方向上的阶跃函数;

  2. 可以通过累加许多的源自(1)的结构,近似出一个塔型的函数,其形状是圆的,而不是方的;

  3. 使用这些圆形塔,可以近似一个任意函数。



  • “哈工大SCIR”公众号

  • 编辑部:郭江,李家琦,徐俊,李忠阳,俞霖霖

  • 本期编辑:徐俊


长按下图并点击 “识别图中二维码”,即可关注哈尔滨工业大学社会计算与信息检索研究中心微信公共号:”哈工大SCIR” 。点击左下角“阅读原文”,即可查看原文。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存