面经杂谈(1)
8/27,今天刷牛客看到的搜狐面经,为了准备面试,我把看到的面经被问到的问题也自己整理回答下,吸取经验:
1.说说过拟合
首先,在随着训练过程的进行,模型复杂度增加,在训练集上误差逐渐减小,但是在验证集上误差反而越来越大。因为训练出来的网络过度拟合了训练集,对训练集以外的数据不起作用,这就称之为泛化性能不好,泛化性能是训练效果评价中的首要目标。
过拟合则是泛化的反面,实际过程中,降低过拟合的方法一般有:
(1)正则化
L1正则化:目标函数中增加所有权重w参数的绝对值之和, 逼迫更多w为零,也就是变稀疏。它会学习地去掉这些无用的特征,也就是把这些特征对应的权重置为0。
L2正则化:目标函数中增加所有权重w参数的平方之和, 逼迫所有w尽可能趋向零但不为零. L2正则化的加入就惩罚了权重变大的趋势。
(2)dropout(随机失活):
在训练的运行的时候,让神经元以超参数p的概率被**(也就是1-p的概率被设置为0), 每个w因此随机参与, 使得任意w都不是不可或缺的, 效果类似于数量巨大的模型集成。
(3)逐层归一化
这个方法给每层的输出都做一次归一化(网络上相当于加了一个线性变换层), 使得下一层的输入接近高斯分布. 这个方法相当于下一层的w训练时避免了其输入以偏概全, 因而泛化效果非常好.
(4)提前终止
典型的方法是根据交叉叉验证提前终止: 若每次训练前, 将训练数据划分为若干份, 取一份为测试集, 其他为训练集, 每次训练完立即拿此次选中的测试集自测. 因为每份都有一次机会当测试集, 所以此方法称之为交叉验证. 交叉验证的错误率最小时可以认为泛化性能最好, 这时候训练错误率虽然还在继续下降, 但也得终止继续训练了.
参考:https://zhuanlan.zhihu.com/p/57947136
暂时写到这。有时间继续写。