Could you give a general overview (assume I'm a software developer who knowns nothing about ML) of how the decoder and encoder actually work?