优化算法-momentum(动量法)

关于梯度下降的三个算法:梯度下降,随机梯度下降,以及小批量皮杜下降已经在该篇博文中介绍:https://blog.csdn.net/weixin_42109859/article/details/104822335
但对梯度下降使用同一固定不变的超参数会引发一些问题。
例如当我们的目标函数为 f ( x ) = 0.1 x 1 2 + 2 x 2 2 f(\boldsymbol{x})=0.1x_1^2+2x_2^2 f(x)=0.1x12+2x22,学习率采用0.4时,其损失的迭代轨迹如下:
在这里插入图片描述
可以看到,同一位置上,目标函数在竖直方向( x 2 x_2 x2

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在手动实现多分类任务中使用动量momentum)、RMSProp和Adam优化器,需要了解这些优化算法的原理和实现步骤。以下是这些优化器的手动实现示例代码: 1. 动量优化器(Momentum): ``` # 初始化动量参数 velocity = np.zeros_like(parameters) # 设置超参数 beta = 0.9 # 动量系数 learning_rate = 0.01 # 学习率 for epoch in range(num_epochs): # 正向传播 # ... # 反向传播 # ... # 更新参数 for param_name, param in parameters.items(): dparam = gradients[param_name] # 计算动量项 velocity[param_name] = beta * velocity[param_name] + (1 - beta) * dparam # 更新参数 parameters[param_name] -= learning_rate * velocity[param_name] ``` 2. RMSProp优化器: ``` # 初始化RMSProp参数 cache = np.zeros_like(parameters) # 设置超参数 beta = 0.9 # 衰减系数,控制历史梯度的权重 epsilon = 1e-8 # 防止除零错误的小常数 learning_rate = 0.01 # 学习率 for epoch in range(num_epochs): # 正向传播 # ... # 反向传播 # ... # 更新参数 for param_name, param in parameters.items(): dparam = gradients[param_name] # 计算RMSProp的缓存项 cache[param_name] = beta * cache[param_name] + (1 - beta) * np.square(dparam) # 更新参数 parameters[param_name] -= learning_rate * dparam / (np.sqrt(cache[param_name]) + epsilon) ``` 3. Adam优化器: ``` # 初始化Adam参数 m = np.zeros_like(parameters) # 一阶矩估计 v = np.zeros_like(parameters) # 二阶矩估计 # 设置超参数 beta1 = 0.9 # 一阶矩估计的衰减系数 beta2 = 0.999 # 二阶矩估计的衰减系数 epsilon = 1e-8 # 防止除零错误的小常数 learning_rate = 0.01 # 学习率 t = 0 for epoch in range(num_epochs): # 正向传播 # ... # 反向传播 # ... # 更新参数 for param_name, param in parameters.items(): dparam = gradients[param_name] # 更新一阶矩估计和二阶矩估计 m[param_name] = beta1 * m[param_name] + (1 - beta1) * dparam v[param_name] = beta2 * v[param_name] + (1 - beta2) * np.square(dparam) # 矫正一阶矩估计和二阶矩估计的偏差 m_hat = m[param_name] / (1 - np.power(beta1, t)) v_hat = v[param_name] / (1 - np.power(beta2, t)) # 更新参数 parameters[param_name] -= learning_rate * m_hat / (np.sqrt(v_hat) + epsilon) ``` 使用这些优化器需要注意的是,需要根据具体的网络结构和训练任务进行相应的修改和调整。这里提供的是一般性的实现示例,具体情况可能有所不同。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值