定义网络结构
总结上文神经网络:
1) 神经网络的输入应该是8维的向量 2) 神经网络只有一个隐藏层 3) 神经网络的输出应该是一个8维向量,且各维的值相加为1
-
有了这些,可以很容易定义出如下的网络结构:
-
它的隐藏层并没有激活函数,但是输出层却用了softmax,这是为了保证输出的向量是一个概率分布。
-
隐藏层
输出层的神经元应该是8个,这样才能输出一个8维的向量。那么隐藏层的神经元应该是多少?
这取决于我们希望得到的词向量是多少维,有多少个 隐藏神经元 词向量就是多少维。每一个隐藏的神经元接收的输入都是一个8维向量,假设我们的隐藏神经元有3个(实际中,google推荐的是300个,怎么效果好怎么定),如此以来,隐藏层的权重就可以用一个8行3列的矩阵来表示。网络训练完成后,这个8行3列的矩阵的每一行就是一个单词的词向量!
-
训练完成后,只需要保存 隐藏层的 权重矩阵 ,输出层此时已经完成使命,可以丢掉了。
那么怎么使用去掉了输出层的网络呢?
网络的输入是one-hot编码的单词,它与 隐藏层 权重矩阵 相乘 实际上是取 权重矩阵 特定的行,如下图所示: -
隐藏层 相当于 一个查找表,它的输出就是输入单词的 词向量。
-
输出层
从 隐藏层 获得一个单词的词向量后,就要经过输出层了。
输出层的神经元数量和语料库中的单词数量一样。每一个神经元可以认为对应一个单词的输出权重,词向量乘以该 输出权重 就得到一个数,该数字代表了输出神经元对应的单词出现在输入单词周围的可能性大小,通过对所有的输出层神经元的输出进行softmax操作,我们就把输出层的输出规整为一个概率分布了。如下示:
-
有一点需要注意,输出的是该单词出现在输入单词周围的概率大小,这个“周围”包含单词的前面,也包含单词的后面。