强化学习实践笔记01篇 实现策略网络

这篇博客详细介绍了如何使用TensorFlow实现策略网络强化学习,涵盖了从环境介绍、策略网络参数定义、损失函数到优化器选择和参数更新的全过程。通过Gym环境和科学计算库scipy进行实验,讲解了强化学习中的关键步骤,包括计算折扣奖励、初始化游戏环境以及运行网络获取并执行动作等。
摘要由CSDN通过智能技术生成

gym :OpenAI提供的开发强化学习的工具库
scipy :科学计算库
tqdm :进度条显示

实验及代码来自《Tensorflow实战》,黄文坚 唐源 著,第8章2节;仅供学习分享非商用。

一、环境简介

1.1 Gym环境介绍

Gym中环境接口是Env类,其中有几个重要的方法。
(1)创建某个任务的环境
env = gym.make('Copy-v0')
(2)初始化环境
state_0 = env.reset()
(3)在当前状态执行一步动作
[observation,reward,done,info] = env.step(action)
observation是一个 四维数组包含 [ 位置、速度、杆角度、杆速度 ]。
(4)渲染一帧的任务图像
env.render()
(5)对模型进行监控记录
env.monitor()

1.2 导入必要的库(代码片01)

import numpy as np
import tensorflow as tf
import gym

二、策略网络

2.1 策略网络参数定义(代码片02)

# 隐藏层节点数
H = 50
# 累计达到 batch_size 个数的样本进行更新
batch_size = 25
# 学习速率
learning_rate = 1e-1
# 奖励折扣率
gamma = 0.99
# 环境参数维度
D = 4

2.2 策略网络结构定义(代码片03)

# #####  设置默认图
tf.reset_default_graph()
# 输出参数    是一个维度 N*4 的张量
observations = tf.placeholder(tf.float32, [None, D], name="input_x")
# 第一层权重参数   并设置初始化算法
W1 = tf.get_variable("W1", shape=[D, H],
                     initializer=tf.contrib.layers.xavier_initializer())
# 第一层隐含层输出
layer1 = tf.nn.relu(tf.matmul(observations, W1))
# 第二层权重参数   并设置初始化算法
W2 = tf.get_variable("W2", shape=[H, 1],
                     initializer=tf.contrib.layers.xavier_initializer())
# 第二层输出 这里为游戏的动作 一维
score = tf.matmul(layer1, W2)
# 将网络输出经激活函数得到输出概率
probability = tf.nn.sigmoid(score)

三、损失函数

3.1 获取可训练参数(代码片04)

# 获取可训练参数 
tvars = tf.trainable_variables()

调试得到 tvars为 tvars:[<Variable>,<Variable>];
(1)第一项子对象
name:‘W1:0’,
shape:TensorShape([Dimension(4),Dimension(50)])
(2)第二项子对象
name:‘W2:0’,
shape:TensorShape([Dimension(50),Dimension(1)])

3.2 定义虚拟Label及损失函数(代码片05)

这里是个技术活,看懂代码但没理解,为什么要这么定义!!!
策略网络输出probability, Action取1概率为probability, Action取0概率为(1-probability)
令label = 1-Action, 即 label取1概率为(1-probability), 取0概率为probability
当Action为1, label为0, loglik = tf.log(probability)
当Action为0, label为1, loglik = tf.log(1-probability)
所以 loglik 就是当前Action的概率的对数
将 loglik与潜在价值advantages相乘并取平均值, 取其负值作为损失函数, 即优化目标;
那么优化器就会让 获

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值