循环神经网络的构造
假设\(\boldsymbol{X}_t \in \mathbb{R}^{n \times d}\)是时间步\(t\)的小批量输入,\(\boldsymbol{H}_t \in \mathbb{R}^{n \times h}\)是该时间步的隐藏变量,则:
\[
\boldsymbol{H}_t = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} + \boldsymbol{b}_h).
\]
其中,\(\boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h}\),\(\boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h}\),\(\boldsymbol{b}_{h} \in \mathbb{R}^{1 \times h}\),\(\phi\)函数是非线性激活函数。由于引入了\(\boldsymbol{H}_{t-1} \boldsymbol{W}_{hh}\),\(H_{t}\)能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于\(H_{t}\)的计算基于\(H_{t-1}\),上式的计算是循环的,使用循环计算的网络即循环神经网络(recurrent neural network)。
在时间步\(t\),输出层的输出为:
\[
\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q.
\]
其中\(\boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q}\),\(\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}\)。
手写实现循环网络
[tensor([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]]),
tensor([[0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 0., 0.]]),
tensor([[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 1., 0., 0.]]),
tensor([[0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 1., 0.]]),
tensor([[0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])]
RNN类
定义预测函数
分开等他危画问距忙阳站外死
不分开腮是叫几子邂感坟哀寞司
旁边蛇实待密沙坏干蟑鸠补W
train_and_predict_rnn(rnner, True)
epoch 50, perplexity 71.522363, time 0.79 sec
- 分开 我想要这生 我不要这 你有我 别你我 我不要你的 我不能 你爱我不 你想你 你爱我 我不要你的 我不
- 不分开 我想要这生 我不要这 你有我 别你我 我不要你的 我不能 你爱我不 你想你 你爱我 我不要你的 我不
epoch 100, perplexity 10.305623, time 0.75 sec
- 分开 有使我 娘不依 快步默 一步四颗 连成线 的路段 三间四人 在小之 快沉默 娘子四颗 在头主 的路段
- 不分开永 我有你烦 你知我 别怪我 娘子却人 在指忆 的片段 三一些风慢 老唱苦 旧皮堂 装属都有 连头的
epoch 150, perplexity 2.958872, time 0.72 sec
- 分开 有什么 一步两步三步四步望著天 看星星 一颗两颗三颗四颗 连成线背著背默默许下心愿 看远方的星是否听
- 不分开吗 我已你爸 你知我妈 这样了看怎么慢慢 就想开不之口让她知道 我一定会呵护著你 手著你说 你对我有多
epoch 200, perplexity 1.605667, time 0.76 sec
- 分开 有什去 一步两步三步四步望著天 看星星 一颗两颗三颗四颗 连成线背著背 默荡在蓝安排 连攻抢邻池里
- 不分开期 我叫你爸 你打我妈 这样对吗去嘛这样 还必让不牵鼻子走 瞎 太狼险的 快时光 分怎堂囱术的老板 练
epoch 250, perplexity 1.314792, time 0.78 sec
- 分开球了像想的我 在小村 我给还 穿发却依旧每日折一枝杨柳 在小村外的溪边河口 默默地你 泪去会枪 硬底子
- 不分开期 我叫你爸 你打我妈 这样对吗干嘛这样 何必让酒牵鼻子走 瞎 说午险的 不的事我担朋 静属于头的我
train_and_predict_rnn(rnner, False)
epoch 50, perplexity 2721.856866, time 2.80 sec
- 分开 说
- 不分开
epoch 100, perplexity 72.404022, time 1.22 sec
- 分开的黑实一人的可爱女人啦过我不轻不可一步的在斑鸠的风不下不著不能不的我面女的可爱女人我想能的可我面狂的可
- 不分开吗个打我想要你的微我不狂的可爱女人我的你的手怎著的风娘下的可爱女人我想想的可爱女人龙坏坏不多我想你的爱
epoch 150, perplexity 95.646535, time 1.21 sec
- 分开 出只还会想你让我有见活一多的手快每了有过你在它都着日有多你手在都我有无头着多的手快在人的手斑女人的手
- 不分开觉 我不多的可样依默的我怎么人的口子在默我想你开 不过我有多再着多都想一我的可爱女人我想明的可样在默默
epoch 200, perplexity 163.254149, time 1.18 sec
- 分开 她色 会天不起 你跟 你著起你 你堡 你子休你 你知 你子休你 你知不起 你跟了 想你 不起你 你你
- 不分开觉 你想 快一起你一你 你子了一天 你跟已你 你 心你 你一休 不爱了一起跟 已什的让你心 不想 一
epoch 250, perplexity 276.336192, time 1.21 sec
- 分开 不知我 我 一 我有多 我 我 我 一沉的有 一样着 我 一 我有一的我 我不要 我 这样
- 不分开觉 却多透和不 一是一 一 我有多 一 我 一实我 一 是不 一是我 一 我有一 我 我 我 一
使用pytorch简洁实现
epoch 50, perplexity 11.038127, time 0.52 sec
- 分开 我有你的爱我 一个着 你说的美主 一枝杨柳 你在那里 你想要再不要 不想我不多你不 我不要再想你
- 不分开 我想要你不多 我 就你了你我不能 想要你的让我面红的可爱女人 坏坏的让我疯狂的可爱女人 坏坏的让我
epoch 100, perplexity 1.257996, time 0.67 sec
- 分开 我来了太快就我想要你的微笑每天都能的爱你 我知道你 我面听的 何像了 什么我有多难熬多 没有你有不
- 不分开 不能承受我已无处可躲 我不要再想 我不要再想 我不 我不 我不要再想你 不要再想 我不 我不 我不
epoch 150, perplexity 1.065657, time 0.59 sec
- 分开 我来了太快地我感动 河边的我 还是一定会 它一定中篮板 有它一直落口 是开 心话 这样的节奏 我
- 不分开 不能 这样打我妈手 我说啊 你不那有我想要你不你 我 我你想你 不知不觉 你已经离开我 不知不觉
epoch 200, perplexity 1.032287, time 0.59 sec
- 分开 我不了太多 我想一直说你听 着头 这故事 告诉我 印地安的传说 还真是 瞎透了 什么都有 这故事
- 不分开 不能承受快使用双截棍 哼哼哈兮 快使用双截棍 哼哼哈兮 习武之人切记 仁者无敌 是谁在练太极 风生
epoch 250, perplexity 1.020809, time 0.62 sec
- 分开 我不了太多地我想一直到以听 它一定一切得载著 这感动 三颗四颗 连成线一步两步三步四步望著天 看
- 不分开 不能承受快已无处可躲 我不要再想 我不要再想 我不 我不 我不要再想你 不知不觉 你已经离开我 不
原文地址:https://www.cnblogs.com/54hys/p/12304369.html