01
引言
激活函数在神经网络(NN)中发挥着不可或缺的作用,因为它们引入了非线性,并允许神经网络学习比线性回归更复杂的特征和函数。最常用的激活函数之一是ReLU函数,理论证明它能让神经网络逼近各种连续函数,使其成为强大的函数逼近器。
在这篇文章中,我们将特别研究连续非线性函数的近似,这是使用 NN 而非简单线性回归模型的主要目的。更准确地说,我们研究了非线性函数的两个子类别:连续分段线性函数和连续曲线函数。我们将展示如何使用一个由一个隐藏层组成的 NN 网络来表示这两种函数类型。
为了便于说明,我们只考虑单特征输入,但这一想法同样适用于多特征输入。
02
ReLU激活函数
ReLU函数图示如下:
ReLU 是一个连续分段函数,由两段线性函数组成:其中小于零的部分输出均为零,大于零的部分用于输出连续的线性映射。
03
逼近连续分段线性函数
连续分段线性函数是具有多个线性部分的连续函数。每一部分的斜率都是一致的,而在过渡点则会通过添加新的线性函数而发生突然变化。
图 2:使用 NN 近似连续分段线性函数的示例。
在每个转换点,都会从输入中添加/减去一个新的 ReLU 函数,以增加/减少斜率。
在有一个使用 ReLU 激活的隐含层和一个线性输出层的 NN 神经网络中,激活函数被聚合起来形成连续分段线性目标函数。隐含层的每个单元负责一个线性片段。在每个单元中,都会添加一个与斜率变化相对应的新的ReLU 函数,以产生新的斜率(参见上图)。由于该激活函数始终为正,因此输出层中与增加斜率的单元相对应的权重将为正,反之,与减少斜率的单元相对应的权重将为负(参见下图3)。新的函数在转换点进行添加,但由于 ReLU 激活函数的禁用范围,在转换点之前(有时在转换点之后)不会对生成的函数产生影响。
图 3:使用由一个带 ReLU 激活的隐含层和一个线性输出层组成的 NN
04
举个栗子
我们假设单元0负责第一个分段,这里我们假设:
所以第一个分段的目标函数表示如下:
经过ReLU函数后,在x0 = 1,进行输出的抑制,最终这一分段通过权重w0=1添加到最终输出里,如下所示:
图 6:单元 0 经过激活函数Relu后的输出
同理,我们假设单元1负责第二个分段,这里我们知道链接点处x0 = 1,并且此时函数取值为0,所以第二段的分段函数表示为:z1=x0-1,同时权重为w1=1,得到结果如下:
图 7:单元 1 的激活输出 (a1_1),与输出 (a2_0) 汇总后产生片段。红色箭头代表斜率的变化
进而,单元2负责第三个分段,这里我们知道链接点处x0 = 2,并且此时函数取值为1,所以第三段的分段函数可以表示为:
同时权重为w1=1,得到结果如下:
图 8:单元 2 的输出 (a1_2),与输出 (a2_0) 汇总后产生分段。红色箭头表示斜率的变化。
05
逼近连续曲线函数
一个连续曲线函数可以用一系列无限小的线性片段来逼近,这就是函数的分段线性逼近。线性片段的数量越多,每个片段的大小越小,对目标函数的逼近效果就越好。因此,与之前相同的网络结构,只要有足够多的隐藏单元,就能获得曲线函数的良好近似值。
然而,在现实中,网络的训练是为了拟合输入-输出映射函数未知的给定数据集。神经元数量过多的架构容易出现过拟合、高方差等问题,并且需要更多的时间来训练。因此,适当的隐藏单元数量既不能太少而无法正确拟合数据,也不能太多而导致过度拟合。此外,在神经元数量有限的情况下,低损耗的良好近似会在限制域中有更多的过渡点,而不是以均匀采样的方式等距过渡点。如下图所示:
图 10:连续曲线函数的两个分段线性近似值(虚线部分)。
与近似值 2 相比,近似值 1 在限制域中有更多的过渡点,因此能更好地模拟目标函数。
06
总结
点击上方小卡片关注我
添加个人微信,进专属粉丝群!