为了constant error flow(即误差信号既不衰减也不指数增加),并解决输入输出误差冲突,构建了一个复杂的单元(a memory cell),增加了input gate(保护存储的信息不被不相关输入打扰)和output gate(保护其他单元不被当前不相关内容打扰)。
第j个memory cell叫做
cj
,除了
netcj
,
cj
会从outj和inj中得到输入——f是不同的激活函数:
这里的u代表各种输入单元,门单元,memory cell或者传统的隐藏层单元。下面是一个例子:
在时刻t,
cj
的输出
ycj(t)
为:
ycj(t)=youtj(t)h(scj(t))
,这里的
scj(t)
(内核状态),计算公式如下:
,不同的函数g压缩
cj
,不同的函数h放大memory cell的输出信息。
1.
inj
控制error flow到
cj
的输入连接,
outj
控制单元j的输出连接的error flow,换句话说,网络使用
inj
决定什么时候保持/覆盖单元
cj
的内容,
outj
决定什么时候获取
cj
的内容以及什么时候防止其他单元被
cj
干扰。根据上述特性知道error signal在memory cell的CEC中不会改变,但是不同时刻的error signals对于同一个cell会累加,output gate就是学习哪些error会被陷到CEC中,通过适当的放缩。input gate则学习什么时候释放掉error,同样是通过适当的放缩。在实验中发现并不是所有的gate都是需要的,有时候input gate就足够了。
2.若干个(S)memory cell共享相同的输入门和输出门,从而形成一个“memory cell block of size S”
3.learning:一旦一个错误信号到达一个memory cell output,它将会被输出门激活函数和h’缩放,在通过CEC时信号不会被缩放。只有当信号通过输入门和g离开memory cell时信号再一次被缩放。在信号被删减去除之前会改变输入权重。
4.计算复杂度O(W),W是权重的数量。
5.abuse:在学习阶段的一开始,可能会出现没有存储到信息错误信号就减少了,从而网络就会abuse 记忆单元细胞,例如偏置细胞。这就会使得将会花很长的时间去释放被abuse的cell让他们在进一步的学习中被用到。如果两个cell存储了相同的信息,也会出现同样的问题。对此有两种解决方案:1是序列网络构建,当错误信号停止下降会增加一个cell和相应的门单元被到网络中;2输出门偏置:每一个输出门有一个负的初始化值,将初始的激活函数趋向0。
6.internal state drift,中文翻译成内部状态漂移,感觉怪怪的——举例子:如果记忆单元Cj的输入是正或者负,之后它的内部状态sj将会drift away。这样的后果就是
h′(sj)
会采用非常小的值,梯度就会消散。一个解决方法是选择一个合适的函数h,但是像h(x)=x,这样的函数的输出范围又是无限的。存在一个简单有效的解决方法——初始化权重和输入门为0.
以下举一个8个输入单元,4个输出单元,两个大小为2的记忆细胞块的例子:
RNN之LSTM(二)
最新推荐文章于 2023-07-29 09:29:38 发布