序列数据处理问题
背景
常见的机器学习问题都是有给定的输入输出样本数据:
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的,然后找的是:
y
=
f
(
x
)
y=f(x)
y=f(x)。然而还存在一类问题,这类问题研究对象是序列数据:
x
1
,
x
2
,
⋯
,
x
n
x_1,x_2,\cdots,x_n
x1,x2,⋯,xn,目的是找出序列数据背后的结构:
x
t
=
f
(
x
t
−
1
,
x
t
−
2
,
x
t
−
3
,
⋯
,
x
1
)
x_t=f(x_{t-1},x_{t-2},x_{t-3},\cdots,x_1)
xt=f(xt−1,xt−2,xt−3,⋯,x1)。它的应用就是从已有的序列数据中学习出逻辑结构进而生成新序列。具体演示过程就是:
问题分析
对于这种寻找数据结构的问题也可以把它看成是有输入输出的问题,即把
x
1
,
x
2
,
⋯
,
x
n
x_1,x_2,\cdots,x_n
x1,x2,⋯,xn看成:
(
x
1
,
x
2
)
,
(
(
x
1
,
x
2
)
,
x
3
)
,
(
(
x
1
,
x
2
,
x
3
)
,
x
4
)
,
⋯
,
(
(
x
1
,
⋯
,
x
n
−
1
)
,
x
n
)
(x_1,x_2),((x_1,x_2),x_3),((x_1,x_2,x_3),x_4),\cdots,((x_1,\cdots,x_{n-1}),x_n)
(x1,x2),((x1,x2),x3),((x1,x2,x3),x4),⋯,((x1,⋯,xn−1),xn),对于这种问题,由于输入不等长,需要用到可变的权重系数,当然也可以用固定长度的加权系数,或者是长度随作用位置变化的权重系数向量。同时有可能对于同样的输入但是输出不同,所以这个问题模型应该是概率模型:
p
(
x
t
∣
x
1
,
⋯
,
x
t
−
1
)
p(x_t|x_1,\cdots,x_{t-1})
p(xt∣x1,⋯,xt−1)
通过搜集到的序列数据转化成的输入输出数据,可以训练这个模型
p
(
x
2
∣
x
1
)
,
p
(
x
3
∣
x
1
,
x
2
)
,
⋯
,
p
(
x
t
∣
x
1
,
⋯
,
x
t
−
1
)
p(x_2|x_1),p(x_3|x_1,x_2),\cdots,p(x_t|x_1,\cdots,x_{t-1})
p(x2∣x1),p(x3∣x1,x2),⋯,p(xt∣x1,⋯,xt−1)。
目标是:
max
∏
x
2
P
(
x
2
∣
x
1
)
,
∀
x
1
;
max
∏
x
3
P
(
x
3
∣
x
1
,
x
2
)
,
∀
x
1
,
x
2
,
⋯
\max \prod_{x_2}P(x_2|x_1),\forall{x_1};\max \prod_{x_3}P(x_3|x_1,x_2),\forall{x_1,x_2},\cdots
max∏x2P(x2∣x1),∀x1;max∏x3P(x3∣x1,x2),∀x1,x2,⋯
模型训练好以后的使用:通过对上述模型进行采样,从而生成一个序列,由于采样本身具有随机性,所以对于同一个模型,生成的序列也可能是不同的。
对于翻译任务可以看成:1.在序列生成的基础上有了辅助性的信息。
拟合模型
拟合模型可以采用深度学习四大模型。
用RNN模型
参考文献:
Arxiv:Generating Sequences With Recurrent Neural Networks
本论文中采用的LSTM(long short-term memory)。
结论如下:
1.RNN的训练模型、目标、方法如上节:问题分析所示。
2.RNN是模糊的,因为估计的是概率密度函数,所以抽样的不确定性导致了产生序列的不确定性。
3.在存在不确定性的基础上,要想产生的序列足够好,需要保留尽可能多的序列信息,即
p
(
x
n
∣
x
n
−
1
,
x
n
−
2
,
⋯
,
x
n
−
t
)
p(x_n|x_{n-1},x_{n-2},\cdots,x_{n-t})
p(xn∣xn−1,xn−2,⋯,xn−t),
t
t
t越大,估计的效果越好。越不容易出现根据自己的估计去估计的情况。LSTM可以较好的应对这个问题。
下面是原文解析:
2 Prediction Network
对于生成序列
x
1
,
x
2
,
x
3
,
⋯
,
x
n
x_1,x_2,x_3,\cdots,x_n
x1,x2,x3,⋯,xn的问题,我们需要一个字符一个字符的生成,这就相当于每次都是在已有序列的基础上从条件概率中进行抽样
p
(
x
t
∣
x
1
,
x
2
,
⋯
,
x
t
−
1
)
p(x_t|x_1,x_2,\cdots,x_{t-1})
p(xt∣x1,x2,⋯,xt−1),所以整个序列所对应的概率为:
p
(
x
1
)
∗
p
(
x
2
∣
x
1
)
∗
⋯
∗
p
(
x
n
∣
x
1
,
x
2
,
⋯
,
x
n
−
1
)
p(x_1)*p(x_2|x_1)*\cdots*p(x_n|x_1,x_2,\cdots,x_{n-1})
p(x1)∗p(x2∣x1)∗⋯∗p(xn∣x1,x2,⋯,xn−1)。是一个条件概率的乘积模型,所以可以用论文中的结构:
即通过
y
1
y_1
y1去建模
p
(
x
2
∣
x
1
)
p(x_2|x_1)
p(x2∣x1)这个模型,这样讲还是太抽象,可以从这个模型的用途入手进行分析。
从模型
p
(
x
2
∣
x
1
)
p(x_2|x_1)
p(x2∣x1)中进行采样我们可以得到
x
2
x_2
x2,假设我们的字符集中字符数量为
n
n
n,那么就是说这个模型
p
(
x
2
∣
x
1
)
p(x_2|x_1)
p(x2∣x1)可以采样出
x
2
x_2
x2所有
n
n
n个可能的值,也就是
p
(
x
2
∣
x
1
)
∼
[
p
1
,
p
2
,
⋯
,
p
n
]
p(x_2|x_1)\sim [p_1,p_2,\cdots,p_n]
p(x2∣x1)∼[p1,p2,⋯,pn],即模型近似为一个多元分布,而
y
1
y_1
y1就是这个多元分布的参数:
p
1
,
p
2
,
⋯
,
p
n
p_1,p_2,\cdots,p_n
p1,p2,⋯,pn,通过这个采样可以得到
x
2
x_2
x2;
对于
p
(
x
3
∣
x
1
,
x
2
)
p(x_3|x_1,x_2)
p(x3∣x1,x2)也是这样,结果也应该类似于一个多元分布,但是对于
p
(
x
3
∣
x
1
,
x
2
)
p(x_3|x_1,x_2)
p(x3∣x1,x2),他可能的输入
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)有
n
2
n^2
n2种可能,所以如何把这
n
2
n^2
n2个点映射到
[
p
1
,
p
2
,
⋯
,
p
n
]
∈
R
n
,
∑
i
=
1
n
p
i
=
1
[p_1,p_2,\cdots,p_n]\in R^n,\sum_{i=1}^{n}p_i=1
[p1,p2,⋯,pn]∈Rn,∑i=1npi=1上需要设计一下。一种可能的方案就是对于每个
p
i
p_i
pi来说都是一个全连接,即对于每个
p
i
p_i
pi来说这
n
2
n^2
n2个点都是自定义域中的一个点,即:
p
i
=
f
i
(
x
1
1
,
x
1
2
,
⋯
,
x
1
n
,
x
2
1
,
⋯
,
x
2
n
)
p_i=f_i({x_1}_1,{x_1}_2,\cdots,{x_1}_n,{x_2}_1,\cdots,{x_2}_n)
pi=fi(x11,x12,⋯,x1n,x21,⋯,x2n)
之所以每个
x
i
x_i
xi都有
n
n
n个分量是因为我们对字符集里的
n
n
n个字符进行了one-hot
编码,也就是用一个长度为
n
n
n的单位向量来对每个字符进行标记。这样子
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)这
n
2
n^2
n2个点由
(
i
,
j
)
(i,j)
(i,j)两个数字坐标变化成由one-hot
向量所构成的
n
×
2
n\times2
n×2的矩阵,但我们一般是把这两个向量拼起来变为一个向量而不是并排,变成
2
n
×
1
2n\times1
2n×1,将
2
n
×
1
2n\times 1
2n×1矩阵映射为一个
n
×
1
n\times1
n×1的分布向量
y
i
y_i
yi可以通过全连接方式实现,即:
W
n
×
2
n
×
X
2
n
×
1
=
Y
n
×
1
W_{n\times2n}\times X_{2n\times 1}=Y_{n\times1}
Wn×2n×X2n×1=Yn×1
对于在更长的记忆基础上生成的模型
p
(
x
t
∣
x
1
,
x
2
,
x
t
−
1
)
p(x_t|x_1,x_2,x_{t-1})
p(xt∣x1,x2,xt−1),这个模型乘以的矩阵大小就是
n
×
(
t
−
1
)
n
n\times(t-1)n
n×(t−1)n。即:
W
n
×
(
t
−
1
)
n
×
X
(
t
−
1
)
n
×
1
=
Y
n
×
1
W_{n\times(t-1)n}\times X_{(t-1)n\times1}=Y_{n\times1}
Wn×(t−1)n×X(t−1)n×1=Yn×1
我们可以想象数据点
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)所对应的
y
3
y_3
y3所具有的结构,即在三维空间中想象可能存在的点,为了方便想象这时
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)采用数据点坐标的形式。每个点都对应了一个
y
3
y_3
y3,由于
y
i
y_i
yi是多维向量,所以我们可以进一步细化一下,考虑
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)于
p
1
p_1
p1之间的关系,就是三维空间中的一个个点,通过
W
1
×
2
W_{1\times 2}
W1×2能不能实现对三维空间中点之间的关系进行近似。不太好,这个只有两个变量,只能实现对平面上点的近似,对于点并不分布在同一平面上的不太好逼近。不过此时我们可以使用插值函数来拟合,插值的原理可以看:CSDN:注意力机制学习(全公式)
虽然文中介绍的是一元插值,不过也可以拓展到多元插值。
回到此文,当采用多元插值时,虽然可以对原始数据进行较好的拟合,但是方程的阶次会比较高,因为对于
p
(
x
3
∣
x
1
,
x
2
)
p(x_3|x_1,x_2)
p(x3∣x1,x2)这个模型来说,输入的点就有
n
2
n^2
n2个,也就是有
n
2
n^2
n2个
(
x
1
,
x
2
)
∼
x
3
(x_1,x_2)\sim x_3
(x1,x2)∼x3,其实上面有点说错了,考虑到
(
x
1
,
x
2
)
∼
x
3
(x_1,x_2)\sim x_3
(x1,x2)∼x3应该是有
n
3
n^3
n3种可能情况。其实上面也说错了,这时候不是完全照搬拉格朗日插值函数,无法做到每个点都能取到某个确定的值,因为一个点可能对应多个值,所以这个函数应该是个概率分布函数,也就是:
如图所示,在每个点处依旧是一个概率分布,所以在每个点需要用:
f
(
w
11
x
1
+
w
21
x
2
)
∼
p
1
f
(
w
12
x
1
+
w
22
x
2
)
∼
p
2
⋮
f
(
w
1
n
x
1
+
w
2
n
x
2
)
∼
p
n
\begin{split} f(w_{11}x_1+w_{21}x_2)\sim& p_1 \\f(w_{12}x_1+w_{22}x_2)\sim&p_2 \\\vdots& \\f(w_{1n}x_1+w_{2n}x_2)\sim&p_n \end{split}
f(w11x1+w21x2)∼f(w12x1+w22x2)∼⋮f(w1nx1+w2nx2)∼p1p2pn
来仿真每个位置上的概率分布。
而对于一个点是这样,对于所有
n
2
n^2
n2个点就是:
n
2
∗
2
∗
n
n^2*2*n
n2∗2∗n,一共是
2
n
3
2n^3
2n3个参数要确定,比上面的
W
n
∗
2
n
W_{n*2n}
Wn∗2n多了(n-1)倍的参数量。
所以说上面的考虑是错误的,模型的预测采用条件概率的乘积去预测是正确的,但是后面对模型的分析出错误了。不应该是对于整个
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)采用一个参数,这样得到的结果对于每个
p
i
p_i
pi来说就是一个平面,而应该是对每个位置有一套参数才行。
当然还有另一种设计方法,就是既然
y
i
y_i
yi就是这个模型的参数,所以它包含了之前的信息
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2),所以我们可以借助于
y
2
,
x
3
y_2,x_3
y2,x3去生成
y
3
y_3
y3,进而估计出
p
(
x
4
∣
x
1
,
x
2
,
x
3
)
p(x_4|x_1,x_2,x_3)
p(x4∣x1,x2,x3)。
从原文中就可以看出这个想法,就是借助于隐藏层状态然后生成所有隐藏层状态也就是
y
i
y_i
yi,同时一层深度不够用,所以用很多层估计出多个隐藏层状态。相当于用多个神经网络来实现对任意函数的逼近。
本文中的模型大致如上所示,由于本人水平不够,很多还有待细化。如果网络我实现了,我会把结果发上来。
2.1 Long Short-Term Memory
使用LSTM可以更好地利用长程依赖。
参考论文:
IEEEXplore:Long Short-Term Memory(DOI:10.1162/neco.1997.9.8.1735)
4.1 Mixture Density Outputs
对于预测笔的轨迹问题,模型 p ( x t ∣ x 1 , x 2 , ⋯ , x t − 1 ) p(x_t|x_1,x_2,\cdots,x_{t-1}) p(xt∣x1,x2,⋯,xt−1)的输出不再是在固定类别中选择一个输出,而是任意位置都有可能。假如说生成的笔的位置用坐标 ( a , b ) (a,b) (a,b)来表示,那么就有 ( a , b ) ∈ p ( x t ∣ x 1 , x 2 , ⋯ , x t − 1 ) (a,b)\in p(x_t|x_1,x_2,\cdots,x_{t-1}) (a,b)∈p(xt∣x1,x2,⋯,xt−1),在已有数据的基础上,不同位置处的概率分布是不同的,所以每个位置都需要一套参数,而在一个位置上所对应的 x 3 x_3 x3的分布可能也是有波峰波谷多个波段,仅仅用一个二元高斯分布是不能进行完整贴合的。我们以最常见的二元高斯分布为例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
mean=np.array([0,0])
cov=np.array([[1,0.5],[0.5,1]])
Gaussian=multivariate_normal(mean=mean, cov=cov)
M = 1000
# 生成二维网格平面
X, Y = np.meshgrid(np.linspace(-1,1,M), np.linspace(-1,1,M))
# 二维坐标数据
d = np.dstack([X,Y])
# 计算二维联合高斯概率
Z = Gaussian.pdf(d)
'''二元高斯概率分布图'''
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.contourf(X, Y,Z)
plt.show()
可以看出,协方差矩阵的影响只是会导致变量之间是相关的,并不会导致多峰,所以要想更好的拟合
p
(
x
3
∣
x
1
,
x
2
)
p(x_3|x_1,x_2)
p(x3∣x1,x2)可能具有的多峰概率分布情况,需要使用混合高斯分布。
不过此时混合高斯分布也有超参数需要确定,包括混合的项数以及混合的参数,如果采用拉格朗日插值的原理,比如一个高峰用一个高斯分布去近似,也不是不行,当然也可以采用泰勒级数的形式,把待估计的分布用级数和的形式表示,具体怎么实施我还没有想好,需要再思考一下:
泰勒级数的形式:
f
(
x
)
=
∑
i
=
1
+
∞
(
x
−
x
0
)
n
f
(
n
)
(
x
0
)
n
!
f(x)=\sum_{i=1}^{+\infty}(x-x_0)^n\frac{f^{(n)}(x_0)}{n!}
f(x)=i=1∑+∞(x−x0)nn!f(n)(x0)
三角级数的形式:
f
(
x
)
=
∑
n
=
0
+
∞
[
a
n
cos
(
n
w
0
x
)
+
b
n
sin
(
n
w
0
x
)
]
=
∑
n
=
0
+
∞
[
T
2
∫
−
T
2
T
2
f
(
x
)
cos
(
n
w
0
x
)
d
x
cos
(
n
w
0
x
)
+
T
2
∫
−
T
2
T
2
f
(
x
)
sin
(
n
w
0
x
)
d
x
sin
(
n
w
0
x
)
]
=
lim
T
−
>
+
∞
∫
0
+
∞
T
2
2
∫
−
T
2
T
2
f
(
x
)
cos
(
w
x
)
d
x
cos
(
w
x
)
+
T
2
2
∫
−
T
2
T
2
f
(
x
)
sin
(
w
x
)
d
x
sin
(
w
x
)
d
w
\begin{split} f(x)=&\sum_{n=0}^{+\infty}[a_n\cos(nw_0x)+b_n\sin(nw_0x)] \\=&\sum_{n=0}^{+\infty}[\frac{T}{2}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(x)\cos(nw_0x)dx\cos(nw_0x)+\frac{T}{2}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(x)\sin(nw_0x)dx\sin(nw_0x)] \\=&\lim_{T->+\infty}\int_{0}^{+\infty}\frac{T^2}{2}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(x)\cos(wx)dx\cos(wx)+\frac{T^2}{2}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(x)\sin(wx)dx\sin(wx)dw \end{split}
f(x)===n=0∑+∞[ancos(nw0x)+bnsin(nw0x)]n=0∑+∞[2T∫−2T2Tf(x)cos(nw0x)dxcos(nw0x)+2T∫−2T2Tf(x)sin(nw0x)dxsin(nw0x)]T−>+∞lim∫0+∞2T2∫−2T2Tf(x)cos(wx)dxcos(wx)+2T2∫−2T2Tf(x)sin(wx)dxsin(wx)dw
可能的高斯分布级数形式,我们先假设波峰具有周期性,同时先考虑一维情况:
1
2
π
σ
exp
(
−
(
sin
(
ω
0
x
)
−
μ
)
2
2
σ
2
)
\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(\sin(\omega_0 x)-\mu)^2}{2\sigma^2})
2πσ1exp(−2σ2(sin(ω0x)−μ)2)
画下形状。
x=np.linspace(-20,20,30000)
y=np.exp(-(np.sin(x)-1)**2)
plt.plot(x,y)
plt.show()
是周期性的,由于三角函数虽然是周期的但是可以用于生成任意函数,所以这个指数周期基函数也可以用于生成任意函数,只要它的频率可以调整,而频率恰恰就是三角函数本身的频率。
上述分析提醒我们,对于概率函数的逼近也可以采用三角函数的级数来逼近,所以我们的
y
t
y_t
yt参数可以是三角级数的相关参数。但是同样的问题,需要手动调节超参数,有没有办法不用手动调节超参数,就像拉格朗日插值函数一样?
拉格朗日插值函数与三角函数的结合。就是给定一些数据点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),能不能由此确定用来拟合的三角函数项有哪些?
首先正向分析,不同频率的三角函数的均值和方差是一样的,所以样本的均值和方差是无法使用的,但是利用本文所介绍的序列结构知识,说不定可以用?样本数据除了均值和方法不就只剩序列结构信息了,所以应该是通过序列结构信息确定拉格朗日形式的插值函数。
当然还有一种方法,使用之前我的其他文章中讲过的窗口函数的级数来构建这个表达式,也就是先用几个三角级数近似窗口函数作为基函数,然后再在每个数据点上使用窗口级数,这样近似效果也有了,同时也不用手动确定超参数。
5 Handwriting Synthesis
这个内容的要求是在给定文本的基础上,生成对应文本的手写体,而不再是任意的生成手写体,这个要求存在对应关系,大大解决了上面第4节handwriting prediction的不可解释性。这个训练数据不再是单一序列数据,而是序列对数据,也就是原始字符序列数据和生成的笔记序列数据。即:
(
c
h
a
r
−
s
e
q
u
e
n
c
e
:
{
x
1
,
x
2
,
⋯
,
x
n
}
,
t
r
a
c
e
−
s
e
q
u
e
n
c
e
:
{
x
11
,
x
12
,
⋯
,
x
1
i
1
,
T
e
n
d
;
x
21
,
x
22
,
⋯
,
x
2
i
2
,
T
e
n
d
;
⋯
,
x
n
1
,
⋯
,
x
n
i
n
}
)
(char-sequence:\{x_1,x_2,\cdots,x_n\},trace-sequence:\{x_{11},x_{12},\cdots,x_{1i_1},T_{end};x_{21},x_{22},\cdots,x_{2i_2},T_{end};\cdots,x_{n1},\cdots,x_{ni_n}\})
(char−sequence:{x1,x2,⋯,xn},trace−sequence:{x11,x12,⋯,x1i1,Tend;x21,x22,⋯,x2i2,Tend;⋯,xn1,⋯,xnin})
其中
t
r
a
c
e
−
s
e
q
u
e
n
c
e
trace-sequence
trace−sequence中每一个
x
i
j
x_{ij}
xij都是一个坐标数据,表示这个笔迹点的位置。以上就是手写合成的训练数据的样子。
手写合成的本质依旧是序列数据生成,不过有个特殊之处在于,序列的生成是有原型的,不能任意生成,在生成过程中除了利用模型数据以外,还需要使用原型数据作为监督。
我还没想清楚这个监督序列怎么用公式表示,我需要看一下学习一下。
参考论文:
Arxiv:Sequence Transduction with Recurrent Neural Networks(1211.3711)
作者在文中把这两个序列数据对分别当成两个独立的序列去处理,但是这两个独立的模型结合的效果并不好。
Skip-connection:应该类似于Residual connection,即:
y
=
f
(
x
)
+
x
y=f(x)+x
y=f(x)+x。
5.1 Synthesis Network
混合高斯分布卷积(convolution with a mixture of K Gaussian functions):就是把混合高斯分布作为卷积核函数,然后与原始字符串数据进行卷积,
问题的关键点在于卷积核函数的作用是什么?为什么要用这种样子的卷积核函数?明明随便函数都可以用作卷积核函数,为什么偏偏是混合高斯函数作为卷积核函数,同时混合高斯的超参数怎么确定,也就是有几个高斯成分?
回想一下我们的目的,就是根据字符串数据生成笔迹序列数据,所以我们要根据原始字符串数据知道在什么位置应该写什么字符,然后把这个信息给笔迹序列模型,它根据自己本身的数据、生成的数据和笔记序列数据来共同决定下一步的笔迹位置。
所以要做的就是根据字符串序列数据确定不同位置上的字符,这个跟序列数据生成也差不多了。
emmmm,还是好难,怎么通过卷积实现对齐,可能看不完了。
Transformer模型
MLP模型
CNN模型
涉及问题
上述模型各有各的优点,但是也有一些共同面对的问题。
长程依赖(long-range dependency)
阅读论文时,尤其是在阅读涉及到对序列数据进行处理的相关论文时,往往会遇到长程依赖这个名词。经过查询WIKIPEDIA才知道这个名词的意思是同一序列中距离比较远的两个变量之间也具有相关关系就叫做长程依赖。
参考:WIKIPEDIA:Long-range dependence
截图见下面:
翻译如下:
长程依赖(LRD),也称为长记忆或长程持久性,是在分析空间或时间序列数据时可能出现的一种现象。它与两点的统计相关性随两点之间的时间间隔或空间距离的增加而衰减的速率有关。如果依赖性衰减比指数衰减(通常是类幂衰减)慢,则通常认为一种现象具有长程依赖性。 LRD 通常与自相似过程或领域有关。 LRD 已被用于互联网流量建模、计量经济学、水文学、语言学和地球科学等各个领域。 LRD 的不同数学定义用于不同的上下文和目的。
问题定义
根据定义我们可以写出如下的表达式:
c
o
v
(
s
0
,
s
t
)
=
e
x
p
(
−
t
)
c
o
v
(
s
0
,
s
0
)
cov(s_0,s_t)=exp^{(-t)}cov(s0,s0)
cov(s0,st)=exp(−t)cov(s0,s0)
如果两个点之间的统计相关性与距离之间的关系与上式接近,就是不存在长程依赖,否则就存在长程依赖。即:
如果:
c
o
v
(
s
0
,
s
t
)
>
e
x
p
(
−
t
)
c
o
v
(
s
0
,
s
0
)
cov(s_0,s_t)>exp^{(-t)}cov(s0,s0)
cov(s0,st)>exp(−t)cov(s0,s0)
说明衰减慢,也就是存在长程依赖。
如果:
c
o
v
(
s
0
,
s
t
)
<
e
x
p
(
−
t
)
c
o
v
(
s
0
,
s
0
)
cov(s_0,s_t)<exp^{(-t)}cov(s0,s0)
cov(s0,st)<exp(−t)cov(s0,s0)
说明衰减比指数衰减还快,也就是不存在长程依赖。
这个定义理解起来容易理解,但证明思路不一定可以想出来。同时这个对比的基线(baseline)为什么是指数分布?这一点也很困惑。下面的原理分析是以相关、无关为基础的。
原理解释
可能是通过概率论证明的?可以用假设检验的方法。
假设一个序列为
s
=
[
s
0
,
s
1
,
⋯
,
s
n
]
s=[s_0,s_1,\cdots,s_n]
s=[s0,s1,⋯,sn],他的每个元素都是变量,相距为
t
t
t的变量对有:
(
s
0
,
s
t
)
,
(
s
1
,
s
t
+
1
)
,
⋯
,
(
s
n
−
t
,
s
n
)
(s_0,s_t),(s_1,s_{t+1}),\cdots,(s_{n-t},s_n)
(s0,st),(s1,st+1),⋯,(sn−t,sn)。
未完成的证明
下面的证明仅是个人想法,不仅与标准的长程依赖定义有差别,还没有证明完。
假设一个序列是不存在
t
t
t及
(
>
t
)
(\gt t)
(>t)以后依赖情况,即:
s
n
=
f
(
s
n
−
t
,
⋯
,
s
n
−
2
,
s
n
−
1
)
s_{n}=f(s_{n-t},\cdots,s_{n-2},s_{n-1})
sn=f(sn−t,⋯,sn−2,sn−1)
s
n
s_n
sn只和前面的
t
t
t个序列元素相关,而与再之前或者之后的元素都无关,也就是相关系数应该为0。由于实际中随机性的存在,相关系数可能在有时不为0,但是噪声应该是个白噪声,白噪声就是均值为0,方差为1的正太分布随机变量。所以实际相关系数在不存在
t
t
t及
(
>
t
)
(\gt t)
(>t)以后依赖情况时应该是服从均值为0,方差为1的随机变量。否则就不能说不存在长程依赖。我们记相关系数为
C
O
V
COV
COV。则有:
c
o
v
(
s
n
,
s
e
n
d
)
∼
N
(
0
,
1
)
⋯
c
o
v
(
s
n
,
s
n
+
1
)
∼
N
(
0
,
1
)
c
o
v
(
s
n
,
s
n
−
t
−
1
)
∼
N
(
0
,
1
)
c
o
v
(
s
n
,
s
n
−
t
−
2
)
∼
N
(
0
,
1
)
⋯
c
o
v
(
s
n
,
s
0
)
∼
N
(
0
,
1
)
\begin{split} cov(s_n,s_{end})&\sim{N(0,1)} \\& \cdots \\cov(s_n,s_{n+1})&\sim{N(0,1)} \\cov(s_n,s_{n-t-1})&\sim{N(0,1)} \\cov(s_n,s_{n-t-2})&\sim{N(0,1)} \\& \cdots \\cov(s_n,s_{0})&\sim{N(0,1)} \end{split}
cov(sn,send)cov(sn,sn+1)cov(sn,sn−t−1)cov(sn,sn−t−2)cov(sn,s0)∼N(0,1)⋯∼N(0,1)∼N(0,1)∼N(0,1)⋯∼N(0,1)
要求上述公式对于每一个
n
n
n都成立,我们只考虑因果情况下的,也就是影响关系只有前面的影响后面的,而没有序列后面的元素影响序列前面的元素。假设序列为
s
=
[
s
0
,
⋯
,
s
n
]
s=[s_0,\cdots,s_n]
s=[s0,⋯,sn],长程范围为
t
t
t,那么这些式子一共有:
n
+
(
n
−
1
)
+
(
n
−
2
)
+
⋯
+
(
n
−
t
)
+
(
n
−
t
)
+
⋯
+
(
n
−
t
)
=
(
n
−
t
)
×
(
n
−
t
+
1
)
+
(
n
+
(
n
−
t
+
1
)
)
×
t
2
=
n
2
−
n
t
+
1
2
t
2
−
1
2
t
+
n
\begin{split} &n+(n-1)+(n-2)+\cdots+(n-t)+(n-t)+\cdots+(n-t) \\=&(n-t)\times(n-t+1)+(n+(n-t+1))\times{\frac{t}{2}} \\=&n^2-nt+\frac{1}{2}t^2-\frac{1}{2}t+n \end{split}
==n+(n−1)+(n−2)+⋯+(n−t)+(n−t)+⋯+(n−t)(n−t)×(n−t+1)+(n+(n−t+1))×2tn2−nt+21t2−21t+n
一共有
n
2
−
n
t
+
1
2
t
2
−
1
2
t
+
n
n^2-nt+\frac{1}{2}t^2-\frac{1}{2}t+n
n2−nt+21t2−21t+n个公式。这些随机变量是不相关的吗?或者说这
n
2
−
n
t
+
1
2
t
2
−
1
2
t
+
n
n^2-nt+\frac{1}{2}t^2-\frac{1}{2}t+n
n2−nt+21t2−21t+n个随机变量是独立的正太分布随机变量吗?要是的话我就开始变身了。
可能要用到F分布或者卡方分布?
首先用所有随机变量的平均值定义来说,对于所有随机变量的平均值来说,也是服从正态分布不过参数有变化:
x
‾
∼
N
(
0
,
1
n
2
−
n
t
+
1
2
t
2
−
1
2
t
+
n
)
\overline{x}\sim{N(0,\frac{1}{n^2-nt+\frac{1}{2}t^2-\frac{1}{2}t+n})}
x∼N(0,n2−nt+21t2−21t+n1)
当一次采样所得到的结果偏离均值过多的话就可以说这个假设不成立,也就是说 s n s_n sn只和前面的 t t t个序列元素相关这个假设不成立,即存在更大范围内的依赖关系。