深度学习:Embedding

标签: Embedding深度学习
2555人阅读 评论(9) 收藏 举报
分类:

http://blog.csdn.net/pipisorry/article/details/76095118

One-hot Embedding

假设一共有m个物体,每个物体有自己唯一的id,那么从物体的集合到\mathbb R^m有一个trivial的嵌入,就是把它映射到\mathbb R^m中的标准基,这种嵌入叫做One-hot embedding/encoding.

应用中一般将物体嵌入到一个低维空间\mathbb R^n(n \ll m) ,只需要再compose上一个从\mathbb R^m\mathbb R^n的线性映射就好了。每一个n\times m 的矩阵M都定义了\mathbb R^m\mathbb R^n的一个线性映射: x \mapsto Mx。当x 是一个标准基向量的时候,Mx对应矩阵M中的一列,这就是对应id的向量表示。

这个概念用神经网络图来表示如下:

从id(索引)找到对应的One-hot encoding,然后红色的weight就直接对应了输出节点的值(注意这里没有activation function),也就是对应的embedding向量。

Tensorflow tf.nn.embedding_lookup()

with tf.variable_scope("seq_embedding"), tf.device("/cpu:0"):
    embedding_map = tf.get_variable(  # 默认参数trainable = True,可训练
        name="embedding_map",
        shape=[self.config.vocab_size, self.config.embedding_size],
        initializer=self.initializer)
    seq_embeddings = tf.nn.embedding_lookup(embedding_map, self.input_seqs)

从id类特征(category类)使用embedding_lookup的角度来讲:

1、onehot编码神经网络处理不来。embedding_lookup虽然是随机化地映射成向量,看起来信息量相同,但其实却更加超平面可分。

2、embedding_lookup不是简单的查表,id对应的向量是可以训练的,训练参数个数应该是 category num*embedding size,也就是说lookup是一种全连接层。详见 brain of mat kelcey

3、word embedding其实是有了一个距离的定义,即出现在同一上下文的词的词向量距离应该小,这样生成向量比较容易理解。autoencode、pca等做一组基变换,也是假设原始特征值越接近越相似。但id值的embedding应该是没有距离可以定义,没有物理意义,只是一种特殊的全连接层

4、用embedding_lookup做id类特征embedding由google的deep&wide提出,但隐藏了具体实现细节。阿里 第七章 人工智能,7.6 DNN在搜索场景中的应用(作者:仁重) 中提下了面对的困难,主要是参数数量过多(引入紫色编码层)和要使用针对稀疏编码特别优化过的全连接层( Sparse Inner Product Layer )等。

5、在分类模型中用这种id类特征,主要是希望模型把这个商品记住。但id类特征维度太高,同一个商品的数据量也不大,因此也常常用i2i算法产出的item embedding来替代id特征

[tf.nn.embedding_lookup函数原理?]

[求通俗讲解下tensorflow的embedding_lookup接口的意思?]

[tf.nn.embedding_lookup]

和下面类似:

matrix = np.random.random([1024, 64])  # 64-dimensional embeddings
ids = np.array([0, 5, 17, 33])
print matrix[ids]  # prints a matrix of shape [4, 64] 

[what-does-tf-nn-embedding-lookup-function-do]

某小皮


Word Representation

 

Word level representation from characters embeddings    Bidirectional LSTM on top of word representation to extract contextual representation of each word

右图中的context应该是指句子的上下文。

[Sequence Tagging with Tensorflow]

from: http://blog.csdn.net/pipisorry/article/details/76095118

ref:


2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3139923次
    • 积分:28306
    • 等级:
    • 排名:第214名
    • 原创:557篇
    • 转载:30篇
    • 译文:5篇
    • 评论:282条
    Welcome to 皮皮blog~

    博客专栏
    最新评论