如何入门强化学习
前言
很多同学在入门强化学习的时候都会遇到困难,那我这里就简单介绍一下应该如何入门强化学习,并以开源代码为例详解强化学习实战。
一、强化学习学习之路
这边首先推荐莫凡python,人工智能的初学者如果不知道莫凡,那可真是纵称英雄也枉然。
他的官网长这样,链接在此!
链接: https://mofanpy.com/.
莫凡python的内容以简单著称,每个视频只有短短几分钟,长一点的也就20分钟左右,能够迅速的帮你入门强化学习,但是仅仅看这个是不够的,还需要扎实的理论基础,那就需要转战B站。
Bilibili有UCL大学的David Silver教授教学的Reinforcement learning课程。
链接在此!链接: https://www.bilibili.com/video/BV1kb411i7KG?from=search&seid=15348457829154001765&spm_id_from=333.337.0.0.
David Silver教授推导出了DPG公式,非常厉害的一个人物,所以他的课程必听!
这个课程主要以公式推导为主,能够让初学者对强化学习的基础公式推导有一定的了解,例如贝尔曼公式。
当然B站李宏毅老师的强化学习课程也非常值得一听,但是我个人觉得他和莫凡python的课程差不多,但是他没有代码层面的教学,他的课程更多是在理论推导和科普介绍…
最后最后,我要推荐一本书籍,这本书籍也非常适用于初学者,Sutton的书很厚,我个人觉得不适用于初学者。
清华大学出版社邹伟老师出品的强化学习,结合了很多莫凡Python的代码,能够很好的将理论与实际相结合,很多代码都有注释,能够迅速帮初学者入门。
2022.6月更新:目前市面上有一本书——磨菇书,EasyRL
这本书是我读过最通俗易懂的强化学习书籍,介绍了很多前沿的学术内容,相对比较全面。也有代码的详解,非常适合学习!!!反正比上面这本书强,个人认为。
Github上也有电子版和代码,纸质版书籍是电子版的优化版本。
二、开源代码DDPG详解
如果说到强化学习,那么必须要会的就是Python和Gym
代码从Github上搜索DDPG就能够获取,这里采用的是floodsung的项目。
关键的几个文件:
actor_network
critic.network
ddpg//用于将各个模块连在一起
gym_ddpg//主文件,用于将DDPG与环境互动
ou_noise//Ou噪声
replay_buffer//经验存储
代码如下(示例):
//ou_noise
import numpy as np
import numpy.random as nr
class OUNoise:
"""docstring for OUNoise"""
def __init__(self,action_dimension,mu=0, theta=0.15, sigma=0.2):
self.action_dimension = action_dimension
self.mu = mu
self.theta = theta
self.sigma = sigma
self.state = np.ones(self.action_dimension) * self.mu
self.reset()
def reset(self):
self.state = np.ones(self.action_dimension) * self.mu
def noise(self): //按照公式建立OU噪声,更符合时间序列的样本
x = self.state
dx = self.theta * (self.mu - x) + self.sigma * nr.randn(len(x))
self.state = x + dx
return self.state
//以下内容用不到,只是看一看ou噪声是啥
if __name__ == '__main__':
ou = OUNoise(3)
states = []
for i in range(1000):
states.append(ou.noise())
import matplotlib.pyplot as plt
plt.plot(states)
plt.show()
//replay_buffer
from collections import deque
import random
class ReplayBuffer(object):
def __init__(self, buffer_size):
self.buffer_size = buffer_size
self.num_experiences = 0
self.buffer = deque()
def get_batch(self, batch_size)://随机批量获取,用于训练
# Randomly sample batch_size examples
return random.sample(self.buffer, batch_size)
def size(self):
return self.buffer_size
//将agent与环境互动的情况存储在buffer中,如果超过最大存储量,就删去最早的。
def add(self, state, action, reward, new_state, done):
experience = (state, action, reward, new_state, done)
if self.num_experiences < self.buffer_size:
self.buffer.append(experience)
self.num_experiences += 1
else:
self.buffer.popleft()
self.buffer.append(experience)
//计数,一般用不到
def count(self):
# if buffer is full, return buffer size
# otherwise, return experience counter
return self.num_experiences
//删除,一般用不到
def erase(self):
self.buffer = deque()
self.num_experiences = 0
/