
时间常数
时间常数是什么
一个直观的类比:水箱漏水
想象一个装满水的水箱,底部有一个小孔,水从小孔中不断流出,水箱中的水位x(t)就是系统的状态,水从水箱中流出的速度dx/dt就是系统状态的变化率。根据托里拆利定律,水流从水箱中流出的速率与水位的高度成正比,水位越高,水流速度越快。可以用一个简单的微分方程来描述这一过程
其中k是一个与孔的大小相关的常数。时间常数\tau就定义为\frac{1}{k},所以方程就变为
数学上的精确定义
上述方程的解是一个指数衰减函数
其中x_0指的是初始水位。时间常数的精确定义是:系统从初始状态完成其总变化量的约 63.2%(即 1-1/e)所需的时间。
对于上述方程,当t = \tau时,x(t)=x_0 * e^{-1},系统的总变化量为x_0,即水流从初始状态到最终流净的变化量,此时剩余水位x_0*e^{-1},变化量为x_0-x_0*e^{-1}=x_0*(1-1/e).
可以得出推论,\tau越大,意味着系统响应慢,变化迟缓,类比水箱孔很小;\tau越小,意味着系统响应速,变化迅速,类比水箱孔很大。
时间常数在 RNN 和 LTC 中的作用
在循环神经网络中,时间常数\tau扮演着控制信息流动速度和记忆长度的角色。
在传统 CT-RNN 中的作用
论文中提到了一个比神经 ODE 更稳定的 CT-RNN 形式
其中\tau是一个固定的,可学习的参数,-x(t)/\tau这一项被称为“泄露项”或“衰减项”,不断的将隐藏状态拉向 0.
它的左右主要由两点,第一控制记忆,\tau越大,衰减就越慢,网络就能记住更久远的信息(长期记忆),\tau越小,衰减越快,网络就更关注近期的信息(短期记忆)。第二保证稳定性,防止隐藏状态无限增长,保证了系统的稳定性,解决了 RNN 中的梯度消失和梯度爆炸的问题。
但是这里的\tau是固定的,当模型训练完成之后就不再变化了。这意味着这一个神经元在整个处理过程中,响应速度是恒定的,无法根据输入的不同而改变。
在 LTC 中的作用:液态时间常数
LTC 的核心创新就在于时间常数\tau随输入值发生变化,它的方程如下
文章中是这样得出这个公式的:设网络的隐藏状态流由一个线性的 ODEs 系统来描述,其形式为:dx/dt = -x(t) + S(t), 令S(t) \in \Bbb{R}^M,表示由S(t) = f(x(t), I(t), t, \theta)(A - x(t))决定的非线性项。代入S(t)重写dx/dt即可得到以上方程。
我们可以把衰减项重写为-x(t) / \tau_{sys},其中时间常数为\tau_{sys}. 此时,\tau_{sys}可以表示为
这就是液态时间常数的含义,它不再是一个固定值,而是动态依赖于外部输入信号I(t)、神经元当前状态x(t)以及时间t。网络会根据输入的重要性动态调整其响应速度,当输入重要时f的值会变得很大,\tau_{sys}
会变小,网络响应速度会变快,更加关注短期内的重要信息。相反,当输入信号不太重要时,\tau_{sys}会变大,网络变得“迟钝”,更加关注长期的信息。例如,当突然输入一个异常值,神经元会快速响应,识别到这个异常,当输入比较平稳时,神经元会更加关注输入信号的长期特征。原文写的是 This property enables single elements of the hidden state to identify specialized dynamical systems for input features arriving at each time-point. 我的理解是这一性质使得隐藏状态的单个神经元能够为到达每个时间点的输入特征识别(匹配)专门的动力系统。