Producto Hadamard

Multiplicación elemento a elemento en vectores y matrices

El producto Hadamard es una operación que multiplica dos vectores o matrices elemento por elemento, produciendo una nueva estructura del mismo tamaño.

👉 A diferencia de la multiplicación matricial, no combina filas con columnas, sino que opera directamente sobre cada posición.

Definición corta

El producto Hadamard multiplica dos estructuras del mismo tamaño elemento a elemento.

Definición detallada

Dados dos vectores:x=[x1,x2,...,xn]x = [x_1, x_2, …, x_n]x=[x1​,x2​,…,xn​] y=[y1,y2,...,yn]y = [y_1, y_2, …, y_n]y=[y1​,y2​,…,yn​]

El producto Hadamard se define como:xy=[x1y1,x2y2,...,xnyn]x \odot y = [x_1 y_1, x_2 y_2, …, x_n y_n]


Para matrices

AB=[a11b11a12b12a21b21a22b22]A \odot B = \begin{bmatrix} a_{11}b_{11} & a_{12}b_{12} \\ a_{21}b_{21} & a_{22}b_{22} \end{bmatrix}

👉 Requisito:
Ambas estructuras deben tener la misma dimensión.

Intuición

El producto Hadamard responde:

👉 “Multiplica cada valor con su correspondiente”

Ejemplo:[1,2,3][4,5,6]=[4,10,18][1, 2, 3] \odot [4, 5, 6] = [4, 10, 18]

Interpretación

  • No mezcla información entre posiciones
  • Opera localmente
  • Mantiene la estructura original

👉 Es una operación element-wise.


🔄 Comparación con otras operaciones

OperaciónTipo
Producto escalarsuma de productos
Multiplicación matricialcombinación global
Hadamardelemento a elemento

🧠 Producto Hadamard en redes neuronales

🔹 1. Funciones de activación

Se aplica elemento a elemento:

z → ReLU(z)

🔹 2. Backpropagation

Gradientes:Lz=Laf(z)\frac{\partial L}{\partial z} = \frac{\partial L}{\partial a} \odot f'(z)

👉 Uso directo del producto Hadamard.

🔹 3. Atención (Transformers)

Se usa en:

  • masking
  • scaling
  • weighting

🔹 4. Dropout

x ⊙ mask

👉 Apaga neuronas.

🔹 5. Gating (LSTM, GRU)

ht=gth~th_t = g_t \odot \tilde{h}_t

👉 Control de flujo de información.


📊 Ejemplo paso a paso

A=[1234],B=[5678]A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} , \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}

AB=[5122132]A \odot B = \begin{bmatrix} 5 & 12 \\ 21 & 32 \end{bmatrix}

Relación con otros conceptos

Ejemplo en Python

# Producto Hadamard manual
x = [1, 2, 3]
y = [4, 5, 6]
result = [x[i] * y[i] for i in range(len(x))]
print("Resultado:", result)

Ejemplo en NumPy

import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
result = x * y
print("Hadamard:", result)

Ejemplo en matrices

import numpy as np
A = np.array([
[1, 2],
[3, 4]
])
B = np.array([
[5, 6],
[7, 8]
])
result = A * B
print("Resultado:\n", result)

Ejemplo en PyTorch

import torch
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])
result = x * y
print("Hadamard:", result)

Ejemplo en backpropagation

import torch
# Activaciones
a = torch.tensor([0.5, 0.2, 0.8], requires_grad=True)
# Gradiente simulado
grad = torch.tensor([1.0, 1.0, 1.0])
# Derivada de activación (ejemplo)
deriv = torch.tensor([1.0, 0.0, 1.0])
# Producto Hadamard
result = grad * deriv
print("Gradiente final:", result)

Qué muestra este ejemplo

  • Operación local
  • Uso en gradientes
  • Base de muchas operaciones en redes

Errores comunes

Confundir con multiplicación matricial

Son completamente distintas.

Dimensiones incompatibles

Debe ser el mismo tamaño.

Ignorar broadcasting

Puede cambiar el resultado esperado.

Ejemplo conceptual en ML

Entrada:  [1, 2, 3]
Máscara: [1, 0, 1]Salida: [1, 0, 3]

👉 Dropout usando Hadamard.

Interpretación profunda

El producto Hadamard permite:

  • aplicar transformaciones locales
  • controlar flujo de información
  • combinar señales
  • implementar gradientes

👉 Es una operación simple pero esencial en deep learning.

Conclusión

El producto Hadamard es una operación fundamental que permite multiplicar elementos directamente sin mezclar información global. Es clave en activaciones, gradientes, atención y muchas otras partes de redes neuronales.

👉 Entenderlo es clave para entender cómo fluye la información dentro de un modelo.

Related Concepts