精华内容
下载资源
问答
  • 函数逼近
    千次阅读
    2020-12-15 20:18:51

    在这里插入图片描述
    1、曲线拟合:又称为函数逼近,也是求近似函数的一类数值方法,它不要求近似函数在节点处与函数同值,即不要求近似曲线过已知点,只要求尽可能反映给定数据点的基本趋势。

    2、假设a_0,a_1已经确定,y_i* =a_1x+a_0是由近似函数得到的近似值,它与观测值y_i之差成为残差,残差的大小可以作为衡量近似函数好坏的标准。

    在这里插入图片描述
    常用的准则有以下三种:
    (1)使残差的绝对值之和最小,即∑|δ_i|=min;
    (2)最佳一致逼近——使残差的最大绝对值最小,即max|δ_i|=min;
    (3)最佳平方逼近——使残差的平方和最小,即∑δ_i2=min;

    3、数据拟合的最小二乘法:根据给定的数据组(x_i,y_i),选取近似函数形式,即给定函数类H,求函数φ(x)∈H,使得下式最小
    在这里插入图片描述
    这种求近似函数的方法称为数据拟合的最小二乘法,函数φ(x)称为这组数据的最小二乘函数。

    4、多项式拟合——
    在这里插入图片描述
    这是最小二乘拟合多项式的系数a_k(k=0,1,…,m)应满足的方程组,称为正则方程组或法方程组,该方程组存在唯一解,且解所对应的多项式必定是已给数据组(x_i,y_i)的最小二乘m次拟合多项式。

    5、指数拟合——如果数据点的分布近似指数曲线,可以考虑用指数函数y=beax去拟合数据,按照最小二乘原理,a、b的选取应使得F(a,b)=∑(y_i - beax_i)2最小。由此导出的正则方程组是关于参数a,b的非线性方程组,称为非线性最小二乘问题。
    求解时作变换У=ln y,则有ln y = ax + ln b,先求出数据组(x_i,ln y_i)的最小二乘拟合直线У = a_0 + a_1x,取指数即得数据组(x_i,y_i)的最小二乘拟合指数y = ea_0+a_1x= ea_0 ea_1x。同理,分式线性拟合求解时作变换У=1/y=ax+b,然后取倒数得到原数据组最小二乘拟合函数。

    6、求数据组的最小二乘拟合函数的步骤
    (1)由给定数据确定近似函数的表达形式,一般可以通过描点观察或经验估计得到;
    (2)按最小二乘原则确定表达式中的参数,即由偏差平方和最小导出正则方程组求解得到参数,一些简单的非线性最小二乘问题通常需要先作变换将问题化为线性最小二乘问题再求解。
    【注】实际问题中由于各点的观测数据精度不同,常常引入加权方差,即确定参数的准则为使得∑ω_iδ_i2最小,其中ω_i为加权系数。

    7、函数内积——设f(x)、g(x)是区间[a,b]上的连续函数,定义f与g的内积为
    在这里插入图片描述
    函数正交——设f(x)、g(x)是区间[a,b]上的连续函数,若f与g的内积为0,则称f与g在区间[a,b]上正交。

    8、正交函数系——
    在这里插入图片描述
    正交多项式系——正交函数系中函数均为代数多项式。

    9、勒让德(Legendre)多项式——
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    10、函数的最佳平方逼近:设f(x)是区间[a,b]上的连续函数,求多项式φ(x)=a_0+a_1x使得下式最小

    在这里插入图片描述
    即求a_0,a_1使得

    在这里插入图片描述
    φ(x)称为f(x)在区间[a,b]上的一次最佳平方逼近多项式。

    11、m次最佳平方逼近多项式
    在这里插入图片描述
    在这里插入图片描述

    更多相关内容
  • 吉林大学函数逼近理论的教学讲义
  • BP神经网络有很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等 代码实现的内容:要求设计一个BP网络,逼近以下函数g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。得出信号的频率与隐层节点之间及隐层...
  • 笔者尝试用通俗的语言,从函数逼近论的角度来阐释深度神经网络的本质。山于笔者的主要研究领域为计算机图形学,而非人工智能领域,因此本文仅仅为笔者从外行的角度对基于DNN的深度学习的粗浅理解,而非人工智能领域...
  • 本例是一个简单的利用BP神经网络进行函数逼近的Matlab源码 隐含层神经元数目为100 输出层神经元数目为2 设定转移函数:tansig(反正切),与默认的函数(sigmoidal)效果一样好 在输出层选择一个线性函数,所以选择...
  • 具有SARSA函数逼近的山地车 该存储库包含两个项目: 使用具有线性函数逼近的SARSA解决山地车问题。 使用Actor Critic解决连续山地车问题。 山地车是最流行的强化学习测试环境之一。 特工必须学习利用滚下山坡而...
  • 基于BP神经网络的函数逼近的MATLAB实现-基于BP神经网络的函数逼近的MATLAB实现.rar 基于BP神经网络的函数逼近的MATLAB实现
  • Matlab中用RBF网络逼近非线性函数-RBF网络用于函数逼近.rar 这是一个用RBF网络逼近非线性函数的实例,希望对大家有所帮助。 所含文件: 20090630152009375.jpg 结果: ...
  • 函数逼近的MATLAB代码

    2017-03-15 13:47:14
    里面包括PADE逼近,dff等一系列逼近方法
  • 基于MATLAB仿真软件,给出了一个基于模糊系统的函数逼近实例,可以根据该实例,完成相应的函数逼近仿真
  • rbf函数逼近算法

    2018-05-17 13:11:03
    用于函数逼近的rbf的 matlab代码,有 结果图和 实验报告,可运行
  • matlab神经网络逼近函数不确定性,simulink中实现,可用于实现非线性控制中的未知函数逼近问题。
  • 使用DNN逼近WMMSE算法,得到很好的结果
  • 基于Matlab实现函数逼近.pdf
  • 具有反向传播的神经网络 - 函数逼近示例
  • 基于神经网络,通过采集样本数据研究了函数逼近问题,并就神经网络性能指标在该函数逼近过程中的影响进行了分析。研究结果表明,在大量合理的输入输出数据存在时,神经网络可以对未知函数进行无限的逼近。
  • 计算方法第三章函数逼近与快速傅里叶变换.ppt
  • 文章目录前言一、函数逼近1.背景2.定义2.相关知识3.适用情况4.函数逼近二、万能逼近定理1.定义2.Weierstrass逼近定理2.如何选择逼近函数3.最小二乘法三、函数逼近之最小二乘法1.逼近问题2.最小二乘法最小二乘法学习...

    因为精力有限加上涉及的内容太多,无法一次性写完,后续会持续更新~

    前言

    在我因为要为新项目对新技术进行攻克的时候需要做相关实验,但是实验环境并不是在理想环境下,也没 法办到理想的条件下,我得到的实验数据往往伴随着误差,这个时候对实验数据进行分析的时候就会导致无法很好得到一个方程来表达这条曲线,所以因为需要使用函数逼近和曲线拟合。

    一、函数逼近

    1.背景

    函数逼近论,英文approximation theory of functions,它是解决函数的近似表示问题。

    2.定义

    函数逼近:

    用简单函数近似代替给定函数的值

    逼近和拟合的区别:

    逼近是用连续函数”逼近“连续函数;
    拟合指的是用连续函数”拟合“离散数据(某种意义上拟合就是从逼近来的)

    逼近(拟合)和插值的区别:

    逼近(拟合)并不要求获得的函数通过已知点,只要尽量接近。拟合是整体接近
    插值要求获得的函数必须经过已知点,插值是局部限制

    曲线的拟合和插是逼近函数的基本方法:

    适用情况:已知函数很复杂很难求解,所以可以用简单的函数去逼近

    2.相关知识

    研究两个变量之间的关系有相关关系和函数关系。
    函数关系是两个变量之间是一种确定性关系。相关关系是一种非确定性关系,即相关关系是非随机变量与随机变量之间的关系。
    函数关系是一种因果关系,而相关关系不一定是因果关系,可能是伴随关系。
    函数关系与相关关系之间有密切联系,在一定条件下可以互相转化。
    线性回归分析:对具有相关关系的两个变量基础上,对于性质不明确的两组数据,可以先做散点图,根据散点图去观察它们的关系和关系的密切程度,然后再进行相关回归分析。
    对散点图的数据进行求回归直线方程,再散点图大致呈线性时,求出回归直线方程才有实际意义。

    3.适用情况

    现在比较火热的关于人工智能、深度学习、在做一些实验处理实验数据时候是需要用到函数逼近和曲线拟合的。
    当我们得到的数据是具有规律的,自变量和因变量集合之间存在对应关系,可以通过函数映射表示。
    但是由于一些函数公式很复杂,所以即使能得到表达式但是不利于计算和分析数据,尤其这些数据里面可能害存在一定的误差。这时候通过实验得到的离散的数据点,对这个数据进行统计分析,被称作数据拟合(data fitting),也成为回归分析(regression analysis)。

    如果数据点都能严格通过函数,则求解函数的问题被称作插值问题。插值公式为

    y=f(x)

    但是因为实验数据存在误差,所以这时候就是逼近问题了,而逼近问题则是要求函数反映这些样本点的趋势,即函数靠近样本点且误差在某种度量意义下最小,则记它在某个样本数据点的误差为:

    m=y-f(x)

    对误差向量进行记录,逼近问题就是要求误差向量的某种范数最小,一半采用欧氏范数作为误差度量的标准(因为容易计算)求极小化问题。
    从着三幅图其实可以明显的观察到,中间的插值函数的图的函数的线条是经过每个数据点的,但是逼近函数的函数图的数据点明显是在函数的折线图附近
    无论是插值还是逼近,最主要的我呢提是函数f的类型的选择和表示问题,我认为尤其是逼近函数尤其明显,因为逼近函数不要求一定要通过每个数据点,所以允许和数据点之间存在误差,而这个误差可以很多,所以因此选择适合的函数关系,我认为是逼近问题里的重点和难点。

    4.函数逼近

    在第三点的最后提出的关于函数的表示是函数逼近的重点和难点问题,在这一块我们将对它进行简单了解。
    函数逼近的条件是已知一个函数g(通过观测数据可得到),然后根据这个函数寻找一个函数f,这个函数g在某种意义下是已知函数的最佳近似表示,所以函数f可以成为逼近函数。
    而函数逼近问题就是求出这个逼近函数f和已知函数g之间的误差值。而逼近函数f可以选择不同的函数类型、定义等。逼近函数类可以在不同的函数空间有多种选择,常用的函数类有:

    多项式函数类
    三角多项式类
    有理分式集-有理逼近(代数多项式构成)
    样条函数集-样条逼近(按照一定条件定义)
    径向基函数(RBF逼近)
    由正交函数系的线性组合构成的(维数固定的)函数集

    二、万能逼近定理

    1.定义

    在函数逼近论种,如果有一组函数成为一组”基“函数,需要满足一些比较好的性质,比如光滑性、线性无关性,权性(所有基函数和为1),局部支集、完备性、正性、凸性等。完备性是指该组函数的线性组是否能够以任意的误差和精度来逼近给定的函数。所以对于多项式函数类,我们可以用”万能逼近定理“.

    2.Weierstrass逼近定理

    定义:
    对在区间[a,b]上的任意连续函数g,及任意给定的

    必存在n次代数多项式
    在这里插入图片描述

    使得
    在这里插入图片描述

    f(x)指的就是逼近函数,Weierstrass逼近定理表明,只要n次数足够高,n次多项式就能以任何精度逼近给定的函数。具体的构造方法有Bernstein多项式或Chebyshev多项式等,这里不详细展开。
    类似地,由Fourier分析理论(或Weierstrass第二逼近定理),只要阶数足够高,阶三角函数就能以任何精度逼近给定的周期函数。这些理论表明,多项式函数类和三角函数类在函数空间是“稠密”的,这就保障了用这些函数类来作为逼近函数是“合理”的。

    3.如何选择逼近函数

    选择什么函数类型作为逼近函数类,取决于逼近函数本身的特点、逼近问题的条件和要求等。
    但是在确定逼近函数类型后,但是确定合适的次数和阶数也很重要,因为如果次数偏小,则会欠拟合,如果次数偏多,则会过拟合,如下图所示:
    在这里插入图片描述
    减缓过拟合方法有:去除样本种的噪声(数据去噪-)、增加样本点数据量(数据增广)、简化预测模型、获取额外数据进行交叉验证、对目标函数进行适当的正则化等。
    选择拟合函数的数学模型(即逼近函数类及其阶数),需要通过分析确定若干歌模型后经过实际计算,比较和调整最后选择到较好的模型。而这个不断的试验和调试的过程被成为调参,

    ps,逼近函数有一个叫”表达能力“的概念,就是函数的未知参数于样本点个数的差,称为自由度,如果未知参数越多,则表达能力越强,在实际拟合问题种,逼近函数的拟合能力并非越强越好,因为只关注样本点处的拟合误差的话,非常强的表达能力会使样本点之外的点的函数值于我们的期望值偏离更多,反而降低函数的预测能力,产生过拟合。

    4.最小二乘法

    条件:已知逼近函数类型、次数n;
    设:在这里插入图片描述
    关于最小二乘法一般的方法是给定一组样本点数据,要求在基函数种找到一个函数f使得误差的模的平方最小。则就是平方逼近了。(另外有一种类型叫做一致逼近)
    可以在误差项里加歌权,表示不同点处的数据比重不同,这个被称作加权最小二乘法(WLS)。

    针对选择逼近函数适合会遇到的过拟合或者欠拟合的问题,可以选择选取较多的基函数和较高的次数,通过稀疏优化来选择(学习)合适的基元函数,这被称作稀疏学习。基函数和稀疏系数可以通过优化学习得到,被称作字典学习。

    三、函数逼近之最小二乘法

    1.逼近问题

    首先,先对自己提问,如果要对数据的点进行处理,把它转换成函数,那那些不在估计的函数方程上的点根据什么去选择它,让它的函数表示能够尽量接近呢?
    这时候就有两种想法:
    第一种,一致逼近,就是它最大的偏差不超过多少数值;
    第二种,平方逼近,平方和不超过。

    设基函数为y(x),逼近函数为f(x),则
    一致逼近的公式为:
    在这里插入图片描述
    平方逼近的公式为:
    在这里插入图片描述

    2.最小二乘法

    首先,已知一个数据集(xi,yi),(i=1,2…,m>>n);根据这个数据集构造一个近似函数s(x)去逼近所求函数y=f(x),就是用连续函数去拟合离散函数。
    所以根据这个就可以思考如何去求得的最主要的两个问题,选择的函数类型是什么?怎样才算是尽可能的逼近?

    1.怎样才算是尽可能的逼近?
    让拟合函数值可以和实际测量值的误差越来越小
    2.如何让所有偏差全部累积?
    最佳平方逼近就由此可得,直接用差值累积的话可能差值有正有负,这样会导致正负抵消,通过这个来判断是不合理的,所以因此引入了平分累积。对平方进行累加作为衡量标准。

    在这里插入图片描述
    红色部分代表着逼近函数,蓝色部分则是你测得数据集得到的基函数。
    3.如何选择函数?
    可以选择多项式,那它的系数则是要确定的值。
    在这里插入图片描述
    为了能够有统一的函数表达式来作为函数逼近的通用表达式和最小二乘法的计算公式,来解决一般性的连续函数的逼近问题。所以引入了线性无关函数族和内积空间。
    在这里插入图片描述
    在这里插入图片描述

    还可以使用权函数,可以往最小二乘法里面加入权重,
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    右边等式可以看作:两个函数的每个取值点的乘积的加权求和。把它连续化可以得到如下函数:
    在这里插入图片描述
    内积空间的性质:在实数领域,内积就是两个向量的点乘。
    所以在实数集中向量x和y定义内积:(x,y) = x1y1+…,xnyn.

    关于权函数的数学定义,
    将两个函数内积,乘以权函数,这个就是内积空间:
    在这里插入图片描述
    在这里插入图片描述
    这样就可以转换成矩阵,正规方程组:
    在这里插入图片描述
    最小二乘法本质是优化方法。

    函数的最佳平方逼近,可以将函数的最佳平方逼近,扩展到连续函数的一般多项式的函数逼近问题 。
    在这里插入图片描述
    图上的矩阵为希尔伯特矩阵,但是它是病态矩阵,所以在n>3的情况下会不再可靠,同样的问题在最小二乘法也会出现。 当x的次数过高会偏差会变大,所以可以利用正交函数族来解决。
    正交函数族,如果两个函数在[a,b]区间内积为0,则称f(x),g(x)在[a,b]上带权正交。
    因此引入了正交多项式,有三个性质:

    1. 线性无关
    2. 零点都是实的,相异的,全部在(a,b)内部
    3. 任意相邻3个多项式有如下关系:
      在这里插入图片描述
      在这里插入图片描述
      先有多项式后有表达式,勒让德的正交多项式有三个性质:正交性,奇偶性,递推关系。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      切比雪夫多项式性质:递推关系、正交性、奇偶性
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    四、函数逼近的插值和曲线拟合的区别

    插值:就是给定一些点,要求出一个简单函数,使得该简单函数通过所有点,或者更进一步,要求简单函数的一阶、二阶导数等于某些值或者分段插值时在分段点的左右一阶、二阶导数相等,或者还有其他条件等等。

    函数逼近:一直原函数的情况下,找一个简单函数逼近原函数,使得在定义域上的某个点的误差达到最小(这个点时误差达到最大值的点)。

    曲线拟合:原函数未知,给定原函数的若干点,在某个简单函数空间找出使得总误差(根据不同定义有不同的误差距离的衡量,一般是均方误差)最小的那个简单函数,而且这个函数要根据特定的问题设计特定的形式。

    五、数据增强

    前言:因为我的实验数据偏少,即使我学了前面的对函数逼近可以利用的插值和曲线拟合的方法,但是因为数据量少的原因可能会导致我得到的函数会产生很大偏差,可能会产生过拟合问题。实验数据集偏少的原因让我也无法采用稀疏矩阵的方法去优化学习,所以因此我发现了数据增广的方法。

    数据增强,英文data augumentation,数据增强主要是为了减少网络的过拟合现象,对训练图片进行变换可以得到泛化能力更强的网络,更好的适应应用场景。
    数据增强分为两类:线下增强(offline augmentation)和线上增强(online augmentation)。
    线上增强事先会在数据集上执行所有转换,完成后增加数据集大小,适用于较小的数据集。
    线上增强是在读取数据后再内存中进行转换,便于处理大规模的数据集,这依赖于强大的CPU处理能力。
    数据增广就是里哦用各种操作例如拉伸、旋转、翻转、裁切、填充、遮挡、变色、变对比度、加噪声等使模型学习到更多的”本质“特征,忽略”无关特征“,这是为了使模型获得更好的泛化性能,就抑制过拟合现象。

    学习和参考文献

    什么是深度学习
    这个我只看了前部分,因为我的数据集含量是很少的,是没法做训练集的,我只是想通过有限的数据集去推测歌大体的逼近函数,从而减少误差,达到我想要的功能。我大体看了下后面的,简单总结我对这个文章大体的内容是关于关于深度学习、函数逼近和曲线拟合的问题,然后利用统计学的回归模型对数据的统计进行分析。这里最主要是在通过学习方法选择好合适的逼近函数类型。可以根据稀疏学习的方法,选择合适的样本数据点,就是选择合适的基函数从而可以选择更好的逼近函数,这样避免了过拟合和欠拟合问题。

    参考学习视频

    函数逼近&&插值、函数逼近&曲线拟合的区别

    如何进行数据增广

    数据增长魔法

    展开全文
  • 几种用于非线性函数逼近的神经网络方法研究.pdf
  • 基于BP神经网络的函数逼近及MATLAB仿真.pdf
  • 用于计算连续函数逼近。程序包含三种方法:用Legendre多项式作三次最佳平方逼近,用Tchebyshev多项式截断级数的办法以及使用插值余项极小化的方法。代码清晰,注释简明,方便数值分析学习使用。
  • 基于BP神经网络的函数逼近(不使用任何工具函数)
  • 1,线性逼近 1.1,基本原理 ...若状态空间的维数很大,如围棋(个状态空间),此时精确获取各种和几乎不可能的,因为既没有足够的内存也没有足够的计算能力,这时候需要找到近似的函数,利用函数逼近的方...

    1,线性逼近 

    1.1,基本原理

    到目前为止,一直假定强化学习任务是在有限状态上进行的,这时的值函数其实是一个表格。对于状态值函数,其索引是状态;对于行为值函数,其索引是状态行为对。值函数迭代更新的过程实际上就是对这张表进行迭代更新,获取某一状态或行为价值的时候通常需要一个查表操作。因此,前面的强化学习算法称为表格型强化学习。

    若状态空间的维数很大,如围棋(10^{170} 个状态空间),此时精确获取各种 V(s) 和 Q(s,a) 几乎不可能的,因为既没有足够的内存也没有足够的计算能力,这时候需要找到近似的函数 V(s,\theta ) ,利用函数逼近的方法对值函数进行表示:

    V(s)=\hat{V}(s,\theta )

    其中,\theta 表示引入的参数,实际通常是一个向量。通过函数近似,可以用少量的参数 \theta 来拟合实际的各种价值函数。

    针对强化学习,近似函数根据输入和输出的不同,可以有以下三种架构:

    • 输入状态 s ,输出为这个状态的近似价值 \hat{V}(s,\theta ) 。
    • 输入状态行为对 (s,a) ,输出当前状态行为对的近似价值 \hat{Q}(s,a,\theta ) 。
    • 输入状态 s ,输出为一个向量,向量中的每一个元素是该状态下一种可能的行为价值 \hat{Q}(s,a,\theta ) ,如 \hat{Q}(s,a_1,\theta ),...,\hat{Q}(s,a_m,\theta ) 。

    在进行值函数逼近时,线性回归、神经网络等和机器学习相关的一些算法都可以拿来使用。根据所选择的逼近函数是线性函数还是非线性函数,值函数逼近又可分为线性逼近和非线性逼近。

    当逼近的值函数数据结构确定时,如线性逼近选定了基函数,非线性逼近选定了神经网络的结构,那么值函数的逼近就等价于参数的逼近,值函数的更新也就等价于参数的更新。也就是说,此时的目的变成了利用试验数据来更新参数值,通过轨迹学习线性函数或神经网络的参数值。

    1.2,线性逼近

    所谓线性逼近指的是将值函数表示为状态或状态函数的变形组合,如:

    \hat{V}(s,\theta )=\theta^Tx(s)=\sum_{i=1}^d\theta_ix_i(s)

    其中,\theta 为参数向量。

    向量 x(s) 称为状态 s 的特征分量。例如描述直升飞机状态的时候,需要描述它的飞行速度、角速度等;或者评估移动机器人的状态时,需要扫描电量、坐标等。

    假设每个状态 s 对应于 k 个数,s=(s_1,s_2,...,s_k),s_i\in R 。则对于这个 k 维状态空间 x_i(s)可以写成:

    x_i(s)=s_j

    上述值函数表示虽然简单,但是忽略了不同维度特征之间的相互作用,如评估直升飞机状态好坏的时候,需要同时考虑坐标和角速度等。因此需要对函数 x(s) 进行扩展,使其不仅能表示状态的特征分量,还能表示一些复杂的函数,如多项式函数、傅里叶函数等。这个时候 \hat{V}(s,\theta ) 还是关于参数向量 \theta 的线性函数,因此还是属于线性逼近的范畴。此时 x(s) 称为状态 s 的特征函数,或者称为基函数。

    (1)多项式基函数:n 阶多项式基特征 x_i(s) 可以写成 

    x_i(s)=\prod_{j=1}^{k}s_j^{ci,j}

    其中,ci,j\in \left \{ 0,1,2,...,n \right \}n 为正整数,称为多项式的阶数。k 为状态 s 的维数。上述 n 阶多项式包含 (n+1)^k 个特征。

    【例如】一个拥有两维特征的状态 s,其多项式基函数可以表示为 (1,s_1,s_2,s_1s_2,s_1^2,s_2^2),或者 (1,s_1,s_2,s_1s_2) 等。高阶多项式越复杂,函数逼近越精确,但是随着维数 k 的增大,其计算复杂度也是呈指数级增长。因此实际使用中,需要对特征进行筛选,选择其中的一个特征子集进行函数逼近。

    (2)傅里叶基函数:一种基于时间的傅里叶级数,将周期函数表示为不同频率的正弦或余弦基函数的加权和。如果 f(x)=f(x+\tau ) ,对于所有 x 和某个周期 \tau 均成立,则函数 f(x) 是周期的。将周期函数写为正弦余弦函数称为傅里叶变换。

    一般令 \tau =2,使得特征 s 被定义在半 \tau 区间 [0,1] 上。假设每个状态 s 对应一个 k 维向量,s=(s_1,s_2,...,s_k)^T,且 s_i\in [0,1] ,则 n 阶傅里叶余弦的第 i 个特征为:

    x_i(s)=cos\, \pi s^Tc^{i}

    其中,c^i=(c_1^i,c_2^i,...,c_k^i)^T ,对于 j=1,...,k 和 i=0,...,(n+1)^k,c_j^i\in\left \{ 0,1,...,n \right \} 。s^Tc^i 相当于为 s 的每个维度分配了一个正整数,这个正整数属于集合 \left \{ 0,1,...,n \right \}。该正整数决定了该维度上的特征频率,上述特征可以移动和缩放以适应特殊情况下的有界状态空间。事实证明,傅里叶函数在强化学习中易于使用,而且效果良好。

    (3)径向基函数:径向基函数是一个取值仅仅依赖于里原点距离的实值函数,也就是 \Phi (x)=\Phi (||x||),或者还可以是到任意一点 c 的距离,c 点称为中心点,也就是 \Phi (x,c)=\Phi (||x-c||) 。任意一个满足 \Phi(x)=\Phi(||x||) 特征的函数 \Phi 都叫做径向基函数。最常用的径向基函数是高斯核函数,其形式为:

    x_i(s)=exp\left ( -\frac{||s-c_i||^2}{2 \sigma _i^2} \right )

    以上三种基函数均为参数 s 的线性函数,因此均属于线性逼近,相比于非线性逼近,线性逼近的好处是只有一个最优值,因此可以收敛到全局最优。

    1.3,增量法

    进行值函数逼近时,希望学到的值函数尽可能地接近真是的值函数 V_{\pi}(s) ,近似程度常用最小二乘误差来度量:

    E_{\theta }=E_{\pi}\left [ \left ( V_{\pi}(s)-\theta ^Tx(s) \right )^2 \right ]

    为了使得误差最小化,采用梯度下降法,对误差求负倒数:

    -\frac{\partial E_\theta }{\partial \theta }=E_{\pi}\left [ 2(V_{\pi}(s)-\theta ^Tx(s))x(s) \right ]

    于是可以得到对于单个样本的更新规则:

    \triangledown \theta =\alpha \left ( V_{\pi}(s)-\theta ^Tx(s) \right )x(s)

    但是,在进行逼近的过程中,并不知道逼近目标,即真实值函数 V_{\pi}(s) 的取值。这个时候可以考虑使用任何一个无模型方法对 V_{\pi}(s) 进行估计。 这样就可以将值函数逼近的过程看作是一个监督学习的过程,标签在蒙特卡罗方法中等价于 G_t,在时序拆分方法中等价于 R_{t+1}+\gamma V(S_{t+1}),在多步时序差分方法中等价于 G_t^{\lambda} 。

    基于蒙特卡罗方法的参数逼近:首先给定要评估的策略 \pi ,产生一条完整的轨迹:

    <s_0,a_0,r_0,s_1,a_1,s_2,a_2,r_2,...,s_T,a_T,r_T>

    值函数的更新实际是一个监督学习的过程,其中监督数据集中累计回报 G_t 从蒙特卡罗的轨迹中得到,回报 G_t 可以通过 r_t 求得,得到的轨迹也可以表示为如下数据集:

    <s_0,G_0>,<s_1,G_1>,<s_2,G_2>,...,<s_T,G_T>

    参数更新公式:

    \triangledown \theta =\alpha \left ( G_t-\theta ^Tx(s_t) \right )x(s_t)

    基于时序差分方法的参数逼近:如果考虑使用一步时序拆分方法从不完整的轨迹中学习参数值,就需要利用到自举的方法,用下一步状态的值函数更新当前状态的值函数。TD(0) 方法中目标函数:R_{t+1}+\gamma\, V(S_{t+1}) 。其中,V(S_{t+1}) 可以用 \hat{V}(S_{t+1},\theta ) 近似。

    同样,将值函数更新看作监督学习过程,则对应的数据集为:

    <s_0,R_1+\gamma \hat{V}(S_1,\theta )>,<s_1,R_2+\gamma \hat{V}(S_2,\theta )>,<s_2,R_3+\gamma \hat{V}(S_3,\theta )>,...,<s_T,R_{T+1}+\gamma \hat{V}(S_{T+1},\theta )>,

    此时,要更新的参数 \theta ,不仅出现在要估计的当前状态的值函数 \hat{V}(s,\theta ) 中,还出现在目标值函数 \hat{V}(S_{t+1},\theta ) 中。在对 \theta 求导时,只考虑参数 \theta 对估计值函数 \hat{V}(s,\theta ) 的影响而忽略对目标值函数 \hat{V}(S_{t+1},\theta ) 的影响,即保留 \hat{V}(S_{t+1},\theta ) 对 \theta 的导数,而忽略 \hat{V}(S_{t+1},\theta )  \theta 的导数,这种方法并非完全的梯度法,只有部分梯度,称为半梯度法。

    参数更新公式:

     \triangledown \theta =\alpha \left ( R_{t+1}+\gamma \hat{V}(S_{t+1},\theta ) -\hat{V}(S_{t},\theta )\right )\, \, \triangledown _{\theta }\hat{V}(S_{t},\theta )

    即:\triangledown \theta =\alpha \left ( R_{t+1}+\gamma \theta ^Tx(s_{t+1}) -\theta ^Tx(s_{t}) \right ) x(s_t)

    基于前向 TD(\lambda) 的参数逼近:考虑使用多步时序差分前向算法进行参数逼近,λ-回报 G_t^{\lambda} 是值函数的无偏估计,对应的监督学习数据集为:

    <s_0,G_0^{\lambda}>,<s_1,G_1^{\lambda}>,<s_2,G_2^{\lambda}>,...,<s_T,G_T^{\lambda}>

    参数更新公式如下:

    \triangledown \theta =\alpha \left ( G_t^{\lambda}-\hat{V}(S_t,\theta ) \right )\triangledown _{\theta }\hat{V}(S_t,\theta )

    即:\triangledown \theta =\alpha \left ( G_t^{\lambda}-\theta^Tx(s_t)\right )x(s_t)

    基于后向 TD(\lambda) 的参数逼近:对于后向算法,有:

    \delta _t=R_{t+1}+\gamma \theta^Tx(s_{t+1})-\theta^Tx(s_t)

    E_t=\lambda\gamma E_{t-1}+\triangledown _{\theta}\hat{V}(S_t,\theta)=\lambda \gamma E_{t-1}+x(s_t)

    这里资格迹公式与之前定义的累计型资格迹 E_t=\lambda \, \gamma\, E_{t-1}+1 不同,它的应用场景是表格型强化学习。在非表格型强化学习中,资格迹第二项为 \triangledown _{\theta}\hat{V}(S_t,\theta) 。

    进而:\triangledown \theta = \alpha \delta _tE_t

    在实际场景中,大多数情况下需要逼近行为值函数以便获取策略:

    \hat{Q}(s,a,\theta)\approx Q(s,a)

    将 \theta 作用于状态和动作的联合向量上,即给状态向量增加一维用于存放动作向量,即将函数 x(s) 替换为 x(s,a)。这样,就有了行为值函数:

    \hat{Q}(s,a,\theta)=\theta^Tx(s,a)=\sum_{i=1}^d\theta_ix_i(s,a)

    对近似值和实际值采用最小二乘误差来度量,为了使误差最小,对其误差采用梯度下降法,有:

    E_{\theta}=E_{\pi}\left [ (Q^{\pi}(s,a)-\theta^Tx(s,a)) ^2\right ]

    -\frac{\partial E_{\theta}}{\partial \theta}=E_{\pi}\left [ 2\left ( Q^{\pi}(s,a)-\theta^Tx(s,a) \right )x(s,a) \right ]

    对于单个样本的更新规则:

    \triangledown \theta =\alpha \left ( Q^{\pi}(s,a)-\theta^Tx(s,a) \right )x(s,a)

    相应地,作为逼近目标,Q^{\pi}(s,a) 是未知的,可以使用蒙特卡罗、时序差分等方法进行估计。

    基于蒙特卡罗的参数逼近为:

    \triangledown \theta =\alpha \left ( G_t-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)

    基于 Sarsa 的参数逼近为:

    \triangledown \theta = \alpha \left ( R_{t+1}+\gamma \, \theta^Tx(s_{t+1},a_{t+1})-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)

    基于 Q-学习的参数逼近为:

    \triangledown \theta = \alpha \left ( R_{t+1}+\gamma \, \theta^Tx(s_{t+1},\pi(s_{t+1}))-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)

    其中,\pi(s_{t+1}) 为在状态 s_{t+1} 下遵循目标策略 \pi 采取的动作。

    基于前向 TD(\lambda) 的参数逼近为:

    \triangledown \theta=\alpha \left ( q_t^{\lambda}-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)

    基于后向 TD(\lambda) 的参数逼近为:

     \delta _t=R_{t+1}+\gamma\, \theta^Tx(s_{t+1},a_{t+1})-\theta^Tx(s_t,a_t)

    E_t=\lambda \,\gamma E_{t-1}+\triangledown_{\theta}\hat{Q}(s_t,a_t,\theta)=\lambda\,\gamma E_{t-1}+x(s_t,a_t)

    \triangledown \theta = \alpha \delta _t E_t

    以上为应用增量法求取 \theta 的公式,当 \theta 确定了,便可求取给定状态的值函数或者行为值函数,在此基础上可确定最优策略。增量法涉及的基本方法很多,这里仅仅基于 Sarsa 的参数逼近方法为例:

    假设需要逼近的行为值函数 \hat{Q}(s,a,\theta)=\theta^Tx(s_{t+1},a_{t+1}) ,\theta 为函数参数 x(s_{t+1},a_{t+1}) 为选定的任何一个基函数。在使用 Sarsa 方法进行逼近时,产生采样的策略和评估改进的策略都是 ε-贪心策略。在具体执行时,单个轨迹内,每进行一个时间步,都会基于这个时间步的数据对参数 \theta 进行更新。

    1.4,批量法

    增量法参数更新过程随机性比较大,尽管计算简单,但样本数据的利用率不高;而批量法,尽管计算复杂,但计算效率较高。

    批量法是把一段时间内的数据集中起来,如给定一段经验数据集: 

    D=\left \{ (s_1,V_1^{\pi}),(s_2,V_2^{\pi}),(s_3,V_3^{\pi}),...,(s_T,V_T^{\pi}) \right \}

    通过学习,找到最好的拟合函数 \hat{V}(s,\theta) 使得能较好地符合这段时期内所有的数据,满足损失函数最小:

    L(\theta)=\sum_{t=1}^T\left ( V_t^{\pi}-\theta^Tx(s_t) \right )^2

    对 \theta 求导,并令导数为 0,得:

    -\frac{\partial L(\theta)}{\partial \theta}=2\sum_{t=1}^T\left ( V_t^{\pi}-\theta ^Tx(s_t) \right )x(s_t)

    同样地,可以利用蒙特卡罗、时序差分等方法对 V_t^{\pi} 进行近似。对上式求解,可得 \theta 。

    最小乘二蒙特卡罗方法参数为:

    \alpha \sum_{i=1}^T\left ( G_t-\theta^Tx(s_t) \right )x(s_t)=0

    \theta = \left ( \sum_{i=1}^T x\left (s_t \right )x(s_t)^T \right )^{-1}\sum_{t=1}^Tx(s_t)G_t

    最小乘二时序差分方法参数为:

    \alpha \sum_{i=1}^T\left ( R_{t+1}+\gamma \, \theta^Tx(s_{t+1})-\theta^Tx(s_t) \right )x(s_t)=0

    \theta = \left ( \sum_{t=1}^Tx(s_t)\left ( x(s_t)-\gamma\, x(s_{t+1}) \right )^T \right )^{-1}\sum_{t=1}^Tx(s_{t})R_{t+1}

    最小乘二前向 TD(\lambda) 方法参数为:

    \alpha \sum_{i=1}^T\left ( G_t^{\lambda}-\theta^Tx(s_t) \right )x(s_t)=0

    \theta = \left ( \sum_{i=1}^T x\left (s_t \right )x(s_t)^T \right )^{-1}\sum_{t=1}^Tx(s_t)G_t^{\lambda}

    最小乘二前后 TD(\lambda) 方法参数为:

    \alpha \delta _tE_t=0

    \theta = \left ( \sum_{t=1}^TE_t\left ( x(s_t)-\gamma\, x(s_{t+1}) \right )^T \right )^{-1}\sum_{t=1}^TE_tR_{t+1}

    如果对行为值函数进行拟合,即:\hat{Q}(s,a,\theta )\approx Q(s,a) ,并对数据集

    D=\left \{ <(s_1,a_1),Q_1^{\pi}>,<(s_2,a_2),Q_2^{\pi}>,<(s_3,a_3),Q_3^{\pi}>,...,<(s_T,a_T),Q_T^{\pi}> \right \}

    应用批量法。

    最小二乘蒙特卡罗方法参数为:

    \alpha \sum_{t=1}^T\left ( G_t-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)=0

    \theta = \left ( \sum_{t=1}^Tx(s_t,a_t) \, x(s_t,a_t)^T\right )^{-1}\sum_{t=1}^Tx(s_t,a_t)G_t

    最小二乘Sarsa方法为:

    \alpha \sum_{t=1}^T\left ( R_{t+1}+\gamma \,\theta^Tx(s_{t+1},a_{t+1})-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)=0

    \theta = \left ( \sum_{t=1}^Tx(s_t,a_t) \,\left ( x(s_t,a_t)-\gamma \,x(s_{t+1},a_{t+1}) \right )^T\right )^{-1}\sum_{t=1}^Tx(s_t,a_t)R_{t+1}

    最小二乘Q-learning方法为:

    \alpha \sum_{t=1}^T\left ( R_{t+1}+\gamma \,\theta^Tx(s_{t+1},\pi(s_{t+1}))-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)=0

    \theta = \left ( \sum_{t=1}^Tx(s_t,a_t) \,\left ( x(s_t,a_t)-\gamma \,x(s_{t+1},\pi(s_{t+1})) \right )^T\right )^{-1}\sum_{t=1}^Tx(s_t,a_t)R_{t+1}

    其中,\pi(s_{t+1}) 为在状态 s_{t+1} 下遵循目标策略 \pi 采取的动作。

    \pi(s_{t+1})=arg\, \underset{a^{'}}{max}Q(s_{t+1},a^{'})

    最小乘二前向 TD(\lambda) 方法参数为:

    \alpha \sum_{t=1}^T\left ( G_t^{\lambda}-\theta^Tx(s_t,a_t) \right )x(s_t,a_t)=0

    \theta = \left ( \sum_{i=1}^T x\left (s_t,a_t \right )x(s_t,a_t)^T \right )^{-1}\sum_{t=1}^Tx(s_t,a_t)G_t^{\lambda}

    最小乘二前后 TD(\lambda) 方法参数为:

    \alpha \delta _tE_t=0

    \theta = \left ( \sum_{t=1}^TE_t\left ( x(s_t,a_t)-\gamma\, x(s_{t+1},a_{t+1}) \right )^T \right )^{-1}\sum_{t=1}^TE_tR_{t+1}

    上面应用批量求取 \theta 的公式,通过求取 \theta,可确定最优策略。

    以 Q-learning 的参数逼近方法为例:假设需要逼近的行为值函数

    Q(s,a,\theta)=\theta^Tx(s_{t+1},a_{t+1})  

    \theta 为函数参数 x(s_{t+1},a_{t+1}) 为选定的任何一个基函数。

    2,非线性逼近

    2.1,基本概念

    线性逼近是值函数或行为值函数可以表示为基函数和参数线性组合,因为基函数的个数和形式有限,且事先确定,在逼近过程中无法改变,因此其函数逼近能力非常有限,无法逼近比较复杂的函数。而通过设计合理的神经网络,对输入输出样本对进行学习,理论上可以以任意精度逼近任意复杂的非线性函数,神经网络的这一优良特性使其可以作为多维非线性函数的通用数学模型。并且现实中的强化学习任务所面临的状态空间往往是连续的,存在无穷多个状态,在这种情况下,就不能再使用表格对值函数进行存储。值函数近似利用函数直接拟合状态值函数或状态动作值函数,减少了对存储空间的要求,有效地解决了这个问题。

    为了在连续的状态空间和动作空间中计算值函数 Q^{\pi}(s,a) ,可以用一个 Q_{\Phi }(s,a) 来近似计算,称为价值函数近似。

    Q_{\Phi }(s,a)\approx Q^{\pi}(s,a)

    其中 s,a 分别是状态和动作的向量表示。函数 Q_{\Phi }(s,a) 通常是一个参数为 \Phi 的函数,比如神经网络,输出为一个实数,称为 Q-network。

    人工神经网络又分为前馈神经网络和反馈神经网络。在前馈神经网络中,各神经元从输入层开始,接收前一级输入,并输出下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。前馈神经网络包括单层神经网络和多层神经网络(卷积神经网络CNN属于一种特殊的多层神经网络);而反馈神经网络的结构图是有回路的,输出经过一个时间步再接入到输入层(例如,循环神经网络RNN属于反馈神经网络)。

    上为一个前馈神经网络,除去输入层 x ,输出层 y ,一共包含 n 层,神经网络的参数用 (w,b) 表示,其中 w_i 表示第 i 层与第 i+1 层神经元之间的连接参数,b_i 表示第 i+1 层的偏执项。则有:

     Y=f(x)=\sigma(w_l\sigma(w_{l-1}...\sigma(w_2\sigma (w_1x+b_1)+b_2)...+b_{l-1})+b_l)

    令 a_{l-1}=\sigma(w_{l-1}...\sigma(w_2\,\sigma(w_1x+b)+b_2)...+b_{l-1}) ,表示第 l-1 层神经网络的输出,则有:Y=f(x)=\sigma(w_la_{l-1}+b_l) 。将 a_{l-1} 看成是基函数,可以看出 a_{l-1} 的参数为前 l-2 层神经网络的权值和偏执,那么基函数就是参数变化的,变化的基函数比固定的基函数有更强的函数逼近能力。

    神经网络每一层都是一个线性或非线性函数,它们有各自的权重和偏置,把这些函数复合,并通过反向传播算法调节这些权重和偏执,理论上可以逼近任意形式的目标函数。和浅层网络相比,深度网络有更强的表示能力,目前深度网络已经被广泛用于强化学习中用于高维图像降维。

    2.2,DQN方法

    DQN算法是建立在传统强化学习方法 Q-larning 的基础上,Q-learning 是离线策略时序差分法,使用 ε-贪心策略产生数据,利用该数据对贪心策略进行评估和改进。它利用查表法对行为值函数(Q值)进行预测,迭代更新的目标是时序差分目标 r+\gamma \,\underset{a^{'}}{max}\,Q(s^{'},a^{'}) 。

    DQN 算法在此基础上进行了如下修改:

    • DQN 使用深度网络从原始数据中提取特征,近似行为值函数(Q值)。

    因为状态空间很大而且连续,无法用查表法来求解每个状态的价值,因此可以考虑使用深度神经网络来表示值函数(行为值函数),参数为每层网络的权重及偏置,用 \theta 表示(神经网络参数)。对值函数进行更新等价于对参数 \theta 的更新。参数确定了,则对应状态的值函数便可以求解了。 

    DQN 的神经网络结构是三个卷积层和两个全连接层。输入为经过处理的4个连续的84*84图像,经过三个卷积层,两个全连接层,输出为包含一个动作的 Q 值向量。此网络将高维状态输入转换为低维动作输出,其中,高维输入指的是原始图像,低维动作指的是包含了所有动作的 Q 值向量。

    • DQN 利用经历回放对强化学习过程进行训练。

    在使用非线性函数逼近器(深度神经网络)近似进行值函数时,学习结果很不稳定,甚至会出现偏差。不稳定的原因有

    (1)利用数据训练神经网络的前提假设是数据之间独立同分布,而强化学习过程中,数据是智能体通过与环境交互产生的数据,相邻的数据之间高度相关。当神经网络依靠这些数据来优化时,存在严重的样本偏差。

    (2)由于神经网络对于价值函数的估计值极为敏感。如果价值函数值出现波动,就会导致策略发生很大的改变,直接影响到和环境互动学习过程中收集到的新数据样本,进而影响神经网络参数产生巨大波动而导致无法收敛。例如,一个机器人在探索环境及学习的过程中,如果价值函数改变,告诉它去探索左边的环境,那么它很长时间内收集到的数据都是左边的环境的信息。如果因为波动,它又到右边去了,它很长时间内收集到的数据都是右边的环境信息。依靠这样的实验数据训练出来的网络,参数出现错乱的大幅度波动和发散。

    (3)由于价值函数值的范围事前很难有正确的估计。如果在学习中突然获得了远大于历史值的回报或者损失,使用反向传播算法的神经网络会出现梯度爆炸。ci

    经历回放在强化学习的计算中是这样实现的:智能体跟环境不断交互,将在环境中学习积累的数据存储到记忆库中。存储的时候,是按照时间步为单元进行存储的,如 <s_1,a_1,r_2,s_2> 。每一次对神经网络的参数进行更新时,利用均匀随机采样的方法从数据库中抽取数据,然后通过抽取的数据对神经网络进行训练。

    因为经历回放的样本是随机抽取的,每次用于训练的样本不再是连续相关的数据,所以经历回放打破了数据间的关联,可以令神经网络的训练收敛且稳定。此外每一个样本可以被使用多次,十分适合深度神经网络的梯度学习,进而提高样本效率。

    • DQN设置了单独的目标网络来处理TD偏差。

    与 Q-learning 方法类似,利用神经网络对值函数进行更新时,更新的是神经网络的参数 \theta ,采用的是梯度下降法,更新公式如下:

    \theta_{t+1}=\theta_t+\alpha \left ( r+\gamma\,\underset{a^{'}}{max}\,Q(s^{'},a^{'};\theta_t) -Q\left ( s,a;\theta_t \right )\right )\triangledown Q\left ( s,a;\theta_t \right )

    在 TDDQN 出现之前,利用神经网络逼近值函数(Nature DQN),行为值函数 (Q) 与目标值 r+\gamma\,\underset{a^{'}}{max}\,Q(s^{'},a^{'}) 用的是同一张网络,这样就导致数据之间存在关联性,从而使训练网络不稳定。

    在TDDQN算法出现之前,更新神经网络参数时,计算TD目标的动作值函数所用的网络参数 \theta 与梯度计算中要逼近的值函数所用的网络参数相同,这样就容易导致数据间存在关联性,从而使得训练不稳定。为了解决关联性问题,TD目标计算时使用一个参数 \theta^{-} ,计算并更新动作值函数逼近的网络使用另一个参数 \theta,在训练过程中,动作值函数逼近网络的参数\theta每一步更新一次,TD目标计算网络的参数\theta^{-}。每个固定步数更新一次。

    • 原来训练网络 Q_w(s,a),用于计算原来的损失函数 \small \frac{1}{2}\left [ Q(s,a,\theta)-(r+\gamma\, \underset{a^{'}}{max}Q(s^{'},a^{'},\theta^{-})) \right ]^2中的 Q_w(s,a) 项,并且使用正常梯度下降方法来进行更新。
    • 目标网络 Q(s,a,\theta^{-}),用于计算原先损失函数 \small \frac{1}{2}\left [ Q(s,a,\theta)-(r+\gamma\, \underset{a^{'}}{max}Q(s^{'},a^{'},\theta^{-})) \right ]^2中的项r+\gamma\, \underset{a^{'}}{max}Q(s^{'},a^{'},\theta^{-}),其中 \theta^{-} 表示目标网络中的参数。如果两套网络的参数随时保持一致,则仍为原先不够稳定的算法。为了让更新目标更稳定,目标网络并不会每一步都更新。具体而言,目标网络使用训练网络的一套较旧的参数,训练网络 Q(s,a,\theta) 在训练中的每一步都会更新,而目标网络的参数每隔 C 步才会与训练网络同步一次,即\theta^{-}\leftarrow \theta。这样做使得目标网络相对于训练网络更加稳定。​​​​​​​

    值函数更新变为如下形式:

    \theta_{t+1}=\theta_t+\alpha \left ( r+\gamma\,\underset{a^{'}}{max}\,Q(s^{'},a^{'};\theta_t^{-}) -Q\left ( s,a;\theta_t \right )\right )\triangledown Q\left ( s,a;\theta_t \right )

    操作步骤:DeepMind 团队在 Atari 游戏中训练算法的过程,希望此算法可以在 Atari 游戏中完成各项具有挑战性的任务。整个算法的输入只有游戏视频的原始图像和得分,输出为当前图像下应采取的各种动作:

    (1)原始图片预处理:因为该算法直接处理 Atari 游戏的原始数据,一帧是 210*160 个像素点,128色,数据量非常大,对计算能力和记忆存储量要求很高。预处理的目的就是为了减少输入量的维度,降低计算量。

    • 首先,对图像的单帧进行编码,编码方法是直接对每个像素的颜色值取最大值,这样可以消除由于闪烁造成的部分图像的缺失。
    • 第二步,从RGB帧中提取Y通道的数据(亮度数据),并将图像重新调整为84*84的数据。

    DQN算法中的 \Phi 函数,通过以上两步对当前的4帧图像进行预处理,并将它们堆叠地送入 Q函数。

    (2)神经网络参数更新:本步骤使用神经网络训练 Q 函数的参数 \theta 。神经网络的输入是通过函数 \Phi 预处理产生 84*84*4 图像,输出对应于单个动作的预测 Q 值。

    • 神经网络第一层隐层卷积层,包括 32 个 8*8 卷积核,卷积跨度是 4,后接一个非线性激活函数;
    • 第二层也是单个卷积层,含64个4*4卷积核,卷积跨度是2,后接一个非线性激活函数;
    • 第三个卷积层包括64个3*3的卷积核,跨度是1,后接一个非线性激活函数;
    • 最后一个隐层是全连接层,包含512个激活单元;输出层是线性全连接层,输出值是每一个可能动作的Q值(对应Atari中18个动作的行为值函数)。

    (3)训练:利用 DQN 算法对 Atari 2600 平台上的49个游戏进行实验。不同的游戏使用不同的网络,但是网络结构、学习算法和超参数保持一致,可见DQN方法对于不同的游戏,在仅有少量先验只是的前提下,具有足够的鲁棒性。

    行为策略函数选用 ε-贪心策略,在前一百万帧数据中,ε 从 1 线性下降到 0.1,之后保持固定不变。整个实验一共训练了大约5000万帧数据,并将最近100万帧存入记忆库,用来经历回放。

    遵循之前的玩 Atari 2600 游戏的算法,训练过程中也使用了简单的跳帧技术。更确切地说,智能体每经历 k 幅图像才采取一个动作,而不是每幅图像都采取动作,跳过的帧上的动作保持和最后一个动作一致。因为模拟器运行一步比智能体选取一个动作所需的计算量要少很多,故这项技术允许智能体在不显著增加运行时间的情况下粗略的计算 k 次游戏。对于所有的游戏,一般使用 k=4 。

    由于每个游戏的得分范围差异很大,算法不易评估,因此操作前对训练期间的游戏回报做了调整,将回报值调整在 -1~1 之间。正面回报为 1,负面回报为 -1,回报不变为 0 。这种方式保证算法能够在多个游戏中使用相同的学习速率。对于有生命计数器的游戏,Atari 2600模拟器还会发送游戏中剩余的生命数,作为轨迹结束的标记。

    所有超参数(指的是记忆库大小,折扣因子,ε-初始值等)和优化参数(网络权重 \theta) 的选取会根据其中几个游戏的反馈信息而调整,最后所有参数在玩其他游戏的过程中会固定下来。

    实验中,使用了如下少量的先验知识:视觉图像(用于输入卷积神经网络)、游戏的分数、采取的动作以及生命计数器。

    (4)评估:接下来需要以专业测试人员作为参数,对训练好的DQN算法进行评估。训练好的DQN算法(也称为智能体)每次使用不同的初始条件,遵循的策略的 ε-贪心策略,其中,ε=0.05 。针对每个游戏玩30次,每次最多 5min,保存其平均回报。为避免虚假分数,智能体每隔10Hz(每隔6帧)选择一个动作,在间隔下重复上一个动作。因为10Hz是人类玩家可以选择按钮的最快速度。

    专业测试人员使用与智能体相同的模拟器,并在受控条件下进行游戏。测试人员不得暂停、保存或重新加载游戏。在游戏过程中禁止输出音频,这是为了保证人类专业和智能体之间具有相同的感官输入。在真正开始评估之前,人类专业可以针对每个游戏进行2h的练习,然后进行20多次游戏,要求每次游戏最多持续5min,并对这些游戏的回报进行平均作为回报。

    结果证明,在大部分的游戏中,DQN的表现远远超出了专业测试人员。

    算法流程

    智能体在和环境交互的过程中,观察模拟器当前的状态然后采取一系列动作,以获得回报。在每个步骤中,智能体从动作集合 A=\left \{ a_1,a_2,...,a_i,...,a_k \right \} 中选择一个合法的动作 a_i 。这个动作被输入模拟器中,模拟器会改变内部的状态和分数。事实上,模拟器内部的状态智能体是观察不到的,智能体只能通过观察模拟器的输出图像来了解模拟器的状态,它是模拟器当前状态在屏幕上的像素值 x_i 。此外,智能体获得一个回报 r_i ,这个回报体现在屏幕的分数上。

    因为智能体仅能观察到当前的屏幕像素 x_i ,从当前的屏幕状态 x_i 出发完全理解当前模拟器的状态 s_{i} 是不可能的,此问题属于不完美信息问题。因此,可以考虑将动作和屏幕的序列 s_t=x_1,a_1,x_2,a_2,...,a_{t-1},x_t 当作 t 时间的状态,作为算法的输入,学习得到的最优策略。经试验,这种学习方式使得算法结果得到很大的提升。

    智能体在与模拟器进行交互时,不断地学习模拟器反馈的回报并调整自己的行为,期望能够学习到一个行为,使未来回报最大。假定:未来的回报折扣因子为 \gamma ,则 t 时刻的未来折扣回报:R_t=\sum_{t^{'}=t}^T\gamma^{t^{'}-t}r_{t^{'}},其中 T 是游戏结束时间。最优的行为值函数 Q^*(s,a) 为在状态 s下采取行为 a ,遵循某个策略 \pi 获得的最大回报,即:

    Q^*(s,a)=\underset{\pi}{max}\,(R|s,a,\pi)

    根据贝尔曼方程:

    Q^*(s,a)=E_{s^{'}}\left [ r+\gamma \,\underset{a^{'}}{max}\,Q^{\pi}(s^{'},a^{'})|s,a\right ]

    因为智能体进行游戏时,状态空间是连续的,故无法使用查表对上式的行为值函数进行求解,替代性地,通过使用神经网络来对行为值函数进行评估。本算法中分别使用了两个神经网络对两个行为值函数逼近。

    DQN通过最小化以下内容进行优化:

    L_i(\theta_i)=\mathbb{E}_{s,u,r,s^{'}}\left [ \left ( y_i-Q(s,a;\theta_i) \right )^2 \right ]

    y_i= r+\gamma\,\underset{a^{'}}{max}\,Q(s^{'},a^{'};\theta_t^{-})

    当前行为值函数 Q(s,a) 的网络参数为 \theta ,每次得带都需要更新,以减少和目标值的均方误差。目标行为值函数 Q^*(s,a) ,也即 TD 目标,采用的网络参数为 \theta^{-},其值来自之前迭代的 \theta 值,相比于 \theta 的每步更新, \theta^{-} 每隔指定的步数更新一次。 

    \theta_{t+1}=\theta_t+\alpha \left ( r+\gamma\,\underset{a^{'}}{max}\,Q(s^{'},a^{'};\theta_t^{-}) -Q\left ( s,a;\theta_t \right )\right )\triangledown Q\left ( s,a;\theta_t \right )

    因为将任意长度的轨迹输入神经网络中进行训练效果并不理想,因此 DQN 算法使用 \Phi 函数,将轨迹处理成固定的长度,对应的是输入网络的 4 帧图像和对应行为组成的输入特征。此算法从经历回放和设置单独的目标网络两个方面对 Q-learning 方法进行改善,使得大型神经网络更加稳定和容易收敛。

    2.3,Double DQN 方法

    传统的 Q-learning 和 DQN 方法都会普遍过高估计行为值函数 Q 值,存在过优化的问题,这种过估计可能是因为环境噪声,值函数逼近过程中的最大化操作,网络不稳定或其他原因。

    Q-learning 基于基函数的数值更新公式为:

    \theta_{t+1}=\theta_t+\alpha \left ( R_{t+1}+\gamma\,\underset{a}{max}\,Q(s_{t+1},a_{t+1};\theta_t) -Q\left ( s_t,a_t;\theta_t \right )\right )\triangledown_{\theta_{t}} Q\left ( s_t,a_t;\theta_t \right )

    DQN 更新公式为:

    \theta_{t+1}=\theta_t+\alpha \left ( R_{t+1}+\gamma\,\underset{a}{max}\,Q(s_{t+1},a_{t+1};\theta_t^{-}) -Q\left ( s_t,a_t;\theta_t \right )\right )\triangledown_{\theta_{t}} Q\left ( s_t,a_t;\theta_t \right )

    DDQN 更新公式为:

    可以看到,不管是 Q-learning 还是 DQN,值函数的更新公式中都有最大化操作,通过一个最大化操作,选择一个行为以及对此行为进行评估。整体上使得估计的值函数比真实的值函数要大,并且误差会随着行为个数的增加而增加(误差传播)。如果这些过估计量是均匀的,那么由于我们的目的是寻找最优策略(即寻找最大值函数对应的动作),则最大值函数是保持不变的。而实际中,过估计量经常是非均匀的,这时候值函数的过估计就会影响最优决策,导致最终选择了一个次优的动作。

    为了解决值函数过估计的问题,Hasselt 提出了 Double DQN 方法,将行为选择和行为评估采用不同的值函数实现(离线)。事实证明,尽管没有完全解决掉过估计问题,但在一定程度上降低了过估计的误差。

    以 DQN 为例:行为选择指的是,在求 TD 目标时,首先要选取一个动作 a^*,满足:

    a^*=arg\,\underset{a}{max}\,Q(s_{t+1},a;\theta^{-}_t)

    行为评估指的是利用 a^* 的行为值函数构建 TD 目标:

    Y_t^{DQN}=R_{t+1}+\gamma \,\underset{a}{max}\,Q(s_{t+1},a^{*};\theta_t^{-})

    Y_t^{DQN}=R_{t+1}+\gamma \,\underset{a}{max}\,Q(s_{t+1},arg\,\underset{a}{max}\,Q(s_{t+1},a;\theta^{-}_t);\theta_t^{-})

    可见,在传统的 DQN 中,选择行为和评估行为用的是同一个网络参数 \theta_t^{-},以及同一个值函数:\underset{a}{max}\,Q(s_{t+1},a;\theta^{-}) 。

    DQN中的两个网络一个用来计算TD目标(可以理解为未来奖励值,主网络),另一个来用来逼近(减小和真实值函数的误差)。原本样本选择和策略更新都是使用TD目标网络参数 \theta^{-},现在利用逼近网络参数 \theta 进行动作选择,用TD网络参数进行更新策略。

    Double DQN(DDQN)分别采用了不同的值函数来实现动作的选择和评估。传统的 DQN 架构自身就提供了两个网络:主网络和目标网络。因此可以直接使用主网络选择动作,再用目标网络进行动作评估,不必引入额外的网络。

    首先使用主网络选择动作,网络参数为 \theta_t

    a^*=arg\,\underset{a}{max}\,Q(s_{t+1},a;\theta_t)

    然后使用目标网络找到这个动作对应的 Q 值,以构成 TD 目标,网络参数为 \theta_t^{-} 。

    Y_t^{DDQN}=R_{t+1}+\gamma\,\underset{a}{max}\,Q(s_{t+1},a^*;\theta_t^{-})

    Y_t^{DDQN}=R_{t+1}+\gamma\,\underset{a}{max} \,Q(s_{t+1},arg\,\underset{a}{max}\,Q(s_{t+1},a;\theta_t);\theta_t^{-})

    这个 Q 值在目标网络中不一定最大的,因此可以避免选到被高估的次优行为。除此之外,其他设置与 DQN 一致。实验表明,DDQN能够更精确地评估出 Q 值,在一些 Atari 2600 游戏中可获得更稳定有效的策略。

    2.4,Dueling DQN 方法

    价值和优势

    在许多基于视觉感知的深度强化学习任务中,不同的状态行为对的值函数 Q(s,a) 是不同的,但是在某些状态下,值函数的大小与动作无关。因此,Baird 于 1993 年提出将 Q 值分解为价值(Value)和优势(Advantage)。

    Q(s,a)=V(s)+A(s,a)

    V(s) 可理解为在该状态 s 下所有可能动作所对应的动作价值函数乘以该动作的概率之和。通俗的说,值函数V(s) 是该状态下所有动作值函数关于动作概率的期望。而动作值函数 Q(s,a) 是单个动作所对应的值函数,Q(s,a)-V(s) 表示当前动作值函数相对于平均值的大小。所以,优势表示的是动作值函数相比于当前状态值函数的优势。如果优势函数大于0,则说明当前动作比平均动作好,如果优势函数小于 0,则说明当前动作不如平均动作好。优势函数表明的是在这个状态下各个动作的相对好坏程度。

    将 Q 值分解为价值函数和优势函数的想法可以用驾驶汽车来说明。没有车子靠近时,选择什么动作并不会影响行车状态。这时候智能体更关注状态的价值,即行车路径和得分,而对动作优势不是很关心,因为无论向左行驶还是向右行驶,得到的回报基本一样。下面两张图表示,旁边有车靠近时,选择动作至关重要。这个时候智能体就需要关心动作优势了。黄色区域代表 V(s) 和 A(s,a) 所关注的地方。V(s) 关注于地平线上是否有车辆出现(此时动作的选择影响不大);A(s,a) 则更关心会立即造成碰撞的车辆,此时动作的选择很重要。Q 值分解为价值和优势更能刻画强化学习的过程。​​​​​​​

    Dueling DQN 会比 DQN 好的部分原因在于Dueling DQN 能更高效学习状态价值函数。每一次更新时,函数 V 都会被更新,这也会影响到其他动作的 Q 值。而传统的 DQN 只会更新某个动作的 Q 值,其他动作的 Q 值就不会更新。因此,Dueling DQN 能够更加频繁、准确地学习状态价值函数。

    Dueling DQN竞争网络最早由 Ziyu Wang 提出,它的思路是把 Q 网络(求取 Q 值的神经网络)的结构显示地约束成两部分之和:跟动作无关的状态值函数 V(s) 与在状态 s 下各个动作的优势函数 A(s,a) 之和。

    如果将深度强化学习算法 DQN 用于竞争网络,就有了 Dueling DQN。它与传统DQN唯一的区别就是网络结构。传统DQN网络模型,输入层接三个卷积层后,接两个全连接层,输出为每个动作的 Q 值。而竞争 DQN 将卷积层提取的抽象特征分流到两个支路中(将原本的一个全连接层,变为两个全连接层)。其中上路代表状态值函数 V(s),表示静态的状态环境本身具有的价值;下路代表依赖状态的动作优势函数 A(s,a) ,表示选择某个行为额外带来的价值。最后这两路再聚合在一起得到每个动作的 Q 值。

    两个支路分别输出 V(s;\theta,\beta),A(s,a;\theta,\alpha )。其中,\alpha ,\beta 分别是两个全连接层参数。聚合函数负责将两个控制流合并成 Q 函数:

    Q(s,a;\theta,\alpha ,\beta )=V(s;\theta,\beta)+A(s,a;\theta,\alpha )

    但是上面一个等式包含了两个未知量,这是一个无法识别问题:给定一个 Q 无法得到唯一的 V 和 A (有无穷多种组合)。

    在实际中,如果直接使用上述公式进行训练,效果很差,对我们的预测和评估很不利。为了解决这个问题,可以对 A 函数做限定:强制令所有选择贪婪动作的优势函数为 0 。

    Q(s,a;\theta,\alpha ,\beta )=V(s;\theta,\beta)+\left ( A(s,a;\theta,\alpha )-\underset{a^{'}\in|A|}{max}\,A(s,a^{'};\theta,\alpha ) \right )

    这样,就能得到固定的值函数:

    a^*=arg\,\underset{a^{'}\in A}{max}\,Q(s,a^{'};\alpha ,\beta )=arg\,\underset{a^{'}\in A}{max}\,A(s,a^{'};\theta,\alpha )

    Q(s,a^{*};\theta,\alpha ,\beta )=V(s;\theta,\overline{\beta })

    因为对同一个状态而言,值函数是确定的,与行为无关,不随着行为的变化而变化,所以经过上述公式约束之后,得到一部分 V 和 A 可以很好地估计值函数和优势函数。

    在实际中,一般使用优势函数的平均值代替上述的最优值。大量实验表明,两公式实验结果非常接近,但是很明显平均值公式比最大值公式更加简洁。

    Q(s,a;\theta,\alpha ,\beta )=V(s;\theta,\beta)+\left ( A(s,a;\theta,\alpha ) -\frac{1}{|A|}\sum_{a^{'}}A(s,a^{'};\theta,\alpha )\right )

    虽然平均值公式最终改变了优势函数的值,但是它可以保证该状态下在各优势函数相对排序不变的情况下,缩小 Q 值的范围,去除多余的自由度,提高算法的稳定性。

    同时需要注意的是平均值公式是网络的一部分,不是一个单独的算法步骤。与标准的 DQN 算法一样,Dueling DQN 也是端到端的训练网络,不用单独训练值函数 V 和优势函数 A。通过反向传播方法,V(s;\theta,\beta),A(s,a;\theta,\alpha ), 被自动计算出来,无须任何额外的算法修改。由于 Dueling DQN 与标准 DQN 具有相同的输入和输出,因此可以使用任何 DQN 的方法来训练训练 Dueling DQN。

    相对于传统的网络结构来说,Dueling DQN 将 Q 值分解为值函数 V 和优势函数 A 这种形式,使得训练更容易,收敛速度更快。当动作的数量增加时,其优势就越明显。状态值函数 V 的部分只依赖于状态,和行为无关,训练起来更容易;且同一状态下,多个行为可共享一个值函数 V 。不同行为之间的差别只体现在优势函数 A 部分。这部分的收敛也可以与值函数 V 独立开来,使得行为之间的相对差别可以独立学习。并且优势函数的引入,避免了因为 Q 值的量级大,而 Q 值之间差异非常小,而引进的结果不稳定问题。

    3,针对连续动作的DQN

    3.1,概述

    跟基于策略梯度的方法比起来,DQN 是比较稳的。策略梯度比较不稳,玩大部分游戏不能使用策略梯度。最早 DeepMind 的论文拿深度强化学习来玩雅达利的游戏,用的就是 DQN。DQN 比较容易训练的一个理由是:在 DQN 里面,你只要能够估计出Q函数,就保证你一定可以找到一个比较好的策略。也就是你只要能够估计出Q函数,就保证你可以改进策略。而估计Q函数这件事情,是比较容易的,因为它就是一个回归问题。在回归问题里面, 你可以轻易地知道模型学习得是不是越来越好,只要看那个回归的损失有没有下降,你就知道说模型学习得好不好,所以估计Q函数相较于学习一个策略是比较容易的。你只要估计Q函数,就可以保证说现在一定会得到比较好的策略。所以一般而言 DQN 比较容易操作。

    DQN 其实存在一些问题,最大的问题是它不太容易处理连续动作。很多时候动作是连续的,比如我们玩雅达利的游戏,智能体只需要决定比如说上下左右,这种动作是离散的。那很多时候动作是连续的。举例来说假设智能体要做的事情是开自驾车,它要决定说它方向盘要左转几度, 右转几度,这是连续的。假设智能体是一个机器人,它身上有 50 个 关节,它的每一个动作就对应到它身上的这 50 个关节的角度。而那些角度也是连续的。所以很多时候动作并不是一个离散的东西,它是一个向量。在这个向量里面,它的每一个维度都有一个对应的值,都是实数,它是连续的。假设动作是连续的,做 DQN 就会有困难。因为在做 DQN 里面一个很重要的一步是你要能够解这个优化问题。估计出 Q函数 Q(s,a) 以后,必须要找到一个 a,它可以让 Q(s,a) 最大,如下式所示:

    a=arg\,\underset{a}{max}\,(s,a)

    假设 a 是离散的,即 a 的可能性都是有限的。举例来说,雅达利的小游戏里面,a就是上下左右跟开火,它是有限的,我们可以把每一个可能的动作都带到 Q 里面算它的 Q 值。但假如a是连续的,你无法穷举所有可能的连续动作,试试看哪一个连续动作可以让 Q 的值最大。  

    3.2,对动作进行采样

    采样出 N 个可能的 a\left\{a_{1}, a_{2}, \cdots, a_{N}\right\} ,一个一个带到 Q 函数里面,看谁最大。这个方法其实也不会太不高效, 因为你在运算的时候会使用 GPU,一次会把 N 个连续动作都丢到 Q 函数里面,一次得到 N 个 Q 值,然后看谁最大。当然这不是一个非常精确的做法,因为你没有办法做太多的采样, 所以你估计出来的 Q 值,最后决定的动作可能不是非常的精确。

    3.3,梯度上升

    强化学习:随机策略梯度,AC家族,确定策略梯度_燕双嘤的博客-CSDN博客1,随机策略梯度1.1,简介前面那些值函数的方法,当值函数最优时,可以获得最优策略。最优策略是状态下,最大行为值函数对应的动作。当动作空间很大的时候,或者是动作为连续集的时候,基于值函数的方法便无法有效求解了。因为基于值函数的方法在策略改进时,需要针对每个状态行为对求取行为值函数,以便求解。这种情况下,把每一个状态行为对严格独立出来,求取某个状态下应该执行的行为是不切实际的。因此,可直接将策略参数化,利用线性函数或非线性函数表示策略,即,以寻找最优的参数,使得累计回报的期望最大...https://blog.csdn.net/qq_42192693/article/details/123815880?spm=1001.2014.3001.5501既然要解的是一个优化问题(optimization problem),其实是要最大化目标函数(objective function),要最大化一个东西, 就可以用梯度上升。就把 a 当作是参数,然后要找一组a去最大化Q函数,就用梯度上升去更新 a 的值,最后看看能不能找到一个a去最大化Q函数,也就是目标函数。 

    当然这样子你会遇到全局最大值(global maximum)的问题, 就不见得能够真的找到最优的结果,而且这个运算量显然很大, 因为你要迭代地更新 a我们训练一个网络就很花时间了。如果你用梯度上升的方法来处理连续的问题, 等于是你每次要决定采取哪一个动作的时候,都还要做一次训练网络的过程,显然运算量是很大的。

    3.4,设计网络

    设计一个网络的架构,特别设计 Q 函数,使得解 arg\,max 的问题变得非常容易。也就是这边的 Q 函数不是一个一般的 Q 函数,特别设计一下它的样子,让你要找让这个 Q 函数最大的 a 的时候非常容易。

    通常输入状态 s 是图像,可以用向量或矩阵来表示它。输入 s ,Q 函数会输出向量 \mu(s) 、矩阵 \Sigma (s) 和标量 V(s) 。Q 函数根据输入 s 与 a 来决定输出值。到目前为止,Q 函数只有输入 s ,它还没有输入 a,用 a 与 \mu(s) 、\Sigma (s)V(s) 相互作用。Q 函数 Q(s,a) 可定义为:

    Q(s,a)=-(a-\mu(s))^T\Sigma(s)(a-\mu(s))+V(s)

    注意一下 a 现在是连续的动作,所以它也是一个向量。假设你现在是要操作机器人的话,这个向量的每一个维度,可能就对应到机器人的某一个关节,它的数值就是关节的角度,所以a是一个向量。假设 a 和 \mu(s) 是列向量,那么 (a-\mu(s))^T是一个行向量。\Sigma(s) 是一个正定矩阵,因为 \Sigma(s)=LL^T,其中 L 为下三角矩阵。a-\mu(s) 也是一个列向量。所以 Q 值即 -(a-\mu(s))^T\Sigma(s)(a-\mu(s))+V(s) 是标量。

    假设 Q(s,a) 定义成这个样子,我们要怎么找到一个 a 去最大化这个 Q 值呢?这个方案非常简单。因为 (a-\mu(s))^{T} \Sigma(s)(a-\mu(s))一定是正的,它前面乘上一个负号,所以第一项第一项的值越小,最终的 Q 值就越大。因为我们是把 V(s) 减掉第一项,所以第一项的值越小,最后的 Q 值就越大。怎么让第一项的值最小呢?你直接把 a 代入 \mu 的值,让它变成 0,就会让第一项的值最小。 a 只要设 \mu(s),就得到最大值。你在解这个 arg\,max 的问题的时候就变得非常容易。所以 DQN 也可以用在连续的情况,只是有一些局限,就是函数不能够随便乱设,它必须有一些限制。

    3.5,不使用DQN

    用 DQN 处理连续动作还是比较麻烦。 基于策略的方法 PPO 和基于价值的方法 DQN,这两者其实是可以结合在一起的,如下图所示,也就是演员-评论员的方法。

    展开全文
  • 本文利用函数逼近方法对丢包数据进行估计,分析网络化迭代学习控制系统的跟踪性能。 首先,本文阐述了迭代学习控制及网络控制的基本概念和原理,分析了其优越性,列举了它们在工程领域的重要应用,阐明了迭代学习...
  • 本文利用函数逼近方法对丢包数据进行估计,分析网络化迭代学习控制系统的跟踪性能。 首先,本文阐述了迭代学习控制及网络控制的基本概念和原理,分析了其优越性,列举了它们在工程领域的重要应用,阐明了迭代学习...
  • 数值分析(7):函数逼近

    千次阅读 2021-04-30 11:20:16
    函数逼近1. 引言2. 预备知识3. 正交多项式 1. 引言 在前面章节《数值分析(6):分段低次插值和三次样条插值》和《数值分析(5):插值法》中已经介绍了如何用给定的插值点进行插值,得到的插值函数能够精确地经过这些...

    1. 引言

    在前面章节《数值分析(6):分段低次插值和三次样条插值》和《数值分析(5):插值法》中已经介绍了如何用给定的插值点进行插值,得到的插值函数能够精确地经过这些给定的插值点。但是如果这些点本身就不精确,那么我们就没必要精确地经过这些点,只要保证在插值函数多项式的次数较低的情况下,和这些点保持一个较小的误差即可,即函数逼近

    首先来看代数多项式空间的概念:
    在这里插入图片描述
    再来看函数空间的概念:
    在这里插入图片描述
    显然函数空间是由函数组成的,满足加法和数乘运算的线性空间。

    对于函数逼近,有以下的魏尔斯特拉斯定理
    在这里插入图片描述伯恩斯坦1912年给出的证明是一种构造性证明.他根据函数整体逼近的特性构造出伯恩斯坦多项式,即:
    在这里插入图片描述
    其中:
    在这里插入图片描述

    这个结果不但证明了定理1,而且由(*)给出了
    的一个逼近多项式,但它收敛太慢,实际中很少使用。

    更一般的情况是,用函数空间的子空间 Φ \Phi Φ来求解一个函数 φ ∗ ( x ) \varphi^*(x) φ(x)来逼近原函数 f ( x ) f(x) f(x),即:

    在这里插入图片描述

    本章的逼近问题即为:在某个函数空间 Φ \Phi Φ中求出 φ ( x ) \varphi(x) φ(x),使得:
    在这里插入图片描述
    最小,即曲线拟合的最小二乘法。

    2. 预备知识

    1.多元函数极值的必要条件:
    偏导数等于0.(非充分条件)

    2.向量内积的定义与其四条性质
    在这里插入图片描述
    在这里插入图片描述
    关于内积空间中的是否向量线性无关 (注意线性无关并不一定正交) ,可以用以下的gram矩阵判断,即:
    在这里插入图片描述

    3.权函数的定义与带权内积的定义
    权函数的定义如下:
    在这里插入图片描述
    带权内积的定义如下:
    在这里插入图片描述
    可以证明,带权内积也满足内积的四条性质,那么根据带权内积可以定义连续加权⒉范数,即:
    在这里插入图片描述

    4.向量的加权内积

    向量的加权内积定义如下
    在这里插入图片描述

    5.离散权函数的带权内积

    离散权函数的带权内积定义如下:
    在这里插入图片描述
    离散加权2范数:
    在这里插入图片描述

    6.函数组的线性相关,线性无关
    在这里插入图片描述
    对于 i i i次多项式,有以下命题:

    在这里插入图片描述

    3. 正交多项式

    3.1 正交多项式的定义和性质

    根据前述的带权内积的定义,可以定义带权的正交多项式,也就是带权内积为0的多项式序列中的多项式。

    如果一个多项式满足以下定义:
    在这里插入图片描述
    那么称该多项式序列 { φ n ( x ) , n ≥ 0 } \{ \varphi_n(x),n \geq0 \} {φn(x),n0} [ a , b ] [a, b] [a,b]上带权函数 ρ ( x ) \rho(x) ρ(x)正交,并称 φ n ( x ) \varphi_n(x) φn(x) [ a , b ] [a, b] [a,b]带权函数 ρ ( x ) \rho(x) ρ(x) n n n次正交多项式

    如果给定了区间 [ a , b ] [a, b] [a,b]和权函数 ρ ( x ) \rho(x) ρ(x),那么构造正交多项式可以用以下方法:
    在这里插入图片描述
    其中:
    C j = ( x n , φ j ( x ) ) ( φ j ( x ) , φ j ( x ) ) C_j=\frac{(x^n,\varphi_j(x))}{(\varphi_j(x),\varphi_j(x))} Cj=(φj(x),φj(x))(xn,φj(x))

    正交多项式的性质有以下六条:

    在这里插入图片描述
    在这里插入图片描述
    注意第六个性质是非常强的,n次多项式必有n个根,但是未必是不同的实的并且都被限制在某个区间内的

    3.2 几个常用的正交多项式

    1.Legendre多项式

    定义:
    在这里插入图片描述
    性质:
    在这里插入图片描述

    2.Chebyshev多项式

    定义:
    在这里插入图片描述

    性质:
    在这里插入图片描述

    3.Laguerre多项式

    定义:
    在这里插入图片描述

    性质:
    在这里插入图片描述

    4.Hermite多项式

    定义:
    在这里插入图片描述

    4. 最佳平方逼近

    在介绍最佳平方逼近之前,首先来看函数二范数的定义:

    在这里插入图片描述

    如果函数二范数是有界的,那么有如下记号:

    在这里插入图片描述
    如果空间 Φ \Phi Φ是空间 L ρ 2 [ a , b ] L^2_{\rho}[a,b] Lρ2[a,b]的子空间,那么空间 Φ \Phi Φ中的函数 s ( x ) s(x) s(x)可以记为:
    在这里插入图片描述
    接下来开始正式地描述最佳平方逼近问题,最佳平方逼近函数的定义如下所示,如前所述,函数 f f f所处的空间 L ρ 2 [ a , b ] L^2_{\rho}[a,b] Lρ2[a,b]更大,而函数 s s s所处的空间 Φ \Phi Φ更小,最佳平方逼近所做的事情是用一个低维空间的函数去逼近 高维空间的函数,使得他们之间的平方误差最小

    在这里插入图片描述
    最佳平方逼近问题的直观描述如下图所示:
    在这里插入图片描述

    接下来的问题是如何求解这个最佳平方逼近函数 s ∗ s^* s,因为 s ∗ ( x ) s^*(x) s(x) φ ( x ) \varphi(x) φ(x)的线性组合,而需要确定的只是 φ ( x ) \varphi(x) φ(x)前的系数,而需要去逼近的函数 f ( x ) f(x) f(x)是已知的,显然这就是一个求函数极值的问题,把待定系数当做自变量,而其他的部分当做已知量,求这个函数的极值,即:
    在这里插入图片描述

    多元函数 F F F能取到极值的必要条件是对各个自变量的偏导数为0,即:
    在这里插入图片描述

    将函数 F F F的表达式代入后整理即得(其中用了一个小技巧就是求导和积分符号互换位置):

    在这里插入图片描述
    由上图可知,法方程给定了待定系数 a j a_j aj的值,从而最佳平方逼近函数 s ∗ ( x ) s^*(x) s(x)就得到了求解。将上述法方程整理成矩阵的形式即为:
    在这里插入图片描述

    由于 φ j ( x ) \varphi_j(x) φj(x)是空间 L ρ 2 [ a , b ] L^2_{\rho}[a,b] Lρ2[a,b]的一组基,所以最佳平方逼近函数 s ∗ ( x ) s^*(x) s(x)的解唯一,即:
    在这里插入图片描述

    需要注意的是,虽然证明了 s ∗ ( x ) s^*(x) s(x)的存在性和唯一性,但 s ∗ ( x ) s^*(x) s(x)未必能使 F F F取得最小值,因为偏导数为0只是必要条件,并不是充分条件,下面还需要证明它能使 F F F取得最小值。

    下面这张图给出了证明思路,只要证明 f − s ∗ f-s^* fs与空间 Φ \Phi Φ中的任一函数 s s s正交,那么就可以证明 ∣ ∣ f − s ∗ ∣ ∣ ≤ ∣ ∣ f − s ∣ ∣ ||f-s^*|| \leq||f-s|| fsfs
    在这里插入图片描述

    根据法方程可知:
    在这里插入图片描述

    上式也就说明了 f − s ∗ f-s^* fs与空间 Φ \Phi Φ中的所有基函数正交,从而也就说明了与与空间 Φ \Phi Φ中的任意函数正交。从而证明就结束了, ∣ ∣ f − s ∗ ∣ ∣ ||f-s^*|| fs即为 ∣ ∣ f − s ∣ ∣ ||f-s|| fs的最小值。以上是从几何的角度给出的证明,用代数的角度给出证明如下:
    在这里插入图片描述

    逼近的误差称为最佳平方逼近误差,即:
    在这里插入图片描述

    对于最佳平方逼近函数,来考虑一种特殊的情况,即空间 Φ \Phi Φ是多项式函数组成的空间:

    在这里插入图片描述
    相应的待定系数可以通过法方程求解,即:
    在这里插入图片描述

    遗憾的是,虽然这个 Φ \Phi Φ空间的基足够简单,但是Hilbert矩阵是病态的,想要通过这个矩阵求解系数 a j ∗ a^*_j aj非常困难。因此为了简化法方程,通常采用Gram-Schemidt 方法将 Φ \Phi Φ空间的基转换为正交基,从而法方程的系数矩阵会变为一个对角矩阵,从而最佳平方逼近函数 s ∗ ( x ) s^*(x) s(x)可以写为:
    在这里插入图片描述
    上式中要求 φ j ( x ) \varphi_j(x) φj(x) Φ \Phi Φ空间的正交基。

    5. 曲线拟合的最小二乘法

    我们首先来看曲线拟合问题:
    在这里插入图片描述
    通过给定的离散数据,找一个函数(这个函数的次数由我们给定)能够使得其拟合的误差最小,显然,这就是最佳平方逼近的离散版本

    最小二乘法曲线拟合的数学定义如下:
    在这里插入图片描述

    解决最小二乘法曲线拟合问题,只需要定义一下离散版本的函数加权内积即可,即:
    在这里插入图片描述
    那么就有法方程来求解最小二乘解(即最佳平方逼近函数) s ∗ ( x ) s^*(x) s(x)

    在这里插入图片描述

    同理可以定义均方误差为:
    在这里插入图片描述

    如果给定的离散数据呈现出指数函数形态,那么最佳平方逼近函数 s ∗ ( x ) s^*(x) s(x)最好也具有指数函数形态,即:
    在这里插入图片描述
    其中 a , b a,b a,b为待定常数,直接求 a , b a,b a,b会出现非线性方程组,求解相当困难,因此先化成线性问题。通常办法是对(9.10)的两边取对数转换为线性问题,即:
    在这里插入图片描述

    当然,关于类似于指数函数的非多项式函数的拟合函数,有一些常见的做法如下:

    在这里插入图片描述
    注:用多项式做最小二乘曲线拟合,法方程是病态方程组,此时可用正交多项式做最小二乘曲线拟合。

    如果搞明白了最佳平方逼近问题,那么超定方程组的最小二乘解问题也就很自然地类比解决了,即:
    在这里插入图片描述

    参考文献:

    关治,陆金甫《数值方法》

    展开全文
  • 下面给出利用函数newrb实现函数逼近! %% 径向基神经网络,实现函数逼近 %编写时间:2022.4.11 clc clear %% 采集数据 x=0:0.1:2; %神经网络输入值---带拟合的x自变量范围 T=cos(x*pi); %神经网络目标值 %% 绘出...
  • 1基于MATLAB的科学计算—函数逼近1数值分析—最佳逼近━基于MATLAB的实现与分析§1 引 言所谓函数最佳逼近就是从指定的一类简单的函数中寻找一个和给定的函数“最贴近”的函数,从几何(空间)的角度看,函数...
  • 强化学习的基本方法有: (1)基于动态规划的方法(模型已知) (2)基于蒙特卡罗的方法(模型...先评估值函数,再利用值函数改善当 前的策略。其中值函数的评估是关键。 注意, 这时的值函数其实是一个表格。对于状态...
  • 利用newrd建立径向神经网络,实现函数逼近,实现函数的拟合

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,261
精华内容 25,304
关键字:

函数逼近