Make Your Pre-trained Model Reversible: From Parameter to Memory Efficient Fine-Tuning

论文地址:

整体思路以及计算方式

在介绍论文之前,首先回顾一下可逆神经网络,其思路很简单:

我们知道在前向传播中,第ii层的结果可以由第i1i-1层(前一层)计算得到;但是在反向传播时,计算第ii层的结果ablaiLabla^{i} \mathcal L需要第i+1i+1层(前一层)的梯度ablai+1Labla^{i+1} \mathcal L,和前向计算的中间结果fif^{i}。在一般情况下,fif^{i}无法通过fi+1f^{i+1}计算得到,所以fif^{i}是必须要缓存的,可能神经网络就是通过巧妙的设计,使得fif^{i}可以通过fi+1f^{i+1}计算得到,从而减少了内存开销。其思路如下,首先输入部分变成两个部分:

hn+11=λhn1+Fn(hn2)hn+12=βhn2+Gn(hn+11)\begin{aligned} \boldsymbol{h}_{n+1}^1 & =\lambda \boldsymbol{h}_n^1+\mathcal{F}_n\left(\boldsymbol{h}_n^2\right) \\ \boldsymbol{h}_{n+1}^2 & =\beta \boldsymbol{h}_n^2+\mathcal{G}_n\left(\boldsymbol{h}_{n+1}^1\right) \end{aligned}

其中Fn,Gn\mathcal F_n, \mathcal G_n是两个任意函数,根据上式可得:

hn2=(hn+12Gn(hn+11))/βhn1=(hn+11Fn(hn2))/λ\begin{aligned} \boldsymbol{h}_n^2 & =\left(\boldsymbol{h}_{n+1}^2-\mathcal{G}_n\left(\boldsymbol{h}_{n+1}^1\right)\right) / \beta \\ \boldsymbol{h}_n^1 & =\left(\boldsymbol{h}_{n+1}^1-\mathcal{F}_n\left(\boldsymbol{h}_n^2\right)\right) / \lambda \end{aligned}

本文主要就是基于可逆神经网络进行adapter设计,作者指出当前的PEFT并不一定能省内存,然后利用可逆神经网络缓解了这点。

代码

简评

作者提出的方法在inference的时候会降低速度,也许是一个可改进的点。

Last updated