二值化神经网络

数据挖掘 神经网络
2022-02-24 19:01:44

我目前正在查看 Hubara 等人关于二值化神经网络的论文

我一直在理解论文的算法 2。该算法使用基于移位(位移)的 AdaMax,其中 AdaMax 是 Adam 优化器的扩展。特别是,他们正在使用

mt=β1.mt1+(1β1).gt

vt=max(β2.vt1,|gt|)

θt=θt1(α(1β1t)).(mtvt1)

在哪里gt是梯度,θt1是前一个参数,α,β1,β2是学习率,以及 Adam 优化器的 beta。他们表示代表左右位移我自己知道左移和右移,但我不确定我们如何同时拥有两者?帮助将不胜感激。谢谢你。

1个回答

我看看他们的github

以下是相关部分:

local stepSize = lr/biasCorrection1 --math.sqrt(biasCorrection2)/biasCorrection1

stepSize=math.pow(2,torch.round(math.log(stepSize)/(math.log(2))))

并且

state.v:copy(torch.pow(2,torch.round(torch.log(state.v):div(math.log(2)))))
state.v:add(epsilon)
tmp:addcdiv(1, state.m, state.v)

似乎对于α(1β1t), 正在做的是

2log2α1β1t

如果是左移log2α1β1t>0和右移如果log2α1β1t<0.

另一方面,对于mtvt1, 正在做的是

mt2log2vt

如果log2vt>0和左移如果log2vt<0.