Code Monkey home page Code Monkey logo

deep-reinforcement-learning's Introduction

Deep Reinforcement Learning: Principles and Practices

< Deep Reinforcement Learning: Principles and Practices >《深度强化学习:原理与实践》代码示例

豆瓣介绍:https://book.douban.com/subject/32568833/

介绍

《深度强化学习:原理与实践》包含12个章节和5个附录,其中第1至8章围绕强化学习领域,第9至12章围绕深度强化学习领域,附录A至附录E主要介绍深度学习相关的基础知识。基于章节之间的逻辑关系,本书将12个章节分成四篇(核心为第二至四篇),接下来对这四篇内容分别进行简要介绍。

第一篇(第1~2章)初探强化学习

这部分主要围绕强化学习的概念和基础框架,包括其基本概念和数学原理。该部分介绍的基础知识将贯穿全书,尽管涉及的数学公式和推导方程稍显复杂,但有助于深度理解强化学习的基础概念。

第1章按顺序依次介绍强化学习的发展历史、基础理论、应用案例、特点与未来。从强化学习的发展历史中可以了解强化学习与机器学习之间的关系;基础理论可以帮助读者对强化学习有一个整体的认识与了解,通过具体的应用案例可以了解如何对强化学习进行落地应用。最后,从宏观角度对强化学习的特点与未来进行了讨论。第2章则集中介绍强化学习涉及的数学概念,从马尔科夫决策过程对强化学习任务的表示开始,到介绍价值函数和策略。其中,价值函数是强化学习的核心,后续章节的大部分求解方法都集中在价值函数的逼近上。

第二篇(第3~5章)求解强化学习

这部分主要探讨如何通过数学求解获得强化学习的最优策略。对于基于模型的强化学习任务可以使用动态规划法,对于免模型的强化学习任务可以使用蒙特卡洛法和时间差分法。值得注意的是,本部分对于强化学习任务的求解使用的是基于表格的求解方法。 第3章介绍使用动态规划法求解强化学习任务,通过策略评估和策略改进的迭代交互计算方式,提出了用以求解价值函数和策略的策略迭代算法。然而策略迭代算法存在效率低、初始化随机性等问题,研究者又提出了值迭代算法。由于实际情况中不一定能够获得完备的环境知识,因此出现了第4章的针对免模型任务的强化学习求解方法。其中,蒙特卡洛求解法基于采样的经验轨迹,从真实/仿真的环境中进行采样学习,并分别从蒙特卡洛预测、蒙特卡洛评估到蒙特卡洛控制进行了详细介绍。事实上,蒙特卡洛法同样存在一些不足,如使用离线学习方式、数据方差大、收敛速度慢等,这会导致在真实环境中的运行效果并不理想。第5章中引入了在线学习的时间差分法,主要分为固定策略的Sarsa算法和非固定策略的Q-learning算法。需要注意的是,Q-learning算法将作为深度强化学习(即第四篇)中的基础算法之一。

第三篇(第6~8章)求解强化学习进阶

动态规划法、蒙特卡洛法、时间差分法都属于基于表格的求解方法。第三篇介绍的近似求解法通过寻找目标函数的近似函数,大大降低了表格求解法所需的计算规模和复杂度。近似求解方法主要分为3种:基于价值的强化学习求解法——值函数近似法;基于策略的强化学习求解法——策略梯度法;基于模型的强化学习求解法——学习与规划。 第6章详细介绍了基于价值的强化学习任务求解方法,即对价值函数进行近似求解。通过对函数近似进行数学解释,来引入值函数近似的数学概念和值函数近似法。然而,基于值函数近似的方法难以处理连续动作空间的任务,因此有了第7章介绍的策略梯度法。其将策略的学习从概率集合变换成策略函数,通过求解策略目标函数的极大值,从而得到最优策略。第8章为基于模型的强化学习,智能体从真实的经验数据中学习环境模型,并基于该环境模型产生的虚拟经验轨迹进行规划,从而获得价值函数或者策略函数。

第四篇(第9~12章)深度强化学习

此部分主要围绕深度强化学习展开,该技术通过结合深度学习的表征能力和强化学习的决策能力,使得智能体具备了更好的学习能力,能够解决更为复杂的感知决策问题。 第9章首先概述深度学习中较为经典的3种网络结构模型:深度神经网络、卷积神经网络和循环神经网络。随后介绍深度强化学习相关概念,并对深度强化学习当前具有代表性的应用进行简单介绍。第10章介绍了第一个深度强化学习算法:DQN算法。该方法通过结合Q-learning算法、经验回放机制以及卷积神经网络生成目标Q值等技术,有效地解决了深度学习和强化学习融合过程中所面临的问题和挑战,实现了深度学习与强化学习的深层次融合。第11章介绍了DQN算法所存在的不足,以及后续研究者所提出的具有代表性的深度强化学习算法:DDPG算法、A3C算法、Rainbow算法和Ape-X算法。第12章全面而细致地介绍了AlphaGo程序的设计**与原理,并给出了AlphaGo和AlphaGo Zero程序的算法细节。 本书的最后提供了附录A~附录E,内容涵盖深度学习方面相关函数、算法及技巧,供读者学习使用。

deep-reinforcement-learning's People

Contributors

chenzomi12 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

deep-reinforcement-learning's Issues

Incorrect assignment of parameter trainable for function linear in cnn.py.

The function 'linear' in cnn.py is defined as:
def linear(input_,
output_size,
weights_initializer=initializers.xavier_initializer(),
biases_initializer=tf.zeros_initializer,
activation_fn=None,
trainable=True,
name='linear')

Its sixth parameter is a trainable boolean flag, but in the following two lines, it is wrongly assigned as 'data_format':
self.l4, self.var['l4_w'], self.var['l4_b'] =
linear(self.l3, 512, weights_initializer, biases_initializer,
hidden_activation_fn, data_format, name='l4_conv')
self.l3, self.var['l3_w'], self.var['l3_b'] =
linear(self.l2, 256, weights_initializer, biases_initializer,
hidden_activation_fn, data_format, name='l3_conv')
This will cause error messages "'NCHW' has type str, but expected one of: int, long, bool" when saving model files.

It would be nice to change as follows:
self.l4, self.var['l4_w'], self.var['l4_b'] =
linear(self.l3, 512, weights_initializer, biases_initializer,
hidden_activation_fn, trainable, name='l4_conv')
self.l3, self.var['l3_w'], self.var['l3_b'] =
linear(self.l2, 256, weights_initializer, biases_initializer,
hidden_activation_fn, trainable, name='l3_conv')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.