若需观看机器人系列相关博客,请劳驾至:【足式机器人无死角系列之-【强化学习基础-通用】、【仿真及训练环境】、【强化学习】:isaac-gym 与 isaac-lab 从零开始
郑重声明:该系列博客为本人 ( W e n h a i Z h u ) 独家私有 , 禁止转载与抄袭 , 首次举报有谢 , 若有需请私信授权! \color{red}郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权! 郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权!
回顾:上一篇博客首先讲解了如何去构建目标函数,然后通过梯度下降的方式进行优化参数 w 的优化。且对之前流行的 linear function approximation 算法与现在流行的神经网络进行简要对比,该篇博客将再次以实际的例子加深对 linear function approximation 的理解。 |
本系列博客链接为: {\color{blue}本系列博客链接为:} 本系列博客链接为:【强化学习理论基础-通用】(01)从零开始白话给你讲,简单推导公式,深刻理解,一眼万年!:https://blog.csdn.net/weixin_43013761/article/details/143168169
本博客编写于: 20250112 ,台式机为 u b u n t u 20.04 , 3090 G e F o r c e R T X 显存 24 G { \color{purple} 本博客编写于:20250112,台式机为 ubuntu 20.04,3090 GeForce RTX 显存24G} 本博客编写于:20250112,台式机为ubuntu20.04,3090GeForceRTX显存24G:与你现在的代码,或者环境等存在一定差异也在情理之中,故切勿认为该系列博客绝对正确,且百密必有一疏,若发现错误处,恳请各位读者直接指出,本人会尽快进行整改,尽量使得后面的读者少踩坑,评论部分我会进行记录与感谢,只有这样,该系列博客才能成为精品,这里先拜谢各位朋友了。
文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证,请备注 强化学习 。 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证,请备注\color{red} 强化学习}。 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证,请备注强化学习。
一、前言
上一篇博客对 linear function approximation 做了相对深入的理论分析,要注意这里的 linear(线性) 是相对于参数
w
w
w 而言,并不要求相对于状态
s
s
s 是线性的,他们与状态价值近似
v
^
\hat v
v^ 关系式如下:
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
(01)
\color{green} \tag{01} \hat{v}(s, w)=\phi^{T}(s) w
v^(s,w)=ϕT(s)w(01)其中
ϕ
T
(
s
)
\phi^{T}(s)
ϕT(s) 称呼为特征向量(
feature vector
\color{purple} \text{feature vector}
feature vector),
w
w
w 称呼为参数向量(
parameter vector
\color{purple} \text{parameter vector}
parameter vector),总的来说 linear function approximation(线性函数近似) 是 linear function approximation(值函数近似)的一种特殊情况。前面引入 value function approximate 是代替表格方式进行存储,虽然在一定程度上会降低精确度,但依旧利大于弊,主要有如下两个有点:
优点1: 使用较小的存储空间,存储大量或者无限的信息,以及适用于连续空间,特别是观测与连续时间序列相关时。 优点2: 具备一定泛化能力,在对被访问的状态拟度进行优化时,会传播到其附近的状态,也得到一定的优化。 |
二、推导证明
这里为了简单,依旧使用 linear function approximation 为例,且以一维的例子讲解(后续会发现多维情况都可以转换为一维),定义状态空间下离散 特征向量(feature vector) 如下: ϕ ( s ) = e s ∈ R ∣ S ∣ (02) \color{green} \tag{02} \phi(s)=e_{s} \in \mathbb{R}^{|\mathcal{S}|} ϕ(s)=es∈R∣S∣(02)其中 e s e_s es 是一个单位向量,且是一个特殊的单位向量,因为该向量中只有一位为 1 1 1 其余都为 0 0 0,如下两个单位向量: e 1 s = [ 1 , ⋯ , 0 , 0 , 0 , ⋯ , 0 , 0 ] T e 2 s = [ 0 , 0 , 0 ⋯ , 1 , ⋯ , 0 , 0 ] T (03) \color{green} \tag{03}e1_s=[1, \cdots, 0, 0, 0 , \cdots,0,0]^T\\e2_s=[0, 0, 0 \cdots, 1 , \cdots, 0, 0]^T e1s=[1,⋯,0,0,0,⋯,0,0]Te2s=[0,0,0⋯,1,⋯,0,0]T(03)上式带入到(01)式可得: v ^ ( s , w ) = e s T w (04) \color{green} \tag{04} \hat{v}(s, w)=e_s^Tw v^(s,w)=esTw(04)注意到上式为两个向量的矩阵乘法,其结果为一个标量,其就是 e s e_s es 中为 1 1 1 位置对应的状态价值。直白的说,参数 w w w 存储的是所有状态对应的状态价值,而 e s e_s es 只有一项为 1 1 1 其余都为 0 0 0,那么结果 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 就是 w w w 与 e s e_s es 为 1 1 1 位置对应项的元素。
上述过程是把
w
w
w 看做一个
1
1
1 维表格,存储所有状态量,那么显然
v
^
(
s
,
w
)
=
e
s
T
w
\hat{v}(s, w)=e_s^Tw
v^(s,w)=esTw 相对
w
w
w 来说其是一线性的(把
e
s
e_s
es 看做一个常数),再根据上一篇博客:【强化学习理论基础-通用】(32)从零开始白话给你讲[数学原理]:值函数近似,目标函数 与 linear function approximation [五、线性更新] 推导出来的迭代公式(17)式:
w
t
+
1
=
w
t
+
α
t
[
r
t
+
1
+
γ
ϕ
T
(
s
t
+
1
)
w
t
−
ϕ
T
(
s
t
)
w
t
]
ϕ
(
s
t
)
(05)
\color{green} \tag{05} w_{t+1}=w_{t}+\alpha_{t}\left[r_{t+1}+\gamma \phi^{T}\left(s_{t+1}\right) w_{t}-\phi^{T}\left(s_{t}\right) w_{t}\right] \phi\left(s_{t}\right)
wt+1=wt+αt[rt+1+γϕT(st+1)wt−ϕT(st)wt]ϕ(st)(05)接着再把(02)式
ϕ
(
s
)
=
e
s
\phi(s)=e_{s}
ϕ(s)=es 带入上式得:
w
t
+
1
=
w
t
+
α
t
(
r
t
+
1
+
γ
w
t
(
s
t
+
1
)
−
w
t
(
s
t
)
)
e
s
t
(06)
\color{green} \tag{06} w_{t+1}=w_{t}+\alpha_{t}\left(r_{t+1}+\gamma {\color{red} w_{t}\left(s_{t+1}\right)}-{\color{red} w_{t}\left(s_{t}\right)}\right) {\color{blue}e_{s_{t}}}
wt+1=wt+αt(rt+1+γwt(st+1)−wt(st))est(06)注意到上式中
w
t
+
1
w_{t+1}
wt+1 与
w
t
w_t
wt 依旧为向量,但是
w
t
(
s
t
+
1
)
{\color{red} w_{t}\left(s_{t+1}\right)}
wt(st+1) 与
w
t
(
s
t
)
{\color{red} w_{t}\left(s_{t}\right)}
wt(st) 是标量,其分别对应于
s
t
+
1
s_{t+1}
st+1 与
s
t
+
1
s_{t+1}
st+1 存储于参数
w
t
w_t
wt 中对应位置状态价值。另外,有意思的是上式后面乘了一个向量
e
s
t
{\color{blue}e_{s_{t}}}
est,同理
e
s
e_s
es 只有一项为
1
1
1 其余都为
0
0
0,所以本质上对
w
t
w_t
wt 进行更新时,只对其
s
t
s_t
st 位置对应元素进行更新,若把这个被更新的元素更新过程单独表示出来,则如下所示:
w
t
+
1
(
s
t
)
=
w
t
(
s
t
)
+
α
t
(
r
t
+
1
+
γ
w
t
(
s
t
+
1
)
−
w
t
(
s
t
)
)
(07)
\color{red} \tag{07} w_{t+1}\left(s_{t}\right)=w_{t}\left(s_{t}\right)+\alpha_{t}\left(r_{t+1}+\gamma w_{t}\left(s_{t+1}\right)-w_{t}\left(s_{t}\right)\right)
wt+1(st)=wt(st)+αt(rt+1+γwt(st+1)−wt(st))(07)上式与前面介绍基于表格的 TD 算法是一致的,比如说 【强化学习理论基础-通用】(22)从零开始白话给你讲[数学原理]:时序差分(Temporal-Difference) - state values(基础版本) 之 公式推导 推导出的(41)式:
v
k
+
1
(
s
t
)
=
v
k
(
s
t
)
−
α
t
(
s
t
)
[
v
k
(
s
t
)
−
[
r
t
+
1
+
γ
v
k
(
s
t
+
1
)
]
]
(08)
\color{green} \tag{08} v_{k+1}\left(s_{t}\right) =v_{k}\left(s_{t}\right)-\alpha_{t}\left(s_{t}\right)\left[v_{k}\left(s_{t}\right)-\left[r_{t+1}+\gamma v_{k}\left(s_{t+1}\right)\right]\right]
vk+1(st)=vk(st)−αt(st)[vk(st)−[rt+1+γvk(st+1)]](08)上式使用表格的形势表示
v
k
v_{k}
vk,那么
v
k
(
s
t
)
v_{k}(s_t)
vk(st) 则为表格中的一项。若替换成
w
k
w_k
wk 与
w
k
(
s
t
)
w_k(s_t)
wk(st),容易看出(07)式与(08)式本质上来说是一样的。此时的 linear function approximation 算法因为已经完全被离散化,其中一个参数更新,不会影响到其他参数,或者说状态,那么显然并没有连带优化的泛化能力,且需要把每个状态对应的状态价值作为参数存储起来,但是精度相对来说比较高,总的来说:
结论: 前面学习一些列算法 TD-SV、Sarsa、Expected Sarsa、 n-step Sarsa 以及 Q-learning 等,都是基于表格(或者离散)形式进行推导,其都属于可以说是 linear function approximation 的一种特殊情况。比如说特征向量(feature vector)的选取为一个单位向量,且只有一个元素为 $1$,其余全为 0。当然随着算法设计不同,选取的特征向量也会发生改变,并非一成不变。 |
三、示例对比
为深入了解 linear function approximation,这里举几个简单的例子加以说明,以便知道具体如何选取适当的特征向量(feature vector)。依旧以迷宫游戏为为例,设环境为 5x5 的网格世界,具体规则如下:
动作: 共五个动作,上(a1)、下(a2)、左(a3)、右(a4)、保持原地不动(a5)。 奖励: 进入黄色(禁止forbidden区域)=-10、进入白色可通行(passable)区域=0、到达终点(target)蓝色区域=1。 特殊: 若触碰边界(boundary),奖励为=-1,如在最上边依旧往上走,不过机器人状态(位置保持不变) 注意: 为了简单示例,转移为下一个状态时,只有一种奖励,且状态状态下执行某个动作,也只能达到下一种状态,而非概率,有多个选项。 |
上面是迷宫游戏的规则,相信大家已经很熟悉了,这里把奖励单独记录一下
r
f
o
r
b
i
d
e
n
r_{forbiden}
rforbiden有改变:
r
b
o
u
n
d
a
r
y
=
−
1
,
r
f
o
r
b
i
d
e
n
=
−
1
,
r
p
a
s
s
a
b
l
e
=
0
,
r
t
a
r
g
e
t
=
1
,
γ
=
0.9
(09)
\color{green} \tag{09} r_{boundary}=-1,~~~{\color{red}r_{forbiden}=-1},~~~r_{passable}=0 ,~~~r_{target}=1,~~~\gamma=0.9
rboundary=−1, rforbiden=−1, rpassable=0, rtarget=1, γ=0.9(09) 上式中
γ
=
0.9
\gamma=0.9
γ=0.9 为使用贝尔曼公式计算状态价值的折扣因子。设一个初始策略
π
\pi
π,其各个状态下执行各个动作概率都为
0.2
0.2
0.2:
π
(
a
∣
s
)
=
0.2
a
∈
A
,
s
∈
S
(10)
\color{green} \tag{10} \pi(a|s)=0.2~~~~~~~~~~a\in \mathcal A, s\in \mathcal S
π(a∣s)=0.2 a∈A,s∈S(10)
1.真值计算
那么该策略及其对应于各个状态下通过贝尔曼公式计算出来的状态价值如下所示(蓝色为终点):
上右图中状态价值使用 2 2 2 维表格进行存储,为形象的显示出各个状态之间状态价值的差异,通过如下三维图示来表示:

上图就是把状态价值通过可视化的方式表示出来,需要注意的是关注其坐标,而非网格。比如说由图一右图可知,状态价值状态的状态为 s ( 4 , 4 ) s_{(4,4)} s(4,4),即第4行第4列状态价值最高,对应下图红色圆圈处:

总的来说,上述过程共计需要 5 x 5 = 25 5x5=25 5x5=25 个数据,且为离散形式。下面通过 linear function approximation(线性函数近似) 看需要存储多少个数据。且该真值进行比较,对比误差有多大。
2.TD算法-离散
上面计算过程需要知道策略 π \pi π 每个状态下执行每个动作的精确概率 π ( a ∣ s ) \pi(a|s) π(a∣s),才能计很好的计算出每个状态对应的状态价值,然后以表格形式存储,即完成对策略 π \pi π 的价值评估。
现假设并不知道
π
\pi
π 每个状态下执行每个动作的精确概率
π
(
a
∣
s
)
\pi(a|s)
π(a∣s),但是使用该策略与环境进行交互,收集到 500 episode 轨迹数据,且每条轨迹收集 10000 个 step 数据(到达终点也不停止)。每条轨迹经验数据形式大致如下(
T
=
10000
T=10000
T=10000):
τ
t
=
{
{
s
t
,
a
t
,
r
t
}
,
{
s
t
+
1
,
a
t
+
1
,
r
t
+
1
}
,
⋯
,
{
s
T
−
1
,
a
T
−
1
,
r
T
−
1
}
,
{
s
T
,
a
T
,
r
T
}
}
(11)
\color{green} \tag{11} \tau_t=\{\{s_t,a_t,r_t\},\{s_{t+1},a_{t+1},r_{t+1}\},\cdots,\{s_{T-1},a_{T-1},r_{T-1}\},\{s_T,a_T,r_{T}\}\}
τt={{st,at,rt},{st+1,at+1,rt+1},⋯,{sT−1,aT−1,rT−1},{sT,aT,rT}}(11)使用【强化学习理论基础-通用】(22)从零开始白话给你讲[数学原理]:时序差分(Temporal-Difference) - state values(基础版本) 之 公式推导 推导出的(41)式:
v
k
+
1
(
s
t
)
=
v
k
(
s
t
)
−
α
t
(
s
t
)
[
v
k
(
s
t
)
−
[
r
t
+
1
+
γ
v
k
(
s
t
+
1
)
]
]
(12)
\color{green} \tag{12} v_{k+1}\left(s_{t}\right) =v_{k}\left(s_{t}\right)-\alpha_{t}\left(s_{t}\right)\left[v_{k}\left(s_{t}\right)-\left[r_{t+1}+\gamma v_{k}\left(s_{t+1}\right)\right]\right]
vk+1(st)=vk(st)−αt(st)[vk(st)−[rt+1+γvk(st+1)]](12)进行迭代,获得价值评估策略
v
π
v_{\pi}
vπ,然后对每个状态进行价值评估,其评估结果以及策略
v
π
v_{\pi}
vπ 优化过程中的误差曲线如下所示:
先看右图,经过 500 500 500 条经验轨迹的训练之后,误差基本为 0 0 0,在左图其效果与图二基本一致。不过该为离散形式,存储的数据量与 [1.真值计算] 计算一样为 5 x 5 = 25 5x5=25 5x5=25。只是该方式为 mode-free。而 [1.真值计算] 为 mode-base。
3.TD算法-linear-平面拟合
数据采集的方式与 [2.TD算法-离散] 一致,但是此时我们并不想存储 5 x 5 = 25 5x5=25 5x5=25 个数据,感觉太多,此时就可以使用 linear function approximation(线性函数近似)算法。该算核心就是在于特征向量 ϕ ( s ) \phi(s) ϕ(s) 的选取。
虽然上述表格为二维形式,但是从图二来看,知道实际上是去近似一个曲面,曲面的最简单形式就是一个平面。平面方程的公式为
a
x
+
b
y
+
c
z
=
0
(13)
\color{green} \tag{13} ax+by+cz=0
ax+by+cz=0(13)为形成鲜明对比,进行符号统一,参考图二设计一个平面方程为:
w
1
+
w
2
∗
x
+
w
3
∗
y
=
v
^
(
x
,
y
)
(14)
\color{green} \tag{14} w_1+w_2*x+w_3*y=\hat v(x,y)
w1+w2∗x+w3∗y=v^(x,y)(14)其中
x
,
y
x,y
x,y 分别对应于迷宫世界中的行(row)与列(col),
v
(
x
,
y
)
v(x,y)
v(x,y) 则表示相应状态的价值,那么可以令特征向量与参数向量为:
ϕ
(
s
)
=
[
1
x
y
]
∈
R
3
w
=
[
w
1
w
2
w
3
]
∈
R
3
(14)
\color{green} \tag{14} \phi(s)=\left[\begin{array}{l} 1 \\ x \\ y \end{array}\right] \in \mathbb{R}^{3}~~~~~~~~~~~w=\left[\begin{array}{l} w_1 \\ w_2 \\ w_3 \end{array}\right] \in \mathbb{R}^{3}
ϕ(s)=
1xy
∈R3 w=
w1w2w3
∈R3(14) 结合前面(06)式
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
\hat{v}(s, w)=\phi^{T}(s) w
v^(s,w)=ϕT(s)w 可得:
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
=
[
1
,
x
,
y
]
[
w
1
w
2
w
3
]
=
w
1
+
w
2
x
+
w
3
y
(15)
\color{blue} \tag{15} \hat{v}(s, w)=\phi^{T}(s) w=[1, x, y]\left[\begin{array}{l} w_{1} \\ w_{2} \\ w_{3} \end{array}\right]=w_{1}+w_{2} x+w_{3} y
v^(s,w)=ϕT(s)w=[1,x,y]
w1w2w3
=w1+w2x+w3y(15)构建好上式之后,就可以通过前面(05)式,即 linear function approximation 迭代公式对价值评估策略参数
w
w
w 进行优化了,优化过程以及优化结果如下所示:
首先左图(True state value)为状态价值真值,与图二保持一致。中间图示为 linear function approximation 算法收敛之后,来自于
v
^
\hat{v}
v^ 的状态价值评估,可以看到其拟合出来之后就是一个平面,因为在前面设计特征向量的时候令:
ϕ
(
s
)
=
[
1
x
y
]
∈
R
3
(16)
\color{green} \tag{16} \phi(s)=\left[\begin{array}{l} 1 \\ x \\ y \end{array}\right] \in \mathbb{R}^{3}
ϕ(s)=
1xy
∈R3(16)这就是按照平面来设计的,或者说我们认为真值状态价值就是一个平面,所以这样设计。但是实际上真值状态价值是一个曲面,那么显然拟合效果还是差强人意的,从上右图也可以看出,经过 500 episode 经验轨迹数据优化之后,误差值依旧没有为
0
0
0。
虽然通过该方式的拟合效果并不是很好,但是对于一个平面而言,之需要存储 3 3 3 个数据即可,也就是参数向量 w = [ w 1 , w 2 , w 3 ] w=[w_1,w_2,w_3] w=[w1,w2,w3] 即可,比初始的 25 25 25 数量量明显下降了很多。
4.TD算法-linear-曲面拟合
通过上面的分析,知道选取特征向量为
ϕ
(
s
)
=
[
1
,
x
,
y
]
T
\phi(s)=[1,x,y]^T
ϕ(s)=[1,x,y]T 适合拟合一个平面而不适合拟合一个曲面。为了取得较好的拟合效果,当然也可以设计对曲面拟合的特征向量,先来一个简单的二次曲面拟合,特征向量以及参数向量设计如下:
ϕ
(
s
)
=
[
1
,
x
,
x
2
,
y
,
y
2
,
x
y
]
T
∈
R
6
w
=
[
w
1
,
w
2
,
w
3
,
w
4
,
w
5
,
w
6
]
\color{green} \tag{17} \begin{align*} \phi(s)=&[1,x,x^2,y,y^2,xy]^T ~~\in \mathbb{R}^{6}\\ w=&[w_1,w_2,w_3,w_4,w_5,w_6] \end{align*}
ϕ(s)=w=[1,x,x2,y,y2,xy]T ∈R6[w1,w2,w3,w4,w5,w6](17)同样带入(06)式
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
\hat{v}(s, w)=\phi^{T}(s) w
v^(s,w)=ϕT(s)w 可得:
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
=
w
1
+
w
2
x
+
w
3
y
+
w
4
x
2
+
w
5
y
2
+
w
6
x
y
(18)
\color{blue} \tag{18} \hat{v}(s, w)=\phi^{T}(s) w=w_{1}+w_{2} x+w_{3} y+w_{4} x^{2}+w_{5} y^{2}+w_{6} x y
v^(s,w)=ϕT(s)w=w1+w2x+w3y+w4x2+w5y2+w6xy(18)上式拟合的是一个二次曲面,为了更好对比差异,可令:
ϕ
(
s
)
=
[
1
,
x
,
y
,
x
2
,
y
2
,
x
y
,
x
3
,
y
3
,
x
2
y
,
x
y
2
]
T
∈
R
10
w
=
[
w
1
,
w
2
,
w
3
,
w
4
,
w
5
,
w
6
,
w
7
,
w
8
,
w
9
,
w
10
]
\color{green} \tag{19} \begin{align*} \phi(s)=&[1,x,y,x^2,y^2,xy,x^3,y^3,x^2y,xy^2]^T ~~~~\in \mathbb{R}^{10}\\ w=&[w_1,w_2,w_3,w_4,w_5,w_6,w_7,w_8,w_9,w_{10}] \end{align*}
ϕ(s)=w=[1,x,y,x2,y2,xy,x3,y3,x2y,xy2]T ∈R10[w1,w2,w3,w4,w5,w6,w7,w8,w9,w10](19)
上式带入到(06)式可得:
v
^
(
s
,
w
)
=
w
1
+
w
2
x
+
w
3
y
+
w
4
x
2
+
w
5
y
2
+
w
6
x
y
+
w
7
x
3
+
w
8
y
3
+
w
9
x
2
y
+
w
10
x
y
2
\color{blue} \tag{20} \begin{align*} \hat{v}(s, w)=&w_1+w_2x+w_3y+w_4x^2+w_5y^2~~+\\ &w_6xy+w_7x^3+w_8y^3+w_9x^2y+w_{10}xy^2 \end{align*}
v^(s,w)=w1+w2x+w3y+w4x2+w5y2 +w6xy+w7x3+w8y3+w9x2y+w10xy2(20)显然,三次曲面拟合能力比二次曲面强,但是其需要保存参数
w
w
w 的
10
10
10 个数据,而二次曲面只需要保存
w
w
w 的
6
6
6 个参数。二次与三次曲面效果可视化,如下所示:
首先看左边上下两幅图示,去对应于二次曲面,其拟合能力有限,只能是一个 u 或者 n 形曲面。而左边上面两幅图示代表三次曲面,若与真值图二进行比较,可以看出他们是十分相近的。
无论二次还是三次曲面拟合,由上 b c 两幅图示可以知道 500 个 episode 迭代优化之后,误差依旧没有完全为零,因为 linear function approximation 就是一种近似方法,或者说数值方法,而非解析法。他二者需要存储的参数分别为 6 , 10 6,10 6,10,显然比真值,或者 TD算法-离散 存储的 25 个要少。
四、总结
通过该篇博客,详细对深度学习没有流行之前,被广泛使用的 linear function approximation(线性函数拟合) 进行了详细的介绍,不过要注意这里所谓 linear \color{purple}\text{linear} linear 是相对于参数 w w w 而言,并不是意味着其智能拟合线性函数。当然,其由于 w w w 最高次数为 1 1 1 的限制,该方式并不能拟合所有的非线性函数。但是神经网络却比较强大,其几乎能够拟合所有的非线性函数,只要数据量足够对即可。