无题
强化学习基本脉络 这张图包括基本工具和算法/方法两部分,基本工具包括贝尔曼方程等概念。算法包括价值迭代、蒙特卡罗方法等。 Chapter 2两个基本概念: One Concept: State Value$$V_{\pi}(s) \doteq \mathbb{E}{\pi}\left[G{t} \mid s_{t}=s\right]=\mathbb{E}{\pi}\left[\sum{k=0}^{\infty} \gamma^{k} r_{t+k+1} \mid s_{t}=s\right], \text{对于所有的} s \in S$$state value代表了奖励的平均值。状态值越高,说明策略越好。可以用来评价策略好还是不好。那么如何分析状态值呢,就要用一个工具:贝尔曼公式。 One Tool: Bellman Equation$$v_\pi=r_\pi+\gamma P_\pi v_\pi$$用一句话描述,他描述了状态与状态值的关系,可以给定一个策略,求出他的状态值。 policy evaluation: 后期广泛使用 Chapter 3贝尔曼最优公式:贝尔曼公式的特 ...
无题
蒙特卡洛方法在上一节中,我们介绍了策略迭代,它依赖于明确的环境模型(model-based)来进行策略评估和改进。然而,在许多现实问题中,环境模型不可用,或者我们无法轻易获得完整的转移概率 T 和奖励函数 R。这时,蒙特卡洛学习算法(Monte Carlo Learning)作为一种无模型(model-free)方法,提供了一种通过样本进行策略优化的途径。 蒙特卡洛方法的核心思想是:通过对环境的采样,基于多次模拟的经验回报,估计状态值函数或状态-动作值函数(Monte Carlo Estimation)。其依据就是经典的大数定律。 蒙特卡洛学习主要依赖以下几个关键特性: 基于样本:直接使用采样的经验(例如状态序列、奖励序列)进行学习。 延迟更新:直到采样结束后,才对策略或值函数进行更新。 无需环境模型:完全基于与环境的交互,适用于复杂环境。 蒙特卡罗算法与策略迭代类似,蒙特卡洛方法需要基于一个固定策略$\pi$。我们知道策略迭代包含两个主要步骤: 策略评估 (PE): $v_{\pi^{(k)}}=r_{\pi^{(k)}}+\gamma P_{\pi^{(k)}}v_{\pi^ ...
无题
基于网站《动手学强化学习》,其中的代码是几年前的,而名为 Gym Lib 的 Lib 已经过时了。因此,需要更改的地方,这是 DQN 和其他变体的完整新代码。 如果您只想实现 DQN,则只需下载它。但是,在 hands_on_RL 中使用 gym 的其他算法上需要更改的部分是相同的。因此,在这里我们展示需要更改的部分,以帮助您更改其他算法 需要更改1. 环境 ‘env_name-v0’ 已过期。您应该考虑升级到版本v1env_name = 'CartPole-v1' env = gym.make(env_name, render_mode='human') 2. env.seed(0) 没有被使用,你应该改到那里,并在后面加上 ‘[0]’state = env.reset(seed = 0)[0] 3. 需要解包的值太多(预期为 4):next_state、reward、done、_ = env.step(action)添加返回值 next_state, reward, done, _, __ = env.step(action) 4. 从 num ...
无题
title:Reward-to-go 数学推导date: 2025-02-19 17:29:01tags: 强化学习 人工智能 技术 计算机 目录结构categories: 技术cover: https://s3.bmp.ovh/imgs/2024/06/13/e2aa614f45568c02.jpg 直观理解回顾一下原始的期望回报: 我们的agent应该只根据某一action的后果来强化行动,因此采取行动之前获得的奖励与该行动的好坏无关:只与之后的奖励有关。 从这一直觉出发,可以有:$$\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) = \sum_{t=1}^T \mathbb{E}{\tau \sim p{\boldsymbol{\theta}}(\tau)} \left[ \nabla_{\boldsymbol{\theta}} \log \pi_{\boldsymbol{\theta}} (\mathbf{a}t \mid \mathbf{s}t) ,\sum{t’=t}^T r(\mathbf{s}{t’}, ...
无题
值迭代 | Value Iteration值迭代(Value Iteration)直接利用递归性,通过不断迭代逼近最优状态值函数 $v^{*}(s)$。整个算法可以概括为:$$v^{(k+1)}=f\left(v^{(k)}\right)=\max _\pi\left(r_\pi+\gamma P_\pi v^{(k)}\right), \quad k=1,2,3 \ldots$$因此这个算法理论上需要包含两个主要步骤: 策略更新(PU):$\pi^{(k+1)} = \arg\max _\pi\left(r_\pi+\gamma P_\pi v^{(k)}\right)$ 现在我求出了$\pi^{(k+1)}$,我就可以再代入下面的式子,再去求解$v^{(k+1)}$,他们有一个前后顺序! 状态更新(VU):$v^{(k+1)}=r_{\pi^{(k+1)}}+\gamma P_{\pi^{(k+1)}} v^{(k)}$ 注意!此处的$v_k$并不是state value!因为step 2这个方程不是贝尔曼方程,是一个迭代式。对比一下贝尔曼方程的matrix-vector形 ...
无题
贝尔曼方程在一个马尔可夫奖励过程中,从第t时刻状态开始,直到终止状态T时,所有奖励的衰减之和称为回报(Return),公式如下:$$G_{t}=r_{t+1}+\gamma r_{t+2}+\gamma^{2} r_{t+3}+\gamma^{3} r_{t+4}+\ldots+\gamma^{T-t-1} r_{T}$$其中,$T$是最终时刻,$\gamma$ 是折扣因子,越往后得到的奖励,折扣越多。关于折扣因子的必要性,以前的笔记已经介绍过。 如果提取一个$\gamma$,还可以得到一个递推式:$$G_{t}=r_{t+1}+\gamma G_{t+1}$$这个意思是,此时的计算只需要关注这一步的奖励,加折扣因子乘以下一步的回报即可。这个式子推导贝尔曼方程时极其有用。 接下来定义价值函数:$$\begin{aligned} V_{\pi}(s) &=\mathbb{E}\left[G_{t} \mid s_{t}=s\right] \ &=\mathbb{E}\left[r_{t+1}+\gamma r_{t+2}+\gamma^{2} r_{t+3}+ ...
Attention is all I need:Transformer的原理和代码详解
Transformer可运行的代码发布在GitHub{: .prompt-tip } 提到ChatGPT的原理,就绕不开Transformer,Transformer中的核心思想之一便是Attention,Attention机制彻底击败了在此之前的绝对王者RNN模式,并统治各大NLP任务直到现在。正因如此,Transformer的论文不叫Transformer,而是叫做《Attention is all you need》。本文是以我的理解,阐述Transformer是怎么想出来的,为什么这么设计。 Attention的思想Attention的关键在于理解$$QKV$$,即Query、Key和Value。可以将Attention机制看作一种寻址操作:存储器中存有键Key和值Value,当前产生了一个Query的查询,要查询出Value,那么首先需要匹配Query和Key的相似度。举个也许不恰当,但直观的例子,有以下Key和Value: Key Value 段誉的招牌武功 六脉神剑 段誉的生父 段延庆 段誉的结拜兄弟 乔峰和虚竹 乔峰的招牌武功 降龙十八章 ...
Linux目录结构
Linux目录结构登录系统后,在当前命令窗口下输入命令: ls / 树状图结构: 系统启动必须: /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。 /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。 /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中 指令集合: /bin:存放着最常用的程序和指令 /sbin:只有系统管理员能使用的程序和指令。 外部文件管理: /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式 ...
git入门使用完整流程
git入门-完整流程创建新仓库创建新文件夹,打开,然后执行git init,以创建新的 git 仓库。 克隆仓库执行git clone以创建仓库的克隆版本。 工作流本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。 添加和提交你可以提出更改(把它们添加到暂存区),使用如下命令: git add <filename> 或者添加目录下面所有文件 git add . 这是 git 基本工作流程的第一步;使用如下命令以实际提交改动: git commit -m "代码提交信息" 现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。 推送改动你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库: git push origin master 可以把 master 换成你想要推送的任何分支。 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可 ...
在糟糕的环境中保持心灵的宁静
爱比克泰德有一个重要观点:自由意志不可剥夺。他说的自由意志,是指人在自己可支配的领域里进行选择、做决定和采取行动的能力。所以,必须分清什么是可支配的,什么是不可支配的。可支配的是道德和心灵生活,在这个领域里,人有自由意志,要负起自己的责任。不可支配的是外部事物、外在遭遇以及一切其他人,在这个领域里,人没有自由意志,应该抱顺其自然的态度。明确了这个区分,在内在方面努力,在外在方面超脱,就能够保持心灵的宁静。 1. 分清可支配的和不可支配的人可以支配自己的道德和心灵生活。你怎样做人,是行善还是作恶,做好人还是坏人;你有怎样的心灵品质,是优秀还是平庸,这是你自己可以做主的,任何外部的力量都不能剥夺你的主权。也只有在这个范围内,才存在善和恶、好和坏的区别与选择。 超出这个范围的事物,既然是你不能支配的,对你来说也就无所谓善和恶、好和坏,你不要去做善恶好坏的判断,顺其自然就是了。 在你可支配的范围内,好好地运用你的自由意志,读书、写作、学习,提高自己,让自己成为心灵丰富、品德高尚的人。这个范围之外的事情,你都把它们看作与己无关,不去关心和追求。 如果这样,你的心怎么会不宁静呢?专注于自由 ...