我们之前了解了准备工作,那么如果真的要做一个模型,我们会遇到什么问题呢?
假设我们跟之前一样,使用一个普通的神经网络模型,把输入的one-hot向量当成第一层的输入层,然后经过几层神经网络,得到一个同样长度的输出,这样做可以吗?

这样做其实会有几个问题:
1.首先,在序列模型当中,输入与输出的个数是不确定的,这样效果就不会很好。(虽然可以通过填补来增加长度)
2.它没有办法共享一个语句在不同位置得到的特征,所以就很难对一个句子或者一个顺序的数据进行分析和特征提取。
那么我们提出一个比较简单的RNN模型(循环神经网络),我们使用一个个词作为输入量,每一个输入量都对应一个输出量,然后在后一个词的神经网络当中,加入前一个词的激活函数,变成一个链。
在这种情况下,每一个词的输出都会受到前面信息的影响。

在这里他举了一个例子:
1.泰迪若斯福特是一个好总统。
2.泰迪熊在售卖中。
在这两句话当中,只通过前面的三个单词,我们很难知道泰迪这个词究竟是否是一个人名,这受制于这个模型的单向传播缺陷。但是在后面,我们会提到另外一个模型,BRNN(双向循环神经网络),可以一定程度上解决这个问题。

通过算式,我们对前一个输入的a和当前的输入量x进行参数相乘,再加上偏移量b就可以得到下一个a的值。
计算y的时候,使用到我们刚刚已经计算好的a,乘上一个y的参数,再加入一个偏移量。也就是相当于这里建立了两个小的神经网络。
然后在这里,定义了几个关于计算方面的符号:Waa,Wya,Wax,前面那个参数,代表的是要得出的变量,后面那个参数,代表的是要乘上的变量。

为了后面建立更复杂的神经网络的时候能看的更简便一些,我们需要将这些计算符号进行进一步的简化。通过矩阵乘法的方式来简化Wa和X与a之间相乘的算式。
同样的,我们也对计算y的算式进行一个简化操作。
网友评论