强化学习——Qlearning

前言

在控制决策领域里面强化学习还是占很重比例的,最近出了几篇角色控制的论文需要研究,其中部分涉及到强化学习,都有开源,有兴趣可以点开看看:
A Deep Learning Framework For Character Motion Synthesis and Editing
Phase-Functioned Neural Networks for Character Control
Terrain-Adaptive Locomotion Skills Using Deep Reinforcement Learning
DeepLoco: Dynamic Locomotion Skills Using Hierarchical Deep Reinforcement Learning
DeepMimic: Example-Guided Deep Reinforcement Learning of Physics-Based Character Skills
为了看懂这些文章,还是得对强化学习做一个基本了解,看文章的时候再去针对具体的方法作深入了解,这里就先看看最基本的Q-learning,其实在强化学习中有一个很重要的理论知识叫做马尔科夫决策过程(Markov Decision Process,MDP),建议没事的时候看看
Markov Decision Processes
而Q-learnging就是解决马尔科夫决策问题的一个方法,参考博文:
增强学习入门之Q-Learning
走近流行强化学习算法:最优Q-Learning
如何用简单例子讲解 Q - learning 的具体过程?

理论

在学习马尔科夫链的时候,我有一篇译文《马尔科夫链和马尔科夫链蒙特卡洛方法》中提到了对于马尔科夫链,存在唯一的一个稳态分布,也就是说当马尔科夫链达到稳态分布以后,其后得到的所有转移状态都具有相同的概率分布。而Q-learning的最终目的就是利用价值迭代算法寻找最优稳态(策略)。
通俗点将Q-learning的根本目的就是寻找在某种状态下采取某种策略得到的价值是多少,比如踩雷,在某个格子,我标雷或者点开,如果炸了,就惩罚,如果没炸就奖励

类似于隐马尔科夫模型(HMM),我们也需要提前知道一些变量,以扫雷为例:

  • S:状态,当前在哪个格子上
  • A:行为,对当前格子标雷还是踩下去
  • r:长期奖励和短期奖励的折扣因子,短期奖励就是说炸了我就扣分扣到你怀疑人生,长期奖励就是价值函数,即根据以往经验,我去下一个格子标雷或者踩下去是个啥情况
  • P:状态转移矩阵,维度是[行为*状态],与HMM不同的是,Qlearning是依据状态转移和采取的行动得到下一个状态,即当前格子选择完处理行为后,下一个格子我会去哪里踩
  • R:短期奖励

最终目的:

  • Q:价值函数

更新价值函数的迭代流程:

  • 初始化当前状态:踩到哪个格子了
  • 在当前状态下采取哪个行动(标雷,踩下去)
  • 计算每种行动获得的反馈,计算哪个行动得到最大的价值
  • 根据状态转移矩阵得到下一次我可能去探雷的位置,重复2和3步骤

其中最主要的是怎么获取行动反馈,答案就是一句长期奖励和短期奖励,大概意思就是以下两项的和:

  • 短期奖励:R[当前状态][当前行为]
  • 长期奖励:折扣因子* 依据当前状态和行为转移到下一个状态后再采取的所有可能行为中依据以往经验能得到的最大奖励,即
    r×max(q[下一个状态][所有的下一个行为])r\times max(q[下一个状态][所有的下一个行为]) r×max(q[][])
    然后根据这个最大奖励更新Q[当前状态][当前行为]
    Q[当前状态][当前行为]=(1−α)Q[当前状态][当前行为]+α(R+r×max(Q[下一个状态][所有的行为]))Q[当前状态][当前行为]=(1-\alpha)Q[当前状态][当前行为]+\alpha (R+r\times max(Q[下一个状态][所有的行为])) Q[][]=(1α)Q[][]+α(R+r×max(Q[][]))
    其实这部分为看到了好几种更新方法:
  • 莫凡Python上面的
    在这里插入图片描述

你没看错,理论到此结束,最主要的就是如何依据短期利益和长期利益去确定当前状态下采取行动所获得的最大奖励。

  • 知乎上@牛阿的回答
    在这里插入图片描述

  • 参考博客1的方法
    Q=R+r∗max(Q[next_state][action_next])Q=R+r*max(Q[next\_state][action\_next]) Q=R+rmax(Q[next_state][action_next])

  • 参考博客2的方法更奇怪,这里就不贴了额,有兴趣自己去看看
    不过所有的代码意思几乎都是在长远利益中选择最大值,但是长远利益的计算方法有所不同,最后更新方法也有点区别,这个可能是属于不同的更新算法,后续继续学习应该能知道

伪代码实现:

state=1;//把踩雷游戏的最左上角的格子当做初始状态
while !finish_game:action=random(0,1);//0是标记雷,1是踩下去next_state=P[state][action];//依据当前状态和行为得到下一个位置for next_action in [0,1]//踩雷和标雷都计算temp_reward[next_state][next_action]=Q[next_state][next_action]Q[state][action]=(1-a)*Q[state][aciton]+a*[R+max(temp_reward[nextstate][:])]

貌似看着不难,后面找个啥例子再深入了解一波。

后记

这里就是初步接触强化学习,了解何为行为与奖励,这里有一个愤怒小鸟的强化学习代码,有兴趣去玩玩:
https://github.com/SarvagyaVaish/FlappyBirdRL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TensorFlow-windows】keras接口学习——线性回归与简单的分类

前言 之前有写过几篇TensorFlow相关文章,但是用的比较底层的写法,比如tf.nn和tf.layers,也写了部分基本模型如自编码和对抗网络等,感觉写起来不太舒服,最近看官方文档发现它的教程基本都使用的keras API,这…

【TensorFlow-windows】keras接口——卷积手写数字识别,模型保存和调用

前言 上一节学习了以TensorFlow为底端的keras接口最简单的使用,这里就继续学习怎么写卷积分类模型和各种保存方法(仅保存权重、权重和网络结构同时保存) 国际惯例,参考博客: 官方教程 【注】其实不用看博客,直接翻到文末看我的c…

【TensorFlow-windows】keras接口——BatchNorm和ResNet

前言 之前学习利用Keras简单地堆叠卷积网络去构建分类模型的方法,但是对于很深的网络结构很难保证梯度在各层能够正常传播,经常发生梯度消失、梯度爆炸或者其它奇奇怪怪的问题。为了解决这类问题,大佬们想了各种办法,比如最原始的…

【TensorFlow-windows】keras接口——卷积核可视化

前言 在机器之心上看到了关于卷积核可视化相关理论,但是作者的源代码是基于fastai写的,而fastai的底层是pytorch,本来准备自己用Keras复现一遍的,但是尴尬地发现Keras还没玩熟练,随后发现了一个keras-vis包可以用于做…

【TensorFlow-windows】投影变换

前言 没什么重要的,就是想测试一下tensorflow的投影变换函数tf.contrib.image.transform中每个参数的含义 国际惯例,参考文档 官方文档 描述 调用方法与默认参数: tf.contrib.image.transform(images,transforms,interpolationNEAREST,…

【TensorFlow-windows】扩展层之STN

前言 读TensorFlow相关代码看到了STN的应用,搜索以后发现可替代池化,增强网络对图像变换(旋转、缩放、偏移等)的抗干扰能力,简单说就是提高卷积神经网络的空间不变性。 国际惯例,参考博客: 理解Spatial Transformer…

【TensorFlow-windows】MobileNet理论概览与实现

前言 轻量级神经网络中,比较重要的有MobileNet和ShuffleNet,其实还有其它的,比如SqueezeNet、Xception等。 本博客为MobileNet的前两个版本的理论简介与Keras中封装好的模块的对应实现方案。 国际惯例,参考博客: 纵…

【TensorFlow-windows】keras接口——ImageDataGenerator裁剪

前言 Keras中有一个图像数据处理器ImageDataGenerator,能够很方便地进行数据增强,并且从文件中批量加载图片,避免数据集过大时,一下子加载进内存会崩掉。但是从官方文档发现,并没有一个比较重要的图像增强方式&#x…

【TensorFlow-windows】TensorBoard可视化

前言 紧接上一篇博客,学习tensorboard可视化训练过程。 国际惯例,参考博客: MNIST机器学习入门 Tensorboard 详解(上篇) Tensorboard 可视化好帮手 2 tf-dev-summit-tensorboard-tutorial tensorflow官方mnist_…

深度学习特征归一化方法——BN、LN、IN、GN

前言 最近看到Group Normalization的论文,主要提到了四个特征归一化方法:Batch Norm、Layer Norm、Instance Norm、Group Norm。此外,论文还提到了Local Response Normalization(LRN)、Weight Normalization(WN)、Batch Renormalization(BR)…

【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据

前言 之前使用tensorflow和keras的时候,都各自有一套数据读取方法,但是遇到一个问题就是,在训练的时候,GPU的利用率忽高忽低,极大可能是由于训练过程中读取每个batch数据造成的,所以又看了tensorflow官方的…

骨骼动画——论文与代码精读《Phase-Functioned Neural Networks for Character Control》

前言 最近一直玩CV,对之前学的动捕知识都忘得差不多了,最近要好好总结一下一直以来学习的内容,不能学了忘。对2017年的SIGGRAPH论文《Phase-Functioned Neural Networks for Character Control》进行一波深入剖析吧,结合源码。 额…

颜色协调模型Color Harmoniztion

前言 最近做换脸,在肤色调整的那一块,看到一个有意思的文章,复现一波玩玩。不过最后一步掉链子了,有兴趣的可以一起讨论把链子补上。 主要是github上大佬的那个复现代码和原文有点差异,而且代码复杂度过高&#xff0…

Openpose推断阶段原理

前言 之前出过一个关于openpose配置的博客,不过那个代码虽然写的很好,而且是官方的,但是分析起来很困难,然后再opencv相关博客中找到了比较清晰的实现,这里分析一波openpose的推断过程。 国际惯例,参考博…

换脸系列——眼鼻口替换

前言 想着整理一下换脸相关的技术方法,免得以后忘记了,最近脑袋越来越不好使了。应该会包含三个系列: 仅换眼口鼻;换整个面部;3D换脸 先看看2D换脸吧,网上已经有现成的教程了,这里拿过来整理一…

换脸系列——整脸替换

前言 前面介绍了仅替换五官的方法,这里介绍整张脸的方法。 国际惯例,参考博客: [图形算法]Delaunay三角剖分算法 维诺图(Voronoi Diagram)分析与实现 Delaunay Triangulation and Voronoi Diagram using OpenCV (…

3D人脸重建——PRNet网络输出的理解

前言 之前有款换脸软件不是叫ZAO么,分析了一下,它的实现原理绝对是3D人脸重建,而非deepfake方法,找了一篇3D重建的论文和源码看看。这里对源码中的部分函数做了自己的理解和改写。 国际惯例,参考博客: 什…

tensorflow官方posenet模型解析

前言 tensorflow官方有个姿态估计项目,这个输入和openpose还有点不一样,这里写个单人情况下的模型输出解析方案。 国际惯例,参考博客: 博客: 使用 TensorFlow.js 在浏览器端上实现实时人体姿势检测 tensorflow中posnet的IOS代…

tensorflow2安装时候的一个dll找不到的错误

电脑环境: vs2015python3.7.6,使用anaconda安装的CUDA 10.1cuDnn 7.6.5tensorflow2.1.0 错误内容 File "C:\Users\zb116\anaconda3\lib\imp.py", line 242, in load_modulereturn load_dynamic(name, filename, file)File "C:\Users\z…

PCA、SVD、ZCA白化理论与实现

简介 在UFLDL中介绍了主成分分析这一块的知识,而且当时学机器学习的时候,老师是将PCA和SVD联系起来将的,同时UFLDL也讲到了使用PCA做数据白化whitening处理,这个词经常在论文里面看到。 国际惯例,参考博客&#xff1…