参考链接:
- 很不错:https://cloud.tencent.com/developer/inventory/10094/article/1056311
核心思想
思考一个问题,如何根据一段文本的前半部分将其补全:
我昨天上学迟到了,老师批评了____。
我们可以使用一个神经网络,网络的输入是空格前一个单词(token 化),输出是下一个单词(当然这里也可以输出下一个单词的概率分布,这里简化处理了)。
上面的做法基于一个假设:下一个单词完全由上一个单词决定。但这显然是不合适的,空格中的单词的概率分布应该受到前面所有单词的影响。那有没有办法让这个神经网络拥有记忆呢?
于是就想到可以给这个神经网络增加一个状态向量,这个状态向量的值由当前的输入单词和该状态向量在上一时刻的值共同决定。这样把时间序列上的所有单词依次迭代计算后,会发现后面的单词总是会由前面所有的单词来决定。
这就是循环神经网络(Recurrent Neural Network, RNN),示意图如下:

其中 X 为输入向量(示例中的单词 token),U 和 f 分别为输入层到隐层的权重矩阵和激活函数;O 为输出向量,V 和 g 分别为隐层到输出层的权重矩阵和激活函数。至此该神经网络就是普通的全连接神经网络。此时给该神经网络增加一个状态向量 S,当前时刻的 S 的值由 X 和上一时刻的 S 线性组合后再经过激活函数 f 后得到,线性组合时 S 的权重矩阵为 W,X 的权重矩阵仍然为 U:

如果将式(2)反复迭代递推可发现,St 的值实际上是由 X0 ~ Xt 决定的:

若需要计算 Ot 的值,则先依次计算 S0, S1, ..., St 的值,再通过式(1)计算 Ot。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1200975.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!