編碼器-解碼器(encoder-decoder)
/ en-KOH-dur dee-KOH-dur /
編碼器-解碼器,是一種兩段式的設計,專為「輸入和輸出是兩類不同東西」的任務而生——把英文譯成法文、把一篇長文章變成一段短摘要、用文字描述一張照片。難處在於,輸入與輸出並非一一對應:五個英文詞的句子,也許要七個法文詞,且順序還不一樣。編碼器-解碼器把活兒拆成兩半來解決:「編碼器」讀入並消化整個輸入,化成一份緊湊的內部含義;「解碼器」再從這份含義出發,一塊一塊地生成輸出。
想想一位老練的人類口譯員。你說話時,他不會逐字翻譯;他先聽完你整句話,領會你的本意——此刻那是一個停留在他腦中、已脫離原詞的念頭——再用另一種語言自然地把這個念頭說出來。編碼器就是「傾聽與理解」那一半;它形成的含義,是一束數字,有時被稱作「上下文」。解碼器則是「說出口」那一半,一步步搭起輸出,每新出一塊,既受那份上下文的指引,也受它自己已經說出的東西的指引。
這種模式無處不在:機器翻譯、摘要、語音轉文字、影像配文,甚至從一張帶噪圖畫出一張乾淨圖。早期版本有個實打實的瓶頸——編碼器得把一段長輸入硬塞進一份固定大小的上下文裡,長輸入便被糟蹋。補救之道叫作「注意力」,它讓解碼器在寫每一個詞時,都能回頭查看編碼器中途留下的所有筆記,並聚焦於相關的那些。注意力強大到後來長成了 Transformer,而 Transformer 本身就建立在編碼器-解碼器的思想之上——於是這個老設計,悄悄撐起了現代 AI 的大半江山。
翻譯「貓坐下了」:編碼器讀完這三個詞,把它們疊成一個承載含義的「上下文向量」;解碼器再依次吐出「le」「chat」「s'est assis」——每個法文詞,都是用那份上下文、加上已經吐出的詞共同選定的。
先把整段輸入理解透,再一塊一塊地把輸出說出來。
編碼器的活兒是「理解」,解碼器的活兒是「生成」。把長輸入硬塞進單一固定上下文,是它最初的軟肋——而「注意力」(讓解碼器重新回看整段輸入)正是補上這個軟肋、並催生 Transformer 的突破。