GAMES102.刘利刚.01.数据拟合(Data Fitting)(02)

  • https://www.bilibili.com/video/BV1NA411E7Yr

数据拟合

函数拟合问题

  • 输入:一些观察(采样)的数据点 {xi,yi}i=0n
  • 输出:你和数据点的函数 y=f(x),并用于预测

  • 这样的拟合函数有无穷个

拟合函数的好坏评价

分段线性插值函数

  • y=f1(x)

  • 数据误差为 0
  • 函数性质不够好
    • 只有 C0 连续,不光滑
      • 一阶导数不连续
      • 数值计算很麻烦

光滑插值函数

  • y=f2(x)

  • 数据误差为 0
  • 可能被 “差数据” 带歪,导致函数性质不好、预测不可靠
    • 噪声,outliers(游离点)

逼近拟合函数

  • y=f3(x)

  • 数据误差不为 0,但是足够小
  • 能够抵抗一些 “差数据” 的影响

选择什么拟合函数

  • 应用驱动,除非知道数据的先验,找到一个合适的拟合函数时一个比较复杂的过程
    • 先验:领域知识
  • 大部分的实际应用问题
    • 可建模为:找一个映射/变换/函数
    • 输入不一样、变量不一样、维数不一样
  • 三步曲方法论:
    • 到哪找?
      • 确定某个函数集合/空间
    • 找哪个?
      • 度量哪个函数是好的 “最好” 的
    • 怎么找?
      • 求解或优化:不同的优化方法与技巧,既要快、又要好 ···

数据拟合的方法论

  • 到哪找?
    • 确定函数的表达形式(函数集、空间)
      • L=span{b0(x),,bn(x)}
    • 待定基函数的组合系数(求解变量)
      • fλ(x)=k=0nλibi(x)
  • 找哪个?
    • 优化模型(最小化问题)
      • 能量项 = 误差项 + 正则项
      • 正则项
        • |f|2dx 度量光滑性
        • fdx 弧长尽量小
    • 统计模型、规划模型 ···
  • 怎么找?
    • 求解误差函数的驻点(导数为 0 之处)
    • 转化为系数的方程组
      • 如果是欠定的(有无穷多组解),则修正模型
        • 改进/增加 各种正则项:Lasso、岭回归、系数正则项 ···
        • 返回修改模型
    • 如果时非凸的、欠定的则变成难解问题

函数插值定义

  • f(x) 为定义在区间 [a,b] 上的函数,x0,x1,,xn 为区间上 n+1 个互不相同的点,Φ 为给定的某一函数类
  • Φ 上的函数 ϕ(x),满足:

ϕ(xi)=f(xi),i=0,,n

  • 则称 ϕ(x)f(x) 关于节点 x0,x1,,xnΦ 上的插值函数
  • x0,x1,,xn 为插值节点
  • (xi,f(xi))为插值点

多项式插值

多项式插值定理

  • xi 两两不同,则对任意给定的 yi,存在唯一的次数至多是 n 次的多项式 pn,使得 pn(xi)=yi,i=0,,n
  • 证明如下:范德蒙德行列式不为 0

技巧1:构造插值问题的通用解

  • 如果每次都需要求解方程组,则比较麻烦
  • 预先构造插值问题的通用解
  • 给定 n+1 个点 {(x0,y0),,(xn,yn)},寻找一组次数为 n 的多项式基函数 li 使得

li(xj)={1,ifi=j0,ifij

  • 插值问题的解为

P(x)=y0l0(x)+y1l1(x)++ynln(x)=i=0nyili(x)

怎么计算多项式 li(x)

  • n 阶多项式,且有以下 n 个根

x0,x1,,xi1,xi+1,,xn

  • 故可表示为

li(x)=Ci(xx0)(xx1)(xxi1)(xxi+1)(xxn)=Cii=0jin(xxj)

  • li(xi)=1 可以得到

1=Cii=0jin(xixj)Ci=1i=0jin(xixj)

  • 最终的多项式基函数为

li(x)=i=0jin(xxj)i=0jin(xixj)

  • li(x) 被称为拉格朗日多项式

技巧2:更方便的求解表达

  • Newton 插值:具有相同 “导数”(差商)的多项式构造(n 阶 Taylor 展开)

差商定义

  • 一阶差商

f[x0,x1]=f(x1)f(x0)x1x0

  • k 阶差商
    • {x0,x1,,xn} 互不相同,f(x) 关于 {x0,x1,,xn} 的 k 阶差商如下

f[x0,,xk]=f[x1,,xk]f[x0,,xk1]xkx0

  • 所以 Newton 插值多项式表示为

Nn(x)=f(x0)+f[x0,x1](xx0)++f[x0,,xn](xx0)(xxn1)

  • 有一点巧妙

多项式插值存在的问题

  • 系数矩阵稠密
  • 依赖于基函数选取,矩阵可能病态,导致难于求解(求逆)

病态矩阵举例

  • 对于扰动很敏感
  • 对于如下方程组

{x1+0.5x2=1.50.667x1+0.333x2=1{x1=1x2=1

  • 对等式右边进行扰动 0.001

{x1+0.5x2=1.50.667x1+0.333x2=0.999{x1=0x2=3

  • 对系数矩阵进行扰动 0.001

{x1+0.5x2=1.50.667x1+0.334x2=1{x1=2x2=1

病态问题

  • 输入数据的细微变化导致输出(解)的剧烈变化
  • 将线性方程看成直线(超平面)
    • 当系统病态时,直线变为近似平行
    • 求解(即直线求交)变得困难、不精确

矩阵条件数

  • 通过矩阵条件数刻画病态程度

κ2(A)=maxx0Axxminx0Axx

  • 等于最大特征值和最小特征值之间比例
  • 条件数大意味着基元之间有太多相关性

多项式插值问题是病态的

  • 对于等距分布的数据点 xi,范德蒙矩阵的条件数随着数据点数 n 呈指数级增长
    • 多项式最高次数为 n1

幂函数带来的问题

  • 幂(单项式)函数基
    • 幂函数之间差别随着次数增加而减小
    • 不同幂函数之间唯一差别为增长速度(xixi1 增长快)

  • 单项式
    • 从左往右
    • 首先常数 1 主宰
    • 接着 x 增长最快
    • 接着 x2 增长最快
    • ···

  • 趋势
    • 好的基函数一般需要系数交替
    • 互相抵消问题

解决方法

  • 使用正交多项式基
  • 如何获得?
    • Gram‐Schmidt 正交化

多项式插值结果

  • 振荡(龙格 Runge)现象和对插值点数的高度敏感性

结论

  • 多项式插值不稳定
    • 控制点的微小变化可导致完全不同的结果
  • 振荡(Runge)现象
    • 多项式随着插值点数(可以是细微)增加而摆动
  • 需要更好的基函数来做插值
    • Bernstein 基函数
    • 分片多项式

多项式逼近

为什么逼近

  • 数据点含噪声、outliers 等
  • 更紧凑的表达
  • 计算简单、更稳定

最小二乘逼近

逼近问题

  • 给定一组线性无关的连续函数集合 B={b1,,bn} 和一组节点 {(x1,y1),,(xm,ym)}
    • 其中 mn
  • 在 B 张成空间中那个函数 fspan{B} 对节点的逼近最好
  • 示例:给定一组点,找到最佳逼近的线性函数
  • 怎么定义 “最佳逼近”?

最小二乘逼近

argminfspan{B}j=1m(f(xj)yj)2

  • 系数 λ1,,λn

M=(b1(x1)bn(x1)b1(xn)bn(xn))

  • 转化

j=1m(f(xj)yj)2=j=1m(i=1nλibi(xj)yj)2=(Mλy)T(Mλy)=λTMTMλyTMλλTMTy+yTy=λTMTMλ2yTMλ+yTy

求解

  • 怎么求 λ
  • 关于 λ 的二次多项式

λTMTMλ2yTMλ+yTy

  • 法方程,最小解满足
    • 求导即可

MTMλ=yTM

  • 转化为最小化二次目标函数
    • 最小化二次目标函数 xTAx+bTx+c
    • 充要条件:2Ax=b

函数空间及基函数

为什么用多项式

  • 易于计算,表现良好,光滑
  • 稠密性与完备性
    • 表达能力足够
    • 维尔斯特拉斯定理 (Weierstrass)

维尔斯特拉斯定理

  • f 为闭区间 [a,b] 上的任意连续函数,则对任意给定的 ϵ,存在 n 会让多项式 Pn 满足

|f(x)Pn(x)|<ϵ,x[a,b]

  • 定理只证明了存在性,未给出多项式
  • 实际应用中 n 需要通过尝试确定

伯恩斯坦多项式

  • 用 Bernstein 多项式做逼近
  • [0,1] 区间上任意连续函数 f(x) 和任意正整数 n,以下不等式对所有的 x[0,1] 成立

|f(x)Bn(f,x)|<94mf,n

  • mf,n 如下

mf,n=lowerupperbound|f(y1)f(y2)|

y1,y2[0,1]|y1y2|<1n

  • Bn(f,x) 如下,其中 xj=jn[0,1] 上的等距采样点

Bn(f,x)=j=0nf(xj)bn,j(x)

  • 伯恩斯坦多项式如下

bn,j=(nj)xj(1x)nj

  • 不同次数的伯恩斯坦多项式的基空间

  • 矩阵:不同的基函数空间的变换

用 Bernstein 多项式做逼近

  • Bernstein 基函数的良好性质:非常好的几何意义!
    • 正性、权性(和为1) 凸包性
      • bn,j>0(非边界)
      • jbn,j(x)=1
    • 变差缩减性
    • 递归线性求解方法
    • 细分性
    • ···
  • Bernstein多项式逼近示例
    • 逼近结果优秀
    • 需要高阶
  • 丰富的理论:CAGD 课程(计算机辅助几何设计)

Bernstein 函数

Bn(f,x)=j=0nf(jn)bn,j(x)

  • 蓝色为采样点,红色线为 Bernstein 多项式拟合出来的结果
  • n,即采样点足够多的时候,Bn(f,x) 一致收敛到 f(x)
两种观点
  • 代数观点
    • 权性
    • f(in) 看作是一系列的点,bn,f(x) 对其进行加权,得到新的点
  • 几何观点
    • bn,f(x) 是一系列的函数,使用系数 f(in) 去组合它,得到新的函数
  • 这两种观点可以用于之后的交互式设计控制顶点、曲线的设计

RBF 函数插值/逼近

  • 低维中叫高斯函数

高斯函数

  • Gauss
  • 两个参数:均值 μ,方差 σ

gμ,σ(x)=12πexp((xμ)22σ2)

  • 几何意义
    • μ:位置
    • σ:支集宽度

  • 标准高斯函数

g0,1=12πexp(x22)

  • 不同均值和方差的高斯函数都线性无关
    • 可以作为一组基函数

RRF 函数拟合

  • RBF 函数

f(x)=b0+i=1nbigi(x)

  • 一个通用的方法
    • 给定一些采样点,在这些采样点的周围放置一些基函数
    • 待定系数,求导得出结果

  • 一些问题
    • 需要人为选取 μ,σ

  • 怎么控制选取 μ,σ
    • 能否将 σ,μ 一起来优化?
      • 可以的

从另一个角度来看拟合函数

Guass 拟合函数

  • 一般 Gauss 函数表达为标准 Gauss 函数的形式

gμ,σ(x)=12πexp((xμ)22σ2)=12πexp(12(xσμσ)2)=g0,1(1σxμσ)=g0,1(ax+b)

  • 将上面的函数进行转化
    • 此时可以同时优化 μ,σ

f(x)=b0+i=1nbigi(x)

f(x)=ω0+i=1nωig0,1(aix+bi)

  • 基函数是由一个基本函数通过平移和伸缩变换而来的

  • 理论上可以证明:ai,bi 足够多,上述多项式也能逼近所有的函数

换个方式看函数:神经网络

  • 将Gauss函数看成网络
    • (x,1) 是齐次坐标的用法,可以把平移也结合进去

  • 这就是 RBF 网络
  • n 对应隐层结点个数,激活函数是标准高斯函数

抽象:神经元

RBF 神经网络

  • 高维情形:RBF (Radial Basis Function),径向基函数
  • 一种特殊的 BP 网络
    • 优化:BP 算法
      • 反向传播
  • 核函数思想
  • Gauss 函数的特性:拟局部性
  • ai,bi时候需要求导,结果是非线性非凸的,很难求出极值
    • 落入局部极值
    • 初值选取很重要
  • 神经网络就是一个函数

思考:激活函数的选择

  • 启发:由一个简单的函数通过(仿射)变换构造出一组基函数,张成一个函数空间
  • 表达能力是否足够强:是否完备/稠密的?

高维情形:多元函数

  • 每一个神经元的输入是 (x1,,xn) 的齐次坐标 (x1,,xn,1)
    • 变量的多个分量的线性组合: g0,1(ai1x1++anixn+bi)
  • 单隐层神经网络函数

f(x1,,xn)=ω0+i=1nwig0,1(ai1x1++anixn+bi)

多层神经网络

  • 单层

  • 多层
    • 线性函数和非线性函数的多重复合

用神经网络函数来拟合数据

  • 回归问题
  • Regression problem:
    • Input: Given training set (x1, y1), (x2, y2), (x3, y3 ),...
    • Output: Adjust parameters θ (for every node) to make: h(xi)yi

万能逼近定理:自由度足够多

  • 与传统拟合一样存在同样的问题:函数个数如何选?
    • 调参

使用深度学习的方法

  • 问题建模
    • 理解问题、问题分解(多个映射级联)、…
  • 找哪个?
    • 损失函数、各种 Penalty、正则项、…
  • 到哪找?
    • 神经网络函数、网络简化、···
  • 怎么找?
    • 优化方法(BP方法)
    • 初始值、参数、···
  • 调参:有耐心、有直觉、···