关于AI的思考
我认为人工智能技术的普及带来的最主要的影响就是生产力的更新换代。首先先回顾一下历史上的历代的工业革命。第一次工业革命由纺纱机的发明开启。机械首次进入人们的视野中。机械带来了纺织业生产力的极大提升,因此让人类社会步入了新的阶段。而第二次的科技革命和电气革命以及第三次的信息革命,同样也是由新的科技带来生产力质的飞跃,从而促成人类社会的进步。而现在,AI显然就是下一个带来生产力革命的技术。
这里我主要谈谈在经济领域AI带来的影响。
在经济领域,AI正逐渐成为增长的重要驱动力。通过自动化和优化工作流程,AI帮助企业提高效率、降低成本,并创造新的商业模式。例如,AI算法能够分析消费者行为,预测市场趋势,从而帮助企业制定更有效的市场策略。最典型的例子,就是现在抖音的推荐算法。抖音的推荐算法基于强化学习框架,能够根据用户的浏览记录,精确推送相关内容,并且能够引导用户关注它想要推荐的带货产品。现在抖音的推荐算法已经列入我国不可出口清单,可见其含金量。这种推荐算法极大地提高了抖音带货的浏览量和热度,助力现在的网红经济发展。
此外,机器学习技术也在金融服务领域大放异彩,它能进行复杂的数据分析,提供精准的信 ...
Concurrent Programming —— Thoughts about locks
关于并发中锁、条件变量和信号量的一些随想锁——原子性的开始众所周知,在并发中,锁是最简单的并发源语,也是最简单的消除数据竞争维护原子性的方法,你甚至只需要使用一对语句:
123pthread_mutex_lock(&lock);//CSpthread_mutex_unlock(&lock);
就可以维护中间的代码的原子性了。
但是如果是朴素的自旋锁的实现会带来一些问题:
如果多个进程同时尝试抢占一把锁,那么会让多个CPU进入自旋状态,浪费CPU资源
某些线程被阻塞,继续运行的条件可能需要其它很多线程共同达成,只使用自旋锁这个CPU在很长时间内都不能得到利用那么如何解决第一个问题呢?
最朴素的思路就是,先尝试获取这个锁,如果获取成功了,就直接进入临界区,如果不成功,就sleep 一段时间,这段时间甚至可以是在不超过上限的情况下指数递增的,如果超过上限就重置为1。这个自旋锁的改进版本在某种意义上可以提高CPU的运行效率,但是仍然是不够的。比如某个线程有明确的唤醒条件,那么可不可以直接让他睡到这个条件达成再唤醒呢?
答案是可以的,我们可以引入条件变量这个并发源语
条件变量 ...
DDPG
Basic Terminology评估策略的方法在使用折扣因子的基础上,记为策略 的性能指标
关于 的不严谨的估计首先,对于某一个状态 被转移到这个状态的概率是那么对于 就可以做出一个不严谨的估量,即:
策略梯度定理策略梯度定理阐释了如何计算策略的梯度,即:注意这里求梯度的时候是没有考虑 这个部分贡献的梯度的,具体的原因在我的另一篇文章Policy Gradient Methods中有提到,因为这里只关心梯度的方向,并不关心梯度的大小。
Actor-Critic 模式在上面的评估函数中,可以发现,想要统计出 并不是一件很简单的事情,如果使用蒙特卡罗方法采样来获取的话,会需要大量的时间来采集数据,这是不希望看到的。所以我们选择再造一个网络,来拟合 函数,以对这个策略作出评估。Actor 和Critic的分工如下:
Actor:负责根据策略梯度定理调整参数 的值来更新策略
Critic:学习一个Q的函数来拟合当前的价值函数,即拟合 此时更新的公式变成了:
Off-policy Actor-critic模式如果此时的行动策略 不等于当前的评估策略,即 在这个情况下,策 ...
DQN改进
Article Reading本次阅读三篇论文,分别是 1509.06461 1511.05952 1511.06581,分别是优先经验回放、Double DQN 和 Dual DQN
Double DQNDouble DQN主要解决的问题是在贪心策略做最大化的时候出现的最大化偏差问题,什么是最大化偏差呢?
最大化偏差(过估计)正常情况下理想的最优策略下的状态价值函数和动作价值函数应该满足:即使这里的估计是无偏的,即满足也不代表它的二阶矩就是0(证明是把上面那个式子里面的正的部分和负的部分分开再求平方),假设在这种情况下,会有:(平均值原理)这个下界是紧下界。
最大化偏差问题会导致很多模型的训练出现训练不稳定或者就训练不起来的情况。
Double DQN如何解决最大化偏差问题Double DQN选择使用两个不同的网络来进行学习。首先是有一个 Target 网络用于对当前的动作进行评估,再用一个 Q-Network 来学习当前的价值。每过一段时间就用 Q网络来更新target网络。
这个时候的更新表达式如下:
$$T_t^{\mathrm{DoubleQ}} \equiv R_{t +1 ...
Tmux 使用简介
tmux简介tmux是链接服务器跑服务的神器,可以在取消链接之后继续运行想要运行的程序
使用流程安装tmux使用
1sudo apt install tmux
即可
新建窗口1tmux new -s NAME
即可创建一个名为name的session,然后在里面运行你的指令即可
然后就可以直接关掉这个链接了
退出窗口如果想要退出当前的tmux session 可以先按下 ctrl + B 然后松开(这个时候没有变化是正常的)然后按下 D 就可以在不终止当前任务的情况下退出了。如果想直接终止这个任务,可以按下 ctrl + B + D 即不松手就行了。
关闭session使用命令
1tmux ls
查看当前在运行的session,使用
1tmux kill-sesion -t NAME
关掉session就可以了
恢复session使用命令
1tmux a -t NAME
可以恢复一个session
Gymnasium Environment Configuration
强化学习环境——gymnasium配置注意,现在已经是2024年了,建议使用最新的gymnasium而不是gym
配置正确的python版本现在是2024年的3月20日,目前的gymnasium不支持python3.12,建议使用conda创建一个3.11的环境:
1conda create -n RL python=3.11
然后进入这个环境中:
1conda activate RL
如果使用的是Windows下的powershell,此时你的终端最前面没有显示例如:
1(RL) xxx@xxx.xxx.xxx.xxx:~
而是:
1xxx@xxx.xxx.xxx.xxx:~
的话,建议先运行:
1conda init
然后使用
1conda info
查看一下现在的环境是不是激活成功了
安装gymnasium这里有两个坑,第一个是直接安装 gymnasium 只是装了个白板,里面啥也没有,需要安装的是 gymnasium[atari] 和 gymnasium[accept-rom-license]记住,两个都要装
第二个坑是不知道为什么用conda install没有效果,所 ...
DQN
Article Reading本次DQN我选择阅读的是1312.5602这篇论文
Motivation
过往的方法在处理高维度的输入,例如视频和音频的时候略显乏力,往往依赖人工选取特征,但是可以通过卷积神经网络、多层感知机等方式直接利用神经网络来提取高维的特征。
深度学习里面往往需要大量的有标签的样本,但是RL有延迟奖励问题,一个动作的价值可能需要一个Episode结束之后才能确定
深度学习里面有一个重要假设是独立同分布采样,但是RL里面的数据往往是有很高的相关性的,不符合该假设
Idea如何处理图像输入前面套一个CNN对图像进行卷积处理,提取图像的特征进行有效的降维处理
如何处理样本量少的问题使用经验回放数组的方法,即创建一个buffer,每次获得一个状态-动作-价值-下一状态组的时候,不仅是运用这个组来进行训练,更是把它放到buffer里面,每次训练的时候从里面采样出一个batch,利用batch来进行训练
Limitation单神经网络训练不稳定在13年的原版论文里面,使用的是一个神经网络,没有分为target网络和Q网络,导致在训练的时候loss上下波动比较大,reward上 ...
Policy Gradient Methods
Background本书前面的部分主要讲的都是学习价值函数的方法,这里提出一种直接学习策略的方法,这里把策略记作一个带有参数的,即
Advantage优点之一是可以学习一个确定性的算法而不像 - greedy 的策略那样每次都有一个较小的概率选择非最优解。同时,基于价值函数学习的方法里面如何选择初始值和如何进行递降都是需要考虑的问题。
Policy Gradient在直接学习策略的时候,正确地更新参数 是十分重要的,所以需要想办法求出评估量对于 的梯度,此处定义:对于分幕式任务,在经过推导(RLBook2020 P325)后,得到:
这里虽然只找出了正比关系,但是在梯度下降的时候,只关注梯度的方向,并不关心梯度真正的值是多少
Monte Carlo Policy Gradient根据上面的式子,写成期望的形式:那么就可以得出梯度下降的公式:其中 是对于真实动作价值函数的逼近。上面的公式成为 all-actions methods 因为它包含了该状态所有可能的动作 下面介绍另一种强化学习版本的。
这里的 是依据策略 在 时刻采样出一个动作,第一个等号相等的原因是因 ...
On-policy Control with
Approximation
Episodic Semi-gradient Control这里和上一章的公式的区别只是把状态价值函数改成了动作价值函数,即:对于一步的Sarsa算法来说,上面的公式应该写为:其算法流程图如下:而对于 步的Sarsa来说,和前面也没有太大的差别:只是这里的价值函数更新的时候变成了以n为周期的。
平均回报对于可以分为一个个Episode的任务,前面的折后回报是可以处理的,但是对于连续型任务是不够的,定义一个策略 的平均回报 如下:那么这个时候的状态价值函数、动作价值函数和最优状态价值函数和最优动作价值函数都可以写成一个新的形式:最优的就是取最大值就行了。
注意到上面的式子里面没有折扣率 了,因为在连续型任务中,先后出现的价值在重要性上没有区别。
在这种定义下的单步Sarsa算法如下:n步Sarsa的算法如下图所示:
On-policy Prediction with Approximation
提出背景由于某些问题的空间维度可能会很高,直接使用tabular的方法来保存所有信息是不现实的,所以考虑换一种方法来表示价值函数,即使用 来近似替代原来的状态价值函数
均方误差为了评估近似替代版本的价值函数和原始的价值函数之间的距离,这里提出均方误差 其定义为:
这其中的 是状态的分布,是状态 出现的概率
SGD和Semi-gradient MethodsSGD 的更新公式在SGD中,选择直接使用梯度下降的方法来更新参数 ,其更新公式如下:但是为了泛用性,这里通常使用样本 来代替真正的价值函数 例如 可能是带有噪声的版本或者直接采样取到的样本,基于蒙特卡洛的随机梯度下降流程图如下:
半梯度方法以 为学习目标,其更新公式是:半梯度学习方法减小了误差,在梯度下降的学习方法里面,本身的更新会受到weight的影响,导致算出来的不是真正的梯度。
线性方法线性方法就是使用线性函数来拟合价值函数。即定义:在使用线性函数的时候,其实可以不使用梯度下降的方法,因为这个时候可以采用最小二乘法求出精确的最优解。
