文章目录
- 前言
- 一、论文阅读《Interactive Learning from Policy-Dependent Human Feedback》
- 摘要
- Introduction
- Related Work
- Policy-dependent反馈
- Convergent Actor-Critic by Humans (COACH)
- The Advantage Function and Feedback
- Convergence and Update Rule
- Experiment
- Conclusion
- 二、机器学习算法(二)- 口袋算法(Pocket Algorithm)
- 模型介绍
- 算法步骤
- 代码实现
- 三、机器学习算法(三)- 标准线性回归算法(Standard Linear Regression Algorithm)
- 模型介绍
- 算法步骤
- 最小二乘法
- 矩阵分析
- 代码实现
- 总结
前言
This week, I read an article about the technical principle of ChatGPT - one of the algorithms of RLHF,and the article proposes a algorithm Convergent Actor-Critic by Humans (COACH). At the same time, I d learned machine learning algorithms . I learned about the Pocket Algorithm and Standard Linear Regression Algorithm in this week .
一、论文阅读《Interactive Learning from Policy-Dependent Human Feedback》
这是一篇ChatGPT背后的技术原理—RLHF的文章,看这篇文章的目的是为了简要了解chatGPT的运行思路。其中文章引用了许多公式,这里不进行陈述,以了解核心步骤为主,不做深究。
摘要
本文研究了利用正反馈和负反馈对教师互动学习行为进行交流的问题。之前关于这一问题的许多研究都假设,人们对依赖于他们所教授的行为的决策提供反馈,并且与学习者当前的政策无关。论文提出的实证结果表明这一假设是错误的——人类训练者对决策的积极或消极反馈受到学习者当前政策的影响。基于这一见解,我们引入了Convergent Actor-Critic by
Humans (COACH),这是一种从策略相关反馈中学习的算法,它收敛到局部最优。最后,论文证明了COACH可以成功地学习物理机器人的多种行为。
Introduction
许多算法利用了人们倾向于给出反馈的观察结果,这些反馈最好被解释为关于智能体应该遵循的策略的指导,而不是智能体要最大化的数值。然而,这些方法假设反馈模型独立于代理当前遵循的策略。我们提出了实证结果,证明了这一假设是不正确的,并进一步证明了策略无关学习算法受到这一假设影响的情况。根据这一结果,我们提出了一种从依赖于策略的人类反馈中学习的算法——Convergent Actor-Critic by
Humans (COACH)。COACH基于这样一种见解,即优势函数(一个值大致对应于与当前政策相比,一个行为的好坏程度)提供了一个更好的人类反馈模型,捕捉了人类反馈的属性,如收益递减、奖励改进,并赋予0值反馈一个语义意义,以防止遗忘。我们将COACH与其他方法在一个具有模拟反馈的简单领域进行比较。
Related Work
为了建模由人类教授的代理的潜在决策问题,我们采用马尔可夫决策过程(MDP)形式主义。MDP的随机策略π是定义智能体行为的每个状态的动作概率分布,在MDP设置中,目标是找到最优策略π *,当智能体根据π *在每个状态下选择行动时,它使期望的未来折现奖励最大化。
在强化学习(RL)中,智能体与建模为MDP的环境交互,但不能直接访问转换函数或奖励函数,而是必须从环境观察中学习策略。
在这项工作中,以人为中心的强化学习(HCRL)问题是一个学习问题,其中智能体位于MDP描述的环境中,但其中奖励是由人类训练者产生的,而不是从一个固定的MDP奖励函数中产生为了定义这个问题的学习算法,我们首先描述了人类训练者通常如何使用数字反馈来教授目标策略。如果反馈是稳定的,并打算最大化,它可以被视为奖励函数和使用标准的RL算法。将反馈解释为奖励的问题导致了这样一种见解,即人类的反馈更好地解释为对代理行为的评论;例如,积极的反馈大致对应“那是好的”,而消极的反馈大致对应“那是坏的”。
在这里研究的策略依赖反馈在行为分析强化计划中被视为必不可少的(Miltenberger, 2011)。训练师被教导提供收益递减(当智能体采取这些行动时,对良好行动的正反馈逐渐减少)、差异反馈(根据行为的改善或恶化程度,反馈的大小不同)和策略塑造(对改善行为的次优行动提供正反馈,然后在做出改善后提供负反馈),所有这些都是策略依赖的。
Policy-dependent反馈
现有HCRL算法的一个常见假设是,反馈只取决于代理的动作选择的质量。另一种假设是反馈也取决于智能体当前的策略。也就是说,一个行为选择可能会受到更大的奖励或惩罚,这取决于主体通常倾向于选择它的频率。例如,对提高绩效的代理给予更大的奖励,而不是维持现状。
作者称前者为策略无关的反馈模型,后者为策略依赖的反馈模型。
然后用一个虚拟狗跑图的实验,检验 反馈模型是否依赖决策:
参与者被指示训练一只虚拟狗在网格世界中尽可能快地走到黄色目标位置,但不经过绿色单元格。他们还被告知,由于之前的训练,他们的狗在任务中要么“坏”,“好”,要么“好”,并在训练前展示了每种行为的例子。
最后结果表明,正如预测的那样,反馈符号对学习者的策略是敏感的。
Convergent Actor-Critic by Humans (COACH)
在本节中,将介绍 Convergent Actor-Critic by
Humans (COACH),这是一种基于行为批评的算法,能够从依赖策略的反馈中学习。COACH基于这样一种见解,即优势函数是人类反馈的良好模型,而行动者-评论家算法使用评论家的TD误差更新策略,这是对优势函数的无偏估计。因此,代理人的策略可以直接由人的反馈来修改,而不需要批评组件。我们首先定义优势函数及其解释为训练师反馈。然后,给出了COACH的一般更新规则及其收敛性。最后,提出了实时教练,其中包括提供可变量级反馈和在高频决策周期的问题中学习的机制。
The Advantage Function and Feedback
优势函数AΠ:
优势函数描述了在策略π下,与代理的性能相比,动作选择的好坏程度。
优势函数产生的反馈与行为分析中推荐的反馈一致是毫无价值的。因为它被定义为一个行动比其当前策略的改进幅度,所以它会导致不同的反馈。它导致收益递减,因为随着π的改善,改善π的机会减少。事实上,一旦π是最优的,所有基于优势函数的反馈都是零或负的。最后,优势函数反馈引发了策略塑造,因为对于一个行为,反馈是积极的还是消极的,取决于它是否比当前行为有净改善。
Convergence and Update Rule
关于收敛规则 ,论文用到了这一条:∆θ=α∇θρ,θ表示控制智能体行为的参数,α是学习率。
其中:
简单地说,如果训练器选择策略相关反馈ft = Qπ(st, at),我们就得到了一个收敛学习算法,它(局部地)使贴现期望奖励最大化。
同时,论文使用奖励聚合(Knox & Stone, 2009b),解决提供可变大小反馈的接口,以及如何处理稀疏性和反馈时间的问题。在奖励聚合中,训练者从一组离散的反馈值中进行选择,并通过连续给出多个反馈来进一步提高或降低数值。
Experiment
实验部分,论文为了了解不同类型训练师反馈策略下COACH的行为,我们在一个简单的网格世界中进行了受控比较。(这个领域本质上是我们在人类实验中使用的狗领域的扩展版本。)分别从三个算法中进行了实验,每个都维护一个内部数据结构,它使用<s, a, f, s,>形式的反馈进行更新,其中s是状态,a是在该状态下采取的操作,f是从训练器接收到的反馈,s,是产生的下一个状态。
显示了三种算法的改进反馈实验结果:
最后在不断的优化反馈后,COACH表现最好。
Conclusion
在这项工作中,我们提出了实证结果,表明人们在交互式训练范式中给予智能体的数字反馈受到智能体当前策略的影响,并讨论了为什么这种依赖于策略的反馈能够实现有用的训练策略。然后,我们引入了COACH算法,与现有的以人为本的强化学习算法不同,COACH算法在使用策略相关反馈训练时收敛到局部最优。我们证明了COACH在多种反馈策略下的鲁棒学习,最后证明了COACH可以在具有高级训练方法的机器人环境中使用。
二、机器学习算法(二)- 口袋算法(Pocket Algorithm)
上一周学习了机器学习算法中的感知器学习算法(PLA),该算法可以将数据集完美的分成两种类型,但有一个前提条件就是假定数据集是线性可分的。于是在线性不可分的情况下,人们想出了另一种算法弥补这个缺陷–基于感知器学习算法设计了一个可以处理线性不可分的算法——口袋算法(Pocket Algorithm)。
模型介绍
口袋算法(Pocket Algorithm)是一个二元分类算法,将一个数据集通过线性组合的方式分成两种类型。
该算法是在感知器学习算法的基础上做的改进,其核心思想与感知器学习算法的思想一致,也是以错误为驱动,如果当前结果比口袋中的结果好,则将口袋中的结果替换为当前结果,口袋中保持着当前看到最好的结果,最后找到一个相对不错的答案。
算法步骤
口袋算法(Pocket Algorithm) - 其核心思想就是以错误为驱动,逐步修正错误,每次保存最优解,直到超过循环的次数最后停下。
初始化向量 w,例如 w 初始化为零向量
循环 t = 0,1,2 …
找到一个随机的错误数据,即 h(x) 与目标值 y 不符
sign(wtWxn(t)) ≠ yn(t)
尝试修正向量 w,如果更新后的 w 的错误点相对更新前的 w 更少的时,则更新 w,反之进入下一次循环。
wt+1 = wt + xn(t)yn(t)
直到到达设定的最大循环数时退出循环,所得的 w 即为一组方程的解
需要人为定义一个最大的循环次数来作为退出条件,所以口袋算法相对感知器学习算法来说,运行时间会更慢一些。在循环中是随机选取错误点,最后的输出结果在每次运行时也不是一个稳定的结果。
代码实现
- 在数据集中随机生成一条划分线
- 判断该线的错误数量
- 临时更新错误的点的权重
- 新的划分线和旧的划分线比较,若新的错误点更少则永久更新权重,反之进入下一次循环
import numpy as npdef errorIndexes(w, X, y):"""获取错误点的下标集合args:w - 权重系数X - 训练数据集y - 目标标签值return:errorIndexes - 错误点的下标集合"""errorIndexes = []# 遍历训练数据集for index in range(len(X)):x = X[index]# 判定是否与目标值不符if x.dot(w) * y[index] <= 0:errorIndexes.append(index)return errorIndexesdef pocket(X, y, iteration, maxIterNoChange = 10):"""口袋算法实现args:X - 训练数据集y - 目标标签值iteration - 最大迭代次数maxIterNoChange - 在提前停止之前没有提升的迭代次数return:w - 权重系数"""np.random.seed(42)# 初始化权重系数w = np.zeros(X.shape[1])# 获取错误点的下标集合errors = errorIndexes(w, X, y)iterNoChange = 0# 循环for i in range(iteration):iterNoChange = iterNoChange + 1# 随机获取错误点下标errorIndex = np.random.randint(0, len(errors))# 计算临时权重系数tmpw = w + y[errors[errorIndex]] * X[errorIndex]# 获取临时权重系数下错误点的下标集合tmpErrors = errorIndexes(tmpw, X, y)# 如果错误点数量更少,就更新权重系数if len(errors) >= len(tmpErrors):iterNoChange = 0# 修正权重系数w = tmpwerrors = tmpErrors# 提前停止if iterNoChange >= maxIterNoChange:breakreturn w
参考:文章
三、机器学习算法(三)- 标准线性回归算法(Standard Linear Regression Algorithm)
元分类算法——感知器算法、口袋算法,这些算法解决的都是分类的问题,但是现实中更多的是例如预测某一地区的房价、银行该给某个人多少额度的信用卡、今天应该买卖多少股票等等这种最后得到一个具体数值结果的问题,这种类型的问题在机器学习中统一被称为回归问题。
模型介绍
回归分析在统计学中是研究多组变量间关系的方法,在机器学习中也是应用广泛,其中一种算法模型 - 线性回归1(Linear Regression)
在一堆二维或者多维的的数据中寻找一个超平面(单变量时为一条直线,两变量时为一个平面),去拟合这些样本点。线性方程如下:
(1)超平面函数方程一般形式
(2)同感知器算法一样,将 b 看作第零个 w,将超平面函数方程简写成两个向量 w 和 x 的点积的形式
y = b + w1x1 + w2x2 + ··· +wmxm = wTx
或者多维的超平面
算法步骤
假设有 N 个样本点 { x , y } { x, y }{x,y},每个样本点的自变量有 M 个 { x1, x2 , . . . } ,则可以定义所有样本点与这个超平面的距离之和为拟合这些样本点的代价函数。
这里用到了两个新的知识点:
矩阵求导,最小二乘法
最小二乘法
在工程应用中,我们经常会用一组观测数据去估计模型的参数,模型是我们根据先验知识定下的。比如我们有一组观测数据( xi , yi )(一维),通过一些数据分析我们猜测y和x之间存在线性关系,那么我们的模型就可以定为:f ( x ) = k x + b
这个模型只有两个参数,所以理论上,我们只需要观测两组数据建立两个方程,即可解出两个未知数。类似的,假如模型有n nn个参数,我们只需要观测n nn组数据就可求出参数,换句话说,在这种情况下,模型的参数是唯一确定解。
但是在实际应用中,由于我们的观测会存在误差(偶然误差、系统误差等),所以我们总会做多余观测。比如在上述例子中,尽管只有两个参数,但是我们可能会观测n nn组数据( x1 , y 1 ) . . , ( x n , yn ),这会导致我们无法找到一条直线经过所有的点,于是求出近似解,使得模型能在各个观测点上达到“最佳“拟合。
最后证明“误差的平方和最小”估计出来的模型是最接近真实情形的。
矩阵分析
代码实现
import numpy as np
def linear(X, y):"""线性回归args:X - 训练数据集y - 目标标签值return:w - 权重系数"""# pinv 函数直接求矩阵的伪逆矩阵return np.linalg.pinv(X).dot(y)
总结
本周阅读了论文《Interactive Learning from Policy-Dependent Human Feedback》,这就一篇关于chatGPT的基础文章,其内容大意是讲述了Convergent Actor-Critic by Humans (COACH)从人类反馈中学习强化学习的其中一个算法Convergent Actor-Critic by Humans (COACH)。证明了COACH算法在使用策略相关反馈训练时收敛到局部最优以及COACH在多种反馈策略下的鲁棒性。同时对学习机器学习的算法也有了新的进展和认识,知道了理论知识的重要性,一个模型是如何一步一步被推出来的。本周学习了口袋算法(Pocket Algorithm),和标准线性回归算法(Standard Linear Regression Algorithm),下周将继续对机器学习的其他算法进行学习。