当前位置: 首页 > news >正文

格尔木有做网站的吗在线教育网站开发软件

格尔木有做网站的吗,在线教育网站开发软件,2017国外优秀网站模版,网站建设中 提示动量法 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向#xff0c;因此#xff0c;梯度下降也叫作最陡下降#xff08;steepest descent#xff09;。在每次迭代中#xff0c;梯度下降根据自变量当前位置#xff0c;沿着当前位置的梯度更新自变…动量法 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向因此梯度下降也叫作最陡下降steepest descent。在每次迭代中梯度下降根据自变量当前位置沿着当前位置的梯度更新自变量。然而如果自变量的迭代方向仅仅取决于自变量当前位置这可能会带来一些问题。 梯度下降的问题 考虑一个目标函数 输入为二维向量x[x1,x2]⊤\boldsymbol{x} [x_1, x_2]^\topx[x1​,x2​]⊤输出为标量f(x)0.1x122x22f(\boldsymbol{x})0.1x_1^22x_2^2f(x)0.1x12​2x22​。 这里将x12x_1^2x12​系数从111减小到了0.10.10.1。下面实现基于这个目标函数的梯度下降并演示使用学习率为0.40.40.4时自变量的迭代轨迹。 %matplotlib inline import sys sys.path.append(..) from matplotlib import pyplot as plt import torcheta 0.4 # 学习率def f_2d(x1, x2):return 0.1 * x1 ** 2 2 * x2 ** 2def gd_2d(x1, x2, s1, s2):return (x1 - eta * 0.2 * x1, x2 - eta * 4 * x2, 0, 0)def show_trace_2d(f, results): plt.plot(*zip(*results), -o, color#ff7f0e)x1, x2 np.meshgrid(np.arange(-5.5, 1.0, 0.1), np.arange(-3.0, 1.0, 0.1))plt.contour(x1, x2, f(x1, x2), colors#1f77b4)plt.xlabel(x1)plt.ylabel(x2)def train_2d(trainer): x1, x2, s1, s2 -5, -2, 0, 0 # s1和s2是自变量状态results [(x1, x2)]for i in range(20):x1, x2, s1, s2 trainer(x1, x2, s1, s2)results.append((x1, x2))print(epoch %d, x1 %f, x2 %f % (i 1, x1, x2))return resultsshow_trace_2d(f_2d, train_2d(gd_2d))输出 epoch 20, x1 -0.943467, x2 -0.000073这幅图可以理解为f(x)f(\boldsymbol{x})f(x)在x1x_1x1​、x2x_2x2​平面上的投影可以看到 同一位置上目标函数在竖直方向x2x_2x2​轴方向比在水平方向x1x_1x1​轴方向的斜率的绝对值更大。因此给定学习率梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。我们需要一个较小的学习率从而避免自变量在竖直方向上越过目标函数最优解。然而这会造成自变量在水平方向上朝最优解移动变慢。 下面我们试着将学习率调得稍大一点此时自变量在竖直方向不断越过最优解并逐渐发散。 eta 0.6 show_trace_2d(f_2d, train_2d(gd_2d))动量法 动量法的提出是为了解决梯度下降的上述问题。 设时间步ttt的自变量为xt\boldsymbol{x}_txt​学习率为ηt\eta_tηt​在时间步000动量法创建速度变量v0\boldsymbol{v}_0v0​并将其元素初始化成0。在时间步t0t0t0动量法对每次迭代的步骤做如下修改 vt←γvt−1ηtgt,xt←xt−1−vt,\begin{aligned} \boldsymbol{v}_t \leftarrow \gamma \boldsymbol{v}_{t-1} \eta_t \boldsymbol{g}_t, \\ \boldsymbol{x}_t \leftarrow \boldsymbol{x}_{t-1} - \boldsymbol{v}_t, \end{aligned} vt​xt​​←γvt−1​ηt​gt​,←xt−1​−vt​,​ 其中动量超参数γ\gammaγ满足0≤γ10 \leq \gamma 10≤γ1。当γ0\gamma0γ0时动量法等价于小批量随机梯度下降。 在解释动量法的数学原理前让我们先从实验中观察梯度下降在使用动量法后的迭代轨迹。 def momentum_2d(x1, x2, v1, v2):v1 gamma * v1 eta * 0.2 * x1v2 gamma * v2 eta * 4 * x2return x1 - v1, x2 - v2, v1, v2eta, gamma 0.4, 0.5 show_trace_2d(f_2d, train_2d(momentum_2d))可以看到使用较小的学习率η0.4\eta0.4η0.4和动量超参数γ0.5\gamma0.5γ0.5时 动量法在竖直方向上的移动更加平滑且在水平方向上更快逼近最优解 下面使用较大的学习率η0.6\eta0.6η0.6此时自变量也不再发散。 eta 0.6 show_trace_2d(f_2d, train_2d(momentum_2d))指数加权移动平均 为了从数学上理解动量法需要先解释一下指数加权移动平均exponentially weighted moving average。 给定超参数0≤γ10 \leq \gamma 10≤γ1当前时间步ttt的变量yty_tyt​上一时间步t−1t-1t−1的变量yt−1y_{t-1}yt−1​当前时间步另一变量xtx_txt​ 当前时间步ttt的变量yty_tyt​是上一时间步t−1t-1t−1的变量yt−1y_{t-1}yt−1​与当前时间步另一变量xtx_txt​的线性组合 ytγyt−1(1−γ)xt.y_t \gamma y_{t-1} (1-\gamma) x_t.yt​γyt−1​(1−γ)xt​. 我们可以对yty_tyt​展开 yt(1−γ)xtγyt−1(1−γ)xt(1−γ)⋅γxt−1γ2yt−2(1−γ)xt(1−γ)⋅γxt−1(1−γ)⋅γ2xt−2γ3yt−3…\begin{aligned} y_t (1-\gamma) x_t \gamma y_{t-1}\\ (1-\gamma)x_t (1-\gamma) \cdot \gamma x_{t-1} \gamma^2y_{t-2}\\ (1-\gamma)x_t (1-\gamma) \cdot \gamma x_{t-1} (1-\gamma) \cdot \gamma^2x_{t-2} \gamma^3y_{t-3}\ \ldots \end{aligned} yt​​(1−γ)xt​γyt−1​(1−γ)xt​(1−γ)⋅γxt−1​γ2yt−2​(1−γ)xt​(1−γ)⋅γxt−1​(1−γ)⋅γ2xt−2​γ3yt−3​ ​…​ 令n1/(1−γ)n 1/(1-\gamma)n1/(1−γ)那么 (1−1/n)nγ1/(1−γ)\left(1-1/n\right)^n \gamma^{1/(1-\gamma)}(1−1/n)nγ1/(1−γ)。因为 lim⁡n→∞(1−1n)nexp⁡(−1)≈0.3679,\lim_{n \rightarrow \infty} \left(1-\frac{1}{n}\right)^n \exp(-1) \approx 0.3679,n→∞lim​(1−n1​)nexp(−1)≈0.3679, 所以当γ→1\gamma \rightarrow 1γ→1时γ1/(1−γ)exp⁡(−1)\gamma^{1/(1-\gamma)}\exp(-1)γ1/(1−γ)exp(−1)如0.9520≈exp⁡(−1)0.95^{20} \approx \exp(-1)0.9520≈exp(−1)。如果把exp⁡(−1)\exp(-1)exp(−1)当作一个比较小的数我们可以在近似中忽略所有含γ1/(1−γ)\gamma^{1/(1-\gamma)}γ1/(1−γ)和比γ1/(1−γ)\gamma^{1/(1-\gamma)}γ1/(1−γ)更高阶的系数的项。例如当γ0.95\gamma0.95γ0.95时 yt≈0.05∑i0190.95ixt−i.y_t \approx 0.05 \sum_{i0}^{19} 0.95^i x_{t-i}.yt​≈0.05i0∑19​0.95ixt−i​. 因此在实际中我们常常将yty_tyt​看作是对最近1/(1−γ)1/(1-\gamma)1/(1−γ)个时间步的xtx_txt​值的加权平均。例如 当γ0.95\gamma 0.95γ0.95时yty_tyt​可以被看作对最近20个时间步的xtx_txt​值的加权平均当γ0.9\gamma 0.9γ0.9时yty_tyt​可以看作是对最近10个时间步的xtx_txt​值的加权平均而且离当前时间步ttt越近的xtx_txt​值获得的权重越大越接近1 由指数加权移动平均理解动量法 现在我们对动量法的速度变量做变形 vt←γvt−1(1−γ)(ηt1−γgt).\boldsymbol{v}_t \leftarrow \gamma \boldsymbol{v}{t-1} (1 - \gamma) \left(\frac{\eta_t}{1 - \gamma} \boldsymbol{g}_t\right). vt​←γvt−1(1−γ)(1−γηt​​gt​). 由指数加权移动平均的形式可得速度变量vt\boldsymbol{v}_tvt​实际上对序列{ηt−igt−i/(1−γ):i0,…,1/(1−γ)−1}\{{\eta_{t-i}\boldsymbol{g}_{t-i} /(1-\gamma):i0,\ldots,1/(1-\gamma)-1}\}{ηt−i​gt−i​/(1−γ):i0,…,1/(1−γ)−1}做了指数加权移动平均。 换句话说相比于小批量随机梯度下降动量法在每个时间步的自变量更新量近似于将最近1/(1−γ)1/(1-\gamma)1/(1−γ)个时间步的普通更新量即学习率乘以梯度做了指数加权移动平均后再除以1−γ1-\gamma1−γ 所以在动量法中自变量在各个方向上的移动幅度不仅取决当前梯度还取决于过去的各个梯度在各个方向上是否一致。 之前的优化问题中所有梯度在水平方向上为正向右而在竖直方向上时正向上时负向下。这样我们就可以使用较大的学习率从而使自变量向最优解更快移动。 实现动量法 相对于小批量随机梯度下降动量法需要对每一个自变量维护一个同它一样形状的速度变量且超参数里多了动量超参数。实现中将速度变量用更广义的状态变量states表示。 def get_data_ch7(): data np.genfromtxt(../../data/airfoil_self_noise.dat, delimiter\t)data (data - data.mean(axis0)) / data.std(axis0)return torch.tensor(data[:1500, :-1], dtypetorch.float32), \torch.tensor(data[:1500, -1], dtypetorch.float32) # 前1500个样本(每个样本5个特征)def train_ch7(optimizer_fn, states, hyperparams, features, labels,batch_size10, num_epochs2):# 初始化模型net, loss linreg, squared_lossw torch.nn.Parameter(torch.tensor(np.random.normal(0, 0.01, size(features.shape[1], 1)), dtypetorch.float32),requires_gradTrue)b torch.nn.Parameter(torch.zeros(1, dtypetorch.float32), requires_gradTrue)def eval_loss():return loss(net(features, w, b), labels).mean().item()ls [eval_loss()]data_iter torch.utils.data.DataLoader(torch.utils.data.TensorDataset(features, labels), batch_size, shuffleTrue)features, labels get_data_ch7()def init_momentum_states():v_w torch.zeros((features.shape[1], 1), dtypetorch.float32)v_b torch.zeros(1, dtypetorch.float32)return (v_w, v_b)def sgd_momentum(params, states, hyperparams):for p, v in zip(params, states):v.data hyperparams[momentum] * v.data hyperparams[lr] * p.grad.datap.data - v.data先将动量超参数momentum设0.5这时可以看成是特殊的小批量随机梯度下降 其小批量随机梯度为最近2个时间步的2倍小批量梯度的加权和。 train_ch7(sgd_momentum, init_momentum_states(),{lr: 0.02, momentum: 0.5}, features, labels)将动量超参数momentum增大到0.9这时依然可以看成是特殊的小批量随机梯度下降 其小批量随机梯度为最近10个时间步的10倍小批量梯度的加权和。我们先保持学习率0.02不变 目标函数值在后期迭代过程中的变化不够平滑。直觉上10倍小批量梯度比2倍小批量梯度大了5倍试着将学习率减小到原来的1/5。此时目标函数值在下降了一段时间后变化更加平滑。 train_ch7(sgd_momentum, init_momentum_states(),{lr: 0.004, momentum: 0.9}, features, labels)动量法使用了指数加权移动平均的思想。它将过去时间步的梯度做了加权平均且权重按时间步指数衰减。动量法使得相邻时间步的自变量更新在方向上更加一致。
http://www.zqtcl.cn/news/41829/

相关文章:

  • 网站建设市场调研框架wordpress彩色条
  • WordPress配置全站加速cdnwordpress mylife
  • 404错误直接转向到网站首页6网站免费建站
  • 网站页面文案app store下载安卓
  • 企业网站php模板下载VR网站建设价格
  • 吉林省电力建设总公司网站网站建设vr
  • 毕业设计网站论文什么是网站开发中的分页
  • 江西建设厅特殊工种的网站网站开发投稿可行吗
  • 充值中心网站怎么做河北建设厅官方网站八大员考试
  • 开发一个大型网站需要多少钱c 网站开发的书籍
  • 深圳彩票网站开发人员做网站客户尾款老不给怎么办
  • 网站点击按钮排序台州品牌网站建设
  • 用dw做旅游网站的方法淘宝网网站建设的需求分析
  • 酒店网站开发合同找网络公司做网站
  • 电子商务网站 技术方案做网站用织梦好吗
  • 网站制作公司多少人移动前端开发需要学什么
  • 宁海县建设局网站如何建设网站平台
  • wordpress文章评论不显示关键词优化推广公司
  • 高新区网站建设上海市 建设执业资格注册中心网站
  • 网站程序文件五大常用办公软件
  • 大良网站建设基本流程西湖区高端网站建设
  • 手机网站静态模板下载做相框的网站
  • 做微官网什么网站好成品网页
  • 网站建设评价wordpress迅雷
  • 莆田做外贸网站淄博制作网站的公司
  • 室内设计师经常用的网站有没有网站建设的教程
  • 淘宝客网站一定要备案茂名中小企业网站制作
  • 网站怎么建设的wordpress机械免费主题
  • 恐怖网站代码作文大全网站
  • 辽宁省工程造价管理总站岱山县建设网站