-
关键字:
embedding
全连接层
-
问题描述:在使用PaddlePaddle实现词向量相关任务时,参考了官方词向量相关的代码,里面使用了很多embedding层与fc层链接使用的结构,请问embedding层与fc层具有有什么区别?
-
相关代码:
embed_fourth = fluid.layers.embedding(
input=fourth_word,
size=[dict_size, EMBED_SIZE],
dtype='float32',
is_sparse=is_sparse,
param_attr='shared_w')
# 此函数沿着提到的轴连接输入并将其作为输出返回,即沿axis方向连接
# 将输入的词连接成一层
concat_embed = fluid.layers.concat(
input=[embed_first,
embed_second,
embed_third,
embed_fourth],axis=1)
#隐藏层,全连接
hidden1 = fluid.layers.fc(input=concat_embed,
size=HIDDEN_SIZE,
act='sigmoid')
-
问题解答:
简单而言,embeding层可以理解为从一个矩阵中选择一行,一行对应着一个离散的新的特征表达,是一种取词操作,而fc层,即全连接层,它的实质是矩阵乘法。一些用户会将embeding看成一种训练的结果,这是不对的,embedding 层仅仅就只是完成“取矩阵的一行”这样的操作,而获得的结果是构建词向量的神经网络在训练时更新模型参数的结果。 -
问题研究:
embeding层与全连接层虽然在作用上有明显的不同,但两层训练的方式是完全相同的,都是通过反向传播算法获得梯度,通过梯度下降算法进行相应参数的更新,只是embeding的目的就是这些更新后的参数,这些参数组成的矩阵就是训练后要获得的词向量,而全连接层的参数就只是参数,某种程度反应了训练数据的特征。