zoukankan      html  css  js  c++  java
  • 动手学深度学习2-深度学习基础

    线性回归

    线性回归输出是一个连续值,因此适用于回归问题。回归问题的实际中很常见,比如房屋价格预测,气温,销售额等连续值的问题。与回归问题不同,分类问题中的模型输出是一个离散值。我们所说的图像分类,垃圾邮件识别,疾病监测等输出为离散值的问题都属于分类问题的范畴。sofamax回归则适用于分类问题。

    由于线性回归和softmax回归都是单层神经网络,它们涉及的概念和技术同样适用于大多数的深度学习模型。首先我们以线性回归为例,介绍大多数深度学习模型的基本要素和表示方法。

    线性回归的基本要素

    我们以一个简单房屋价格预测作为例子来解释线性回归的基本要素。这个应用的目标是预测一栋房子的售出价格(元)。
    我们知道这个价格取决于很多因素,如房屋状况,地段,市场行情等。为了简单起见,这里我们假设房屋价格只取决于房屋的状况的两个
    因素,即面积(平方米) 和房龄(年)。接下来我们希望探索价格与这两个因素的具体关系。

    模型定义

    设房屋的面积为x1,房龄为x2,售出价格为y,我们需要建立基于输入x1和x2来计算输出
    y的表达式,也就是模型(model),线性回归假设输出与输入质检的线性关系:

    [hat { y } = x _ { 1 } w _ { 1 } + x _ { 2 } w _ { 2 } + b ]

    其中w1,w2是权重(weight),b是变差(bias),且均为标量。它们是线性回归模型的参数
    parameters。模型的输出y^是线性回归对于真实价格y的预测或估计。我们通常允许它们之
    间有一定的误差。

    训练模型

    需要通过数据来寻找特定的模型参数值,似的模型在数据上的误差尽可能小。这个过程叫作模型训练(model training) 。训练模型的三个要素

    (1) 训练数据

    我们通常收集一系列的真实数据,例如多栋房屋的真实售出价格和它们的对应的面积和房龄。
    我们希望在数据上寻找模型参数去使模型的预测价格和真实价格的误差最小。在机器学习的术语
    中,该数据集被称为训练数据集(training data set)或者traing set,一栋房屋被称为一个样本(sample),其真实售出价格叫作标签(label) ,用来预测标签的两个因素叫作特征(feature)。特征用来表征样本的特点。

    假设我们采集的样本数为n,索引为i的样本的特征为$$x_{ 1 }^{( i )}和x _ { 2 } ^ { ( i ) } ,标签是{y}^{( i )}$$。对于索引为i的房屋,线性回归模型的房屋价格预测表达式为

    [hat { y } ^ { ( i ) } = x _ { 1 } ^ { ( i ) } w _ { 1 } + x _ { 2 } ^ { ( i ) } w _ { 2 } + b ]

    (2) 损失函数

    在模型训练中,我们需要衡量价格预测值与真实值之间的误差。通常我们选取一个非负值作为一个误差,且数值越小表示误差越小。一个常用的选择是平方函数。它的评估索引为i的样本误差的表达式为

    [ell ^ { ( i ) } left( w _ { 1 } , w _ { 2 } , b ight) = frac { 1 } { 2 } left( hat { y } ^ { ( i ) } - y ^ { ( i ) } ight) ^ { 2 } 其中$$frac{1}{2}$$使对平方项求导之后的常数项系数为1,这样的形式稍微简单一些。显然误差越小表示预测价格与真实价格越接近,且二者相等时误差为0。给定训练集,这个误差只与模型参数相关,因此我们将它记为以模型参数为参数的函数。在机器学习里,将衡量误差的函数称为损失函数(loss function)。这里使用的平方误差函数也称为平方损失(square loss) 通常,我们用训练数据集中所有样本误差的平均来衡量模型预测的质量,即 ]

    ell left( w _ { 1 } , w _ { 2 } , b ight) = frac { 1 } { n } sum _ { i = 1 } ^ { n } ell ^ { ( i ) } left( w _ { 1 } , w _ { 2 } , b ight) = frac { 1 } { n } sum _ { i = 1 } ^ { n } frac { 1 } { 2 } left( x _ { 1 } ^ { ( i ) } w _ { 1 } + x _ { 2 } ^ { ( i ) } w _ { 2 } + b - y ^ { ( i ) } ight) ^ { 2 }

    [ 在模型训练中,我们希望找出一组模型参数,记为 $$w_{1}^{*},w_{2}^{*},b^{*}$$,来使训练样本平均损失最小: $$w_{1}^{*},w_{2}^{*},b^{*} = underset { w _ { 1 } , w _ { 2 } , b }{argmin}ell left( w _ { 1 } , w _ { 2 } , b ight) ]

    (3) 优化算法

    当模型和损失函数较为简单时,上面的误差最小化问题的解可以用公式表达出来。这类解叫作解析解(analytical solution)。本节使用的线性回归和平均误差刚好属于这个范畴。然而,大多数深度学习的模型并没有解析解,只能通过优化算法有限次的迭代模型参数尽可能降低损失函数的值。这类解叫作数值解。

    在求数值解的优化算法中,小批量随机梯度下降(mini-batch stochastic gradient descent)在深度学习中广泛使用。它的算法很简单,先选取一组模型参数的初始值,如随机选取;接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch)β,然后求小批量中数据样本的平均舒适有关模型参数的倒数(梯度),最后用此结果与预先设定的一个正数(学习率)的乘机作为模型参数在本次迭代的减小量。

    在训练本节讨论的线性回归模型过程中,模型的每个参数将作如下迭代:

    [egin{array} { l } { w _ { 1 } leftarrow w _ { 1 } - frac { eta } { | mathcal { B } | } sum _ { i in mathcal { B } } frac { partial ell ^ { ( i ) } left( w _ { 1 } , w _ { 2 } , b ight) } { partial w _ { 1 } } = 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 ) } ight) } \ { w _ { 2 } leftarrow w _ { 2 } - frac { eta } { | mathcal { B } | } sum _ { i in mathcal { B } } frac { partial ell ^ { ( i ) } left( w _ { 1 } , w _ { 2 } , b ight) } { partial w _ { 2 } } = w _ { 2 } - frac { eta } { | mathcal { B } | } sum _ { i in mathcal { B } } x _ { 2 } ^ { ( i ) } left( x _ { 1 } ^ { ( i ) } w _ { 1 } + x _ { 2 } ^ { ( i ) } w _ { 2 } + b - y ^ { ( i ) } ight) } \ { b leftarrow b - frac { eta } { | mathcal { B } | } sum _ { i in mathcal { B } } frac { partial ell ^ { ( i ) } left( w _ { 1 } , w _ { 2 } , b ight) } { partial b } = b - frac { eta } { | mathcal { B } | } sum _ { i in mathcal { B } } left( x _ { 1 } ^ { ( i ) } w _ { 1 } + x _ { 2 } ^ { ( i ) } w _ { 2 } + b - y ^ { ( i ) } ight) } end{array} ]

    上式中,|β|代表每个小批量中样本个个数(批量大小,batch size),η称为学习率(learning rate) 并取整数。需要强调的是,这里的批量大小和学习率的值是认为设定的,并不是通过模型训练出来的,因此叫作超参数(hyperparameter)。通常,我们所说的调参正是指的调价超参数,例如通过反复试错来找到超参数的和食指。在少数情况下,超参数也可以通过模型训练出来。

    模型预测

    模型训练完成之后,我们将模型的参数w_{1},w_{2},b在优化算法停止时的值记作$$hat{w}{1},hat{w}{2},hat{b}$$,注意,我们得到的并不一定是最小化损失函数的最优解$$hat{w}{1}{*},hat{w}_{2}{*},hat{b}$$,而是一个最优解的近似。然后,我们就可以使用学到的线性回归模型$$x{1}hat {w}{1}+x{2}hat {w}{2} +hat{b}$$来估算训练数据集意外的任意一栋面积(平方米),房龄(年)为$${x}{1},{x}_{2}$$的房屋的价格了。

  • 相关阅读:
    web开发的性能准则(减少页面加载时间方面)
    HTTP
    HTTP -- 缓存
    新的博客地址
    mongodb 的命令操作(转)
    低调的css3属性font-size-adjust
    HTML5对表单的约束验证
    clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案
    关于word-break和word-wrap的使用和区别
    MongoDB
  • 原文地址:https://www.cnblogs.com/onemorepoint/p/11761961.html
Copyright © 2011-2022 走看看