2021-09-15——RNN
前言:对于一个订票系统而言,系统需要知道用户的destination和time of arrival,因此对于一句话:
系统能够得到两个重要信息,比如可以用CNN的方法,输入是整个一个word,输出就是destination和time of arrival。那么如何把词汇作为输入呢?
比如Word hashing,比如apple拆分的话为3维向量(看图上),维度为1可以找到app的位置,然后其余位置为0,ppl与ple类似。
总而言之,输入是一个word,经过CNN框架,就可以得到destination和time of arrival两个信息。
这里需要解释清楚,比如第一张图的一段话:arrive Taipei on November 2nd,那么输入arrive,输出应该是other;下一次输入是Taipei,输出是destination;输入是on,输出也是other,而输入是November,输出是time。
但是下面这个如何解释呢?
比如这段文字,不再是arrive了,而是leave,那么Taipei就不应该是destination,而应该是place of departure。但是对于CNN来说,既然输入都是Taipei,那么输出就应该是一样的。那么现在的逻辑就应该是,模型不仅收到输入Taipei的影响,还要受到前一个输入leave的影响,也就是说两次输入是不独立的或者说是这个NN是有记忆的。
由图上,arrive作为输入得到y1输出(other),但a1的值会被储存下来(认为该神经元的weight是1,bias是0),存储下来后,a1的值会进入到a2(具体如何影响可以设计)。
这里要注意, 不是说这几个word进入的不同的神经网络,而是说这是同一个神经网络在不同时间点发生的事情。
Long short-term Memory(LSTM)
三个gate,每个gate都有各自开启条件,input和output比较好理解,forget gate值得注意,开启的话会存储数据,而关闭的话不会存储。
每个门的激活函数是sigmoid,比如zi为100,那么经过sigmoid函数,输出值f(zi)就会接近1,因此乘上g(z),得到的输入经过input gate 就会等于g(z)。
xt作为输入,乘上一个matrix,得到z。z的每一个dimension都作为LSTM的输入,即第一行作为第一个LSTM的输入。
可以把一个LSTM当做一个神经元
类似于z,乘上不同的matrix(相当于不同的权重),就得到zf,zi,zo,作为3个gate的输入。
所以根据前面的公式,就会得到这样的流程图,值得注意的是ct是下一个cell的存储值。