11.6 例子:模拟数据

11.6 例子:模拟数据

note “更新笔记” @2017-12-28 挺惭愧的!直到今天才认真地从零开始写了个简单的神经网络代码,具体代码详见Notebook for Simple Neural Network。对于本节的例子,我也写了份代码试图重现书中的结果,代码详见Notebook for this Section

我们从两个可加误差模型 Y=f(X)+ε 中产生数据:

Sum of sigmoids: Y=σ(a1TX)+σ(a2TX)+ε1Radial: Y=m=110ϕ(Xm)+ε2

这里 XT=(X1,X2,,Xp),每个 Xj 是标准高斯变量,第一个模型中 p=2,第二个模型中 p=10.

对于sigmoid模型,a1=(3,3),a2=(3,3);对于径向模型,ϕ(t)=(1/2π)1/2exp(t2/2).ε1ε2都是高斯误差,选择方差使得两个模型的信噪比都为4。

(11.18)Var(E(YX))Var(YE(YX))=Var(f(X))Var(ε)

我们取大小为100的训练集和大小为10000的测试集。我们采用权重系数衰减和不同的隐藏单元来拟合神经网络,然后记录10个随机初始权重系数值情形下的平均测试误差ETest(Yf^(X))2。虽然只产生了一个训练集,但是结果是“平均”的训练集的典型。测试误差展示在图11.6中。注意到0个隐藏层单元指的是线性最小二乘回归。神经网络对于sigmoid函数之和的模型拟合效果很好,而且当有两个神经元时效果最好,非常接近贝叶斯误差率。(回忆一下,回归的平方误差的贝叶斯误差率是误差的方差;这张图中是测试误差相对于贝叶斯误差的比例)然而,注意到更多的隐藏层单元,很快便出现了过拟合,而且有些权重系数的初始值比线性模型(0个隐藏单元)拟合得还差。即便是2个隐藏单元的情形,10个权重系数的初始值中有两个的结果不好于线性模型,证实了多重初始值的重要性。

图11.6 模拟数据例子的测试误差相对于贝叶斯误差(水平虚线)的箱线图。左图的真实函数是两个sigmoid函数之和,右图是径向函数。对于具有所指示单元数目的单个隐藏层神经网络,显示10个不同起始权重的测量误差。

在某种程度上径向函数对于神经网络是最困难的,因为它是球对称且没有偏好的方向。我们可以从图11.6的右图中看出在这种情形下缺失效果很差,测试误差远远超出贝叶斯误差(注意与左图不同的垂直刻度)。事实上,因为常值拟合(比如样本均值)的相对误差率达到5(当SNR为4),我们看到神经网络比均值表现得越来越差。

这个例子中我们采用一个固定的系数衰减参数0.0005,表现一个温和的正则化。图11.6的左图的结果表明在更多隐藏单元的情形下需要更多的正则化。

图11.7. 模拟数据例子的测试误差相对于贝叶斯误差的箱线图。真实函数是两个sigmoid函数之和。对于具有所指示单元数目的单个隐藏层神经网络,显示10个不同起始权重的测量误差。两个图分别表示无系数衰减(左边)和强误差衰减λ=0.1(右图)

图11.7中,我们对两sigmoids和的模型重复实验,左边图没有系数衰减,右边图为更强的系数衰减(λ=0.1).没有系数衰减时,越多的隐藏单元,过拟合变得越严重。系数衰减值λ=0.1在所有隐藏神经元个数的情形下都能得到好结果,当隐藏单元的个数增加并不表现出过拟合的现象。最后,图11.8显示了含10个隐藏单元神经网络的测试误差随着不同衰减参数的变化。值为0.1时近似是最优的。

图11.8. 对于模拟数据例子的测试误差的箱线图。真实函数为两个sigmoid函数之和。对于具有所指示单元数目的单个隐藏层神经网络,显示10个不同起始权重的测量误差。

总的来说,有两个自由参数需要选择:权重衰减参数λ和隐藏层的数目M。作为一个学习的策略,可以在对应的最小约束模型下固定任一个参数,来确保模型足够丰富,并且运用交互验证来选择另一个参数。这里最少约束值为0权重衰减和10个隐藏层单元。将图11.7的左图与图11.8相比,我们可以看到测试误差对于系数衰减更不敏感,因此此参数的交互验证会更好。