概述
阅读蘑菇书源码时,在写DQN网络的智能体是这样写的:
class DQN:
def __init__(self, state_dim, action_dim, cfg):
self.action_dim = action_dim # 总的动作个数
self.device = cfg.device # 设备,cpu或gpu等
self.gamma = cfg.gamma # 奖励的折扣因子
# e-greedy策略相关参数
self.frame_idx = 0 # 用于epsilon的衰减计数
self.epsilon = lambda frame_idx: cfg.epsilon_end +
(cfg.epsilon_start - cfg.epsilon_end) *
math.exp(-1. * frame_idx / cfg.epsilon_decay)
self.batch_size = cfg.batch_size
self.policy_net = MLP(state_dim, action_dim, hidden_dim=cfg.hidden_dim).to(self.device) # 定义一个深度学习网络
self.target_net = MLP(state_dim, action_dim, hidden_dim=cfg.hidden_dim).to(self.device) # 目标深度学习网络
for target_param, param in zip(self.target_net.parameters(),
self.policy_net.parameters()): # copy params from policy net
target_param.data.copy_(param.data)
self.optimizer = optim.Adam(self.policy_net.parameters(), lr=cfg.lr)
self.memory = ReplayBuffer(cfg.memory_capacity)
对于衰减函数,可以描述成:
ε
=
ε
e
n
d
+
(
ε
s
t
a
r
t
−
ε
e
n
d
)
×
e
−
i
n
d
e
x
ε
d
e
c
a
y
varepsilon = {varepsilon _{end}} + ({varepsilon _{start}} - {varepsilon _{end}}) times {e^{ - frac{{index}}{{{varepsilon _{decay}}}}}}
ε=εend+(εstart−εend)×e−εdecayindex
利用MATLAB编程看一下这个函数的特点:
frame_idx=1:10000;
epsilon_end=0.01;
epsilon_start=0.90;
epsilon_decay=500;
epsilon=epsilon_end+(epsilon_start-epsilon_end).*exp(-frame_idx./epsilon_decay);
plot(frame_idx,epsilon)
hold on
scatter(500,epsilon(500))
绘图为:
可以看到,随着迭代次数frame_idx逐渐增大,最终的epsilon会越来越小,从初始的epsilon_start逐渐递减无限逼近epsilon_end实现策略收敛。
图中红色圆圈为迭代次数等于epsilon_decay时的位置,大概从这个位置开始放缓递减速度,之后逐渐收敛,达到策略稳定的效果。
这个策略在Q-learning里也是一样的。
最后
以上就是虚心冰棍为你收集整理的DQN的e-greedy策略理解的全部内容,希望文章能够帮你解决DQN的e-greedy策略理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复