Ноам Шазир
Никки Парма, ScaleUp 2023
Ллион Джоунз, CIC Tokyo
Лукаш Кайзер, TEDAI Vienna 2025
Эйдан Гомес, ALL IN 2025
К началу 2017 года вокруг идеи Якоба постепенно собралась небольшая группа.
Первым, кто всерьёз заинтересовался, был Ашиш Васвани, индиец по происхождению, защитившийся в Университете Южной Калифорнии, недавно перешедший в Google Brain. Васвани был педантичен, методичен, аккуратен в коде, любил долгие отладочные сессии до результата. Если Якоб был генератором идей, то Васвани был тем, кто эти идеи доводил до работающих систем.
К Васвани присоединился софтверный инженер из Украины по имени Илья Полосухин. Илья родился в Харькове в середине восьмидесятых, получил магистра по прикладной математике в Харьковском политехническом институте, в 2008 году переехал в США, а в начале 2014 года пришёл в Google — то есть к моменту работы над трансформером он был в Google уже три года. Молодой, с резкой манерой общения, не любил длинных дискуссий, очень быстро писал код. С Васвани они быстро сработались: один проектировал, другой реализовывал; через несколько недель у них была первая работающая прототипная модель, состоявшая только из слоёв внимания и обучавшаяся на маленьком наборе данных.
Параллельно идею Якоба услышал и заинтересовался ею Ноам Шазир. Шазир был ветераном Google в самом буквальном смысле: пришёл в компанию в начале двухтысячных и за пятнадцать лет успел оставить след во многих главных проектах: Google Search, Google Translate, в архитектурах ранних нейронных сетей. Среди коллег Шазир был знаменит способностью видеть, как нужно докрутить хорошую идею до отличной. У него был особый, ему одному свойственный стиль работы: он садился к проекту и за несколько дней предлагал три или четыре улучшения, каждое из которых увеличивало качество вдвое. Якоб, узнав, что Ноам интересуется, обрадовался: с Ноамом в команде шансы возрастали.
Постепенно к проекту присоединились и другие: Ники Пармар, ровесница Полосухина, отвечавшая за варианты моделей и кодовую базу; Лион Джонс, валлиец из британского отделения Google, занимавшийся аналогичной инфраструктурной работой; Лукаш Кайзер, польский математик, известный своими работами по компьютерной алгебре, к 2017 году переключившийся на нейронные сети и автор фреймворка tensor2tensor; Эйдан Гомес, тогда студент Университета Торонто, всю весну 2017 года стажировавшийся в Google и работавший с Кайзером над инфраструктурой обучения.
Восемь человек, разбросанных по разным группам Google: кто-то из Google Brain в Маунтин-Вью, кто-то из Google Research в Маунтин-Вью же, плюс Гомес, приехавший на стажировку из Торонто. Большая часть общей работы шла через еженедельные видео-конференции и обмен экспериментальными результатами в Google-овской системе.
Архитектура Transformer: энкодер и декодер
Архитектура, к которой они пришли весной 2017 года, выглядела одновременно странно и красиво.
В ней не было ни одной рекуррентной сети. Никакого LSTM. Никаких скрытых состояний, передающихся от шага к шагу. Вместо этого: стек из шести одинаковых блоков «энкодера» и шести одинаковых блоков «декодера». Каждый блок выглядел просто: слой внимания, потом слой обычной полносвязной сети, потом нормировка. Вход — последовательность векторов слов; выход — последовательность векторов того же размера.
Ключевой механизм назывался self-attention, само-вниманием. В нём каждое слово предложения, грубо говоря, обращалось ко всем словам того же предложения и спрашивало у них: «насколько ты для меня сейчас важно?» Получались веса. Слово смешивало векторы всех остальных слов с этими весами и формировало свой новый, обогащённый вектор.
Это была старая идея Богданау, но применённая по-другому. У Богданау attention был между двумя предложениями: декодировщик смотрел на исходник. Здесь attention был внутри одного и того же предложения, между его собственными словами. Каждое слово, в каком-то смысле, «слушало» все остальные.
Ноам Шазир улучшил эту идею двумя приёмами, которые стали потом каноническими. Первый: он предложил вместо одного механизма внимания запускать несколько одновременно, параллельно, по разным «направлениям». Идея была такая: пусть в одном направлении сеть учится обращать внимание на синтаксические связи (подлежащее—сказуемое), в другом — на семантические (что к чему относится), в третьем — на длинно-дистанционные (местоимение и его антецедент за десять слов до). По отдельности неясно, чему именно научится каждое направление, но в сумме они смогут уловить разные виды связей. Это назвали multi-head attention, многоголовое внимание. В исходной модели было восемь параллельных «голов».