TensorFlow学习笔记9-深度模型的优化

深度模型的优化

回顾概念:
代价函数时训练集上损失函数的平均:

\[J(\theta)=E_{(x,y)\sim \hat{p}_{data}}L(f(x;\theta),y) \tag{1} \]

引入概念:

概念 描述
批量梯度算法 使用整个训练集的优化算法,可计算更精确的梯度估计,但回报小于线性
批量batch 整个数据集中的一组样本构成的子集
随机算法(在线算法) 每次只使用一个样本的优化算法,难以充分利用多核结构
小批量随机方法 介于批量梯度算法和在线梯度算法之间的方法

小批量

  • 随机抽取;通常做法是:将数据集的顺序打乱一次,然后按这个乱序进行顺序抽取;
  • 通常多次遍历整个数据集。(第一次遍历是无偏估计,后面的遍历就是有偏估计了);

随机梯度下降(SGD)

从原始数据集中抽取m个样本的小批量。共进行\(\tau\)次迭代,其中第k次迭代的参数\(\theta\)更新算法如下:

设置学习率\(\epsilon_k\)和初始参数\(\theta\)

\(while\ 停止准则未满足\ do\)

\(\quad\)从数据集中拿到m个样本的小批量;

\(\quad\)计算梯度估计:\(\hat{g}\leftarrow +\frac{1}{m}\nabla_{\theta}\sum_iL(f(x_i;\theta),y_i)\)

\(\quad\)更新参数\(\theta\leftarrow\theta-\epsilon_k\hat{g}\)

\(end\ while\)

一般实践中,第k次迭代的学习率为:

\[\begin{aligned} \epsilon_k=\lbrace \begin{matrix} (1-\alpha)\epsilon_0+\alpha\epsilon_{\tau},\ &k<\tau\\ \epsilon_{\tau},\ &k\geq\tau \end{matrix} \end{aligned} \]

其中

  • \(\alpha =\frac{k}{\tau}\)
  • \(\tau\)常设置为反复遍历整个训练集几百次的迭代次数;
  • \(\epsilon_{\tau}\)设置为\(\epsilon_0\)的1%。
  • \(\epsilon_0\)的选择:检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率。但不能太大引起振荡。

使用动量的随机梯度下降

设置学习率\(\epsilon\),动量参数\(\alpha\)和初始参数\(\theta\),速度\(v\)

\(while\ 停止准则未满足\ do\)

\(\quad\)从数据集中拿到m个样本的小批量;

\(\quad\)计算梯度估计:\(g\leftarrow +\frac{1}{m}\nabla_{\theta}\sum_iL(f(x_i;\theta),y_i)\)

\(\quad\)计算速度更新:\(v\leftarrow\alpha v-\epsilon g\)

\(\quad\)更新参数\(\theta\leftarrow\theta+v\)

\(end\ while\)

这样随机梯度下降的速度更快,加快了训练速度。

另一种算法:

设置学习率\(\epsilon\),动量参数\(\alpha\)和初始参数\(\theta\),速度\(v\)

\(while\ 停止准则未满足\ do\)

\(\quad\)从数据集中拿到m个样本的小批量;

\(\quad\)计算梯度估计:\(g\leftarrow +\frac{1}{m}\nabla_{\theta}\sum_iL(f(x_i;\theta+\alpha v),y_i)\)

\(\quad\)计算速度更新:\(v\leftarrow\alpha v-\epsilon g\)

\(\quad\)更新参数\(\theta\leftarrow\theta+v\)

\(end\ while\)

参数初始化策略

偏置:默认初始化为启发式挑选的小常数。
权重:高斯或均匀分布中随机抽取的小值。
8.3-8.7看不下去了。后面补上吧。

posted @ 2019-08-30 15:22  云远·笨小孩  阅读(339)  评论(0编辑  收藏  举报