模型过拟合欠拟合
训练误差和泛化误差
训练误差指模型在训练数据集上表现出的误差
泛化误差指模型在任意?个测试数据样本上表现出的误差的期望
我们的注意力应集中于降低泛化误差,使模型具有更好的普适性。
模型选择
验证数据集 (validation set)
预留?部分在训练数据集和测试数据集以外的数据来进?模型选择。这部分数据被称为验证数据集,简称验证集。
(K)折交叉验证
我们把原始训练数据集分割成K个不重合的?数据集,然后我们做K次模型训练和验证。每?次,我们使??个?数据集验证模型,并使?其他(K-1)个?数据集来训练模型。在这(K)次训练和验证中,每次?来验证模型的?数据集都不同。最后,我们对这(K)次训练误差和验证误差分别求平均。
过拟合和欠拟合
欠拟合(underfitting):模型?法得到较低的训练误差
过拟合(overfitting):模型的训练误差远小于它在测试数据集上的误差
影响因素:模型复杂度和数据集大小
模型复杂度过低,容易出现欠拟合;复杂的过高,容易出现过拟合。我们需要进行模型的选择以均衡训练误差和泛化误差。
训练集中数据量不足容易引起过拟合,而泛化误差与训练集数据量大小无关,所以应尽可能扩大训练集样本量,尤其是在模型复杂度较高的情况下。
应对过拟合的方法
权重衰减(weight decay)
(L_2)范数正则化,即统计学习中的岭回归。以线性回归为例,权重衰减将原来的损失函数(ellleft(w_{1}, w_{2}, bright)=frac{1}{n} sum_{i=1}^{n} frac{1}{2}left(x_{1}^{(i)} w_{1} x_{2}^{(i)} w_{2} b-y^{(i)}right)^{2}),通过增加超参数(lambda), 变为(ellleft(w_{1}, w_{2}, bright) frac{lambda}{2 n}|w|^{2}),增加了一个具有(L_2)范数惩罚项的新损失函数。(|w|^{2}=w_1^2 w_2^2)
权重原有的迭代方式变为了
(w_{1} leftarrowleft(1-frac{eta lambda}{|mathcal{B}|}right) w_{1}-frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} x_{1}^{(i)}left(x_{1}^{(i)} w_{1} x_{2}^{(i)} w_{2} b-y^{(i)}right))
(w_{2} leftarrowleft(1-frac{eta lambda}{|mathcal{B}|}right) w_{2}-frac{eta}{|mathcal{B}|} sum_{i in mathcal{R}} x_{2}^{(i)}left(x_{1}^{(i)} w_{1} x_{2}^{(i)} w_{2} b-y^{(i)}right))
可以理解为权重乘以一个小于1的数,再减去不含惩罚性的梯度。通过惩罚绝对值较大的模型参数为模型的学习增加限制,能够在一定程度上抑制过拟合。
丢弃法(dropout)
针对于多层感知机中的隐藏层进行“丢弃”。隐藏层中的每一个单元都有概率(p)被丢弃,同时有概率(1-p)对其进行拉伸。丢弃概率(p)为丢弃法超参数。
(h_{i}^{prime}=frac{xi_{i}}{1-p} h_{i})
(h_i)为某一个单元,进行丢弃之后得到的新的隐藏单元为(h_i^{prime}) 。(xi_{i})为一随机变量,(xi_{i}=0,1)的概率分别为(p), (1-p)。可计算得出(E(xi_{i})=1-p)
(Eleft(h_{i}^{prime}right)=frac{Eleft(xi_{i}right)}{1-p} h_{i}=h_{i})
由上式可得丢弃并不会改变隐藏单元的期望值。但每个隐藏单元都有可能被丢弃,因此在训练模型的过程中不会过度依赖任何一个单元,从而起到正则化的作用。
正向传播、反向传播和计算图
正向传播(forward propagation)
正向传播是指对神经.络沿着从输.层到输出层的顺序,依次计算并存储模型的中间变量
下图为正向传播的计算图(computational graph),方形为变量,圆形为运算,箭头表示输入到输出之间的关系
他们之间的关系为:
(z=W^{(1)}x)
(h=phi(z))
(o=W^{(2)}h)
(L=ell(o,y))
(s=frac{lambda}{2}left(left|boldsymbol{W}^{(1)}right|_{F}^{2} left|boldsymbol{W}^{(2)}right|_{F}^{2}right))
(J=L s)
反向传播 (back-propagation)
反向传播指的是计算神经?络参数梯度的?法。总的来说,反向传播依据微积分中的链式法则,沿着从输出层到输?层的顺序,依次计算并存储?标函数有关神经?络各层的中间变量以及参数的梯度。
依据链式法则计算反向梯度依次为:
(frac{partial J}{partial L}=1, quad frac{partial J}{partial s}=1)
(frac{partial J}{partial o}=operatorname{prod}left(frac{partial J}{partial L}, frac{partial L}{partial o}right)=frac{partial L}{partial o})
(frac{partial s}{partial W^{(1)}}=lambda W^{(1)}, quad frac{partial s}{partial W^{(2)}}=lambda W^{(2)})
(frac{partial J}{partial W^{(2)}}=operatorname{prod}left(frac{partial J}{partial o}, frac{partial o}{partial W^{(2)}}right) operatorname{prod}left(frac{partial J}{partial s}, frac{partial s}{partial W^{(2)}}right)=frac{partial J}{partial o} h^{top} lambda W^{(2)})
(frac{partial J}{partial h}=operatorname{prod}left(frac{partial J}{partial o}, frac{partial o}{partial h}right)=W^{(2)^{T}}frac{partial J}{partial o})
(frac{partial J}{partial z}=operatorname{prod}left(frac{partial J}{partial h}, frac{partial h}{partial z}right)=frac{partial J}{partial h} odot phi^{prime}(z))
(frac{partial J}{partial W^{(1)}}=operatorname{prod}left(frac{partial J}{partial z}, frac{partial z}{partial W^{(1)}}right) operatorname{prod}left(frac{partial J}{partial s}, frac{partial s}{partial W^{(1)}}right)=frac{partial J}{partial z} x^{top} lambda W^{(1)})
关系阐述
???,正向传播的计算可能依赖于模型参数的当前值,而这些模型参数是在反向传播的梯度计算后通过优化算法迭代的。
另???,反向传播的梯度计算可能依赖于各变量的当前值,而这些变量的当前值是通过正向传播计算得到的。
在模型参数初始化完成后,我们交替地进.正向传播和反向传播,并根据反向传播计算的梯度迭代模型参。
数值稳定性和模型初始化
深度模型有关数值稳定性的典型问题是衰减(vanishing)和爆炸(explosion)。
举例:多层感知机,如果有30层,每层都有两个权重分别为0.2和5,第30层输出为输?(X)分别与(0.2^{30} approx 1times 10^{-21})(衰减)和(5^{30}approx 9 times 10^{20})(爆炸)的乘积。
随机初始化模型参数
多层感知机若输入相同的权重,在每一个单元中会得到相同的值,使得多层感知机设置的多个隐藏单元失去意义,所以要在训练前设置随机初始值。
MXNet
权重服从-0.07~0.07之间的均匀分布,偏差参数全部清零。
Xavier
记全连接层输入个数为(a), 输出个数(b),Xavier随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布:
(U(-sqrt{frac{6}{a b}}, sqrt{frac{6}{a b}}))