当前位置:   article > 正文

解读表示学习中的自适应计算时间 Adaptive Computation Time (ACT)

adaptive computation time

最近在学习网红模型Universal Transformers时接触到了自适应计算时间(Adaptive Computation Time, ACT)这个新奇的算法。查了一下,这个算法其实并不算新,2016年就被Google DeepMind组的Alex Graves在论文《Adaptive Computation Time for Recurrent Neural Networks》中提出。但是如果从引用量来说,这篇论文确实还算很新的,截止到发稿时止,该论文的引用量仅为113次。这个引用量对于Transormers模型的红火程度来说确实太少了。那为何ACT算法引用数如此少呢?是太难理解没有流传?还是适用范围太小?抑或是并没有那么实用的效果呢?本文就来解读一下这个ACT算法。

自适应计算时间ACT的用途

上来先划重点,说说这个方法有什么用吧。这个方法最直接的用途是控制RNN模型中每一个时刻重复运算的次数。如果不太理解的话,可以看做是控制RNN在每一个时刻状态计算网络的深度。扩展来说,ACT算法的思想还可以用到自动控制深度网络的深度,甚至控制模型的复杂度

自适应计算时间ACT的原理

问题定义

考虑一个传统的递归神经网络(recurrent neural network) R \mathcal{R} R,这个网络由一个输入权重矩阵(maxtrix of input weights) W x W_x Wx,一个参数化的状态转移模型(parametric state transition model) S \mathcal{S} S,一组输出权重(a set of output weights) W y W_y Wy,以及一个输出偏置量(output bias) b y b_y by组成。当输入一个序列 x = ( x 1 , ⋯   , x T ) \mathbf{x} = (x_1, \cdots, x_T) x=(x1,,xT)时, R \mathcal{R} R在时间 t = 1 t=1 t=1 T T T通过迭代如下公式来计算状态序列 s = ( s 1 , ⋯   , s T ) \mathbf{s} = (s_1, \cdots, s_T) s=(s1,,sT)和输出序列 y = ( y 1 , ⋯   , y T ) \mathbf{y} = (y_1, \cdots, y_T) y=(y1,,yT)

(1) s t = S ( s t − 1 , W x x t ) s_t = \mathcal{S}(s_{t-1}, W_xx_t) \tag{1} st=S(st1,Wxxt)(1)

(2) y t = W y s t + b y y_t = W_ys_t +b_y \tag{2} yt=Wyst+by(2)
在这儿,公式(1)中得到的状态 s t s_t st是一个向量,包含着序列的动态信息。我们可以理解公式(1) S \mathcal{S} S模型将当前的输入 x t x_t xt和上一时刻的状态 s t − 1 s_{t-1} st1按照某种关系进行结合,从而产生了当前状态 s t s_t st。当前状态 s t s_t st又经过某一种线性变换,即公式(2),(也可以不变换,如GRU中,此时 W y W_y Wy固定为全1矩阵, b y

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/517719
推荐阅读
相关标签
  

闽ICP备14008679号