DQN算法概述与其Python代码表示

算法描述

DQN算法是强化学习算法的一个改进版本,他将深度学习与强行学习结合起来。相比于之前的Q Learning算法,它去除了Q Table,并引入了经验重现内存(Replay Memory)和神经网络来作为以往经验的存储方式和决策方式。

DQN算法中使用ε贪婪算法选择action,也就是在ε的概率下进行探索,随机选择action;在1-ε的概率下使用神经网络决策获得下一步的action。ε贪婪算法可以鼓励代理进行探索,防止程序陷入局部最优值。

DQN算法中一般包含两个不同的NN模型(一般是CNN),一个可以被称为online-net(也可以被称为evaluate-net),另一个被称为target-net。online-net为每次被训练的模型,而target-net则相对来讲变化较小,可以被看作是online-net的历史版本,仅在多次训练后由online-net传值来进行更新。例如以下Algorithm 1: deep Q-learning with experience replay算法中持续训练更新的就是online-net,而target-net在每C步进行更新。

target-network就是最终我们需要的NN模型,它也参与了学习过程:
target-network
DQN算法是Off-Policy算法。

算法步骤

DQN算法概述与其Python代码表示_第1张图片

用中文表示为:

将经验回放内存D的内存大小初始化为N;
用随机权重初始化价值函数Q;
用0值初始化目标价值函数Q;

for 片段(episode) 1 to M
    初始化state,并使用函数映射处理state以获取定长易于处理的state';
    for 时间片 1 to T
       	在状态下用ε贪婪算法选一个动作;
 		执行动作并让调度器去观察奖励和下一个状态;
 		把样本加D到中,并预处理下个时段的state获取下一个state';
 		从经验回放内存D中随机选取指定个数的transition作为batches;
 		使用这些batches对模型进行训练;
 		每C步将当前的价值函数传递给目标价值函数;
 	end for
end for

使用Python表示为:

step = 0

# 初始化环境
env = Env()
# 初始化DRL代理
drl_agent = DRLAgent()
# 初始化经验重现内存
replay_memory = ReplayMemory()

# 代表DRL代理学习的次数
for episode in range(num_training_steps):
    
    # 代表环境程序是否到达结束点
    done = False
    
    # 重新初始化环境,并取得当前的state
    state = env.reset()
    
    # 代表环境的一次执行
    while not done:
        
        # DRL代理根据目前的状态使用贪婪算法选择一个action
        action = drl_agent.choose_action(state)
        
        # 在环境中执行action并获得执行后的state,当前步的reward,和当前是否应该结束
        next_state, reward, done = env.step(action)
        
        # 将当前步数据存入经验重现内存中
        replay_memory.store_transition(state, action, reward, next_state)
    
        # 如果当前步是DRL代理需要学习的步数,进行学习
        if (step > learn_start_step) and (step % replay_frequency == 0):
            # 从经验重现内存中随机取出定量的样本
            transitions = replay_memory.sample()
            
            # 使用这些样本对其进行训练
            drl_agent.learn(trainsitions)
    
        # 每C步更新目标价值函数
        if step % C == 0:
            drl_agent.update_target_network()
        
        # 更新当前状态
        state = next_state
        
        step += 1

On-Policy与Off-Policy

之前提到DQN是Off-Policy算法,与其对应的是On-Policy算法。有必要对这两者进行区分。

On-Policy,从特征上理解,就是需要学习的Agent在场,一边处理现场的state,一边进行学习。Sarsa是On-Policy的典型代表。而Off-Policy则不然,可以在场,也可以使用以往的经验来学习。这些经验不一定是自己的,也可以是别人的,只要这些经验有相同的格式就可以。例如在DQN中,经验回放内存就是存储这些经验的模块;在Q-learning中,Q Table就是存储经验的模块。

你可能感兴趣的:(机器学习)