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

老河口网站茂名seo网站建设

老河口网站,茂名seo网站建设,创意网名,网站互动怎么做文章目录 Python 梯度下降法#xff08;五#xff09;#xff1a;Adam Optimize一、数学原理1.1 介绍1.2 符号说明1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码2.3 遇到的问题2.4 算法优化 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法#xff08;五五Adam Optimize一、数学原理1.1 介绍1.2 符号说明1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码2.3 遇到的问题2.4 算法优化 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法五Adam Optimize 一、数学原理 1.1 介绍 Adam 算法结合了 Adagrad 和 RMSProp 算法的优点。Adagrad 算法会根据每个参数的历史梯度信息来调整学习率对于出现频率较低的参数会给予较大的学习率而对于出现频率较高的参数则给予较小的学习率。RMSProp 算法则是对 Adagrad 算法的改进它通过使用移动平均的方式来计算梯度的平方从而避免了 Adagrad 算法中学习率单调下降的问题。 1.2 符号说明 参数意义 g t ∇ θ J ( θ t ) g_{t}\nabla_{\theta}J(\theta_{t}) gt​∇θ​J(θt​)第 t t t时刻的梯度 m t m_{t} mt​梯度的一阶矩均值 β 1 \beta_{1} β1​一阶矩衰减率一般取0.9 v t v_{t} vt​梯度的二阶矩未中心化的方差 β 2 \beta_{2} β2​二阶矩衰减率一般取0.99 θ \theta θ线性拟合参数 η \eta η学习率 ϵ \epsilon ϵ无穷小量一般取 1 0 − 8 10^{-8} 10−8 1.3 实现流程 初始化 θ \theta θ、 η \eta η、 m 0 ⃗ 0 \vec{m_{0}}0 m0​ ​0、 v 0 ⃗ 0 \vec{v_{0}}0 v0​ ​0计算梯度 g t ∇ θ J ( θ t ) 1 m X T L g_{t}\nabla_{\theta}J(\theta_{t})\frac{1}{m}X^{T}L gt​∇θ​J(θt​)m1​XTL梯度的一阶矩估计均值 m t β 1 m t − 1 ( 1 − β 1 ) g t m_{t}\beta_{1}m_{t-1}(1-\beta_{1})g_{t} mt​β1​mt−1​(1−β1​)gt​梯度的二阶矩估计未中心化的方差 v t β 2 v t − 1 ( 1 − β 2 ) g t 2 v_{t}\beta_{2}v_{t-1}(1-\beta_{2})g_{t}^{2} vt​β2​vt−1​(1−β2​)gt2​偏差修正 m t ^ m t 1 − β 1 t 、 v t ^ v t 1 − β 2 t \hat{m_{t}}\frac{m_{t}}{1-\beta_{1}^{t}}、\hat{v_{t}}\frac{v_{t}}{1-\beta_{2}^{t}} mt​^​1−β1t​mt​​、vt​^​1−β2t​vt​​更新参数 θ t θ t − 1 − η m t ^ v t ^ ϵ \theta_{t}\theta_{t-1}-\frac{\eta \hat{m_{t}}}{\sqrt{ \hat{v_{t}} }\epsilon} θt​θt−1​−vt​^​ ​ϵηmt​^​​ 二、代码实现 2.1 函数代码 # 定义 Adam 函数 def adam_optimizer(X, y, eta, num_iter1000, beta10.8, beta20.8, epsilon1e-8, threshold1e-8):X: 数据 x mxn可以在传入数据之前进行数据的归一化y: 数据 y mx1eta: 学习率num_iter: 迭代次数beta: 衰减率epsilon: 无穷小threshold: 阈值m, n X.shapetheta, mt, vt, loss_ np.random.randn(n, 1), np.zeros((n, 1)), np.zeros((n, 1)), [] # 初始化数据for iter in range(num_iter):h X.dot(theta)err h - yloss_.append(np.mean((err ** 2) / 2))g (1 / m ) * X.T.dot(err)# 一阶矩估计mt beta1 * mt (1 - beta1) * g# 二阶矩估计vt beta2 * vt (1 - beta2) * g ** 2# 偏差修正mt_ mt / (1 - pow(beta1, (iter 1))) # 得 1 不然在 iter 0 时分母为零vt_ np.abs(vt / (1 - pow(beta2, (iter 1))))# 更新参数theta theta - (eta * mt_) / (np.sqrt(vt_) epsilon)# 检查是否收敛if iter 1 and abs(loss_[-1] - loss_[-2]) threshold:print(fConverged at iteration {iter 1})breakreturn theta.flatten(), loss_2.2 总代码 import numpy as np import matplotlib.pyplot as plt# 设置 matplotlib 支持中文 plt.rcParams[font.sans-serif] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False# 定义 Adam 函数 def adam_optimizer(X, y, eta, num_iter1000, beta10.8, beta20.8, epsilon1e-8, threshold1e-8):X: 数据 x mxn可以在传入数据之前进行数据的归一化y: 数据 y mx1eta: 学习率num_iter: 迭代次数beta: 衰减率epsilon: 无穷小threshold: 阈值m, n X.shapetheta, mt, vt, loss_ np.random.randn(n, 1), np.zeros((n, 1)), np.zeros((n, 1)), [] # 初始化数据for iter in range(num_iter):h X.dot(theta)err h - yloss_.append(np.mean((err ** 2) / 2))g (1 / m ) * X.T.dot(err)# 一阶矩估计mt beta1 * mt (1 - beta1) * g# 二阶矩估计vt beta2 * vt (1 - beta2) * g ** 2# 偏差修正mt_ mt / (1 - pow(beta1, (iter 1))) # 得 1 不然在 iter 0 时分母为零vt_ np.abs(vt / (1 - pow(beta2, (iter 1))))# 更新参数theta theta - (eta * mt_) / (np.sqrt(vt_) epsilon)# 检查是否收敛if iter 1 and abs(loss_[-1] - loss_[-2]) threshold:print(fConverged at iteration {iter 1})breakreturn theta.flatten(), loss_# 生成一些示例数据 np.random.seed(42) X 2 * np.random.rand(100, 1) y 4 3 * X np.random.randn(100, 1) # 添加偏置项 X_b np.c_[np.ones((100, 1)), X]# 超参数 eta 0.01# 运行 Adam 优化器 theta, loss_ adam_optimizer(X_b, y, eta)print(最优参数 theta:) print(theta)# 绘制损失函数图像 plt.plot(range(len(loss_)), loss_, label损失函数图像) plt.title(损失函数图像) plt.xlabel(迭代次数) plt.ylabel(损失值) plt.legend() # 显示图例 plt.grid(True) # 显示网格线 plt.show()2.3 遇到的问题 当偏差修正为以下算法时出现报错 # 偏差修正mt_ mt / (1 - pow(beta1, (iter)))vt_ np.abs(vt / (1 - pow(beta2, (iter))))进行检验时我们发现 mt_,vt_ \text{mt\_,vt\_} mt_,vt_为无穷量因此考虑分母为零的情况而当 iter 0 \text{iter}0 iter0时 1 − β iter 0 1- \beta^{\text{iter}}0 1−βiter0故说明索引不能从0开始而应该从1开始因此引入 iter 1 \text{iter}1 iter1防止分母的无穷大引入。 2.4 算法优化 由于算法过程中如果数据量太多会引起资源的严重浪费因此我们引入小批量梯度下降法的类似方法批量截取数据来进行拟合。 # 定义 Adam 函数 def adam_optimizer(X, y, eta, num_iter1000, batch_size32, beta10.8, beta20.8, epsilon1e-8, threshold1e-8):X: 数据 x mxn可以在传入数据之前进行数据的归一化y: 数据 y mx1eta: 学习率num_iter: 迭代次数batch_size: 小批量分支法的批量数beta: 衰减率epsilon: 无穷小threshold: 阈值m, n X.shapetheta, mt, vt, loss_ np.random.randn(n, 1), np.zeros((n, 1)), np.zeros((n, 1)), [] # 初始化数据num_batchs m // batch_sizefor _ in range(num_iter):range_shuffle np.random.permutation(m)X_shuffled X[range_shuffle]y_shuffled y[range_shuffle]loss_temp []for iter in range(num_batchs):start_index batch_size * iterend_index start_index batch_sizexi X_shuffled[start_index:end_index]yi y_shuffled[start_index:end_index]h xi.dot(theta)err h - yiloss_temp.append(np.mean((err ** 2) / 2))g (1 / m ) * xi.T.dot(err)# 一阶矩估计mt beta1 * mt (1 - beta1) * g# 二阶矩估计vt beta2 * vt (1 - beta2) * g ** 2# 偏差修正mt_ mt / (1 - pow(beta1, (iter 1)))vt_ np.abs(vt / (1 - pow(beta2, (iter 1))))# 更新参数theta theta - (eta * mt_) / (np.sqrt(vt_) epsilon)loss_.append(np.mean(loss_temp))# 检查是否收敛if _ 1 and abs(loss_[-1] - loss_[-2]) threshold:print(fConverged at iteration {iter 1})breakreturn theta.flatten(), loss_使用小批量进行Adam优化可以大大节省系统的资源。 三、优缺点 3.1 优点 对不同参数调整学习率Adam 能够为模型的每个参数自适应地调整学习率。它会根据参数的梯度历史信息对出现频率较低的参数给予较大的学习率对出现频率较高的参数给予较小的学习率。这使得模型在训练过程中能够更好地处理不同尺度和变化频率的参数加速收敛过程。 无需手动精细调整在很多情况下Adam 算法提供的默认超参数就能取得不错的效果不需要像传统优化算法那样进行大量的手动调参节省了时间和精力。 低内存需求Adam 只需要存储梯度的一阶矩估计均值和二阶矩估计未中心化的方差不需要像一些二阶优化方法那样存储复杂的海森矩阵Hessian matrix因此内存占用相对较小适合处理大规模数据集和深度神经网络。 快速收敛通过结合梯度的一阶矩和二阶矩信息Adam 能够更准确地估计梯度的方向和大小从而在大多数情况下比传统的随机梯度下降SGD算法更快地收敛到最优解。 利用稀疏信息在处理稀疏数据如自然语言处理中的词向量时Adam 能够根据数据的稀疏性调整学习率。对于那些很少出现的特征算法会给予较大的学习率使得模型能够更有效地学习这些特征避免因数据稀疏而导致的学习困难 偏差修正机制Adam 算法引入了偏差修正机制用于修正一阶矩和二阶矩估计在训练初期的偏差。这使得算法在训练的早期阶段更加稳定能够避免因初始估计不准确而导致的训练波动或不收敛问题。 3.2 缺点 自适应特性的局限性虽然 Adam 能够自适应地调整学习率但在某些情况下这种自适应特性可能会导致算法陷入局部最优解。由于学习率会随着训练过程自动调整可能会在接近局部最优解时过早地降低学习率使得算法难以跳出局部最优区域从而无法找到全局最优解。 需要一定的调参经验尽管 Adam 提供了默认的超参数但在某些复杂的任务或数据集上这些默认参数可能不是最优的。例如, β \beta β、 ϵ \epsilon ϵ的取值会影响算法的性能如果选择不当可能会导致收敛速度变慢、模型性能下降等问题。因此在实际应用中可能仍然需要进行一定的超参数调优。 过度适应训练数据由于 Adam 算法在训练过程中过于关注梯度的历史信息和自适应调整学习率可能会导致模型过度适应训练数据从而降低模型的泛化能力。在某些情况下使用 Adam 训练的模型在测试集上的表现可能不如使用其他优化算法训练的模型。 四、相关链接 Python 梯度下降法合集 Python 梯度下降法一Gradient Descent-CSDN博客Python 梯度下降法二RMSProp Optimize-CSDN博客Python 梯度下降法三Adagrad Optimize-CSDN博客Python 梯度下降法四Adadelta Optimize-CSDN博客Python 梯度下降法五Adam Optimize-CSDN博客Python 梯度下降法六Nadam Optimize-CSDN博客Python 梯度下降法七Summary-CSDN博客
http://www.hkea.cn/news/14309520/

相关文章:

  • 商务网站的建设步骤品牌注册名字大全
  • 做设计适合关注的网站网站制作电话多少钱
  • 视频制作网站素材网络营销师是干什么的
  • asp网站表格代码中国网站设计欣赏
  • 源代码如何做网站诸城做网站
  • 国内做文玩的网站广州教育网站设计公司
  • 站长网站优点网站开发html书籍下载
  • 免费申请空间网站常州网站建设大全
  • 学会了php的语法怎么做网站cms怎么搭建网站
  • 小程序网站建设开个网站卖机器怎么做
  • 东莞网站快速优化排名wordpress 换域名后
  • 电子商务网站的功能有哪些直播网站 建设
  • 巴中市做网站广州数商云
  • 更换网站需要怎么做wordpress会员评论
  • 网站首页制作教程视频Wordpress_视频界面
  • 宁波外贸网站制作公司网站建设的税率是多少钱
  • 易尔通网站建设河北建设广州分公司网站
  • 门窗网站制作宣传语聚名网实名认证
  • 怎么用自己注册的域名做网站wordpress口腔主题
  • 网站建设的主要技术路线安徽网络优化
  • 如何用dreamer做网站辽宁省建设工程信息网拆除项目
  • 网站建设有哪些困难网站设计目的与规划
  • 个人做电影网站违法吗wordpress绑定百家号
  • 乐山做网站江苏网站开发公司
  • 自己做的网站点首页出错长沙网红打卡点
  • 天津网站制作的公司hpsocket 网站开发
  • 福州 网站建设360网站推广怎么做
  • 网站模板编辑工具seo技术交流
  • 怎么样做好网站建设Wordpress页面标签插件
  • 全国卫生机构建设管理系统网站如何做网站的图片滑动块