13

信息聚合漫谈:加权平均思路

 2 years ago
source link: https://allenwind.github.io/blog/9606/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

信息聚合漫谈:加权平均思路

在CNN中,常常使用AveragePooling方法和基于AdditiveAttention的加权Pooling方法。事实上,在深度学习中常常使用加权平均来聚合向量序列,如把词向量序列聚合成句向量;还有如时间序列的平滑处理,例如股票投资中的均线,量化投资中的趋势因子代理指标。

本文不是纯粹NLP中词向量相关文章,只是从数学角度介绍,有哪些加权平均方案。

随机变量或随机向量序列X=[X1,X2,…,Xn]​,对其进行加权平均能够获得信息聚合意义上的向量,不同的加权方法有着不同的物理意义和应用。例如词向量序列,在GlobalMeanPooling或GlobalMaxPooling下获得不同的信息聚合上的意义。

最简单的就是直接平均,

ˉx=1nn∑i=1xi

在神经网络中,直接sum也可以当做加权平均,因为下游网络也会scaling回来。在深度学习中对应的就是GlobalMeanPooling。

这种平均方法如果在无限长的序列(源源不断)中,可以固定一个窗口再做平均,称为cumulative moving average,

ˉxn=x1+⋯+xnnˉxn+1=xn+1+n⋅ˉxnn+1

通过简单的推导有递归形式,

ˉxn+1=xn+1+n⋅ˉxnn+1=xn+1+(n+1−1)⋅ˉxnn+1=(n+1)⋅ˉxn+xn+1−ˉxnn+1=ˉxn+xn+1−ˉxnn+1

如果能够估计ˉxn​,那么该迭代方法在大型数据集中运用可以节省内存或显存。

假设xi​分别对应权重wi​,那么有加权平均,

ˉx=n∑i=1wixin∑i=1wi

加权平均的重点是如何计算wi​。一般我们任务权重wi来自某个概率分布,

wi∼p(x)

一般来说,我们要求wi≥0,且权重满足归一化,

n∑i=1wi=1,wi≥0

因此,权重满足该条件的加权平均构成一个Convex combination。权重的选择有很多方法,在机器学习任务中,可以认为权重的设计或选择也是人工特征工程的一部分。如果是从神经网络出发,那么权重自然是可以让网络去学习。

k矩归一化加权

取权重为,

wi=xin∑i=1xi

也就是说如果xi越大,其对应的权重wi越大。

加权平均有,

ˉx=n∑i=1wixi=n∑i=1x2in∑i=1xi

仿照以上形式,我们有,

wi=xkin∑i=1xki ˉx=n∑i=1wixi=n∑i=1xk+1in∑i=1xki

我称它为k矩归一化。注:k矩加权平均是我自己想的,类似与概率统计中的矩的计算,因此这样命名。

Power Mean

Power Mean定义为,

vp(x1,⋯,xn)=(xp1+⋯+xpnn)1p

其中p>0​。当p=1时就是均值。当p→+∞时,

limp→+∞vp(x1,⋯,xn)=max(x1,…,xn)

证明,这里不是一般性假设xj≥x1≥⋯≥0​,​

limp→+∞vp(x1,⋯,xn)=limp→+∞(1nn∑i=1xpi)1p=xj×limp→+∞(1nn∑i=1(xixj)p)1p=max(x1,…,xn)

类似地,当p→−∞,有vp(x1,⋯,xn)=min(x1,…,xn)。

基于位置加权

对于向量序列,考虑到权重wi所在的位置为i,因此有对应的位置权重,

wi=in∑i=1i

基于位置加权为,

ˉx=n∑i=1i×xin∑i=1i

时间序列中的Weighted moving average也是基于位置的加权平均,即

ˉxk=nxn+(n−1)pn−1+⋯+2p(n−k+2)+p(n−k+1)n+(n−1)+⋯+2+1

基于位置的加权还可以这样处理,

ˉx=n∑i=1i×exin∑i=1exi

这个与下面谈到的softmax加权相关。

指数加权平均

Exponential moving average,即指数加权平均或指数移动平均,

St={X1,t=1αXt+(1−α)⋅St−1,t>1

其中α是衰减系数。递推方法不利于并行,展开来看,t>1的权重为,

wi=(1−α)t−1

类似的思路可以推广的双指数和三指数回归。

双指数移动平均

Double exponential smoothing,即双指数移动平均,

s1=x1b1=x1−x0st=αxt+(1−α)(st−1+bt−1)bt=β(st−st−1)+(1−β)bt−1

如果使用该结果做时间序列预测,有,

Ft+m=st+mbt

最小方差加权平均

最小方差加权又称为逆方差加权(Inverse-variance weighting),期望随机变量序列加权平均后,方差最小。假设有随机变量序列,

X=[X1,…,Xn]

有方差Var(Xi)=σ2i和均值E[Xi]=μi。随机变量的加权平均,

X=n∑i=1ωiXis.t.n∑i=1ωi=1

随机变量的加权平均的方差,

Var(n∑iwiXi)=n∑i=1w2iVar(Xi)+2∑1≤i∑<j≤nwiwjCov(Xi,Xj)=n∑i=1ω2iσ2i

随机变量的加权平均的均值,

E[n∑i=1wiXi]=n∑i=1wiμi

然后通过广义拉格朗日函数可以解得权重,

ωi=λ2σ2i

由于 T∑i=iωi=1,代入消除 λ ,得到,

ωi=σ−2in∑i=1σ−2i

这就可以理解为什么最小方差加权平均也称为逆方差加权。求得权重后,容易计算加权平均后的方差,

var(e)=T∑i=1ω2iσ2i=T∑i=1(σ−2i∑Ti=1σ−2i)2σ2i=1T∑i=11σ2i

不难估计这个方差的上界,不难得到下式,

T∑i=11σ2i⩾max(1σ21,...,1σ2T) max(1σ21,...,1σ2T)=1min(σ21,...,σ2T)

对上述不等式左右两边分别取倒数,改变符号,

var(e)=1T∑i=11σ2i⩽min(σ21,...,σ2T)

也就是说逆方差加权平均获得的随机变量的方差比原来所有随机变量的方差都小。

这里给出一种Numpy实现,

import numpy as np

def inverse_variance_weighted_sum(vs, return_weights=False):
"""逆方差加权平均"""
mu = np.mean(vs, axis=1, keepdims=True)
var = 1 / (vs.shape[1] - 1) * np.sum(np.square(vs - mu), axis=1, keepdims=True)
ivar = 1 / var
w = ivar / np.sum(ivar, axis=0, keepdims=True)
s = np.sum(vs * w, axis=0)
if return_weights:
return s, w
return s

以随机漫步演示一下,

对20个随机漫步的逆方差加权平均获得的曲线的方差远小于直接平均的。

softmax加权

使用softmax计算权重wi,

wi=exin∑i=1exi

加权平均结果,

ˉx=n∑i=1wixi=n∑i=1exin∑i=1exixi=n∑i=1xiexin∑i=1exi

这个结果容易让人联想到argmax的光滑近似,即softmax可以很自然地处理argmax的平滑问题,

argmax(x)=n∑i=1i×one-hot(argmax(x))i≈n∑i=1i×softmax(x)=n∑i=1i×exin∑i=1exi

最小误差加权

把加权的权重计算转化为优化问题也是不错的思路,例如逐样本重构误差,

minw1,…,wnn∑i=1(n∑j=1wjXj−Xi)2

类似地,整体重构误差,

minw1,…,wn,α‖[X1;…;Xn]m×n−α⊤n∑i=1wiXi‖

通过深度学习框架可以容易获得权重结果。下面我们提供一个基于加性Attention加权的实例。

加性Attention加权

考虑到不定长的情况存在,如在传感器的多维时序中,不同样本的长度是不一样的。计算权重直接用两个全连接网络,

[α1,…,αn]=softmax(wTtanh(Wx))

然后加权平均,

pool(x)=n∑i=1αixi=softmax(wTtanh(Wx))x

如果序列是不定长,处理好掩码问题。

对于NLP任务来说,直接平均、SIF或TFIDF作为向量序列的权重是最常见的加权平均方法,且在大部分任务中取得不错的效果。跳出NLP任务来说,这里我们还介绍了很多加权平均方案。

[1] https://en.wikipedia.org/wiki/Weighted_arithmetic_mean

[2] https://en.wikipedia.org/wiki/Inverse-variance_weighting

[3] Information Aggregation via Dynamic Routing for Sequence Encoding

[4] https://en.wikipedia.org/wiki/Generalized_mean


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK