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

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

文章目录


什么是RNN?


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

有记忆被的神经网络就是循环神经网络(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​ 也会影响它的输出。


例子


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

假设现在图上这个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。

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

接下来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)

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

现在 [ 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架构


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

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


其他结构的RNN


deepRNN


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


Elman Network & Jordan Network


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

  • elman network:memory中是hidden layer中的output
  • jordan network:memory中是整个network的output

Bidirectional RNN


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

双向循环神经网络在产生output时看的范围比单向的广,performance应当比单向的好


Long Short-term Memory (LSTM)


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

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

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

  • 假设要被存到cell的input叫做z,操控input gate的信号叫做 z i z_i zi​(一个数值),所谓操控forget gate的信号叫做 z f z_f zf​,操控output gate叫做 z o z_o zo​,综合这些东西会得到一个output 记为a。
  • 假设cell里面有这四个输入之前,它里面已经存了值c。把z通过activation function得到g(z),那 z i z_i zi​通过另外一个activation function得到 f ( z i ) f(z_i) f(zi​)( z i , z f , z 0 z_i,z_f,z_0 zi​,zf​,z0​)通过的activation function 通常选择sigmoid function,选择sigmoid function的意义是它的值是介在0到1之间的。这个0到1之间的值代表了这个gate被打开的程度(如果这个f的output是1,表示为被打开的状态,反之代表这个gate是关起来的)。
  • 把 g ( z ) g(z) g(z) 乘以 g g g ( z i ) \left(z_{i}\right) (zi​) 得到 g ( g( g( z z z ) f ( z i ) ) f\left(z_{i}\right) )f(zi​), 对于forget gate的 z f \mathrm{z}_{\mathrm{f}} zf​, 也通过sigmoid的function得到 f f f ( z f ) \left(\mathrm{z}_{\mathrm{f}}\right) (zf​)
  • 接下来把存到memory里面的值c乘以 f ( z f ) f(z_f) f(zf​)得到 c f ( z f ) cf(z_f) cf(zf​),然后加起来 c ′ = g ( z ) f ( z i ) + cf ⁡ ( z f ) \mathrm{c}^{\prime}=\mathrm{g}(\mathrm{z}) \mathrm{f}\left(\mathrm{z}_{\mathrm{i}}\right)+\operatorname{cf}\left(\mathrm{z}_{\mathrm{f}}\right) c′=g(z)f(zi​)+cf(zf​), 那么 c ′ \mathrm{c}^{\prime} c′ 就是重新存到memory里面的值。 f ( z f ) f(z_f) f(zf​)决定要不要忘记cell中的值,如果 f ( z f ) f(z_f) f(zf​)=1,则或保留上次cell中的值,如果 f ( z f ) f(z_f) f(zf​)=0,则cell中以前的值相当于被清空。而 f ( z i ) \mathrm{f}(\mathrm{z}_{\mathrm{i}}) f(zi​)作用与 f ( z f ) f(z_f) f(zf​)相同, f ( z i ) \mathrm{f}(\mathrm{z}_{\mathrm{i}}) f(zi​)控制输入 g ( z ) g(z) g(z)是否有效

LSTM输入


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

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

、现在有一整排的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运作。

上一篇:网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板


下一篇:Q114寒假作业之割绳子