zoukankan      html  css  js  c++  java
  • 小批量随机梯度下降

    本博文来自于 《动手学深度学习》 本博文只是记录学习笔记,方便日后查缺补漏,如有侵权,联系删除

    优化算法

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

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

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

    [egin{aligned} w_1 &leftarrow w_1 - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} frac{ partial ell^{(i)}(w_1, w_2, b) }{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)}(w_1, w_2, b) }{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)}(w_1, w_2, b) }{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{aligned} ]

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

    矢量计算表达式

    在模型训练或预测时,我们常常会同时处理多个数据样本并用到矢量计算。

    广义上讲,当数据样本数为(n),特征数为(d)时,线性回归的矢量计算表达式为

    [oldsymbol{hat{y}} = oldsymbol{X} oldsymbol{w} + b, ]

    其中模型输出(oldsymbol{hat{y}} in mathbb{R}^{n imes 1}), 批量数据样本特征(oldsymbol{X} in mathbb{R}^{n imes d}),权重(oldsymbol{w} in mathbb{R}^{d imes 1}), 偏差(b in mathbb{R})。相应地,批量数据样本标签(oldsymbol{y} in mathbb{R}^{n imes 1})。设模型参数(oldsymbol{ heta} = [w_1, w_2, b]^ op),我们可以重写损失函数为

    [ell(oldsymbol{ heta})=frac{1}{2n}(oldsymbol{hat{y}}-oldsymbol{y})^ op(oldsymbol{hat{y}}-oldsymbol{y}). ]

    小批量随机梯度下降的迭代步骤将相应地改写为

    [oldsymbol{ heta} leftarrow oldsymbol{ heta} - frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} abla_{oldsymbol{ heta}} ell^{(i)}(oldsymbol{ heta}), ]

    其中梯度是损失有关3个为标量的模型参数的偏导数组成的向量:

    [ abla_{oldsymbol{ heta}} ell^{(i)}(oldsymbol{ heta})= egin{bmatrix} frac{ partial ell^{(i)}(w_1, w_2, b) }{partial w_1} \ frac{ partial ell^{(i)}(w_1, w_2, b) }{partial w_2} \ frac{ partial ell^{(i)}(w_1, w_2, b) }{partial b} end{bmatrix} = egin{bmatrix} x_1^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \ x_2^{(i)} (x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}) \ x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)} end{bmatrix} = egin{bmatrix} x_1^{(i)} \ x_2^{(i)} \ 1 end{bmatrix} (hat{y}^{(i)} - y^{(i)}). ]

    不一定每天 code well 但要每天 live well
  • 相关阅读:
    spring boot 启动后执行初始化方法
    Linux CentOS 7 下 JDK 安装与配置
    Linux rpm 命令参数使用详解[介绍和应用]
    异常处理: 重载Throwable.fillInStackTrace方法已提高Java性能
    dubbo 配置属性
    centos7 操作防火墙
    springBoot 打包 dubbo jar包
    直播中聊天场景的用例分享
    解决在安装Fiddler4.6版本后,在手机上安装证书出现的问题解决方法
    系统调优方案思路分享
  • 原文地址:https://www.cnblogs.com/geekfx/p/13879705.html
Copyright © 2011-2022 走看看