Graves提出ACT:RNN自定时长,奇偶校验错误从近40%降到5%以下

Adaptive Computation Time for Recurrent Neural Networks

Alex Graves

cs.NE

2016-03-30

Graves给RNN加可微停机单元,用时间惩罚学习每步多想几拍。奇偶校验无ACT错误近40%,τ不超过0.03时均值低于5%;维基建模几乎不涨分。

这篇在解决什么

前馈网络深度、RNN展开长度,都是人提前定的。难样本和易样本烧同样多层。加深能涨点,但梯度要撑得住,算力也按最坏情况付。需要的是让网络自己决定:这个输入要多想几步再给输出。

2016年Alex Graves在DeepMind提出Adaptive Computation Time。改动很小:多一个sigmoid停机单元,用停机分布做状态和输出的均值场混合,确定可微,不往梯度里加噪声。

方法

标准RNN每步做一次状态转移。ACT在同一个输入上允许N(t)次中间更新,共享同一套转移和输出参数。输入会加一个「是否刚进入新时间步」的二进制旗标,避免把重复计算和重复输入搞混。

每步中间状态出一个停机激活h。把h累加到超过1-ε就停,实验里ε=0.01,最后一步用余数补齐,保证概率和为1。状态和输出是按这个分布加权的均值,不采样。

如果不加约束,网络会尽量多想以免犯错。于是定义ponder为N(t)加余数,序列上求和当时间代价,加到损失里,权重是手调的τ。N(t)在越过阈值时不连续,训练时把它当常数,只对余数反传。停机偏置初始化为正,避免开训就狂想;还有硬上限M,默认100。

实验用Adam、学习率10的-4次方、16线程Hogwild。合成任务100万次迭代,语言1万次。每个τ训20个随机种子,τ做对数网格。

结果

奇偶校验把64维向量里随机11到64个非零比特一次喂给128个tanh的普通RNN。没有时间维时循环边用不上,等于单隐层前馈。无ACT均值错误近40%,乱猜是50%;τ不超过0.03时均值错误低于5%。成功网络的ponder大致随难度线性涨。

逻辑任务每步一个向量里塞1到10个逻辑门,LSTM宽度128。无ACT序列错误约0.2,τ不超过0.01时几乎为零。低τ网络大约1万次迭代就能解。ponder在5到6附近扎堆,接近每序列门数的均值。

加法是1到5个最多5位数,LSTM宽度512,M=20。网格里所有τ都被ACT完美解掉。高效网络ponder对位数斜率接近1,像按位长加法。无ACT的数字正文没单独给。

排序是2到15个高斯数,输出排序下标,LSTM宽度512。无ACT约12%错误,最好的τ约6%,但算力大约是无ACT的9倍。序列末附近ponder会尖峰。

Hutter奖维基字节级建模用1500个LSTM单元,ACT几乎不降每字符比特数,ponder也低。可视化里空格、逗号、句号处明显多想,XML标签边界也是,随机ID上不多想。损失和熵在不可预测位置同样高,分不出结构边界和噪声。

为什么重要

这是后来按token花不同算力这条线的开山之一:停机单元、ponder代价、均值场,不去走策略梯度采样。对今天的早期退出、自适应深度、测试时计算,问题提法没变:预算怎么和难度对齐,以及那个权衡参数谁来定。

合成任务上它把必须串行解的问题从静态向量里拆开。真实语言上分数几乎不动,收获是数据分段的探针。不要把它读成语言模型银弹。

局限与存疑

Graves自己说行为对τ很敏感,只能手调。均值场默认状态可线性插值,收敛后概率会塌到单点,那时假设无所谓,训练中段不一定。ponder代价在N变化处不连续,实现上忽略它。排序里高斯样本会挤在一起,网络很难判断谁大,论文也承认。维基实验没有验证集、指标记在训练集上,因为模型没过拟合,和现代hold-out不可比。M=100是安全阀,所有实验学到的N都远小于M。

术语

原文与代码

社区讨论

相关论文

全部论文解读