少儿类网站怎么做,开源网站 做镜像 如何做,头像制作免费,阿里云个人网站备案过程全记录4. 分析上图#xff0c;说明原理#xff08;选做#xff09; 1、为什么SGD会走“之字形”#xff1f;其它算法为什么会比较平滑#xff1f; 之所以会走之字形#xff0c;是因为它在每次更新参数时只考虑当前的样本梯度。这导致参数更新非常不稳定#xff0c… 
4. 分析上图说明原理选做 1、为什么SGD会走“之字形”其它算法为什么会比较平滑       之所以会走之字形是因为它在每次更新参数时只考虑当前的样本梯度。这导致参数更新非常不稳定每个样本的梯度方向不一致从而产生了之字形的更新路径。      其他算法相对比较平滑的原因是它们引入了不同的策略来平衡参数更新的稳定性和速度。 例如Momentum算法引入了动量概念它在更新参数时考虑了之前更新的方向和速度。通过积累之前梯度的指数衰减平均值动量算法可以在梯度方向一致时加速收敛并减少参数更新的震荡从而使得更新路径更加平滑。Adagrad和RMSprop算法引入了自适应学习率的概念。它们通过梯度的历史信息对学习率进行调整可以根据梯度值的大小对参数的不同方向分配不同的学习率。这样可以使得梯度大的方向学习率减小梯度小的方向学习率增大从而更加平滑地更新参数。Adam算法在Momentum和RMSprop的基础上进一步改进结合了二者的优点。Adam算法不仅考虑了动量对更新路径的影响还引入了关于梯度平方的一阶矩量和二阶矩量的估计通过对梯度的偏移和峰值信息进行动态调整进一步提高更新路径的平滑性。 2、Momentum、AdaGrad对SGD的改进体现在哪里速度方向在图上有哪些体现      Momentum算法在更新时引入了动量的概念考虑了之前梯度更新的方向和速度。通过积累之前梯度的指数衰减平均值动量算法可以在梯度方向一致时加速收敛并减少参数更新的震荡。它在速度方面对SGD的改进的体现在:相当于增加了更新方向的平滑性。在图上这个改进体现为更新路径会比SGD更加平滑能够加速收敛。          Adagrad它通过历史梯度信息对每个参数自适应地调整学习率。Adagrad的学习率随着时间步的增加而不断衰减在每个参数那里都单独调整。这对于处理非平稳、强烈相关的数据具有很好的效果。在速度方面对SGD的改进的体现在可以自适应地调整每个参数的学习率以更贴合各自的梯度能够让更新更快速及早达到收敛。在图上这个改进体现为更新路径更加平缓而且每个维度更新幅度差异不大。  3.仅从轨迹来看Adam似乎不如AdaGrad效果好是这样么    轨迹上来看是这样因为此时Adam和AdaGrad的学习率并不相同并且Adam和AdaGrad选择的均是一个恰当的学习率。 但是图中的学习率都是调整过的我们随机换一个相同的学习率(0.1)    由上可见Adam优于Adagrad 所以上述观点错误没有一个模型会永远由于另一个知识参数不对而已。 5、调整学习率、动量等超参数轨迹有哪些变化 lr0.01时   lr太小30次根本不够搜索的改为1000次  这次Momentum找到了最小点Adam马上找到而其他两种算法还差得多 lr0.1搜索1000次  只有AdaGrad没有找到最小点   lr1搜索1000次  r100搜索100次   可以发现SGD和Momentum很容易错过全局最小值Adam需要较长的时间和较多的搜索次数来找到全局最小值AdaGrad效果最好。 
5. 总结SGD、Momentum、AdaGrad、Adam的优缺点 上个博客有 但是我发现学长总结更直观   6. Adam这么好SGD是不是就用不到了  SGD最大的缺点是下降速度慢而且可能会在沟壑的两边持续震荡停留在一个局部最优点。SGD没有用到二阶动量因此学习率是恒定的实际使用过程中会采用学习率衰减策略因此学习率递减。AdaGrad的二阶动量不断累积单调递增因此学习率是单调递减的。因此这两类算法会使得学习率不断递减最终收敛到0模型也得以收敛。 但AdaDelta和Adam则不然。二阶动量是固定时间窗口内的累积随着时间窗口的变化遇到的数据可能发生巨变使得可能会时大时小不是单调变化。这就可能在训练后期引起学习率的震荡导致模型无法收敛。    并且Adam有两大罪状      谈到现在到底Adam好还是SGD好这可能是很难一句话说清楚的事情。去看学术会议中的各种paper用SGD的很多Adam的也不少还有很多偏爱AdaGrad或者AdaDelta。可能研究员把每个算法都试了一遍哪个出来的效果好就用哪个了。       而从这几篇怒怼Adam的paper来看多数都构造了一些比较极端的例子来演示了Adam失效的可能性。这些例子一般过于极端实际情况中可能未必会这样但这提醒了我们理解数据对于设计算法的必要性。优化算法的演变历史都是基于对数据的某种假设而进行的优化那么某种算法是否有效就要看你的数据是否符合该算法的胃口了。 7. 增加RMSprop、Nesterov算法 
上个博客有 对比Momentum与Nesterov 
两个算法都是动量优化法Nesterov项是momentum的改进在梯度更新时做一个校正让之前的动量直接影响当前的动量避免前进太快同时提高灵敏度。 
对比AdaGrad与RMSprop 
两个都是自适应学习率优化法RMSprop解决了对历史梯度一直累加而导致学习率一直下降的问题适合处理非平稳目标对于RNN效果很好但RMSprop依然依赖于手动选择全局学习率。 
8. 基于MNIST数据集的更新方法的比较 # coding: utf-8
import os
import sysimport numpy as npfrom jiwang.Server import SGD, Momentum, AdaGrad, Adamsys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import matplotlib.pyplot as plt
from nndl4.dataset import load_mnist
from common.util import smooth_curve
from common.multi_layer_net import MultiLayerNet
from common.optimizer import *# 0:读入MNIST数据
(x_train, t_train), (x_test, t_test)  load_mnist(normalizeTrue)train_size  x_train.shape[0]
batch_size  128
max_iterations  2000# 1:进行实验的设置
optimizers  {}
optimizers[SGD]  SGD()
optimizers[Momentum]  Momentum()
optimizers[AdaGrad]  AdaGrad()
optimizers[Adam]  Adam()
# optimizers[RMSprop]  RMSprop()networks  {}
train_loss  {}
for key in optimizers.keys():networks[key]  MultiLayerNet(input_size784, hidden_size_list[100, 100, 100, 100],output_size10)train_loss[key]  []# 2:开始训练
for i in range(max_iterations):batch_mask  np.random.choice(train_size, batch_size)x_batch  x_train[batch_mask]t_batch  t_train[batch_mask]for key in optimizers.keys():grads  networks[key].gradient(x_batch, t_batch)optimizers[key].update(networks[key].params, grads)loss  networks[key].loss(x_batch, t_batch)train_loss[key].append(loss)if i % 100  0:print(  iteration:  str(i)  )for key in optimizers.keys():loss  networks[key].loss(x_batch, t_batch)print(key  :  str(loss))# 3.绘制图形
markers  {SGD: o, Momentum: x, AdaGrad: s, Adam: D}
x  np.arange(max_iterations)
for key in optimizers.keys():plt.plot(x, smooth_curve(train_loss[key]), markermarkers[key], markevery100, labelkey)
plt.xlabel(iterations)
plt.ylabel(loss)
plt.ylim(0, 1)
plt.legend()
plt.show()  从结果中可知与SGD相比其他3种方法学习得更快而且速度基本相同仔细看的话AdaGrad的学习进行得稍微快一点。这个实验需要注意的地方是实验结果会随学习率等超参数、神经网络的结构几层深等的不同而发生变化。不过一般而言与SGD相比其他3种方法可以学习得更快有时最终的识别精度也更高。 总结 
1、本来觉得自己上个博客总结的还不错看了上届学长的总结觉得更直观更好直接盗了 
2、每个优化算法在不同的模型上的表现是不一样的而且会因为学习率等参数的不同引起效果的不同。 
3、今天24考研结束作为25考研的我感觉天都黑了没人在前面挡着了。 参考链接 
NNDL 作业11优化算法比较_基于mnist数据集的更新方法-CSDN博客  
NNDL 作业11优化算法比较_ptimizers[\sgd\]  sgd(lr0.95) optimizers[\mo-CSDN博客 
HBU-NNDL 作业11优化算法比较_adam不收敛-CSDN博客