Skip to main content

9 posts tagged with "RL"

View All Tags

RL1 Preliminaries

· 3 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

1.1 概述

懒的说了,自己百度一下什么都有,或者去看AI世界大入门去

RL2 Markov Decision Process

· 9 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

1 马尔可夫性质(Markov property)

对于天气预报而言,今天是否下雨只取决于前一天的天气情况,无关于前2345...n天的情况。这就是MP(马尔可夫性质,下文简称MP)

换句话来说,一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态。给出公式如下

p(Xt+1=xt+1X0:t=x0:t)=p(Xt+1=xt+1Xt=xt)p(X_{t+1}=x_{t+1}\mid X_{0:t}=x_{0:t}) = p(X_{t+1}=x_{t+1}\mid X_t=x_t)

此处假设随机变量X0,X1,...,XTX_0, X_1, ..., X_T为一个随机过程。公式代表的含义指需要看每个p的后半部分**(|xxx)**,意思就是前面的都不用看,看个t就行。

MP也可以描述为给定当前状态时,将来的状态与过去状态是条件独立的。如果某一个过程满足马尔可夫性质,那么未来的转移与过去的是独立的,它只取决于现在。马尔可夫性质是所有马尔可夫过程的基础。

RL3 Table Method

· 11 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

策略最简单的表示是查找表(look-up table),即表格型策略(tabular policy)。使用查找表的强化学习方法称为表格型方法(tabular method),如蒙特卡洛、Q学习和Sarsa。本章通过最简单的表格型方法来讲解如何使用基于价值的方法求解强化学习问题。(reference:https://datawhalechina.github.io/easy-rl/#/chapter3/chapter3)

基于此,本文介绍三种常用方法,Q表格(Q-table), 时序差分(temporal difference),蒙特卡洛(MC),Sarsa

并稍微给出免模型,有模型,同策略,异策略的定义

1 免模型 (Model-free)有模型 (Model-based)

1.1 Model-free

直接与环境互动,不考虑环境内的数学公式,特点是通过反复试错来改进策略,但是模拟次数需要很多

当马尔可夫决策过程的模型未知或者模型很大时,我们可以使用免模型强化学习的方法。免模型强化学习方法没有获取环境的状态转移和奖励函数,而是让智能体与环境进行交互,采集大量的轨迹数据,智能体从轨迹中获取信息来改进策略,从而获得更多的奖励。

1.2 model-based

先构建虚拟环境,在其中训练后在将模型放在真实环境中执行,特点是学习速度快(虚拟环境可以理解为概率论中的先验知识),但是极度依赖模型的准确性

策略迭代和价值迭代都需要得到环境的转移和奖励函数,所以在这个过程中,智能体没有与环境进行交互。在很多实际的问题中,马尔可夫决策过程的模型有可能是未知的,也有可能因模型太大不能进行迭代的计算,比如雅达利游戏、围棋、控制直升飞机、股票交易等问题,这些问题的状态转移非常复杂。

2 Q表格

Q表格可以这样理解,在一个5*5的网格中,每一个网格都会记录最佳策略,当agent走到这步的时候,就可以直接通过查表的方式去决定自己的策略。其实和动态规划的思想差不多。baseline如下

动作\状态s1S2
a1q_valueq_value
a2q_valueq_value
a3q_valueq_value

q值代表在某个状态下采取某个动作,未来预期能获得的累积奖励总和。初始化一般都可以默认为0

Q表格很好用,但是action和state很多都情况下就太大了,这就是未来会介绍到的DQN算法。当然,本文不介绍,而是介绍几种常见的计算q_value的办法

当然在此之前,我们还需要了解一下同策略和异策略

3 同策略(on-policy) & 异策略(off-policy)

本文介绍三种算法,简单说就是蒙特卡洛方法 (Monte Carlo, MC),时序差分方法 (Temporal Difference, TD)和SARSA。其中Q-learning和SARSA都是TD的具体实现方法

4 蒙特卡洛策略评估(Monte Carlo, MC)

4.1 理论

一句话,**就是大数仿真模拟然后求平均值。**采样大量的轨迹,计算所有轨迹的真实回报,然后计算平均值。

让agent先完整的完成一个回合,然后记录下从某个状态开始到结束所拿到的所有奖励

算法流程

  1. 采样:从状态s采取动作a开始,直到结束或epochs用完
  2. 计算GtG_t: 计算回报
  3. 更新表格的Q_value:有两种形式
Q(s,a)=所有局数的总回报和访问次数Q(s,a)Q(s,a)+α(GtQ(s,a))Q(s,a) = \frac{所有局数的总回报和}{访问次数} \\ Q(s,a) \leftarrow Q(s, a) + \alpha(G_t - Q(s,a))

第一个很简单,直接平均就ok了,第二个是增量更新法,也是最常用的一种办法,

α\alpha是学习率,(GtQ(s,a)(G_t - Q(s,a)是误差,决定其收敛,大于0说明鼓励这个动作,小于0说明惩罚这个动作

4.2 例子

4.2.1 设定

假设存在这样的一个迷宫

起点空地
陷阱终点

Reward:到达终点+10,陷阱-10,移动一步-1

γ=1,α=0.5\gamma = 1, \alpha=0.5,使用增量更新法,init all q_value in Q table are 0

4.2.2 计算

只模拟三步

局数路径Gt计算Q表更新
1(1,1) -> (2,1)-1 + -10 =-11Q((1,1), 下)
2(1,1) -> (1,2) -> (2, 2)-1 + 10 =9
-1 - 1 + 10 = 8
Q((1,2), 下)
Q((1,1), 右)
3(1,1) -> (1,2) -> (1,1) -> (2,2)-1 * 4 + 10 =6Q((1,1), 右)

如果是Q table的话,就是这样的

a\s(1, 1)(1, 2)(2, 1)(2, 2)

如果遇见一个坐标是之前计算过的,务必不要忘记使用增量更新法

5 时序差分(Temporal Difference, TD)

依旧是一种填表的方法,不同的是TD不需要等一局结束(不需要注意GtG_t)每走n不就更新一次Q表(也就是TD(n))

5.1 TD(0)

5.1.1 理论

以最简单的TD(0)为例,核心公式为

V(st)V(st)+α[rt+1+γV(st+1)V(st)]V(s_t) \leftarrow V(s_t) + \alpha[r_{t+1} + \gamma V(s_{t+1})-V(s_t)]

V(st)V(s_t)为目前(最好的翻译是以前)这个格子的分数(旧预测),rt+1+γV(st+1)V(st)r_{t+1} + \gamma V(s_{t+1})-V(s_t)就是TD目标(TD target)

**时序差分误差(TD error)**就是δ=Rs+γV(s)V(s)\delta = R_{s'} + \gamma V(s') - V(s),可以用更新V(s)V(s)来逼近真实的回报

5.1.2 例子

还是以迷宫为例,只不过这次初始化的是V Table

局数路径TD errorV值
1(1, 1) -> (2, 1)-1 + 1*0 - 0 = -1V(1,1) = -0.5
2(1,1) -> (1,2) -> (2, 2)step1:
-1 + 1*0 - (-0.5) = -0.5
step2:
-1+10 - 0 = 9
step1:
V(1, 1) = -0.5 + 0.5(-0.5) =-0.75
step2:
V(1, 2) = 0 +0.5(9) = 4.5
3(1, 1) -> (1,2) -> (2, 2)step1:
-1 +1*4.5 - (-0.75) =4.25
step2:
-1+10-4.5=4.5
step1:
V(1,1) = -0.75 + 0.5(4.25)=1.375
step2:
V(1,2) = 4.5+0.5(4.5)=6.75

V值在确定TD error的情况下,可以直接简化计算,即V(st)=V(st)+γδV(s_t) = V(s_t) + \gamma \delta

此处还需要引入一个重要概念,V表是有局限性的,尤其是针对model-free的情况,因为V表没有动作a,意思就是不知道应该如何计算状态转移概率p(st+1st,a)p(s_{t+1}|s_t,a),所以这不是一种Q-Table的传统算法。当然,后续的Q-learning和SARSA就是两种计算V表然后再计算Q表的算法了

6. 广义策略迭代 (Generalized Policy Iteration, GPI)

为什么需要广义策略迭代?因为在不知道P(ss,a)P(s' \mid s, a)R(s,a)R(s, a)的情况下,即便算出了V(s)V(s),也无法推导出最优动作,(公式如下,方便理解)

Qπ(s,a)=R(s,a)+γsSP(ss,a)Vπ(s)Q_\pi(s,a) = R(s,a) + \gamma \sum_{s' \in S}P(s' \mid s,a)V_\pi(s')

此时就需要使用到GPI,广义策略迭代是指策略评估 (Policy Evaluation)和策略改进 (Policy Improvement)这两个过程相互作用、不断迭代的过程。

Evaluation根据当前策略π\pi来估算价值函数(VVQQ

Improvement是指,得到价值函数后,通过“贪心”的方法改进策略,使其朝着更优的方向演变

对策略评估部分进行修改,使用蒙特卡洛的方法代替动态规划的方法估计 Q 函数。我们首先进行策略评估,使用蒙特卡洛方法来估计策略Q=QπQ=Q_\pi,然后进行策略更新,即得到 Q 函数后,我们就可以通过贪心的方法去改进它

π(s)=argmaxQ(s,a)\pi(s) = argmaxQ(s,a)

最好的该改进点是,在之前,只要不知道P和R,求出V也没用。但现在可以直接评估Q函数(通过Q表),直接选取Q值最大的动作

有两种方案:

A:MC探索

B:e-贪心搜索

6. SARSA

6.1 理论

先说定义:Sarsa 是一种**同策略(on-policy)**算法,它优化的是它实际执行的策略,它直接用下一步会执行的动作去优化 Q 表格。同策略在学习的过程中,只存在一种策略,它用一种策略去做动作的选取,也用一种策略去做优化。所以 Sarsa 知道它下一步的动作有可能会跑到悬崖那边去,它就会在优化自己的策略的时候,尽可能离悬崖远一点。这样子就会保证,它下一步哪怕是有随机动作,它也还是在安全区域内。

SARSA不同于前文讲的那些,是直接作用于Q(s,a)Q(s,a)的,其计算公式为

Q(s,a)Q(s,a)+α[rt+1+γQ(st+1,at+1)Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r_{t+1} + \gamma Q(s_{t+1},a_{t+1})-Q(s,a)]

是不是很想前文的TD?这就是照搬了思路而已,当然该公式只是策略评估,对于策略改进,我们需要使用ϵgreedy\epsilon-greedy

6.2 例子

依旧迷宫,当然此处假设ϵ=0.1\epsilon=0.1(90%选分最高的,10%瞎跑)

Step1(s) 策略改进(决定这么走)

从s1出发,应该附近都是0,所以通过ϵgreedy\epsilon-greedy随机选择了一个动作向右,此时的状态动作为(s1, 右边)

Step2(a,r) 执行与观测

agent往右走并进入了空地s2,获取了奖励r=1r=-1

Step3(s‘) 再次策略改进(SARSA)

在更新s1的分数之前,先决定在s2应该怎么走,发现目前Q表也是0,于是通过ϵgreedy\epsilon-greedy决定向下走

Step4(a’,Q)策略评估

利用前几步,带入公式

Q(s1,)Q(s1,)+0.5[1+1×Q(s2,)Q(s1,)]Q(s_1, 右) \leftarrow Q(s_1, 右) + 0.5[-1+1 \times Q(s_2, 下)-Q(s_1, 右)]

此时更新好了全新的Q(s1,)Q(s_1, 右),依旧进行n轮迭代得到最终解

6.3 总结

用TD的方法(计算Q)+ϵgreedy\epsilon-greedy更新策略,就得到了SARSA,这个算法的本身就是s,a,r,s,as,a,r,s',a'

7. Q学习(Q-learning)

7.1 理论

和SARSA差不多,只是稍微变了一下Q值更新策略,首先列出公式

Q(s,a)Q(s,a)+α[rt+1+γmaxaQ(st+1,at)Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r_{t+1} + \gamma \max_{a}Q(s_{t+1},a_{t})-Q(s,a)]

TD target发生了变化

7.2 实验

和SARSA一样,不同点在于step4,更新评估部分

ϵgreedy\epsilon-greedy在确定动作之后,比如(s2,)(s_2, 左),SARSA就会用(s2,)(s_2, 左)的值带入公式计算新Q值,而Q-learning会不管ϵgreedy\epsilon-greedy的结果,直接选择附近的最高Q值,即在填表时只选最高的走,以追求最优解

8. 同策略与异策略

Sarsa 是一个典型的同策略算法,它只用了一个策略π\pi,它不仅使用策略π\pi学习,还使用策略π\pi与环境交互产生经验。 如果策略采用ϵgreedy\epsilon-greedy,它需要兼顾探索,为了兼顾探索和利用,它训练的时候会显得有点“胆小”。它在解决悬崖行走问题的时候,会尽可能地远离悬崖边,确保哪怕自己不小心探索了一点儿,也还是在安全区域内。此外,因为采用的是,ϵgreedy\epsilon-greedy策略会不断改变(ϵ\epsilon值会不断变小),所以策略不稳定。

Q学习是一个典型的异策略算法,它有两种策略————目标策略和行为策略,它分离了目标策略与行为策略。Q学习可以大胆地用行为策略探索得到的经验轨迹来优化目标策略,从而更有可能探索到最佳策略。行为策略可以采用 εε-贪心 算法,但目标策略采用的是贪心算法,它直接根据行为策略采集到的数据来采用最佳策略,所以 Q学习 不需要兼顾探索。

我们比较一下 Q学习 和 Sarsa 的更新公式,就可以发现 Sarsa 并没有选取最大值的最大化操作。因此,Q学习是一个非常激进的方法,它希望每一步都获得最大的利益;Sarsa 则相对较为保守,它会选择一条相对安全的迭代路线。

总结

8. 一些定义

**自举(Bootstrapping)**是指在更新当前状态或动作的价值时,不等待最终的真实回报,而是直接利用对后续状态价值的“现有估计值”来更新当前的“估计值”

RL4 Policy Gradient

· 6 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

在之前的Q-table中,由于Q值与感知态的强绑定问题,无法学习随机策略(也无法区分感知相同但需求不同的状态,比如说非对称),因此需要使用PG求解,

在一些情节,比如说机器臂(连续动作空间),石头剪刀布(概率性策略)中,我们可以使用PG,同时,收敛性也更加强

PG的主要目的就是计算梯度并更新参数来改变策略,直接输出动作概率

1. 理论

首先给出轨迹的概念,把环境输出的ss与演员输出的动作aa全部组合起来,就是一个轨迹(trajectory)

τ=s1,a1,s2,a2,...,st,at\tau = {s_1, a_1, s_2, a_2,...,s_t,a_t}

就像是神经网络一样,前输出就是后输入

在给定参数θ\theta,计算某个轨迹τ\tau发生的概率为

pθ(τ)=p(s1)pθ(a1s1)p(s2s1,a1)pθ(a2s2)p(s2s1,a1)=p(s1)t=1Tpθ(atst)p(st+1st,at)p_{\theta}(\tau) = p(s_1)p_{\theta}(a_1 \mid s_1)p(s_2 \mid s_1, a_1)p_{\theta}(a_2 \mid s_2)p(s_2 \mid s_1, a_1) \cdots \\ =p(s_1)\prod_{t=1}^Tp_{\theta}(a_t \mid s_t)p(s_{t+1} \mid s_t, a_t)

其中,p(s1)p(s_1)为厨师状态分布(也就是起点),pθ(atst)p_{\theta}(a_t \mid s_t)为策略在状态sts_t下选择动作ata_t的概率,p(st+1st,at)p(s_{t+1} \mid s_t, a_t)为状态转移概率

一句话概括一下的话,就是在给定策略πθ\pi_{\theta}(或pθp_{\theta})下,一整条轨迹τ\tau出现的概率是多少。这公式蛮重要的,是后续梯度下降的基础。就是上图的数学表达而已,不复杂

改图是计算奖励的过程,R(τ)R(\tau)就是每个步骤获取的奖励累加,

在某一场游戏的某一个回合里面,我们会得到R(τ)R(\tau)。我们要做的就是调整演员内部的参数θ\theta, 使得R(τ)R(\tau)的值越大越好。 但实际上R(τ)R(\tau)并不只是一个标量(scalar),它是一个随机变量,因为演员在给定同样的状态下会采取什么样的动作,这是有随机性的。环境在给定同样的观测时要采取什么样的动作,要产生什么样的观测,本身也是有随机性的,所以R(τ)R(\tau)是一个随机变量。我们能够计算的是R(τ)R(\tau)的期望值。给定某一组参数,我们可计算rθr_\theta的期望值为

Rˉθ=τR(τ)pθ(τ)\bar{R}_\theta = \sum_{\tau}R(\tau)p_\theta(\tau)

比如θ\theta对应的模型很强,如果有一个回合θ\theta很快就死掉了,因为这种情况很少会发生,所以该回合对应的轨迹τ\tau的概率就很小;如果有一个回合一θ\theta直没死,因为这种情况很可能发生,所以该回合对应的轨迹τ\tau的概率就很大。我们可以根据θ\theta算出某一个轨迹τ\tau出现的概率,接下来计算τ\tau的总奖励。总奖励使用τ\tau出现的概率进行加权,对所有的τ\tau进行求和,就是期望值。给定一个参数,我们可以计算期望值为

Rˉθ=Eτpθ(τ)[R(τ)]\bar{R}_\theta = \mathbb{E}_{\tau \sim p_\theta(\tau)}\big[ R(\tau) \big]

这就引入正文主题了,想让奖励越大越好,就需要梯度,而且是上升来最大化期望奖励,即

Rˉθ=τR(τ)pθ(τ)\nabla \bar{R}_\theta = \sum_{\tau}R(\tau)\nabla p_\theta(\tau)

不过,由于期望无法直接求导,会用一大堆公式进行推导,得到可以通过采样计算的梯度。数学技巧使用的是f(x)=f(x)logf(x)\nabla f(x)=f(x)\nabla logf(x).推导公式不放了,感兴趣自己去搜,网上都有,最终公式是这样的,这是梯度的近似计算方法

1Nn1Nt=1TnR(τn)logpθ(atnstn)\frac{1}{N} \sum_{n-1}^N \sum_{t=1}^{T_n}R(\tau^n) \nabla logp_\theta(a_t^n \mid s_t^n)

也很复杂,不看,给出最简单的形式,用于更新θ\theta

θθ+ηRˉθ\theta \leftarrow \theta + \eta \nabla \bar{R}_\theta

其中,η\eta是学习率,可用Adam等深度学习里的方法来进行调整

注意,一般**策略梯度(policy gradient,PG)**采样的数据只会用一次。我们采样这些数据,然后用这些数据更新参数,再丢掉这些数据。接着重新采样数据,才能去更新参数。

2. 策略梯度实现技巧

2.1 添加基线(baseline)

在很多环境中,奖励R(τ)R(\tau)永远是正数(例如迷宫中只要活着就给分)。根据基础公式,只要我们采样到了某个动作,它的概率就会增加。如果某些好的动作没被采样到,它们的相对概率反而会下降,这显然不合理。

解决方法:给奖励减去一个基线 b(通常是所有奖励的平均值)

只有比“平均水平”更好的动作,奖励才会是正的(增加概率);比平均水平差的动作,奖励会变成负的(降低概率)。

2.2 指派合适的分数 (Assign Suitable Credit)

在基础算法中,每一局游戏(轨迹τ\tau)得到的总奖励R(τ)R(\tau)会被乘到该局的每一个动作上。但这不公平——也许你开局走得非常好,但最后一步失误导致输了。在基础公式里,开局的那个“好动作”也会被惩罚。

解决方法:不再使用整场游戏的总分,而是使用该动作之后产生的累积奖励,即用GtG_t代替R(τ)R(\tau)

目的是一个动作的评价,只取决于它做完之后发生的奖励。这大大减少了评价中的“噪音”,让梯度更新更准确。

2.3 总结

看一下了解一下就行,2.2是一个经典的评论员(critic)。后续会专门再写一个评价员算法

3. REINFORCE:蒙特卡洛策略梯度(Monte Carlo Policy Gradient)

REINFORCE 用的是回合更新的方式,它在代码上的处理上是先获取每个步骤的奖励,然后计算每个步骤的未来总奖励GtG_t,将每个GtG_t代入

Rˉθ1Nn=1Nt=1TnGtnlogπθ(atnstn)\nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} G_t^{\,n}\, \nabla \log \pi_\theta \big( a_t^{\,n} \mid s_t^{\,n} \big)

GtG_t需要从后往前算,逐步推导到G1G_1,具体表现为

Gt=k=t+1Tγkt1rk=rt+1+γGt+1\begin{aligned} G_t &= \sum_{k=t+1}^{T} \gamma^{\,k-t-1} r_k \\ &= r_{t+1} + \gamma G_{t+1} \end{aligned}

即上一个步骤和下一个步骤的未来总奖励的关系,其实就是原本是(s,a)现在变成了(s,a,G),即

(s1,a1,G1)(s2,a2,G2),...,(sT,aT,GT)(s_1,a_1,G_1)(s_2,a_2,G_2),...,(s_T,a_T,G_T)

CityLearn v1.0 - An OpenAI Gym Environment for Demand Response with Deep Reinforcement Learning

· 5 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

abstract

需求响应(Demand Response, DR)可在美国电力需求峰值中减少约 20%,而建筑物占总电力需求的约 70%。然而,建筑能耗系统动态复杂且难以建模,传统方法难以协调不同建筑或能源系统。强化学习(RL)因其自适应、无需模型的特性,能基于历史与实时数据实现智能能耗控制。 然而,目前 DR 领域的研究缺乏统一标准,实验难以复现,算法性能也难以比较。为此,作者提出 CityLearn —— 一个基于 OpenAI Gym 的开源强化学习仿真环境,可让研究者方便地实现、共享、复现并比较不同的 DR 控制算法。该框架模块化、可扩展,支持多种储能与发电设备模型。

introduction

美国建筑能耗占全国电力消耗的约 70%,且城市区域的电力需求不断上升,造成输电压力与电价上涨。需求响应(DR)通过激励机制引导用户调整用电模式,从而削减峰值负荷、提高电网稳定性。 然而,为了让 DR 真正有效,需要智能、分布式的负载协调。如果所有设备同时响应相同信号,可能只是“移峰”而非“削峰”。传统控制方法(如 MPC)虽有效,但需依赖昂贵且精确的物理建模。 强化学习(RL)可以在无模型的条件下,通过与环境交互学习最优策略,从实时和历史数据中自动优化建筑能耗管理。但该领域缺乏统一标准,使得不同研究难以比较。为此,作者提出了 CityLearn —— 一个面向城市级能耗优化的强化学习仿真框架,用于统一测试环境、便于算法比较与复现

CityLearn v2: Energy-flexible, resilient, occupant-centric, and carbon-aware management of grid-interactive communities

· 10 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

Abstract

随着越来越多的分布式能源成为需求侧基础设施的一部分,量化它们在社区规模上提供的能源灵活性非常重要,特别是要了解地理、气候和居住者行为差异对其有效性的影响,以及确定最佳控制策略以加速其在现实世界中的应用。CityLearn 为简单和先进的分布式能源控制算法提供基准测试环境,包括基于规则的、模型预测的和强化学习控制。本文介绍的 CityLearn v2 扩展了 CityLearn v1,它提供了一个模拟环境,利用美国建筑库存数据集的最终用途负载概况来创建虚拟网格交互社区,用于弹性、多代理分布式能源和具有动态乘员反馈的目标控制。这项工作详细介绍了 v2 环境设计,并提供了利用强化学习来管理电池储能系统充放电周期、车辆到电网控制以及热泵功率调制期间的热舒适性的应用示例

一. introduction

V1 版本很牛,RL 也很牛,但是出于一些缺陷我们创建了 v2 缺点: 灵活性有限 —— v1 的场景结构和数据接口固定,难以扩展到新的建筑类型、设备或能源载体; 可扩展性受限 —— v1 的配置较为僵化,不支持多层能源系统或跨区域交互; 可复现性不足 —— 不同研究者在构建实验时往往需要修改底层代码,导致实验结果难以公平比较。 V2 改进点: v2 版本在体系结构上进行了彻底重构,支持模块化设计和多层能源系统建模。研究者可以轻松地定义新的建筑类型、能源设备、价格信号、碳排放约束、以及能源共享机制。此外,v2 引入了统一的配置文件系统和标准化的评测接口,使不同实验能够方便地复现与对比。 通过这些改进,CityLearn v2 旨在成为一个面向未来的研究平台,支持: · 单智能体与多智能体强化学习; · 集中式与分布式控制; · 电力与热能的多能源协同; · 公平、透明的算法评测与结果共享。

AI世界大入门

· 6 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

introduction

这篇文章旨在理解一大堆杂七杂八的,狗屁倒灶的,ai 方向的专用名词,例 AI,NLP,CV,深度学习,强化学习等等等 我相信初学者肯定会对这些名词感到困惑,就如同第一天我在面试时提出的问题: “我就只会数学建模和西瓜皮上的那些算法,好奇的问一下深度学习是啥?” 这个问题对现在的我来说也相当困惑,当然我相信写完这篇文章会让我的理顺这些东西

preliminary knowledge

首先,给我整个 AI 的框架

人工智能(Artificial Intelligence, AI)

├── 机器学习(Machine Learning, ML)
│ ├── 监督学习(Supervised Learning)
│ ├── 无监督学习(Unsupervised Learning)
│ ├── 强化学习(Reinforcement Learning, RL)
│ └── 其他(半监督、主动学习等)

├── 深度学习(Deep Learning, DL)
│ ├── 神经网络(CNN, RNN, Transformer)
│ ├── 自监督学习(Self-supervised)
│ ├── 生成模型(GAN, Diffusion, VAE)
│ └── PINNs / SciML(物理引导模型)

└── 应用领域
├── NLP(自然语言处理)
├── CV(计算机视觉)
├── Speech(语音)
└── 多模态 / 大模型(GPT, Gemini, etc.)

CityLearn experiment

· 25 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

代码路径:https://github.com/zqqqqqqj1110/CityLearn_exp.git

target

比较不同任务配置下,RBC(Rule-Based Control)与 RLC(Reinforcement Learning Control)在能源、排放、峰值与舒适度方面的表现。 数量: 共 17 个任务(单建筑、多建筑、单目标、多目标) 输出指标:

  1. Electricity Cost [$]
  2. Emissions [kg CO₂]
  3. Peak Demand [kW]
  4. Discomfort Penalty [–]

准备环境

创建环境,准备 citylearn 的 conda env

conda create -n citylearn python=3.10 -y
conda activate citylearn

安装 city learn V2

git clone https://github.com/intelligent-environments-lab/CityLearn.git
cd CityLearn
pip install -e . # 源码控制版,仅用于复现
pip install citylearn # 后续试验可以直接用这个下载

AI世界大入门

· 6 min read
zqqqj
super bug engineer 4 nlp,robot,cv,ml and ds

introduction

这篇文章旨在理解一大堆杂七杂八的,狗屁倒灶的,ai 方向的专用名词,例 AI,NLP,CV,深度学习,强化学习等等等 我相信初学者肯定会对这些名词感到困惑,就如同第一天我在面试时提出的问题: “我就只会数学建模和西瓜皮上的那些算法,好奇的问一下深度学习是啥?” 这个问题对现在的我来说也相当困惑,当然我相信写完这篇文章会让我的理顺这些东西

preliminary knowledge

首先,给我整个 AI 的框架

人工智能(Artificial Intelligence, AI)

├── 机器学习(Machine Learning, ML)
│ ├── 监督学习(Supervised Learning)
│ ├── 无监督学习(Unsupervised Learning)
│ ├── 强化学习(Reinforcement Learning, RL)
│ └── 其他(半监督、主动学习等)

├── 深度学习(Deep Learning, DL)
│ ├── 神经网络(CNN, RNN, Transformer)
│ ├── 自监督学习(Self-supervised)
│ ├── 生成模型(GAN, Diffusion, VAE)
│ └── PINNs / SciML(物理引导模型)

└── 应用领域
├── NLP(自然语言处理)
├── CV(计算机视觉)
├── Speech(语音)
└── 多模态 / 大模型(GPT, Gemini, etc.)

按照参差结构来讲,先从最简单的开始吧

1. 应用领域

搜索算法,符号推理这些其实都可以类比到实习中的“搜推广”(搜索推荐广告)算法工程师。这些东西其实都可以归结为应用领域或技术范式。如下所示

名称类别解释
NLP(自然语言处理)应用领域使用深度学习模型(如 Transformer)处理文本
CV(计算机视觉)应用领域使用 CNN 或 ViT 处理图像
Diffusion / GAN / VAE生成模型深度学习中的一种模型类型(生成任务)
大模型(Foundation Model)模型规模/范式基于深度学习(Transformer)的通用大模型,如 GPT、Gemini

2. 机器学习

机器学习就是大部分西瓜皮上的内容了,他的本意就是“让计算机自己去学习”,所以就会自然而言的牵扯到两大类别,即无监督学习和有监督学习,具体含义如下

类型中文含义训练方式示例
监督学习 (Supervised Learning)有标签学习已知输入与期望输出,通过最小化预测误差进行训练分类、回归、图像识别
无监督学习 (Unsupervised Learning)无标签学习在未标注数据中自动提取潜在结构或模式聚类、降维、自编码器
强化学习 (Reinforcement Learning)奖励驱动学习智能体与环境交互,通过试错获得最大累计奖励游戏 AI、机器人控制

对于强化学习而言,这部分会在后续着重介绍(因为我真的不懂)。但是一般而言,按照“想让机器学到什么”的定义,又可如下分类 · 监督学习用于“从已有示例中学习” · 无监督学习用于“理解数据结构” · 强化学习用于“学习行动策略”

3. 深度学习

深度学习是机器学习的一个重要分支,可以理解为使用多层神经网络(Neural Networks)自动学习数据特征的一类方法 换句话说,它依然遵循“最小化误差(loss function)”的思想,但与传统机器学习不同,
深度学习不再需要人手去“提取特征”,而是通过层层网络结构自动完成特征提取与抽象表示

从集合关系上看: 深度学习 ⊂ 神经网络 ⊂ 机器学习 ⊂ 人工智能 例子:

层级学到的特征(以图像识别为例)
第 1 层学到边缘、线条等简单模式
第 2 层学到角点、纹理、局部形状
第 3 层学到眼睛、鼻子等复杂结构
第 4 层及以上学到“猫脸”“汽车”等语义概念

difference between Deep Learning(DL) and machine Learning(ML)

尽管两者的本质都是最小化误差(如 loss function),但核心目的是不同的。ML 的目的是寻找使预测误差最小的参数。(比如在 n 次线性函数中找最优参数,神经网络调整通过 Adam 反向传播调整网络权重)

算法优化目标损失函数举例
线性回归拟合直线MSE(均方误差)
逻辑回归分类概率交叉熵(Cross Entropy)
SVM最大化间隔Hinge Loss
决策树信息增益最大化熵(Entropy)

DL 也确实是继承了这个想法(最小化误差),但它的关键区别在于 “模型复杂度” 和 “特征获取方式”

方面机器学习(ML)深度学习(DL)
特征需要人工提取(feature engineering)网络自动学习特征
模型结构简单模型(线性/树/核函数)多层非线性神经网络
参数规模少(几十~几百)多(百万~数十亿)
优化方法梯度下降、凸优化反向传播 + SGD/Adam
可解释性
数据需求较少巨量数据

其实可以理解为,DL 本质就是神经网络,只是这个网络又大(神经元)又深(多层)。深度学习不只是有神经网络,还包括优化算法、损失函数、正则化、数据增强等。神经网络是模型,深度学习是方法。 最大的目的就是:为了学习特征。区别在于可以更好的处理高度非线形问题

强化学习

说了这么多,终于可以讲强化学习了,强化学习是让智能体(Agent)通过与环境(Environment)交互,并根据奖励(Reward)反馈,学习最优决策策略(Policy)的方法。 需要注意的是,这是一个最大化优化,不是 loss 这样的最小化优化(奖励必然是越多越好)

继续举例五大基本元素

元素英文含义举例(机器人走迷宫)
Agent智能体负责做决策的学习者机器人本身
Environment环境Agent 所处的世界迷宫
State状态(s)当前环境的观测机器人现在的位置
Action动作(a)Agent 可以执行的操作向上/下/左/右移动
Reward奖励(r)环境给的反馈信号到终点+1,撞墙-1

p-code 如下:

for episode in range(N):
state = env.reset() # Agent观察环境(init啦其实就是)
while not done: # 开始训练
action = agent.select_action(state) # 选择一个动作
next_state, reward, done = env.step(action) # 环境给出新的状态和奖励;
agent.learn(state, action, reward, next_state) # Agent根据奖励更新策略
state = next_state

所以,强化学习不是预测一个矢量或标量,他的目的应该是学习一种策略

ps:some cases

领域应用场景说明
游戏AlphaGo、Atari、Dota2通过自我博弈学习最优策略
机器人控制行走、抓取、平衡连续动作空间优化
自动驾驶路径规划、决策控制学习最优驾驶策略
智能电网城市能源优化(CityLearn)控制能耗和储能系统
金融投资组合优化最大化长期收益