李宏毅强化学习个人笔记 - 基于值的方法(学习critic)
回到概览
这里我们不学习 actor,也就是不学习怎么做事,而是学习一个 critic。
critic 的性质
critic 本身不决定动作;
给定 actor,critic 可以评估 actor 的好坏;
实际上,可以从 critic 里面得到一个 actor,这就是 Q-learning。
critic 实际上就是一个评估 actor $\pi$ 的函数 $V^\pi$
这个函数可以是一个神经网络
critic 的形式关于状态 $V^\pi(s)$ 当 actor 使用 $\pi$ 的时候,在观测到状态 $s$ 后获得的期望累积奖励。
如上图:
左边的状态,还剩很多飞机可以打,所以 $V^\pi(s)$ 较大;
右边的状态,较少飞机可以打,而且飞机渐渐靠下了,所以 $V^\pi(s)$ 较小。
对于不同的 actor $\pi$,给出一样的状态,可能给出的 critic $V^\pi(s)$ 也会不同。
譬如棋魂中的例子,之前藤原佐为建议进藤光下小飞,因为之前进藤光比较弱,后续变化较简单,更易驾驭;
之后变强了,就能够下变化更复杂的大飞;
也就是说,critic ...
李宏毅强化学习个人笔记 - 基于策略的方法(学习actor)
回到概览
基于策略的方法,也就是学习 actor。换言之,也就是学习一个策略函数 $\pi$:该函数输入观测,输出动作。
将神经网络作为 actor
神经网络擅长拟合函数
网络输入:机器的观测表示成向量或矩阵;
网络输出:每个动作对应输出层的一个神经元;
神经网络相较于查表的作为 actor 的好处
有“采样”的步骤,可以带来更多变的决策。譬如猜拳,会随机出锤子剪刀布。
譬如上面的打飞机,无法穷举所有的像素值,这种情况下建立表不现实。
神经网络泛化性好,可以举一反三。就算有些画面机器完全没有看过,也能够得到较好的结果(动作)。
决定 actor 的好坏回顾监督学习:用 loss 来刻画所学到函数的质量。
求网络参数 $\theta’$ 使得能够最小化总误差 $L$
或者说,使得预测分布与目标(target)越近越好
给定具有网络参数 $\theta$ 的 actor:$\pi_{\theta}(s)$,用该 actor 来玩游戏:
每一步可以记为三元组:(观测, 动作, 奖励)
$(s_1, a_1, r_1) \to (s_2, a_2, r_2) \to \ ...
李宏毅强化学习个人笔记 - 概览
课程链接:
【【李宏毅】2020 最新课程 (完整版) 强化学习 - 71.作業十五 ML Lecture 23-1 - Deep Re】
其他人的笔记:
强化学习-李宏毅-学习笔记 <总> - 恒大大的文章 - 知c乎https://zhuanlan.zhihu.com/p/344975862
之前(去年)看过的内容,当时是把笔记写在了草稿纸上。因为怕忘+怕被丢到垃圾桶里,所以就把笔记弄成电子版的,顺便重看一遍,当成一个温故而知新的过程。
传送门:
基于策略的方法
基于值的方法
基于策略的方法 - PPO
基于值的方法 - Q-learning 简介
基于值的方法 - Q-learning 在训练时的一些技巧
基于值的方法 - 对于连续动作的 Q-learning
Actor-Critic
其他姿势
基本概念深入理解强化学习(一)- 概念和术语 - 莫冉的文章 - 知乎https://zhuanlan.zhihu.com/p/478594917
环境(environment):智能体生存以及交互的世界,譬如熟知的 gym 环境
智能体(agent):可以是人 ...
python multiprocessing 多进程踩坑
之所以写这个东西,还是因为之前操作系统学了个寂寞,考前背个板混个分数就过了。但是这玩意儿在实际应用的时候,才会体会到某些坑爹的地方~
众所周知,在 python 中,I/O 密集型任务 可以用多线程的方式来实现(threading 库);然而,对于 计算密集型 任务,由于 python 中全局锁 GIL 的存在,多线程并不能起到一个加速的作用。所以此时,一般使用多进程的方式实现(multiprocessing 库)。虽然对于多进程,网上资料一搜一大把,但是这并不妨碍实际操作过程中会踩到坑。
需求分析现在我们有一个 worker 函数,接受不同的输入参数 args,之后进行一些计算。每个进程都可以起一个 worker 函数。
然而,在计算的时候,我们需要借助一些计算资源(如 GPU、网络服务器等)。那么我们可以用一个 multiprocessing.Array 来管理这些资源。
下面,以使用 GPU 为例:现在机器上有 4 台 GPU,而每台 GPU 上最多可以同时挂 5 个程序(这样不会炸显存)。那么我们可以维护这样一个数组:
1shared_resource_buf = multip ...
不定时更新的 Keras 踩坑记
众所周知,一般 research 里面所使用的炼丹框架以 PyTorch 居多。然而在工业界的模型部署中,TensorFlow 因能较好地支持多 GPU 的特性而广受青睐。
其中,Keras 以 TensorFlow 为后端(之前的 Keras 版本也能以 Theano、MXNet 等为后端),对 TensorFlow 的诸多 API 进行了封装,为模型的部署进一步降低了门槛。并且,TensorFlow 也把 Keras 集成进来,作为 TensorFlow 的一部分。
俺也是最近才系统性地接触到 Keras,之前都是 PyTorch 居多,用 TensorFlow 或者 Keras 仅仅是在复现其他人的工作上会用到。所以这不可避免地就会踩到很多坑。在这里记录下来,以方便之后遇到类似坑的时候,能快速反应下来是出现了什么问题。本人机器配置如下:
操作系统:Windows 11 家庭中文版 21H2
显卡:NVIDIA GeForce RTX 3060
Python 版本:3.9.7
CUDA 版本:11.6(可能就是因为这个 11.6 带来了之后的一系列巨坑……现在跑去 NVIDIA ...