文章目录
- 什么是RNN?
- 例子
- RNN架构
- 其他结构的RNN
- deepRNN
- Elman Network & Jordan Network
- Bidirectional RNN
- Long Short-term Memory (LSTM)
- LSTM输入
什么是RNN?
有记忆被的神经网络就是循环神经网络(RNN)。在RNN里面,每一次隐藏层的神经元产生输出的,这个时候输出会存到内存里去(用蓝色框表示内存)。下一次当有输入时,这些神经元不只是考虑输入 对它来说, 除了考虑到记忆里的价值。
以外,这些存在记忆里的价值a1a
例子
假设现在图上这个neural network,它所有的weight都是1,所有的neuron没有任何的bias。假设所有的activation function都是linear(这样可以不要让计算太复杂)。现在假设input 是sequence. 在开始要使用这个Recurrent Neural Network的时候,必须要给memory初始值(memory里面初始值是0)
现在输入第一个,对左边的那个neural来说(第一个hidden layer),它除了接到input的
还接到了memory(0跟0),output就是2(所有的weight都是1),右边也是一样output为2。第二层hidden laeyer output为4。
接下来Recurrent Neural Network会将绿色neuron的output存在memory里去,所以memory里面的值被update为2。接下来再输入 , 接下来绿色的neuron输入有四个
, output为
weight
) , 第二层的neural output为
。
所以对Recurrent Neural Network来说, 就算input一样的东西,它的output是可能不一样了(因为有memory)
现在 存到memory里去, 接下来input是
, output为
,第二层hidden layer为
那在做Recurrent Neural Network时,有一件很重要的事情就是这个input sequence调换顺序之后output不同(Recurrent Neural Network里,它会考虑sequence的order)
RNN架构
RNN有memory,memory中记忆arrive或者leave,来区分Taipei
其他结构的RNN
deepRNN
Elman Network & Jordan Network
- elman network:memory中是hidden layer中的output
- jordan network:memory中是整个network的output
Bidirectional RNN
双向循环神经网络在产生output时看的范围比单向的广,performance应当比单向的好
Long Short-term Memory (LSTM)
这个Long Short-term Memor是有三个gate,当外界某个neural的output想要被写到memory cell里面的时候,必须通过一个input Gate,那这个input Gate要被打开的时候,你才能把值写到memory cell里面去,如果把这个关起来的话,就没有办法把值写进去。至于input Gate是打开还是关起来,这个是neural network自己学的(它可以自己学说,它什么时候要把input Gate打开,什么时候要把input Gate关起来)。那么输出的地方也有一个output Gate,这个output Gate会决定说,外界其他的neural可不可以从这个memory里面把值读出来(把output Gate关闭的时候是没有办法把值读出来,output Gate打开的时候,才可以把值读出来)。那跟input Gate一样,output Gate什么时候打开什么时候关闭,network是自己学到的。那第三个gate叫做forget Gate,forget Gate决定说:什么时候memory cell要把过去记得的东西忘掉。这个forget Gate什么时候会把存在memory的值忘掉,什么时候会把存在memory里面的值继续保留下来),这也是network自己学到的。
那整个LSTM你可以看成,它有四个input 1个output,这四个input中,一个是想要被存在memory cell的值(但它不一定存的进去)还有操控input Gate的讯号,操控output Gate的讯号,操控forget Gate的讯号,有着四个input但它只会得到一个output
这个“-”应该在short-term中间,是长时间的短期记忆。想想我们之前看的Recurrent Neural Network,它的memory在每一个时间点都会被洗掉,只要有新的input进来,每一个时间点都会把memory 洗掉,所以的short-term是非常short的,但如果是Long Short-term Memory,它记得会比较久一点(只要forget Gate不要决定要忘记,它的值就会被存起来)。
- 假设要被存到cell的input叫做z,操控input gate的信号叫做
(一个数值),所谓操控forget gate的信号叫做
,操控output gate叫做
,综合这些东西会得到一个output 记为a。
- 假设cell里面有这四个输入之前,它里面已经存了值c。把z通过activation function得到g(z),那
通过另外一个activation function得到
(
)通过的activation function 通常选择sigmoid function,选择sigmoid function的意义是它的值是介在0到1之间的。这个0到1之间的值代表了这个gate被打开的程度(如果这个f的output是1,表示为被打开的状态,反之代表这个gate是关起来的)。
- 把
乘以
得到
, 对于forget gate的
, 也通过sigmoid的function得到
- 接下来把存到memory里面的值c乘以
得到
,然后加起来
, 那么
就是重新存到memory里面的值。
决定要不要忘记cell中的值,如果
=1,则或保留上次cell中的值,如果
=0,则cell中以前的值相当于被清空。而
作用与
相同,
控制输入
是否有效
假设要被存到memory cell 中的input 为,控制input gate的信号为
,控制forget gate的信号为
,控制output gate的信号为
,整个的输出为
假设cell里面有这四个输入之前,它里面已经存了值c
关键是forget gate
决定要不要忘记cell中的值,如果
,保留上次cell中的值;如果
LSTM输入
、现在有一整排的neuron(LSTM),这些LSTM里面的memory都存了一个值,把所有的值接起来就变成了vector,写为 一个值就代表一个 dimension)。 现在在时间点
, input
个vector
这个xt会乘上另外的一个transform得到,然后这个zi的dimension也跟cell的数目一样,zi的每一个dimension都会去操控input gate(forget gate 跟output gate也都是一样,这里就不在赘述)。所以把
乘以四个不同的transform得到四个不同的vector,四个vector的dimension跟cell的数目一样,这四个vector合起来就会去操控这些memory cell运作。