抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

强化学习

跟同事聊了一会强化学习做AI游戏,感觉难度很大很麻烦,遂断更

  1. 游戏的奖励频率过低,电子游戏很难像围棋那样计算每一步的收益,就像训狗一样,你让狗坐下给一次奖励,训练效果会很好,但让狗做非常多复杂的组合动作再给一次奖励,就很难训练
  2. 数据难以收集,AI玩游戏通常是现有一个游戏,再去做AI,这些AI公司一般都没有与游戏公司合作,于是难以拿到原始的状态同步信息,只能抓取屏幕提取参数,难以获得海量数据(比如你难以让几万台机器去玩CSGO来收集数据)
  3. 状态空间过于复杂,游戏中需要同步的数据非常大,随着状态空间的复杂化,训练所需的数据骤增,训练速度也减慢,而因为第二条,我们已经很难获得数据了,于是雪上加霜
  4. 没有优秀先例,研究员研究RL很久了,但是至今没有一个极具影响力的RL玩游戏,甚至一些RL大佬都唱衰强化学习,认为这没有用,因此这是一个风险巨大,前路坎坷的方向(当然如果成功了,收益也很高)

强化学习系统由四个部分组成:

  • 策略,根据环境和状态决定动作,是一组概率,内容为当智能体状态为s时,采取特定动作a的概率
  • 奖励,智能体试图实现的目标,往往配合折扣因子(Discount Factor)设计
  • 价值函数
  • 环境模型
AE_loop

不断进行着状态Obs—动作A—新状态和奖励的循环

马尔可夫决策

图形学的光追部分,也大量使用了概率论和马尔可夫决策

强化学习涉及序列决策,使用马尔可夫决策过程(Markov Decision Process,MDP)对问题进行建模

马尔可夫条件

未来与过去无关

给定当前状态和所有过去状态,其未来状态(的条件概率)仅与当前状态有关

满足马尔可夫独立性,意味着强化学习模型,不需要记住如何到达当前的状态,只需要根据当前状态就能决定需要做什么

蒙特卡洛:对大量模拟的结果取平均值,用来逼近期望

马尔可夫决策过程

通过引入额外的(可选的)动作,扩展马尔可夫决策链,是否使用这个动作会影响最终的累积回报G,通过比较这两个G,我们可以得到这个动作该不该做

回溯图

其实是一个树

表示从初始状态开始,深度优先搜索每一个可能性,将这个过程化成树

树的每一个叶子结点表示无法得到解返回(或提前返回)的状态,当遇到这种情况,将回溯到父节点,继续遍历

贝尔曼方程

贝尔曼最优方程

Gym

Gym是一个被广泛使用的强化学习框架

CartPole

CartPole是一个在小车上放置了一根竖直向上的细杆,控制小车在X轴上移动,使得细杆尽可能长时间维持竖直向上的任务

import gym
import imageio

# 由于我是在无头环境执行,所以将渲染结果保存为视频
env = gym.make('CartPole-v1', render_mode="rgb_array")
writer = imageio.get_writer('gym_video.mp4', fps=30)

obs, info = env.reset()

print("Observation: ", obs) # Observation: [-0.03702318 0.0486786 0.04819322 0.00019955]
print("Action Space: ", env.action_space.n) # Action Space: 2

def policy(obs):
return env.action_space.sample()

for i in range(100):
action = policy(obs)
print("Action: ", action)
obs, reward, terminated, truncated, info = env.step(action)

frame = env.render()
writer.append_data(frame)

if terminated or truncated:
observation, info = env.reset()

writer.close()
env.close()

参考

gym doc

评论