当咱们费劲周章不断调参来训练模型时,不可避免地会思考一系列问题,模型好坏的评判标准是什么?改善模型的依据何在?什么时候中止训练为佳?学习
要解决上述问题,咱们须要引入误差和方差这两个概念,理解他们很重要,也是后续了解过拟合、正则化、提前终止训练、数据加强等概念和方法的前提。测试
这是一张常见的靶心图。能够想象红色靶心表示为实际值,蓝色点集为预测值。在模型不断地训练迭代过程当中,咱们能碰到四种状况:大数据
咱们从简单的回归模型来入手,对于训练数据集S = {(xi , yi)},令yi = f(xi) + ε,假设为实际方程,其中ε是知足正态分布均值为0,标准差为σ的值。spa
咱们再假设预测方程为h(x) = wx + b,这时咱们但愿总偏差Err(x) = ∑i [yi - h(xi)]2 能达到最小值。给定某集合样本(x, y),咱们能够展开偏差公式,以生成用方差、误差和噪音组合的方式。翻译
在此以前,咱们来引入一个辅助公式,令z为知足正态分布的随机值集合,再令z = E(z),即z 为z的平均值。3d
则E [(z - z)2] = E [z2 -2zz + z2]blog
= E [z2] - 2E [z]z + z2 注:E[z] = z,由于z是一个均值,其偏差便是本身资源
= E [z2] - 2zz + z2 深度学习
= E [z2] - z2 数学
能够获得一个辅助公式: E [z2] = E [(z - z)2] + z2 ,最后让咱们来开展偏差公式:
E [y - h(x)]2 = E [y2 - 2yh(x) + h(x)2]
= E [y2] - 2E[y] E[h(x)] + E[h(x)2]
= E [(y - y)2] + y2 - 2E[y]h(x) + E [(h(x) - h(x))2] + h(x)2
= E [(y - (fx))2] + f(x)2 - 2f(x)h(x) + E [(h(x) - h(x))2] + h(x)2
= E [(h(x) - h(x))2] + (h(x) - f(x))2 + E[(y - (fx))2]
= variance + bias2 + noise
注:y = E[y] = E[f(x) + ε] = E[f(x)] + E[ε] = E[f(x)] = f(x),ε均值已经被假定为0,对于具体的x,其E[f(x)] = f(x)
因而可知,偏差 = 方差 + 误差2 + 噪音 组成,通常来讲,随着模型复杂度的增长,方差会逐渐增大,误差会逐渐减少,见下图:
误差的变化趋势相信你们都容易理解,随着模型的不断训练,准确度不断上升,天然误差逐渐下降。但方差的变化趋势却不易理解,为什么训练初始阶段是低方差,训练后期易是高方差?
注意方差的数学公式为:E [(h(x) - h(x))2] ,也就是说为每一个预测值与预测均值差的平方和再求平均数,能够表现为一种波动变化,低方差意味低变化,高方差意味高变化。那咱们能够经过训练的不一样阶段来直观感觉方差的变化:
上图为训练初始阶段,咱们的模型(蓝线)对训练数据(红点)拟合度不好,是高误差,但蓝线近似线性组合,其波动变化小,套用数学公式也可知数值较小,故为低方差,这个阶段也称之为欠拟合(underfitting),须要加大训练迭代数。
上图为训练的后期阶段,可明显看出模型的拟合度很好,是低误差,但蓝线的波动性很是大,为高方差,这个阶段称之为过拟合(overfitting),问题很明显,蓝线模型很适合这套训练数据,但若是用测试数据来检验模型,就会发现泛化能力差,准确度降低。
所以咱们须要二者之间的一个模型。
上图这个蓝色模型可认为是“刚好”的一个模型,既能跟训练数据拟合,又离完美拟合保持必定距离,模型更具通用性,用测试数据验证会发现准确度也不错。
这个模型怎么来呢?咱们能够采起不少手段,好比:
由此看出,深度学习不可是一门科学,更像是一门艺术。咱们选择一个好的模型,不断调整参数来跨越欠拟合,避免过拟合,创建心目中理想的“刚好”模型。这看上去更像一个不断升级打怪的经验之学,须要咱们多多练习,但其背后支撑的数学原理也是须要咱们去好好理解和掌握。