Вопрос или проблема
Итак, в слое декодера трансформера, предположим, я предсказал 3 слова до сих пор, включая начальный токен, тогда последний слой декодера будет производить 3 вектора размера d-model, и только последний вектор пройдет через слой встраивания для формирования логитов. Я правильно это понимаю? Потому что это нигде не упоминается в оригинальной статье, и мне трудно это понять. Что насчет информации, которая теряется при отбрасывании двух токенов перед последним токеном? Мы могли бы попробовать линейно проецировать все векторы в единственный d-мерный вектор, но тогда размер векторов будет продолжать увеличиваться после того, как мы каждый раз предсказываем новое слово, и нам понадобится новая проекционная матрица каждый раз. Этот момент кажется неявным и нигде не упоминается. Может кто-нибудь объяснить, что на самом деле делается и почему это делается или это случайная эвристика, которая кажется работающей (т.е. просто взять финальное скрытое состояние, produced by the decoder)
Я понимаю, что мы говорим о времени вывода (т.е. декодировании), а не о тренировке.
На каждом шаге декодирования все предсказанные токены передаются в качестве входных данных в декодер, а не только последний. Информация не теряется. Скрытые состояния токенов, которые уже были декодированы на предыдущих шагах декодирования, пересчитываются; однако не наивные реализации обычно кэшируют эти скрытые состояния, чтобы избежать их многократного пересчета.
Ответ или решение
В последние годы архитектура трансформеров значительно изменила подход к решению задач обработки естественного языка. Одним из ключевых компонентов этой архитектуры является декодерная часть, которая, как вы правильно указали, ведет себя особым образом во время инференса (декодирования). Давайте подробно рассмотрим, что происходит в последнем слое декодера и как это влияет на модель.
### Структура последнего декодерного слоя
В декодере, кроме последнего скрытого состояния, действительно используется информация о всех предыдущих токенах. Начнем с того, что каждую итерацию декодирования принимается на вход не только последний предсказанный токен, но и все ранее предсказанные токены (например, в вашем случае это – три токена, включая стартовый). Эта информация подается на вход декодера, что позволяет ему учитывать контекст всего последовательного ввода.
#### Генерация векторов
На каждом этапе декодирования, декодерная сеть генерирует векторы скрытых состояний для каждого переданного токена. В вашем примере, если вы уже предсказали три токена, то декодер сгенерирует три вектора размерности d-model. Однако на практике, чтобы обеспечить эффективное использование памяти и вычислительных ресурсов, многие современные реализации кэшируют эти вектора скрытых состояний, избегая повторных вычислений.
### Работа с потерянной информацией
Вы задали важный вопрос о потере информации, когда мы отказываемся от предыдущих скрытых состояний, чтобы сгенерировать логиты токена. Но это не совсем так. На самом деле, вся информация о предыдущих токенах хранится в состоянии модели. Декодерные слои трансформера оптимизированы так, чтобы каждый вектор скрытого состояния мог независимо взаимодействовать с другими через механизм внимания. Таким образом, информация о предыдущих токенах не теряется, а наоборот: они способствуют формированию последнего вектора, который будет использоваться для генерации логита.
### Генерация логитов
На последнем этапе только последний вектор скрытого состояния подается в слой эмбеддинга, чтобы сформировать логиты. Эта практика обусловлена тем, что конечный токен, который мы хотим предсказать, в наибольшей степени зависит от последнего состояния декодера. Использование только последнего скрытого состояния для предсказания следующего токена является наиболее интуитивно понятным и простым подходом, который хорошо работает на практике. Это не неожиданное или случайное решение, а осмысленный компромисс между эффективностью и точностью.
### Заключение
В заключение следует отметить, что архитектура трансформеров и, в частности, декодер, разработаны таким образом, чтобы сохранять всю необходимую информацию о предшествующих токенах и эффективно использовать её для генерации последующих токенов. Ваши наблюдения касательно хранения и переработки векторов скрытых состояний соотносятся с действительностью, где информация не теряется, а используется для более точного предсказания. Эта структура декодера трансформера значительно улучшает качество генерации текста и делает его одним из самых мощных инструментов в области обработки естественного языка.
Если у вас есть дополнительные вопросы или вам нужна помощь в другом аспекте работы трансформеров, не стесняйтесь обращаться!