CartPole-v1线性模型局限

Posted pysnow530

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CartPole-v1线性模型局限相关的知识,希望对你有一定的参考价值。

CartPole-v1线性模型局限 - 神经元非线性能力

背景

上篇文章有尝试使用最简单的单一神经元来解决CartPole-v1问题,模型比较简单,但是会存在两个比较明显的问题。

针对 问题2 大部分回合500,但是后期仍会出现回报较低的情况,最近几天学习了一些资料,这篇文章尝试着从数学的角度对其做一个解释。

从仿射函数说起

这里直接一点,先给出仿射函数(affine function)的公式:

a = b + Σ i = 1 n w i x i a = b + \\Sigma_{i=1}^nw_ix_i a=b+Σi=1nwixi

下面是神经元的计算公式:

z = w x + b z = wx + b z=wx+b
a = σ ( z ) a = \\sigma(z) a=σ(z)

可以看出,神经元实际上就是仿射函数和激活函数组成的复合函数。

仿射函数的计算表示

这里我们拿到向量的维度里来描述仿射函数。形式上,向量的内积跟去掉偏置(bias)的向量内积在形式上是等价的。

假设 x , y x, y x,y n n n维向量,向量内积计算公式:

< x , y x, y x,y> = x 1 y 1 + x 2 y 2 + . . . + x n y n = Σ i = 1 n x i y i = x_1y_1 + x_2 y_2 + ... + x_ny_n = \\Sigma_{i=1}^nx_iy_i =x1y1+x2y2+...+xnyn=Σi=1nxiyi

向量内积的数学意义

定义向量的模表示为 ∣ ∣ x ∣ ∣ ||x|| x x x x与它自身内积的平方根。

∣ ∣ x ∣ ∣ = < x , x > = Σ i = 1 n x i 2 ||x|| = \\sqrt{<x, x>} = \\sqrt{\\Sigma_{i=1}^nx_i^2} x=<x,x> =Σi=1nxi2

根据毕达哥拉斯定理(勾股定理),我们很容易得出, x x x 的模即为 x x x向量的长度。

两向量 x x x y y y组成的三角形,第三边可表示为 y − x y - x yx,如下图所示。
在这里插入图片描述
这里考虑二维向量,套用三角形三边公式

c 2 = a 2 + b 2 − 2 a b c o s θ c^2 = a^2 + b^2 - 2abcos\\theta c2=a2+b22abcosθ

可得

∣ ∣ y − x ∣ ∣ 2 = ∣ ∣ x ∣ ∣ 2 + ∣ ∣ y ∣ ∣ 2 − 2 ∣ ∣ x ∣ ∣ ∣ ∣ y ∣ ∣ c o s θ ||y - x||^2 = ||x||^2 + ||y||^2 - 2||x||||y||cos\\theta yx2=x2+y22xycosθ

化简后可得到

< x , y > = ∣ ∣ x ∣ ∣ ∣ ∣ y ∣ ∣ c o s θ <x, y> = ||x||||y||cos\\theta <x,y>=xycosθ

即, x x x y y y的内积,等于 y y y的模与 x x x y y y上的投影长度之积( x x x y y y可互换),如下图,结论可推广到多维。
在这里插入图片描述
回到最开始的问题,关于 x x x的仿射函数,即为 x x x在其权重向量 w w w上的投影长度与 w w w模的乘积,再加上偏置 b b b

信息丢失问题

我们再思考下权重 w w w,它是agent在学习过程中不断调整的一个向量。但从本质上来说, w w w是一个常量。什么意思呢,学习结束后,它是一个不变的值。

那上面 “ x x x在其权重向量 w w w上的投影长度与 w w w模的乘积,再加上偏置 b b b” 的结果,抛去 b b b不讨论,则只取决于 x x x w w w上的投影长度。

这里有两点值得注意:

  1. 在垂直于 w w w的某条直线上,所有的 x x x都具有相同的结果,这里垂直于 w w w方向上的信息就丢失了
  2. 这条垂直线是一条直线,直线上 x x x的各个分量是线性相关的, x 1 x_1 x1增加 Δ x 1 \\Delta{x_1} Δx1 x 2 x_2 x2就会增加 α Δ x 2 \\alpha\\Delta{x_2} αΔx2

第1点导致这个模型能解决的问题非常单一,形象点说,它会训练出二维平面里的一条线,或三维平面里的一个面来切分样本,判定其属于正类或负类。它没有非线性能力,不能切分如下的数据。

在这里插入图片描述
第二点,回到之前的CartPole-v1问题,这意味着,我们默认角度与角速度变化量的关系是等比例的。显然这是错误的。实际上同样是 3 0 o 30^o 30o角的变化,在垂直方向和稍微倾斜一点的方向上,产生的效果都是不同的。

总结

这个模型的缺陷已经很明确了。

因为CartPole-v1中,每一个观察到的参数都是单调的,所以使用单个神经元可以在很短的尝试次数收敛(基于一两次);但这里的收敛并非真正的收敛,只是刚好找到一组对大部分样本都有效的线性模型。

线性模型只能拟合大部分场景,遇到一些特殊的点就失效了。比作一座山,我们能正常处理山腰以下的样本,山顶附近就会造成错误,快速失败。

那怎么去优化呢?这里最主要的还是需要让模型具备非线性能力,最显见的做法是,增加神经网络的层数,调整上层激活函数。

嗯,还需要再学习一下。

以上是关于CartPole-v1线性模型局限的主要内容,如果未能解决你的问题,请参考以下文章

CartPole-v1线性模型局限

CartPole-v1线性模型局限

TensorFlow基础激活函数

多项式回归与模型泛化

多项式回归与模型泛化

CartPole-v1 50行python实现