最近笔者假期赋闲在家,顺便学习Deep learning觉得很有兴趣。所以记录一下所学所感,方便日后回顾。这里的绝大部分资料来源于Udacity Deeplearning的纳米课程,有兴趣的童鞋可以在其官网进行查询。下面开始我们的正文。
当我们处理文本中的文字时,输入词汇种类成千上万,如果用独热编码,那么每个词汇输入向量都会仅有一个元素设定为1其他元素均为0,这样在矩阵相乘时会浪费计算资源,自身也会占用较大内存空间。
为了提高网络效率,我们用一种叫做内嵌的方法。直观的理解就是独热编码向量与矩阵的乘积得到的是一个行向量,这个行向量就是矩阵内嵌的一行。
为了代替矩阵的相乘,我们用查找表代替权重矩阵。我们将单词编码为整数,例如"heart"被编码为958,"mind"被编码为18094,之后我们可以通过查询查找表得到词汇对应的隐藏层向量。这个过程叫做内嵌查找,表中每个词汇的隐藏单元数量被称为内嵌纬度。
其实,内嵌查找表就是一个权重矩阵,内嵌层就是一个隐藏层,查找表就是代替了矩阵相乘,所以训练上与任何权重层是一个方法。
关于内嵌的使用可以在很多模型中见到,尤其在分类情况较多的模型中能够提高网络计算性能。Word2Vec就是其中一个很有代表性的例子,该模型通过内嵌层寻找词汇向量所蕴含的语义。