深度网络的训练经验总结(参数篇)

  (续我的上一篇博客)最早训练神经网络的时候完全什么技巧都不懂,能成功运行开源代码,并且看到loss下降就放心跑着了。随着对网络越来越多的接触,发现从数据集(train/val/test)的准备到训练超参数(例如args或者config文件)的设置都逐渐会根据经验去进行设计了。从来没有细细梳理过每一个训练小trick和其背后的依据,因此以边梳理边学习的态度,根据个人和网站上大家的总结对深度网络的训练进行了整理。

数据集的准备

本部分内容参见我的上一篇博客链接:深度网络的训练经验总结(数据篇)

超参数及其他网络设置

介绍一个入门级的网站:PlayGround是一个在线演示、实验的神经网络平台,是一个入门神经网络非常直观的网站。这个图形化平台非常强大,将神经网络的训练过程直接可视化。同时也能让我们对Tensorflow有一个感性的认识。链接:http://playground.tensorflow.org

1. batch size

  batch size,即批量大小,是单次训练选择的样本数量。GD -> SGD -> mini-batch SGD,逐步在训练中引入了batch size,这个参数的好处是(1)解决了将数据一次性输入网络引起的内存爆炸;(2)在一个epoch里多次更新权重,加速了收敛;(3)可以跳出局部最优。但是设置batch size时仍要考虑空间和时间的限制,batch size对训练的影响具体表现在:过小,则会导致梯度变化较大,loss震荡,网络不易收敛;过大,则梯度已经非常准确,loss震荡较小,容易陷入局部最优。论文《Revisiting Small Batch Training for Deep Neural Networks》中表明,最好的训练结果都是在batch size处于2~32之间,一般都是2的幂次(如4,8,16)。综上所述,在一定范围内调大batch size,可以提高内存利用率和训练速度,虽然一个epoch时间变少,但是迭代更新权重次数少了,需要增大epoch来达到更高的精度,二者可以找到一个平衡。

1 epoch = 完成一次全部样本的训练 = 训练集样本数 / batch_size
1 iteration = 完成一次batch size大小的样本的训练 = 一次前向传播 + 一次反向传播
另,在一篇博客中有如下trick:当模型训练到尾声,想更精细化地提高成绩(比如论文实验/比赛到最后),有一个有用的trick,就是设置batch size为1,即做纯SGD,慢慢把error磨低。

2. learning rate

  learning rate,即学习率,简单来讲就是模型在利用反向传播的误差更新权重时学习的速率 α \alpha α θ j = θ j − α Δ J ( θ ) Δ θ j \theta_j = \theta_j - \alpha \frac{\Delta J(\theta)}{\Delta \theta_j} θj=θjαΔθjΔJ(θ) 。这个参数在训练神经网络时至关重要,它通过控制权重更新的幅度来决定训练的速度和精度,合适的学习率能够使目标函数在合适的时间内收敛到局部最优值。lr对训练的影响如下:过小,可以确保不会错过任何局部极小值,也意味着要花费更长的时间来进行收敛;过大,梯度会在极小值附近来回震荡,可能无法收敛或者loss爆炸。

  从上图可以看出,如果在整个训练过程中不调整学习率的话,则不能适应训练的各个阶段。所以,学习率的设置一般是采用一种退火的方式,先从一个比较高的学习速率开始,然后慢慢地在训练中降低学习速率。初始学习率通常设置在0.01~0.001,如果是迁移学习,那么学习率会在 1 0 − 4 10^{-4} 104之下。然而,在网络开始训练的时候,给它的初始化权重一般都是随机赋值的,权重更新的梯度很大,如果用一开始就用很大的学习率(也会跟batch size有一定关系),很可能造成训练中数值不稳定。所以,这里有一个trick是进行学习率的预热,最开始训练的时候用比较小的学习率,然后训练过程稳定之后切回到最初的初始学习率。这个预热过程让我想到了在训练网络之前找到最佳学习率的过程,网上有一种方法是利用pytorch的fastai包,通过每一次迭代提高学习率(线性或指数)来找到loss从下降到上升的转折点,如下图所示,然而这种方式我从来没有使用过。

常用的学习率的退火方式有:

  • 轮数衰减(step decay):随着每N次迭代,学习率下降一定的百分比。
  • 指数衰减(exponential decay):学习率按训练轮数增长指数差值递减, l r = α d e c a y g l o b a l _ s t e p s d e c a y _ s t e p s ∗ l r 0 lr = \alpha_{decay}^{\frac{global\_steps}{decay\_steps}}*lr_0 lr=αdecaydecay_stepsglobal_steps
  • 7
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度强化学习Rainbow算法是一种用于训练强化学习智能体的先进算法,它结合了多种强化学习技术的优点,旨在解决传统强化学习算法中存在的一些问题。 Rainbow算法的源码实现主要包含以下几个关键要素: 1. Experience Replay(经验回放):Rainbow算法使用经验回放技术来缓解强化学习中的数据相关性问题。它将先前的经验样本保存在一个经验回放存储器中,并随机抽样用于训练智能体,从而减少数据样本间的相关性。 2. Double Q-Learning(双重Q学习):Rainbow算法使用双重Q学习来减轻智能体的过高估计问题。它在每个时间步骤中使用两个Q网络来估计行动价值,使得智能体更准确地学习到环境的奖励和行动之间的关系。 3. Prioritized Experience Replay(优先经验回放):Rainbow算法引入了优先经验回放来提高对重要经验的学习效率。它使用优先级来衡量每个经验样本的重要性,并根据优先级进行样本抽样,使得那些对模型学习更有帮助的经验可以更频繁地被智能体训练学习。 4. Dueling Network Architectures(决斗网络结构):Rainbow算法使用决斗网络结构来分离状态值函数和行动值函数的估计。这种结构有助于更好地理解状态的价值和行动的价值,并使得智能体能更好地进行动作选择。 5. N-step Learning(N步学习):Rainbow算法通过使用N步回报来改进学习效率。它在训练过程中使用多步的回报作为奖励信号,使得智能体能更快地学习到环境中的长期收益。 总而言之,Rainbow算法的源码实现结合了经验回放、双重Q学习、优先经验回放、决斗网络结构和N步学习等多种技术,旨在提高强化学习智能体的学习效率和性能。通过这些关键要素的组合,Rainbow算法能够更好地解决传统强化学习算法中存在的问题,帮助智能体在各种复杂环境中做出更准确的决策。 ### 回答2: 深度强化学习是利用神经网络来实现的一种强化学习方法,而Rainbow算法是一种介于DQN和深度强化学习之间的算法。Rainbow算法是融合了多种增强学习技术的方法,通过优化DQN算法的各个方面,提高其性能和稳定性。 Rainbow算法的源码包括以下几个主要部分: 1. Prioritized Experience Replay(经验回放):通过使用优先级队列方法,选择具有较高TD误差的经验样本,提高了样本的重要性采样,从而改善训练效果。 2. Double Q-Learning(双重Q-Learning):使用两个独立的Q网络进行训练和估计,减少了目标估计的方差,避免了DQN算法中的过高估计问题。 3. Dueling Network(分权网络):将Q网络分解为值函数和优势函数,使网络能够学习到状态的价值和行动的优势,从而更好地估计和选择动作。 4. N-step Learning(N步学习):使用N步回合的奖励来更新网络参数,增加了训练样本的多样性和稳定性。 5. Distributional RL(分布式强化学习):将Q值的估计从标量形式转换为离散的概率分布,从而更准确地估计不同回合奖励的分布情况。 6. Noisy Nets(噪声网络):在神经网络的权重中添加噪音,增加了网络的探索性,避免了过于确定性的行为选择。 通过融合以上这些技术,Rainbow算法在深度强化学习中取得了较好的效果,提高了训练的收敛速度和最终性能。其源码实现可以通过查阅相关的深度强化学习库或开源项目来了解具体的实现方式。 ### 回答3: 深度强化学习(Deep Reinforcement Learning)是将神经网络与强化学习结合的方法,用于解决复杂的决策问题。而Rainbow算法是一种深度强化学习算法的改进版,旨在提高强化学习的性能。 Rainbow算法的源码实现是基于深度Q网络(Deep Q-Network,DQN)的,但同时也引入了多种改进技术,包括经验回放(Experience Replay)、优先经验回放(Prioritized Experience Replay)、双网络(Double Network)、多步骤回报(n-step Returns)等。这些改进技术的目的是解决DQN存在的问题,例如样本效率低、过度估计(Overestimation)等。 Rainbow算法的源码可以分为以下几个主要部分: 1.网络架构:Rainbow算法通常采用卷积神经网络(Convolutional Neural Network,CNN)作为Q网络的基础架构,用于处理输入的状态。同时,由于Rainbow算法引入了多个改进技术,因此网络结构也会相应进行调整和优化。 2.经验回放:Rainbow算法使用经验回放的方法存储和重复利用之前的经验样本,以增加样本利用率。在每次迭代中,从经验存储中随机采样一批数据,用于网络训练和更新。 3.优先经验回放:为了提高对重要经验的学习效率,Rainbow算法使用了优先经验回放。即根据每个经验样本的TD误差(Temporal Difference Error)来选择重要性权重,从而在采样时有更高的机会选择到这些重要的经验样本。 4.双网络:为了解决DQN网络的过度估计问题,Rainbow算法引入了双网络。即在训练过程中,使用一个目标网络来计算目标Q值,并定期将主网络参数复制给目标网络。 5.多步骤回报:Rainbow算法使用多步骤回报来估计Q值,而不仅仅是使用单步回报。通过引入n-step Returns,可以更好地估计长期回报,从而提高学习效果。 总结起来,Rainbow算法源码实现主要包括网络架构的设计、经验回放的实现、优先经验回放的实现、双网络的实现以及多步骤回报的实现。这些改进技术在Rainbow算法中共同作用,使得深度强化学习算法性能得到了提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值