[机器学习入门] 李宏毅机器学习笔记-32 (Recurrent Neural Network part 1;循环神经网络 part 1)
VIDEO |
---|
Recurrent Neural Network
Example Application
slot 安装、放入、沟槽、插入…… 哇好多意思啊。
Slot Filling 就相当把关键字提溜出来放到相应的凹槽内,强迫症患者真舒服。
那么怎样将一个词表示成一个向量呢?方法有很多:
但是上述方法有个问题,有时候有的词汇不在词典中,这时候用other 或者 开头字母来表示他们,这就是Byund 1-of-N encoding。
好了,现在可以将表示出来的vector丢到一个network里,希望它输出一个几率。
但是这样也不能解决所有问题,比如一下两句话输入的vector是一样的,但很明显表达的意思却完全相反。
这时,就希望我们的neural network 是有记忆里的,能记住 arrive /leave ,能理解上下文。
那么这个有记忆里的NN就是RNN。
Example
在我们使用memory时,必须要给它初始值,比如0,这样network的单元就多了一个接收数据来源。
这样,即使是相同的输入,输出也可能是不一样的。
所以也代表,在RNN中,是对输入顺序敏感的,也就是调换input的顺序,得到的输出是不同的。
所以,如果我们要用RNN来解决Slot Filling 这个问题如下。
需要注意的是,上图中并不是有三个network ,而是同一个network被使用了三次。
这样,RNN就能在同一个台北的输入下得到不同的输出
当然,network是有很大拓展性的,比如也可使是deep 的。
RNN也有不同的变形,Jordan Network 存的就是output的值。
Bidirectional RNN,RNN还可以是双向的,本来我们是从句首读到句尾,但其方向是可以反过来的,如果同时train相反方向的network输出都丢给output layer,这样的好处就是,RNN前后都过了一遍视野比较广。
Long Short-term Memory (LSTM)
刚刚的memory是很单纯的存储的,现在还有一种Long Short-term Memory (LSTM)。
其实是给memory加了两扇IO闸门,什么时候外界可以IO memory,还有一层Forget Gate来决定什么时候擦除memory的值,以上门的开闭都是由network自己来学的。
这个memory的具体结构如下,
c’
就是新存入memory中的值。
Long Short-term Memory (LSTM) Example
其中每一个input
x1、x2、x3
需要乘的weight和加上的bais都是network学的。那么这个NN与我们原来所认识的NN有什么不同呢?
原来,会有很多neural 我们会把input乘上不同的weight当作每一个neural的输入,然后每一个neural都是一个function,然而LSTM的memory cell想成是一个neural 就好了。
就比如说有的机器需要插一个电源就可以动,而LSTM需要四个插电源才能动,四个电源是不同的,参数量是原来的四倍。
假设现在有一整排的memory,每个memory存的scalar是C^t-1
vector中的一个维度。intput x 时,通过transform,Z^f 、Z^I 、 Z 、Z^o
分别负责一种门。
提出一个memory,分析一下计算过程。
c是存的值。
而且还加上一步,它会把上一个时间点的hidden layer输出值,和上一个时间点的memory都接到它的输入,也就是每一个时间点的input将由三部门组成,如下图。
当然L一般不会一层,会叠五六层,就是Multiple-layer LSTM,现在通常所说的LSTM就是指这种。
Don’t worry if you cannot understand this. Keras can handle it
Keras supports “LSTM”, “GRU”, “Simp”
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[机器学习入门] 李宏毅机器学习笔记-32 (Recurrent Neural Network part 1;循环神经网络 part 1) - Python技术站