跳转至

19.2 四个时间步的循环神经网络

19.2 四个时间步的循环神经网络⚓︎

以下为本小节目录,详情请参阅《智能之门》正版图书,高等教育出版社。

19.2.1 提出问题⚓︎

在加减法运算中,总会遇到进位或者退位的问题,我们以二进制为例,比如13-6=7这个十进制的减法,变成二进制后如下所示:

13 - 6 = 7
====================
  x1: [1, 1, 0, 1]
- x2: [0, 1, 1, 0]
------------------
  y:  [0, 1, 1, 1]
====================
  • 被减数13变成了[1, 1, 0, 1]
  • 减数6变成了[0, 1, 1, 0]
  • 结果7变成了[0, 1, 1, 1]

在减法过程中:

  • x1和x2的最后一位是1和0,相减为1
  • 倒数第二位是0和1,需要从前面借一位,相减后得1
  • 倒数第三位本来是1和1,借位后变成了0和1,再从前面借一位,相减后得1
  • 倒数第四位本来是1和0,借位后是0和0,相减为0

也就是说,在减法过程中,后面的计算会影响前面的值,所以必须逐位计算,这也就是时间步的概念,所以应该可以用循环神经网络的技术来解决。

19.2.2 准备数据⚓︎

19.2.3 搭建多个时序的网络⚓︎

19.2.4 正向计算⚓︎

19.2.5 反向传播⚓︎

19.2.6 梯度更新⚓︎

19.2.7 代码实现⚓︎

19.2.8 运行结果⚓︎

代码位置⚓︎

ch19, Level2

思考和练习⚓︎

  1. 把tanh函数变成sigmoid函数,试试看有什么不同?
  2. 给h和z节点增加偏移值,看看有什么不同?
  3. 把h节点的神经元数量增加到8个或16个,看看训练过程有何不同?减少到2个神经元会得到正确结果吗?
  4. 把二进制数扩展为8位,即最大值255时,这个网络还能正确工作吗?