前言
大家好,再上一篇文章中,介绍了TensorFlow的基本架构与基础知识,相信大家已经对TensorFlow有了一定的了解。在这篇文章中我将使用一个房价预测的例子来带领大家熟悉TensorFlow的使用,优化器等学习算法相关概念以及TensorBoard可视化数据流图的应用。
1.优化器
1.1 损失函数
假设在线性回归问题中,我们有一个像这样的训练集,?代表了训练样本的数量,比如 ?=47。而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式: ℎ?(?)=?0+?1x。接下来我们会引入一些术语我们现在要做的便是为我们的模型选择合适的参数 ?0 和 ?1,在简单的单变量线性回归问题中便是直线的斜率和在 ? 轴上的截距。我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差。
常见的损失函数有平方损失函数、交叉熵损失函数和指数损失函数。使用损失函数对训练样本求损失值,再累加求平均进可以得到模型的经验风险,f(x)关于训练集的平均损失就是模型的经验风险,形式如下:
R e m p = 1 N ∑ i = 1 N L ( f ( x i ; θ ) , y − i ) R_{emp} =\frac{1}{N}\sum_{i=1}^NL(f(x_i; \theta),y_{-i}) Remp=N1i=1∑NL(f(xi;θ),y−i)
1.2正则化
我们要做的就是使损失函数尽可能地小,也就是使模型的经验风险尽可能小。然而,如果过度地追求训练数据上的低损失值,就遇到过拟合问题。训练集通常并不能完全代表真实场景的数据分布。当两者的分布不一致时,如果过分依赖训练集上的数据,面对新数据时就会无所适从,这时模型的泛化能力就会变差,这也可以被称为过拟合。如下图所示:
显示了模型训练的三种不同情况。在第一种情况下,由于模型过于简单,无法
刻画问题的趋势。第二个模型是比较合理的,它既不会过于关注训练数据中的噪音,又能够比较好地刻画问题的整体趋势。第三个模型就是过拟合了, 虽然第三个模型完美地划分了不同形状的点,但是这样的划分并不能很好地对未知数据做出判断,因为它过度拟合了训练数据中的噪音而忽视了问题的整体规律。
模型训练的目标是不断最小化经验风险。随着训练步数的增加,经验风险将逐渐降低,模型复杂度也将逐渐上升。为了降低过度训练可能造成的过拟合风险,可以引入专门用来度量模型复杂度的正则化项或惩罚项。常用的正则化项有L0、 L1和L2范数。因此,我们将模型最优化的目标替换为鲁棒性更好的结构风险最小化。如下所示,它由经验风险项和正则项两部分构成:
R s r m = m i n 1 N ∑ i = 1 N L ( f ( x i ; θ ) , y − i ) + λ J ( θ ) R_{srm} =min\frac{1}{N}\sum_{i=1}^NL(f(x_i; \theta),y_{-i})+\lambda J(\theta) Rsrm=minN1i=1∑NL(f(xi;θ),y−i