tensorflow - Tensorflow 嵌入层内部的网络结构是什么?
问题描述
Tensoflow Embedding Layer ( https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding ) 好用,还有海量文章讲“如何使用” Embedding ( https://machinelearningmastery .com/what-are-word-embeddings/,https://www.sciencedirect.com/topics/computer-science/embedding-method)。但是,我想知道 Tensorflow 或 Pytorch 中“嵌入层”的实现。是word2vec吗?是弓箭吗?它是一个特殊的密集层吗?
解决方案
在结构方面,Dense
层和Embedding
层都是隐藏层,其中包含神经元。不同之处在于它们对给定输入和权重矩阵的操作方式。
一个Dense
层通过将输入相乘、向其添加偏差并对其应用激活函数来对赋予它的权重矩阵执行操作。而Embedding
layer 使用权重矩阵作为查找字典。
嵌入层最好理解为将整数索引(代表特定单词)映射到密集向量的字典。它将整数作为输入,在内部字典中查找这些整数,并返回相关的向量。它实际上是一个字典查找。
from keras.layers import Embedding
embedding_layer = Embedding(1000, 64)
这里 1000 表示字典中的单词数,64 表示这些单词的维度。直观地说,嵌入层就像任何其他层一样会尝试[ n1, n2, ..., n64]
为任何单词找到 64 维的向量(实数)。该向量将表示该特定单词的语义。它将在使用反向传播进行训练时学习此向量,就像任何其他层一样。
当你实例化一个嵌入层时,它的权重(它的内部标记向量字典)最初是随机的,就像任何其他层一样。在训练期间,这些词向量通过反向传播逐渐调整,将空间结构化为下游模型可以利用的东西。一旦完全训练,嵌入空间将显示大量结构——一种专门针对您正在训练模型的特定问题的结构。
-- F. Chollet 用 Python 进行深度学习
编辑 -如何使用“反向传播”来训练 ? 的查找矩阵Embedding Layer
?
Embedding
层类似于没有任何激活函数的线性层。理论上,Embedding
层也执行矩阵乘法,但不会通过使用任何类型的激活函数为其添加任何非线性。所以Embedding
层中的反向传播类似于任何线性层。但实际上,我们不会在嵌入层中进行任何矩阵乘法,因为输入通常是一次热编码的,权重与一次热编码向量的矩阵乘法就像查找一样简单。
推荐阅读
- c# - 没有框架将 TabbedPage 绑定到 ViewModel
- c# - 为什么 int equal double 有效但 double equal int 无效?
- python - scikit-image 无法导入图像
- c# - 使用 Newtonsoft 合并对象数组导致重复
- flutter - 飞镖闪屏
- security - SAML 是否可以为具有不同身份验证用户 ID 的两个用户发送分配/发送相同的浏览器 ID
- python-3.x - 程序在python中生成随机食谱
- javascript - 查找被点击元素的值
- android - 反应原生Android淡入淡出动画循环闪烁
- selenium - TestNG 测试的类执行顺序