Error: la convolución y la correlación son lo mismo
«Deslizar un kernel y multiplicar es convolución, se escriba como se escriba.»
x = np.array([1., 2., 3., 4., 5.])
k = np.array([1., 2., 3.])
corr = np.array([(x[i:i + 3] * k).sum() for i in range(3)])
conv = np.convolve(x, k, mode="valid")
assert not np.allclose(corr, conv)
assert np.allclose(corr, np.convolve(x, k[::-1], mode="valid"))
La convolución voltea el kernel antes de deslizarlo, así que ambas difieren con uno asimétrico. Voltéalo tú y la correlación reproduce la convolución exactamente.
Con un kernel simétrico la distinción desaparece, y por eso pasa desapercibida, y por eso las capas de «convolución» del aprendizaje profundo son correlación.