¿Es posible agregar una nueva entrada a la capa totalmente conectada justo antes del softmax en la CNN?

Supongamos que tiene la intención de entrenar esta arquitectura con propagación hacia atrás. Con una comprensión madura del algoritmo de retropropagación, encontrará que la respuesta es sí y comprenderá por qué.

Primero, establezcamos alguna terminología asumiendo la forma en que tiene la intención de combinar la información de las capas anteriores y la “nueva entrada” es concatenación (se pueden hacer argumentos similares para otras formas de conectarlos).

  • [matemáticas] x ‘\ en R ^ m [/ matemáticas] es su “nueva entrada”.
  • [math] h_ {i-1} = z (h_ {i-2}, \ theta_ {i-1}) \ en R ^ n [/ math] es la activación de la capa (numerada i-1) antes de ” la capa completamente conectada justo antes del softmax ”(numerado i).
  • [matemática] k [/ matemática] es la dimensionalidad de la salida de la salida de la capa i.
  • [matemáticas] \ theta_i \ en R ^ {k} \ veces R ^ {n + m} [/ matemáticas] son ​​los parámetros de la capa i. Esta es la dimensionalidad correcta porque usted dice que es una “capa completamente conectada”, por lo que hay una conexión entre * cada * de los k elementos de la salida y * cada * de las entradas anteriores.

Usted dice que la capa final es un softmax, por lo que tenemos algo de pérdida escalar L, por lo que el gradiente con respecto a la capa i se puede calcular de la manera habitual (aún no depende de su modificación): [matemáticas] \ frac {\ parcial L } {\ partial \ theta_i}. [/ math] Los parámetros de la capa i se actualizan en la dirección de ese gradiente. La capa (i-1) no está conectada a los parámetros de la capa i asociados con la “nueva entrada”, por lo que la retropropagación puede considerarse como una matriz / multiplicación de matriz en la que trunca filas que no están asociadas con las conexiones que sabe que están allí [ matemáticas] \ frac {\ partial L} {\ partial \ theta_ {i-1}} = \ frac {\ partial L} {\ partial \ theta_i} [0: n] \ times \ frac {\ partial h_ {i- 1}} {\ partial \ theta_ {i-1}}. [/ Math] Es posible que desee escribir la secuencia completa de multiplicaciones (y consulte los tutoriales si se atasca), para ver cómo se alinean las dimensiones. Uno esperaría que su biblioteca de redes neuronales piense hacer eso en lugar de multiplicar el vector completo [math] \ frac {\ partial {L}} {\ partial \ theta_i} [/ math] con una versión con relleno de cero de [math] \ frac {\ partial h_ {i-1}} {\ partial \ theta_ {i-1}} [/ math] para alinear las cosas. La retropropagación luego pasaría a la capa (i-2) y así de la manera habitual. Probablemente no querrá volver a propagar el error en su nueva rama de la red durante el entrenamiento (porque dijo que es “entrada”, por lo que no tiene parámetros entrenables), pero si lo hiciera, sería: [matemáticas] \ frac { \ partial L} {\ partial \ theta_ {i-1}} = \ frac {\ partial L} {\ partial \ theta_i} [n: (n + m)] \ times x ‘[/ math] Propagación hacia atrás en los datos sin embargo, es útil cuando se construyen “ejemplos adversos”.

Puede aplicar el mismo tipo de razonamiento para comprender las redes siamesas, y una vez que esté acostumbrado a la idea, leer y escribir con un lenguaje más general como “gráfico computacional” tendrá sentido.

Sí, definitivamente puedes hacer eso. Las dos respuestas anteriores dan el análisis teórico y la implementación en Torch.

Una cosa para reenviar, ¿cuál es su propósito de hacer eso? La característica es cada vez más de alto nivel cuando las capas suben. Si desea agregar una nueva entrada al fc7, piense dos veces si es apropiado.

Si. En Torch, usaría una ParallelTable para pasar los nuevos datos (por ejemplo, con una capa de Identidad) junto a la CNN, y luego una JoinTable para conectarlo con la salida (reformada) de la CNN.

Ahora tiene su salida CNN y nueva entrada como un solo tensor, que puede usar como entrada para la capa completamente conectada.

More Interesting

¿Cuál es una variedad de problemas y problemas que pueden resolverse mediante la minería de datos y el aprendizaje automático? ¿Qué tipo de algoritmo se utiliza para qué tipo de problema?

¿Cómo funcionan los árboles de decisión para la regresión?

En la clasificación SVM, ¿es posible encontrar la muestra de entrenamiento más cercana a la muestra de prueba dada?

¿Son buenos los cursos de Machine Learning AZ y Deep Learning AZ de Kirill Eremenko en Udemy?

¿Puedo controlar las señales neuronales desde un lugar?

¿Cuál es el algoritmo utilizado para mantener los drones equilibrados en el aire, a pesar de los golpes externos, como la ráfaga de viento?

¿Por qué los CNN se usan más para tareas de visión por computadora que otras tareas?

Cómo construir un reconocimiento de objetos basado en dispositivos móviles utilizando técnicas de aprendizaje automático

¿Python es más lento que MATLAB para la ciencia de datos y el aprendizaje automático?

¿Cómo se puede aplicar el aprendizaje profundo a los sistemas de recomendación?

¿Cómo aprende IBM Watson de los libros y documentos médicos?

¿Qué es la discretización de características?

¿Es posible hacer una selección de características para las tareas de regresión por XGBoost?

¿Cuáles son las diferencias entre los árboles de decisión, los métodos de agrupamiento y las redes neuronales?

¿Por qué podría mejorarse el arrepentimiento del bandido lineal mediante una proyección aleatoria?