Kaggle intensive day 1
m0n0x41dПривет, идет первый день интенсива про LLM от Kaggle и Google.
Первым документом на интенсиве предлагают довольно свежее и подробное описание о том где мы оказались – что такое трансформеры, как они появились, как развивались – перечисляются самые громкие модели, их поколения и улучшения в качестве довольно емкой исторической сводки.
Ну и еще прикладывается подкаст сгенерированный NotebookLM по этому же документу, послушайте хотя бы его! Тыц.
Итак, архитектура "трансформер" освещается достаточно подробно, на 80 с чем то страничек :)
Рассказывают что до трансформеров были рекуррентные нейронные сети (RNN), которые обрабатывают входные и выходные данные последовательно. Транформеры же смогли параллельно обрабатывать последовательности токенов, потому что в их архитектуре появилась такая штука как self-attention.
Self-attention это такой страшный механизм матричного перемножения кучи векторов, где набор векторов вычисляется для каждого токена. Это довольно тяжелые вычисления, и одна из причин, откуда растут ноги контекстного окна у трансформеров. Вторая – квадратичная вычислительная сложность по отношению к длине обрабатываемой последовательности.
Архитектура типа Трансформер родилась в Google в 2017 году с целью создания модели для переводов между языками.
Состоит она из двух больших частей, первая – Энкодер, который берет входной текст и пропускает через следующие этапы:
- Нормализация – опциональный этап где триммятся пробелы и прочий мусор.
- Токенизация – рубим текст на чанки и каждый мапим с числовым айди из словаря.
- Эмбеддинг – каждый айдишник токена конвертируем в вектор. (Это то чему учится модель в процессе... ну, обучения.)
- Позиционное кодирование – тут по сути просто происходит насыщение информацией про условный индекс каждого токена, чтобы модель понимала порядок слов.
Тот самый self-attention начинается как раз когда уже все перемолото в вектора. Подробнее про self-attention можете либо прочитать в документе, либо попросить в комментариях написать об этом отдельный пост - буду только рад :)
Вторая крупная часть это Декодер, и его задачей является взять весь ворох векторов и матриц которые выдал Энкодер, и сгенерировать осмысленный результат.
Оба, энкодер и декодер состоят из набора слоев (вообще не просто из набора слоев, а еще и из набора блоков трансформера), где первым слоем (в каждом блоке) идет мульти хэд аттеншион, прости Господи.
Мульти-хэд, это такой модуль в котором мы параллельно обрабатываем разные наборы матриц из векторов токенов, и каждая такая голова потенциально фокусируется на разных взаимозависимостях в обрабатываемом тексте.
Технически, в multi-head attention каждая "голова" работает с трансформированными копиями одних и тех же входных данных, но применяет к ним разные обучаемые веса для формирования своих query (Q), key (K) и value (V) матриц. Каждая голова по сути выполняет операцию attention со своим набором весов, что позволяет ей фокусироваться на разных аспектах или взаимосвязях в данных.
Все результаты работы голов склеиваются и линейно преобразовываются и передаются в следующий слой.
Далее есть еще feedforward слои, которые является по сути числомолотилкой, состоящей из двух линейных преобразований и функции активации между ними
Функции активации добавляют нелинейность в вычисления нейронных сетей, и именно этими функциями определяется будет ли активирован каждый нейрон нейросети.
И наконец, есть еще промежуточные AddNorm слои, которые представляют собой комбинацию из двух операций – residual connection + layer normalization.
AddNorm слой сначала на этапе Add складывает входные и выходные данные слоя (residual connection) - это позволяет изначальным данным не затухать, пока они бегут через все слои - молотилки. Norm - нормализует сложенные в Add данные по признакам каждого токена.
AddNorm слоями пронизаны все компоненты трансформера, эти слои расположены после слоя внимания, и после fastforward слоя тоже, и так в каждом блоке. Вот такие вот слоеные пироги 🥧
Еще в документе пишут что более поздние LLM (все которыми мы сейчас пользуемся) отказались от архитектуры энкодер-декодер, оставив только декодер. Так и повелось – большая часть моделей сейчас декодер-онли, хотя есть экземпляры в которых только энкодер, но о них мы поговорим в другой раз.
В decoder-only архитектуре стек из блоков декодеров выполняет обе функции - и кодирование и декодирование.
Входные данные тут конечно же все еще проходят препроцессинг и преобразуются в эмбединги и насыщение позициональными индексами, но основной упор делается сразу на предсказание выхода.
Таким образом, комбинация decoder-only архитектуры и маскированного внимания создает эффективную модель, где каждый токен может "видеть" только себя и предыдущие токены, но не будущие. Благодаря этому в механизме внимания достигается необходимая асимметрия для автоматического продолжения текста – модель обрабатывает информацию однонаправленно, предсказывая следующие токены на основе уже имеющихся.
Такую архитектуру и обучать проще, и масштабировать.
Дальше в документе еще очень много всякого – про деревья мыслей (появилось после chain of thoughts подхода), про мульти-экспертов и отдельный слой-роутер, который раскидывает куски входных данных по этим экспертам, а на выходе из них собирается ответ…
И еще про дистилированные модели, про то как обучают трансформеры... Довольно подробная история эволюции современных трансформеров, еще про файн тюнинг, про RLHF, прелюдия на промт-инжениринг и еще много по мелочи, но предметно.
Короче говоря – документ отличный. Это хорошая и свежая база. Удивительно что это не единственный документ на изучение в первый день, предлагается еще второй про промпт-инжениринг, и снова NotebookLM подкаст по нему:
Док про промт инжиниринг тоже не маленький - 68 страниц :)
Одно точно – это не чтиво на один день. Прочитать конечно обе бумаги можно за день, и даже по пару раз, но смысла не будет никакого – в одно ухо влетело...
А смысл? Хочется каждую фичу, технологию и описание отдельно вычитать, поискать дополнительные источники и по каждой отдельно помыслить письмом!
Так что то что я вам выкатил сверху это результат "токенизированного мышления письмом" лишь по куску первого дока :)
Сегодня у меня уже хватит времени только на то чтобы хоть сколько нибудь осмысленно прочитать второй документ, и может начать делать лабы на Kaggle.
По материалу этого интенсива в блог писать буду точно не неделю, все ожидания о качестве материала пока полностью оправдались и даже превзошлись!
Увидимся!