其他分享
首页 > 其他分享> > (2020李宏毅)机器学习Recurrent Neural Network

(2020李宏毅)机器学习Recurrent Neural Network

作者:互联网

在这里插入图片描述

文章目录


什么是RNN?


在这里插入图片描述

有记忆被的神经网络就是循环神经网络(RNN)。在RNN里面,每一次隐藏层的神经元产生输出的,这个时候输出会存到内存里去(用蓝色框表示内存)。下一次当有输入时,这些神经元不只是考虑输入 X 1 , X 2 \mathrm{X}_{1}, \mathrm{X}_{2} X1​,X2​ 对它来说, 除了考虑到记忆里的价值。 X 1 , X 2 \mathrm{X}_{1}, \mathrm{X}_{2} X1​,X2​ 以外,这些存在记忆里的价值a1a 2 _{2} 2​ 也会影响它的输出。


例子


在这里插入图片描述

假设现在图上这个neural network,它所有的weight都是1,所有的neuron没有任何的bias。假设所有的activation function都是linear(这样可以不要让计算太复杂)。现在假设input 是sequence [ 1 1 ] [ 1 1 ] [ 2 2 ] . . . \begin{bmatrix} 1\\ 1 \end{bmatrix}\begin{bmatrix} 1\\ 1 \end{bmatrix}\begin{bmatrix} 2\\ 2 \end{bmatrix}... [11​][11​][22​].... 在开始要使用这个Recurrent Neural Network的时候,必须要给memory初始值(memory里面初始值是0)

现在输入第一个 [ 1 1 ] \begin{bmatrix} 1\\ 1 \end{bmatrix} [11​],对左边的那个neural来说(第一个hidden layer),它除了接到input的 [ 1 1 ] \begin{bmatrix} 1\\ 1 \end{bmatrix} [11​]还接到了memory(0跟0),output就是2(所有的weight都是1),右边也是一样output为2。第二层hidden laeyer output为4。

在这里插入图片描述

接下来Recurrent Neural Network会将绿色neuron的output存在memory里去,所以memory里面的值被update为2。接下来再输入 [ 1 1 ] \left[\begin{array}{l}1 \\ 1\end{array}\right] [11​], 接下来绿色的neuron输入有四个 [ 1 1 ] [ 2 2 ] \left[\begin{array}{l}1 \\ 1\end{array}\right]\left[\begin{array}{l}2 \\ 2\end{array}\right] [11​][22​], output为 [ 6 6 ] ( \left[\begin{array}{l}6 \\ 6\end{array}\right]\left(\right. [66​]( weight = 1 =1 =1 ) , 第二层的neural output为 [ 12 12 ] \left[\begin{array}{l}12 \\ 12\end{array}\right] [1212​] 。
所以对Recurrent Neural Network来说, 就算input一样的东西,它的output是可能不一样了(因为有memory)

在这里插入图片描述

现在 [ 6 6 ] \left[\begin{array}{l}6 \\ 6\end{array}\right] [66​] 存到memory里去, 接下来input是 [ 2 2 ] \left[\begin{array}{l}2 \\ 2\end{array}\right] [22​], output为 [ 16 16 ] \left[\begin{array}{l}16 \\ 16\end{array}\right] [1616​],第二层hidden layer为 [ 32 32 ] \left[\begin{array}{l}32 \\ 32\end{array}\right] [3232​]
那在做Recurrent Neural Network时,有一件很重要的事情就是这个input sequence调换顺序之后output不同(Recurrent Neural Network里,它会考虑sequence的order)


RNN架构


在这里插入图片描述

RNN有memory,memory中记忆arrive或者leave,来区分Taipei


其他结构的RNN


deepRNN


在这里插入图片描述


Elman Network & Jordan Network


在这里插入图片描述


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不要决定要忘记,它的值就会被存起来)。

在这里插入图片描述


LSTM输入


在这里插入图片描述

在这里插入图片描述

、现在有一整排的neuron(LSTM),这些LSTM里面的memory都存了一个值,把所有的值接起来就变成了vector,写为 c t − 1 ( \mathrm{c}^{\mathrm{t}-1}\left(\right. ct−1( 一个值就代表一个 dimension)。 现在在时间点 t \mathrm{t} t, input − - − 个vector x t \mathrm{x}^{\mathrm{t}} xt ,这个vector首先会乘上一matrix(一个linear transform变成一个vector z,z这个vector的dimension就代表了操控每一个LSTM的input(z这个dimension正好就是LSTM memory cell的数目)。z的第一维就丢给第一个cell(以此类推)

这个xt会乘上另外的一个transform得到 z i z^i zi,然后这个zi的dimension也跟cell的数目一样,zi的每一个dimension都会去操控input gate(forget gate 跟output gate也都是一样,这里就不在赘述)。所以把 x t x^t xt乘以四个不同的transform得到四个不同的vector,四个vector的dimension跟cell的数目一样,这四个vector合起来就会去操控这些memory cell运作。

标签:Network,Neural,李宏毅,input,Gate,memory,output,array,mathrm
来源: https://blog.csdn.net/wl1780852311/article/details/120604661