La documentación de Keras no está clara de qué es esto en realidad. Entiendo que podemos usar esto para comprimir el espacio de características de entrada en uno más pequeño. Pero, ¿cómo se hace esto desde la perspectiva del diseño neuronal? ¿Es un autoenocder, RBM?
97
Respuestas:
Hasta donde yo sé, la capa de incrustación es una multiplicación de matriz simple que transforma las palabras en sus correspondientes incrustaciones de palabras.
Los pesos de la capa Embedding son de la forma (vocabulary_size, embedding_dimension). Para cada muestra de entrenamiento, su entrada son números enteros, que representan ciertas palabras. Los números enteros están en el rango del tamaño del vocabulario. La capa de incrustación transforma cada entero i en la i-ésima línea de la matriz de pesos de incrustación.
Para hacer esto rápidamente como una multiplicación de matrices, los enteros de entrada no se almacenan como una lista de enteros sino como una matriz de un solo uso. Por lo tanto, la forma de entrada es (nb_words, vocabulary_size) con un valor distinto de cero por línea. Si multiplica esto por los pesos de incrustación, obtiene el resultado en la forma
Entonces, con una simple multiplicación de matrices, transforma todas las palabras en una muestra en las incrustaciones de palabras correspondientes.
fuente
La
Keras
Embedding
capa no está realizando ninguna multiplicación de matrices, pero solo:1. crea una matriz de peso de (vocabulary_size) x (embedding_dimension) dimensiones
2. indexa esta matriz de ponderaciones
Siempre es útil echar un vistazo al código fuente para comprender lo que hace una clase. En este caso, veremos la
class
incrustación que hereda de la capa baseclass
llamada Capa .(1) - Creando una matriz de peso de (vocabulary_size) x (embedding_dimension) dimensiones:
Esto ocurre en la
build
función de incrustación :Si echa un vistazo a la capa de clase base , verá que la función
add_weight
anterior simplemente crea una matriz de pesos entrenables (en este caso de (vocabulary_size) x (embedding_dimension) dimensiones):(2) - Indexación de esta matriz de ponderaciones
Esto ocurre en la
call
función de incrustación :Esta función devuelve la salida de la
Embedding
capa que esK.gather(self.embeddings, inputs)
. Lo que tf.keras.backend.gather hace exactamente es indexar la matriz de ponderacionesself.embeddings
(ver labuild
función anterior) de acuerdo con lasinputs
que deberían ser listas de enteros positivos.Estas listas se pueden recuperar, por ejemplo, si pasa sus entradas de texto / palabras a la función one_hot de Keras, que codifica un texto en una lista de índices de palabras de tamaño n (esta NO es una codificación activa; consulte también este ejemplo para obtener más información: https://machinelearningmastery.com/use-word-embedding-layers-deep-learning-keras/ ).
Por tanto, eso es todo. No hay multiplicación de matrices.
Por el contrario, la
Keras
Embedding
capa solo es útil porque evita exactamente realizar una multiplicación de matrices y, por lo tanto, economiza algunos recursos computacionales.De lo contrario, podría usar una capa
Keras
Densa (después de haber codificado sus datos de entrada) para obtener una matriz de pesos entrenables (de (vocabulary_size) x (embedding_dimension) dimensiones) y luego simplemente hacer la multiplicación para obtener el resultado que será exactamente lo mismo con la salida de laEmbedding
capa.fuente
Para comprender mejor cualquier función, es un buen hábito mirar el código fuente. Aquí está la incrustación. Básicamente, es una tabla de consulta entrenable.
fuente
En Keras, la
Embedding
capa NO es una simple capa de multiplicación de matrices, sino una capa de tabla de búsqueda (consulte la función de llamada a continuación o la definición original ).Lo que hace es mapear cada uno de los números enteros conocidos
n
eninputs
un vector de características entrenablesW[n]
, cuya dimensión es la denominada longitud de características incrustadas.fuente
Embedding
capa es de hecho una multiplicación de matrices.En palabras simples (desde el punto de vista de la funcionalidad), es un codificador one-hot y una capa completamente conectada . Los pesos de las capas se pueden entrenar.
fuente