图解时间自适应卷积----Time-aware Large Kernel Convolutions

论文:Time-aware Large Kernel Convolutions
链接:arxiv.org/pdf/2002.03184v1.pdf

偶尔看到一篇比较有意思的论文,其提出的方法设计得很巧妙,在提高运算速度、减少计算开销的同时保持了性能。

这篇论文提出了一种对Transformer的改进。提出使用时间自适应卷积(Time-aware Large Kernel Convolutions)替代Transformer种的self attention以提高计算的效率。

Transformer在计算self attention时,复杂度为 O ( n ² ) O(n²) O(n²) ,要计算每个token和所有token之间的相关性,计算耗时大。在这篇论文之前,已经有提出过动态卷积,可以用于此处使用卷积网络来对语义建模,从而降低计算的时间复杂度,将其从 O ( n ² ) O(n²) O(n²)降低到 O ( k n ) O(kn) O(kn),此处 k k k为卷积核的大小。而本文提出的方法,进一步的降低了时间复杂度,将其降低为 O ( n ) O(n) O(n)

方法:时间自适应卷积

假定输入为长度为 n n n的文本序列 X = { x 1 , x 2 , . . . , x n } X=\lbrace x_1,x_2,...,x_n \rbrace X={x1,x2,...,xn},其中 x i x_i xi均为维度为 d d d的向量, i i i表示第 i i i次卷积操作。

每次卷积的计算公式为: o i = ∑ i = a i l a i r x j o_i=\sum_{i=a_i^l}^{a_i^r}{x_j} oi=i=ailairxj 1 ≤ a i l ≤ i ≤ a i r ≤ n 1≤a_i^l≤i≤a_i^r≤n 1ailiairn

上式中, a i l a_i^l ail a i r a_i^r air分别表示窗口的左右两端,从左加到右既完成卷积,这意味着卷积核的系数均为1,卷积过程中只需累加,无需进行乘法计算。

每次卷积都按顺序累加效率不高,存在很多重复的工作,因此作者使用累加和: S i = S i − 1 + x i , S 0 = 0 S_i=S_{i-1}+x_i, S_0=0 Si=Si1+xi,S0=0

S i S_i Si表示输入序列 X X X的前 i i i项的累加,故卷积结果 o i o_i oi可以用累加和表示: o i = S a i r − S a i l − 1 o_i=S_{a_i^r}-S_{a_i^l-1} oi=SairSail1

每次卷积时,窗口的长度是不定的,需要根据 x i x_i xi的值来确定。所以在此首先计算窗口长度的相对值:
a i l = i − a ~ i l ⋅ l m a x a_i^l=i-\widetilde{a}_i^l·l_{max} ail=ia illmax a i r = i + a ~ i r ⋅ r m a x a_i^r=i+\widetilde{a}_i^r·r_{max} air=i+a irrmax
其中, l m a x l_{max} lmax r m a x r_{max} rmax分别为左右窗口允许的最大长度; a ~ i l \widetilde{a}_i^l a il a ~ i r \widetilde{a}_i^r a ir为窗口左右长度的相对大小,其定义为 a ~ i = s i g m o i d ( f i ( x i ) ) \widetilde{a}_i=sigmoid(f_i(x_i)) a i=sigmoid(fi(xi)),定义中的 f i f_i fi函数并未给明确的定义,只需要其为具有降为能力即可,将维度为 d d d的向量转化为一个实数。

在获得了左右窗口的实际长度后,需要用其计算 o i o_i oi,此时面临一个问题, o i o_i oi的计算公式中, S S S的下标均为整数,而算得的实际窗长为小数,此处作者认为两点之间为线性关系,对其进行采样。
S a i l − 1 = γ l ⋅ S ⌊ a i l ⌋ − 1 + ( 1 − γ l ) ⋅ S ⌈ a i l ⌉ − 1 S_{a_i^l-1}=\gamma^l·S_{\lfloor{a_i^l}\rfloor-1}+(1-\gamma^l)·S_{\lceil{a_i^l}\rceil-1} Sail1=γlSail1+(1γl)Sail1 S a i r = ( 1 − γ r ) ⋅ S ⌊ a i r ⌋ + γ r ⋅ S ⌈ a i r ⌉ S_{a_i^r}=(1-\gamma^r)·S_{\lfloor{a_i^r}\rfloor}+\gamma^r·S_{\lceil{a_i^r}\rceil} Sair=(1γr)Sair+γrSair
其中 ⌊ ∗ ⌋ \lfloor{*}\rfloor ⌈ ∗ ⌉ \lceil{*}\rceil 分别表示向下和向上取整, γ l = ⌈ a i l ⌉ − a i l \gamma^l=\lceil{a_i^l}\rceil-a_i^l γl=ailail γ r = a i r − ⌊ a i r ⌋ \gamma^r=a_i^r-\lfloor{a_i^r}\rfloor γr=airair

至此,论文中提出的方法基本概括完毕,更多细节可以在论文里查看。

图解:

  • 模型输入 X = { x 1 , x 2 , . . . , x n } X=\lbrace x_1,x_2,...,x_n \rbrace X={x1,x2,...,xn}
    在这里插入图片描述
  • 卷积 o i = ∑ i = a i l a i r x j o_i=\sum_{i=a_i^l}^{a_i^r}{x_j} oi=i=ailairxj 1 ≤ a i l ≤ i ≤ a i r ≤ n 1≤a_i^l≤i≤a_i^r≤n 1ailiairn
    在这里插入图片描述

i = 4 , a i l = 2 , a i r = 3 i=4,a_i^l=2,a_i^r=3 i=4,ail=2,air=3为例。

  • 累加和 S i S_i Si:
    在这里插入图片描述

  • S S S表示 o o o:
    在这里插入图片描述

  • 计算相对窗长:
    在这里插入图片描述
    f f f为任意一个 d d d维至1维的映射函数,再通过sigmoid()将其值限制在0到1之间。在乘以窗长最大值获得实际窗长。

  • S i S_i Si中的 i i i为自然数

将论文中的公式稍加变形,更容易看出规律
S a i l − 1 = γ l ⋅ S ⌊ a i l ⌋ − 1 + ( 1 − γ l ) ⋅ S ⌈ a i l ⌉ − 1 = S ⌈ a i l ⌉ − 1 − γ l ⋅ ( S ⌈ a i l ⌉ − 1 − S ⌊ a i l ⌋ − 1 ) S_{a_i^l-1}=\gamma^l·S_{\lfloor{a_i^l}\rfloor-1}+(1-\gamma^l)·S_{\lceil{a_i^l}\rceil-1}=S_{\lceil{a_i^l}\rceil-1}-\gamma^l·(S_{\lceil{a_i^l}\rceil-1}-S_{\lfloor{a_i^l}\rfloor-1}) Sail1=γlSail1+(1γl)Sail1=Sail1γl(Sail1Sail1) S a i r = ( 1 − γ r ) ⋅ S ⌊ a i r ⌋ + γ r ⋅ S ⌈ a i r ⌉ = S ⌊ a i r ⌋ + γ r ⋅ ( S ⌈ a i r ⌉ − S ⌊ a i r ⌋ ) S_{a_i^r}=(1-\gamma^r)·S_{\lfloor{a_i^r}\rfloor}+\gamma^r·S_{\lceil{a_i^r}\rceil}=S_{\lfloor{a_i^r}\rfloor}+\gamma^r·(S_{\lceil{a_i^r}\rceil}-S_{\lfloor{a_i^r}\rfloor}) Sair=(1γr)Sair+γrSair=Sair+γr(SairSair)
不妨假定 i = 3 i=3 i=3 l m a x = 2 l_{max}=2 lmax=2 l m a x = 2 l_{max}=2 lmax=2 a ~ 3 l = 0.3 \widetilde{a}_3^l=0.3 a 3l=0.3 a ~ 3 r = 0.7 \widetilde{a}_3^r=0.7 a 3r=0.7,那么有
a 3 l = 2.4 , ⌈ a 3 l ⌉ = 3 , ⌊ a 3 l ⌋ = 2 , γ l = 0.6 a_3^l=2.4,\lceil{a_3^l}\rceil=3,\lfloor{a_3^l}\rfloor=2,\gamma^l=0.6 a3l=2.4a3l=3a3l=2γl=0.6 a 3 r = 4.4 , ⌈ a 3 r ⌉ = 5 , ⌊ a 3 r ⌋ = 4 , γ r = 0.4 a_3^r=4.4,\lceil{a_3^r}\rceil=5,\lfloor{a_3^r}\rfloor=4,\gamma^r=0.4 a3r=4.4a3r=5a3r=4γr=0.4
在这里插入图片描述
此时,可计算 o 3 = S 4.4 − S 1.4 o_3=S_{4.4}-S_{1.4} o3=S4.4S1.4

总结

这篇论文所提出的时间自适应卷积在很大程度上降低了Transformer的计算复杂度,在论文里的数据中有所展示,在此只做方法解析。

以上均为个人理解,如果错误欢迎指出。如需转载请标记出处。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JL__Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值