Project DelphiTensors Workshop

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.