Это лучшая лекция, объясняющая трансформеры и то, как они реализуют анализ естественных языков, даже на английском языке я не видел подобной. Огромная благодарность вам, Игорь, за подготовку этих материалов.
Да, тоже на английском смотрел, и тут хопа и на русском выпало такое. У Андрея Карпатого может подробнее есть на англ, но я в его серии лекций пока только первую посмотрел. Следующие отложил пока. У него прямо с кодами на питоне. Можно пощупать всё руками если что в коде.
@@user--------- Напоминаю, что учёба это труд, никакую тему невозможно изучить не вкладывая труда. Соответственно, нет смысла ожидать, что ваше пассивное слушание одной лекции обогатит вас такими же знаниями, как и специалиста, изучавшего эту тему продолжительное время и впоследствии решающего прикладную задачу с использованием трансформеров.
@@user--------- Конечно, сначала надо прочитать оригинальную статью "Attention is all you need" и сделать простой классификатор фраз, например, грубые/не грубые фразы. Затем это видео поможет заполнить оставшиеся белые пятна.
Игорь, спасибо за лекцию! Крайне полезный материал, с отличной подачей! Каждый раз обращаюсь к твоей лекции, перед собесами на секцию NLP) Было бы очень здорово, если бы появились таймкоды. Спасибо!
Ойййй, ойййй, ойййй, КАК Я ДОЛГО ИСКАЛ ЧЕЛОВЕКА, КТО НОРМАЛЬНО БЫ ВСЮ ЭТУ ФИГНЮ С ТРАНСФОРМЕРАМИ БЫ ОБЪЯСНИЛ - ГИГАНСКИЙ РЕСПЕКТ ТЕБЕ!!! Плиз сделай видео о том, как работает GPT и ChatGPT. СПАСИБО.
Досмотрел, круто. Мысли вслух. Было бы интересно посмотреть как конкретно трансформер сможет выполнять конкретные (простые для человека, но неочевидные для нейронки) задачи по построению предложения. Уже упоминалось в вопросах задача про разное кол-во слов в оригинале и в переводе. Я бы взял например такую задачу: в одном языке определения (красивый) всегда идут после определяемого слова (цветок), в другом всегде до (я нашел красивый цветок vs. ja nashel tsvetok krasivii). Или например если уточнения по времени действия в одном языке (на который надо перевести) всегда идут в начале предложения, потом за ним идут уточнения по месту, а потом уже подлежащее и сказуемое (В 5 часов [время] из дома [место] я выехал). Ну и всякое такое еще придумать. И посмотреть как с помощью механизма attention или еще каких-то конкретно эта задача реализуется. И может придумать какие то хитрые примеры предложений для перевода (м.б. с несуществующими языками, а может и с существующими), которые очевидны человеку, но механизмами этой нейронки в принципе невыполнимы.
А мне еще интересно, как GPT модели "собирают" предложение из разных фактов? Например условный вопрос модели: "Где жили Билл Гейтс и Стив Джобс, кто из них мужчина и кто из них лучше следил за здоровьем?", модель ответит где они оба жили (отдельные факты), что они оба мужчины (обобщенный факт по ним обоим) и скорее всего скажет что за здоровьем предположительно лучше следил Гейтс, так как Джобс уже умер и от рака (я не проверял конкретно этот пример, но не важно, примерно так модель всегда и отвечает). Это выходит за рамки "модель дописывает текст", здесь модель находит известные ей факты и даже делает предположение о том, кто из двоих лучше следил за здоровьем. Как она это делает?
Когда мы делаем поэлементное сложение - мы как бы "сдвигаем" вектор в некотором пространстве. Этот сдвиг и кодирует позиционную составляющую, как будто бы говоря "это слово 'мама' на третьем месте и в начале предложения". А модель уже работает с таким представлением. Поэтому смысл не теряется (так как эмбеддинги позиций тоже обучаются, ну и с точки зрения модели она их не делает насколько непонятными, что их прибавление ломает смысл). Стекание (если имеется в виду конкатенация) же по сути будет создавать новые размерности в пространстве эмбеддингов, при этом сигнал там будет разреженный - ведь это полностью новые размерности, а значит каждая из них обучается реже, и модель просто не увидит большинства комбинаций слово + позиция. И экстраполировать тут (субъективно) сложнее, нежели когда все слова так или иначе перемещаются в общем пространтве
Есть разные варианты. Например, в DeBERTa позиционные эмбеддинги и эмбеддинги слов развязаны и представлены отдельными матрицами. В целом трансформер может подстроиться под любой вариант, если информация о позиции в принципе есть в данных.
Как на выходе из последнего декодера получается один эмбеддинг (который как раз в линейный слой подается, на 1:37:00 на картинке видно)? Все имеющиеся как-то объединяются или выбирается последний? Спасибо за отличный рассказ!
Во время генерации берется последний, так как именно по нему мы должны предсказать следующее слово. Во время тренировки берутся все сразу, и сразу предсказываются все слова.
@@stalkermustangТы имеешь в виду batch, когда мы предсказываем по первому слову второе, по 1 и 2 - третье и тд (но отдельные строки независимы), или что-то другое?
Ссылки для более глубокого/детального понимания трансформеров (на английском): ua-cam.com/play/PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ.html ua-cam.com/play/PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi.html ua-cam.com/video/KV5gbOmHbjU/v-deo.html&ab_channel=NeelNanda
50:49 Неясно, каким образом нейронка поняла, что "it_" связано с "animal", если в masked self-attention токены слева (из прошлго) не могут "обращать внимание" на токены справа ("из будущего" ). Иными словами, трансформер в данном случаем пытается сделать предсказание для куска "The animal didn't cross the street because it". Такой кусок даже для человека будет двусмысленным
что можно почитать/изучить ДО просмотра (пересмотра) данной лекции, чтобы лучше понять и возможно соотнести полученную информацию с современной робототехникой ( трансформерами для роботов при принятии решений) ?
я не прошёл верификацию UA-cam и не могу прикреплять ссылки описании на внешние ресурсы. Заходите завтра - будут и таймкоды, и ссылка не презентацию, и на канал, и вообще на всё!
А на 58:22 нет ошибки в инициализированных матрицах, которые мы перемножаем? А размером 100 на 300 и B размером 100 на 300. Должно же быть (100, 300) * (300, 100).
А в чем собственно проблема декодеру смотреть на весь инпут 1:43:50? Интуитивно, когда идет задача перевода, то мы смотрим на все предложение и потом его переводим, а не ограничиваемся только левым контекстом? Я прослушал где-то мб?
Для перевода (в примере в презентации) используется encoder-decoder архитектура. В таком случае в Decoder есть 2 типа аттеншена: cross-attention и self-attention. Первый смотрит на все токены из encoder, то есть ему достпна вся информация для того, чтобы понять, как дальше переводить. То есть 7й токен в decoder в этом случае видит даже 25й токен encoder. В Self-attention токены смотрят только на выходные токены (токены перевода в decoder, encoder-векторов тут нет), при этом нам не нужно, чтобы эти токены смотрели в будущее. Поэтому тут применяется маска, отсюда и название - Masked self attention. Лучше всего еще раз посмотреть часть на 1:36:50, где картинка enc-dec механизма изображена. Обрати внимание, что там блок трансформера справа состоит уже не из двух, а из трех частей - два аттеншена и один FF. Если же мы говорим про decoder-only модель, то там нет cross-attention вообще, только маскированный селф аттеншен, и маску нужно применять, чтобы не смотреть в будущее - при этом все токены промпта (в случае перевода - исходная фраза на исходном языке) доступны каждому генерируемому токену перевода (потому что вторые идут после, а значит видят левый контекст)
Боюсь, такого нет. Можно смотреть на объяснение обучения Linear (Dense) layer, и потом от него переходить к расчётам q,k,v, как каждая цифра в них меняется из-за того или иного градиента.
@@stalkermustang вот по linear layer как раз всё понятно, а по матрицам q,k,l - ни капли. И в видео об этом ни слова. Понятно, что они обучаются схожим образом, но вот что на вход подаётся и на выходе ожидается при обучении - нет.
Это просто матрицы, которые инициализируются случайным образом перед обучением, а во время тренировки уже настраиваются автоматически (как и все другие параметры в нейросетях). Это буквально один линейны слой с N входных и M выходных значений, то есть матрица размера NxM
@@stalkermustang @stalkermustangable тогда хотел бы уточнить: если у нас матрицы запроса и ключа инициализируются случайно, и затем (если верить схеме оригинальной статьи) проходят через одни и те же слои, то почему они в обучения результате не только не близки по значению, но и вдобавок по смыслу серьезно различаются? Почему мы не получаем одно и то же?
@@2k12cool они не проходят через одни и те же слои, они функционально разные, см. 52:26 - ключи и значения совмещаются. То есть это различие оно из дизайна модели следует. Для первого слова мы возьмем его Query и все Keys для остальных слов. Будем сопоставлять один единственный Query и все остальные Keys, а затем нормировать через Softmax это значения.
Получается, что если бы не было Residuals, то на следующий слой вместо инфы (Values) о самом слове, проходила бы инфа (Values) о наиболее связанным (attended) с ним словом из входных данных. Разве это имеет смысл (без Residuals)? Инфа о слове не дополнялась бы инфой о связанных (attended) с ним словах, а заменялась бы.
Это имеет смысл, и в целом даже с residuals работает также. Часто наибольший скор аттеншена у самого же слова, то есть прокидывается, скажем, на 80% его эмбеддинг, а остальные - лишь слегка его корректируют на 20%. Эта логика работает и с резидуалом, и без него. Замена бы происходила только если вес самого слова к самому себе был очень маленький, а это редкий случай (такое может происходить, например, для отдельных голов, которые заменяют смысл местоимений на полный смысл слова, на которое местоимение указывает: эмбеддинг слова "он" "заменить" на эмбеддинг слова "мужчина" из первой части предложения, условно)
Отличная лекция! Кое-что прояснил для себя. Только multihead немного не так... Все-таки разные головы на разные части эмбеддинга смотрят. ;) Поэтому есть ограничение, что количество голов кратно размеру эмбеддинга. И cat на выходе дает размерность как раз n_embd
Не - в лекции все ОК. Там этот момент не подсвечен, но может и не нужно. Дальше в секции вопросов-ответов на 1:32 спрашивают - почему выучиваются по-разному, если приходит одно и тоже, и... Вот тут бы ввернуть про то, что это не одно и то же, а все-таки разное. Разные части эмбеддинга... . :) @@stalkermustang
В общем случае хэширование не подразумевает возможность восстановления исходных данных из хэша, т.к. одному выходу хэш-функции могут соответствовать множество вариантов входных данных. Токенизация подразумевает однозначное соответствие входных и выходных данных, т.к. она обратима.
Как отметили в комментарии выше, тут однозначное соответствие с полным разделением всех токенов между собой. Более того, хэширование в том же FastText незначительно, но уменьшает качество (так как много "смыслов" ложатся в один бин/токен), а тут нам уже нет смысла экономить - обучать так обучать! Так что это просто две разных вещи, поэтому так и не называют.
Из лингвистики. Там есть types, words, tokens. Удобно было recycle термин для алгоритмов вроде N-gram, потому что embeddings у людей в голове близко находятся, все понимали, о чём идёт речь 😂
chatgpt имеет свое мнение по поводу работы BPE и оно мягко говоря сильно отличается от мнения игоря.кто рассудит где правда?ответ CHATGPT:Byte Pair Encoding (BPE) назван так из-за своего подхода к разбиению слов на более мелкие единицы, называемые "байтами" (bytes). В контексте BPE "байт" не обязательно соответствует фактическому байту, используемому в компьютерах. Вместо этого, "байт" представляет собой последовательность символов, которые могут включать в себя как буквы и цифры, так и другие знаки препинания и символы. В исходной версии BPE каждый символ в исходном корпусе рассматривается как отдельный "байт", а затем на каждом шаге наиболее часто встречающиеся пары "байтов" объединяются в новый "байт", который добавляется в словарь. Этот процесс повторяется до тех пор, пока не будет достигнуто желаемое количество "байтов" в словаре или до тех пор, пока не будет достигнуто определенное количество итераций. Таким образом, BPE позволяет эффективно кодировать и сжимать текстовые данные, используя более мелкие единицы, чем слова. Это может быть полезно для задач, таких как машинный перевод или распознавание речи, где часто встречаются слова, которые не встречаются в словаре. BPE позволяет модели обрабатывать эти слова, разбивая их на более мелкие "байты", которые уже присутствуют в словаре.
но почему тогда во время демонстрации токенизации GPT-3.5/4 там настоящие байты? Которые можно декодировать, что и было продемонстрировано? А главное почему размер токенайзера для GPT-2 был 50257, что подозрительно близко к 50'000 + 256 (уникальных байтов) + 1?
GPT-4: GPT-2's tokenizer is based on the BPE technique, and its vocabulary is generated by merging the most frequent character pairs in the training data. However, the first 256 tokens in GPT-2's vocabulary are reserved for individual byte values, which means that they correspond to ASCII characters. The ASCII character set includes 128 characters, such as lowercase letters (a-z), uppercase letters (A-Z), digits (0-9), punctuation marks, and control characters (e.g., newline, tab). In GPT-2's vocabulary, these ASCII characters occupy the first 128 token positions. The remaining 128 tokens in the first 256 are used for UTF-8 continuation bytes, which enable the representation of a wide range of Unicode characters beyond the basic ASCII set. While GPT-2's tokenizer operates primarily on subwords and characters, the presence of byte-level tokens in its vocabulary allows it to handle a broad array of languages and symbols without requiring an extensive pre-defined list of characters. This design choice makes GPT-2 more flexible and capable of handling text in various languages, even if they were not well-represented in the training data.
@@stalkermustang дайте пожалуйста ссылку на ноутбук от гугла который вы упоминает на 1:20:59 вашей презентации.в котором можно посмотреть визуализацию разных паттернов эмбеддингов в обученной модели
@@georgemichael6884 в описании есть ссылка на презентацию, можно найти этот слайд там и кликнуть на любую ссылку, которая интересна. Вот конкретно эта ссылка, но остальные придется получать самостсоятельно: colab.research.google.com/drive/1hXIQ77A4TYS4y3UthWF-Ci7V7vVUoxmQ?usp=sharing
Смотрите первоисточник, Sennrich et. al, arXiv:1508.07909 Авторы использовали идею старого алгоритма сжатия данных, который назывался byte pair encoding, модифицировав для под-слов. abstract: "Neural machine translation (NMT) mod- els typically operate with a fixed vocabu- lary, but translation is an open-vocabulary problem. Previous work addresses the translation of out-of-vocabulary words by backing off to a dictionary. In this pa- per, we introduce a simpler and more ef- fective approach, making the NMT model capable of open-vocabulary translation by encoding rare and unknown words as se- quences of subword units. This is based on the intuition that various word classes are translatable via smaller units than words, for instance names (via character copying or transliteration), compounds (via com- positional translation), and cognates and loanwords (via phonological and morpho- logical transformations). We discuss the suitability of different word segmentation techniques, including simple character n- gram models and a segmentation based on the byte pair encoding compression algo- rithm, and empirically show that subword models improve over a back-off dictionary baseline for the WMT 15 translation tasks English→German and English→Russian by up to 1.1 and 1.3 BLEU, respectively"
Так они перегрузили... Было бы лучше не бежать сразу в матрицы и технику, а описать "значение" и смысл того что происходит. Но это гораздо сложнее. Слово embedding по-моему просто с потолка взяли за не имением лучшего. Что куда "включено"? Что оно означает? Что каждый элемент вектора (массива) этого embedding-а означает? Мы не знаем. Но мы уверенно перемножаем всё со всем, считает скалярные произведения и хотим убедить себя, что оно что-то означает.
Ну в итоге же работает. ЛЛМки дают хороший результат. Значит что-то да означают все эти циферки внутри него. Другое дело как понять что? Этим пытается заниматься область interpretability.
Одна из лучших лекций про трансформеры на русском
Я нихрена не понял (кроме токенизатора), но я новичок в ML.....
Да, к сожалению. Тут очевидно нужен курс лекций, а не одна.
Это лучшая лекция, объясняющая трансформеры и то, как они реализуют анализ естественных языков, даже на английском языке я не видел подобной. Огромная благодарность вам, Игорь, за подготовку этих материалов.
Да, тоже на английском смотрел, и тут хопа и на русском выпало такое. У Андрея Карпатого может подробнее есть на англ, но я в его серии лекций пока только первую посмотрел. Следующие отложил пока. У него прямо с кодами на питоне. Можно пощупать всё руками если что в коде.
@@CbI4 can you share link to . У Андрея Карпатого может подробнее есть на англ,
@@user--------- Напоминаю, что учёба это труд, никакую тему невозможно изучить не вкладывая труда. Соответственно, нет смысла ожидать, что ваше пассивное слушание одной лекции обогатит вас такими же знаниями, как и специалиста, изучавшего эту тему продолжительное время и впоследствии решающего прикладную задачу с использованием трансформеров.
@@user--------- Конечно, сначала надо прочитать оригинальную статью "Attention is all you need" и сделать простой классификатор фраз, например, грубые/не грубые фразы. Затем это видео поможет заполнить оставшиеся белые пятна.
@@user--------- Если вы сразу поняли статью, то видео можете не смотреть 🤷🏻♂️
Хорошее видео. Так не привычно слушать про эту тему не на английском, а на русском языке. :)
Как педагог, очень доходчиво, с рефлексией в изложении всё ок. Респект!
Если вы поняли, объясните мне? Могу заплатить денег
Ох Ох какая годнота подъехала!))) А если серьезно спасибо за просветительскую деятельность!
единственно, мне пришлось постав скорость 0,75, чтобы понять че то))
Игорь, спасибо за лекцию! Крайне полезный материал, с отличной подачей! Каждый раз обращаюсь к твоей лекции, перед собесами на секцию NLP) Было бы очень здорово, если бы появились таймкоды. Спасибо!
24:36 お誕生日おめでとう- Otanjoubi omedetou - Поздравляю с Днем рождения!
как поставить еще лайков...
лекция супер!
Огромное спасибо за лекцию!!!
Спасибо большое Пожалуй, это самое сложное и интересное в чём мне пришлось разобраться =)
Выкатываю огромный лайк!
Игорь респект!. Продолжайте!
spasibo, krutoe objasnenie temy
Спасибо, очень насыщенно и понятно ❤ Теперь пойду в HF NLP
Объясните мне если вам понятно, мне ничего не понятно кроме токенизатора
@@user--------- рекомендую небольшую книгу создаем нейронную сеть, тарик рашид
Ойййй, ойййй, ойййй, КАК Я ДОЛГО ИСКАЛ ЧЕЛОВЕКА, КТО НОРМАЛЬНО БЫ ВСЮ ЭТУ ФИГНЮ С ТРАНСФОРМЕРАМИ БЫ ОБЪЯСНИЛ - ГИГАНСКИЙ РЕСПЕКТ ТЕБЕ!!! Плиз сделай видео о том, как работает GPT и ChatGPT. СПАСИБО.
Объясните мне если вам понятно, мне ничего не понятно кроме токенизатора
Лекция 🔥
Великолепно.
Игорь, большое спасибо! Сжато, по делу - очень классный формат!
1:00:00
Это не "магическая константа", а следует из свойства дисперсии случайной величины:
Var(cX) = c^2 * Var(X)
Игорь, спасибо за разбор темы, очень интересно!))
Где теперь будете трудиться и над чем?
Очень интересно!
Не знаю, какой раз пересматриваю
Досмотрел, круто. Мысли вслух. Было бы интересно посмотреть как конкретно трансформер сможет выполнять конкретные (простые для человека, но неочевидные для нейронки) задачи по построению предложения. Уже упоминалось в вопросах задача про разное кол-во слов в оригинале и в переводе. Я бы взял например такую задачу: в одном языке определения (красивый) всегда идут после определяемого слова (цветок), в другом всегде до (я нашел красивый цветок vs. ja nashel tsvetok krasivii). Или например если уточнения по времени действия в одном языке (на который надо перевести) всегда идут в начале предложения, потом за ним идут уточнения по месту, а потом уже подлежащее и сказуемое (В 5 часов [время] из дома [место] я выехал). Ну и всякое такое еще придумать. И посмотреть как с помощью механизма attention или еще каких-то конкретно эта задача реализуется. И может придумать какие то хитрые примеры предложений для перевода (м.б. с несуществующими языками, а может и с существующими), которые очевидны человеку, но механизмами этой нейронки в принципе невыполнимы.
А мне еще интересно, как GPT модели "собирают" предложение из разных фактов? Например условный вопрос модели: "Где жили Билл Гейтс и Стив Джобс, кто из них мужчина и кто из них лучше следил за здоровьем?", модель ответит где они оба жили (отдельные факты), что они оба мужчины (обобщенный факт по ним обоим) и скорее всего скажет что за здоровьем предположительно лучше следил Гейтс, так как Джобс уже умер и от рака (я не проверял конкретно этот пример, но не важно, примерно так модель всегда и отвечает). Это выходит за рамки "модель дописывает текст", здесь модель находит известные ей факты и даже делает предположение о том, кто из двоих лучше следил за здоровьем. Как она это делает?
Супер, даже на английском нет такого уровня.
спасибо, круто обяснили! А почему суммируем эмбеддинги а не стекаем? Как будто теряется смысл когда суммируем представления слов, позиций, sentence
Когда мы делаем поэлементное сложение - мы как бы "сдвигаем" вектор в некотором пространстве. Этот сдвиг и кодирует позиционную составляющую, как будто бы говоря "это слово 'мама' на третьем месте и в начале предложения". А модель уже работает с таким представлением. Поэтому смысл не теряется (так как эмбеддинги позиций тоже обучаются, ну и с точки зрения модели она их не делает насколько непонятными, что их прибавление ломает смысл).
Стекание (если имеется в виду конкатенация) же по сути будет создавать новые размерности в пространстве эмбеддингов, при этом сигнал там будет разреженный - ведь это полностью новые размерности, а значит каждая из них обучается реже, и модель просто не увидит большинства комбинаций слово + позиция. И экстраполировать тут (субъективно) сложнее, нежели когда все слова так или иначе перемещаются в общем пространтве
Есть разные варианты. Например, в DeBERTa позиционные эмбеддинги и эмбеддинги слов развязаны и представлены отдельными матрицами. В целом трансформер может подстроиться под любой вариант, если информация о позиции в принципе есть в данных.
@@stalkermustang понятно, спасибо!
Получил большое удовольствие, спасибо!
Если можно что-то сделать с микрофоном, было бы очень круто.
уже сделано, смотрите следующую лекцию на канале :)
Как на выходе из последнего декодера получается один эмбеддинг (который как раз в линейный слой подается, на 1:37:00 на картинке видно)? Все имеющиеся как-то объединяются или выбирается последний?
Спасибо за отличный рассказ!
Во время генерации берется последний, так как именно по нему мы должны предсказать следующее слово.
Во время тренировки берутся все сразу, и сразу предсказываются все слова.
@@stalkermustangТы имеешь в виду batch, когда мы предсказываем по первому слову второе, по 1 и 2 - третье и тд (но отдельные строки независимы), или что-то другое?
0:18 спасибо Семен большое за интродакшн 🤣
Не проще ли говорить «Биг секнкс Семион за интродакшн»
сори я он инглиш не шпрехаю(
Ссылки для более глубокого/детального понимания трансформеров (на английском):
ua-cam.com/play/PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ.html
ua-cam.com/play/PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi.html
ua-cam.com/video/KV5gbOmHbjU/v-deo.html&ab_channel=NeelNanda
👏👏👏
50:49 Неясно, каким образом нейронка поняла, что "it_" связано с "animal", если в masked self-attention токены слева (из прошлго) не могут "обращать внимание" на токены справа ("из будущего" ). Иными словами, трансформер в данном случаем пытается сделать предсказание для куска "The animal didn't cross the street because it". Такой кусок даже для человека будет двусмысленным
что можно почитать/изучить ДО просмотра (пересмотра) данной лекции, чтобы лучше понять и возможно соотнести полученную информацию с современной робототехникой ( трансформерами для роботов при принятии решений) ?
наверху советовали изначально самостоятельно попробовать почитать статью в комфортном для себя темпе, которую и разбирают в этом ролике
До AGI, как до Китая раком :) Это усугубляет 57:39 проблему китайской комнаты.
Мне в описании не хватает ссылки на презентацию. В начале говорится "можете скачать презентацию, перейти по ссылкам".
я не прошёл верификацию UA-cam и не могу прикреплять ссылки описании на внешние ресурсы. Заходите завтра - будут и таймкоды, и ссылка не презентацию, и на канал, и вообще на всё!
Добавил :)
А на 58:22 нет ошибки в инициализированных матрицах, которые мы перемножаем? А размером 100 на 300 и B размером 100 на 300. Должно же быть (100, 300) * (300, 100).
поскольку это случайные матрицы, то разницы нет - это же просто примемер. Для соблюдения шейпов в операции делется транспонирование (A @ B.T)
как поставить супер лайк?
А в чем собственно проблема декодеру смотреть на весь инпут 1:43:50? Интуитивно, когда идет задача перевода, то мы смотрим на все предложение и потом его переводим, а не ограничиваемся только левым контекстом? Я прослушал где-то мб?
Для перевода (в примере в презентации) используется encoder-decoder архитектура. В таком случае в Decoder есть 2 типа аттеншена: cross-attention и self-attention. Первый смотрит на все токены из encoder, то есть ему достпна вся информация для того, чтобы понять, как дальше переводить. То есть 7й токен в decoder в этом случае видит даже 25й токен encoder.
В Self-attention токены смотрят только на выходные токены (токены перевода в decoder, encoder-векторов тут нет), при этом нам не нужно, чтобы эти токены смотрели в будущее. Поэтому тут применяется маска, отсюда и название - Masked self attention.
Лучше всего еще раз посмотреть часть на 1:36:50, где картинка enc-dec механизма изображена. Обрати внимание, что там блок трансформера справа состоит уже не из двух, а из трех частей - два аттеншена и один FF.
Если же мы говорим про decoder-only модель, то там нет cross-attention вообще, только маскированный селф аттеншен, и маску нужно применять, чтобы не смотреть в будущее - при этом все токены промпта (в случае перевода - исходная фраза на исходном языке) доступны каждому генерируемому токену перевода (потому что вторые идут после, а значит видят левый контекст)
Порекомендуйте видео где на пальцах объяснено как "обучают" матрицы q,k,v у трансформера
Боюсь, такого нет. Можно смотреть на объяснение обучения Linear (Dense) layer, и потом от него переходить к расчётам q,k,v, как каждая цифра в них меняется из-за того или иного градиента.
@@stalkermustang вот по linear layer как раз всё понятно, а по матрицам q,k,l - ни капли. И в видео об этом ни слова. Понятно, что они обучаются схожим образом, но вот что на вход подаётся и на выходе ожидается при обучении - нет.
Подскажите пожалуйста, а каким образом рассчитываются матрицы запроса, ключа и значения (хотел бы чуть более подробно об этом узнать, если возможно)?
Это просто матрицы, которые инициализируются случайным образом перед обучением, а во время тренировки уже настраиваются автоматически (как и все другие параметры в нейросетях).
Это буквально один линейны слой с N входных и M выходных значений, то есть матрица размера NxM
@@stalkermustang @stalkermustangable тогда хотел бы уточнить: если у нас матрицы запроса и ключа инициализируются случайно, и затем (если верить схеме оригинальной статьи) проходят через одни и те же слои, то почему они в обучения результате не только не близки по значению, но и вдобавок по смыслу серьезно различаются? Почему мы не получаем одно и то же?
@@2k12cool они не проходят через одни и те же слои, они функционально разные, см. 52:26 - ключи и значения совмещаются. То есть это различие оно из дизайна модели следует. Для первого слова мы возьмем его Query и все Keys для остальных слов. Будем сопоставлять один единственный Query и все остальные Keys, а затем нормировать через Softmax это значения.
@@stalkermustang Спасибо!
Получается, что если бы не было Residuals, то на следующий слой вместо инфы (Values) о самом слове, проходила бы инфа (Values) о наиболее связанным (attended) с ним словом из входных данных. Разве это имеет смысл (без Residuals)? Инфа о слове не дополнялась бы инфой о связанных (attended) с ним словах, а заменялась бы.
Это имеет смысл, и в целом даже с residuals работает также. Часто наибольший скор аттеншена у самого же слова, то есть прокидывается, скажем, на 80% его эмбеддинг, а остальные - лишь слегка его корректируют на 20%. Эта логика работает и с резидуалом, и без него. Замена бы происходила только если вес самого слова к самому себе был очень маленький, а это редкий случай (такое может происходить, например, для отдельных голов, которые заменяют смысл местоимений на полный смысл слова, на которое местоимение указывает: эмбеддинг слова "он" "заменить" на эмбеддинг слова "мужчина" из первой части предложения, условно)
Does anyone know if there is an English version of the talk?
There is no English version, sorry( I'm working on it, but it wouldn't be available until June-July 2022
Idk why they made title in english. May be russian people're searching info about this topic in english preferebly.
@@CbI4 I agree. It doesn't make sense. I speak both and was surprised that it's in Russian.
@@DanOneOne i'll make another video in English...with Russian announce :)
Отличная лекция! Кое-что прояснил для себя. Только multihead немного не так... Все-таки разные головы на разные части эмбеддинга смотрят. ;) Поэтому есть ограничение, что количество голов кратно размеру эмбеддинга. И cat на выходе дает размерность как раз n_embd
А на каком моменте мои слова этому противоречат? Ты прав в описании механизма, но я не думаю, что описываю его иначе в лекции.
Не - в лекции все ОК. Там этот момент не подсвечен, но может и не нужно. Дальше в секции вопросов-ответов на 1:32 спрашивают - почему выучиваются по-разному, если приходит одно и тоже, и... Вот тут бы ввернуть про то, что это не одно и то же, а все-таки разное. Разные части эмбеддинга... . :) @@stalkermustang
А почему это называется токенизация а не хэшинг? Функционально вроде одно и то же, нет?
В общем случае хэширование не подразумевает возможность восстановления исходных данных из хэша, т.к. одному выходу хэш-функции могут соответствовать множество вариантов входных данных.
Токенизация подразумевает однозначное соответствие входных и выходных данных, т.к. она обратима.
Как отметили в комментарии выше, тут однозначное соответствие с полным разделением всех токенов между собой. Более того, хэширование в том же FastText незначительно, но уменьшает качество (так как много "смыслов" ложатся в один бин/токен), а тут нам уже нет смысла экономить - обучать так обучать!
Так что это просто две разных вещи, поэтому так и не называют.
Из лингвистики. Там есть types, words, tokens. Удобно было recycle термин для алгоритмов вроде N-gram, потому что embeddings у людей в голове близко находятся, все понимали, о чём идёт речь 😂
chatgpt имеет свое мнение по поводу работы BPE и оно мягко говоря сильно отличается от мнения игоря.кто рассудит где правда?ответ CHATGPT:Byte Pair Encoding (BPE) назван так из-за своего подхода к разбиению слов на более мелкие единицы, называемые "байтами" (bytes). В контексте BPE "байт" не обязательно соответствует фактическому байту, используемому в компьютерах. Вместо этого, "байт" представляет собой последовательность символов, которые могут включать в себя как буквы и цифры, так и другие знаки препинания и символы.
В исходной версии BPE каждый символ в исходном корпусе рассматривается как отдельный "байт", а затем на каждом шаге наиболее часто встречающиеся пары "байтов" объединяются в новый "байт", который добавляется в словарь. Этот процесс повторяется до тех пор, пока не будет достигнуто желаемое количество "байтов" в словаре или до тех пор, пока не будет достигнуто определенное количество итераций.
Таким образом, BPE позволяет эффективно кодировать и сжимать текстовые данные, используя более мелкие единицы, чем слова. Это может быть полезно для задач, таких как машинный перевод или распознавание речи, где часто встречаются слова, которые не встречаются в словаре. BPE позволяет модели обрабатывать эти слова, разбивая их на более мелкие "байты", которые уже присутствуют в словаре.
но почему тогда во время демонстрации токенизации GPT-3.5/4 там настоящие байты? Которые можно декодировать, что и было продемонстрировано? А главное почему размер токенайзера для GPT-2 был 50257, что подозрительно близко к 50'000 + 256 (уникальных байтов) + 1?
GPT-4: GPT-2's tokenizer is based on the BPE technique, and its vocabulary is generated by merging the most frequent character pairs in the training data. However, the first 256 tokens in GPT-2's vocabulary are reserved for individual byte values, which means that they correspond to ASCII characters.
The ASCII character set includes 128 characters, such as lowercase letters (a-z), uppercase letters (A-Z), digits (0-9), punctuation marks, and control characters (e.g., newline, tab). In GPT-2's vocabulary, these ASCII characters occupy the first 128 token positions. The remaining 128 tokens in the first 256 are used for UTF-8 continuation bytes, which enable the representation of a wide range of Unicode characters beyond the basic ASCII set.
While GPT-2's tokenizer operates primarily on subwords and characters, the presence of byte-level tokens in its vocabulary allows it to handle a broad array of languages and symbols without requiring an extensive pre-defined list of characters. This design choice makes GPT-2 more flexible and capable of handling text in various languages, even if they were not well-represented in the training data.
@@stalkermustang дайте пожалуйста ссылку на ноутбук от гугла который вы упоминает на 1:20:59 вашей презентации.в котором можно посмотреть визуализацию разных паттернов эмбеддингов в обученной модели
@@georgemichael6884 в описании есть ссылка на презентацию, можно найти этот слайд там и кликнуть на любую ссылку, которая интересна. Вот конкретно эта ссылка, но остальные придется получать самостсоятельно: colab.research.google.com/drive/1hXIQ77A4TYS4y3UthWF-Ci7V7vVUoxmQ?usp=sharing
Смотрите первоисточник, Sennrich et. al, arXiv:1508.07909
Авторы использовали идею старого алгоритма сжатия данных, который назывался byte pair encoding, модифицировав для под-слов.
abstract:
"Neural machine translation (NMT) mod- els typically operate with a fixed vocabu- lary, but translation is an open-vocabulary problem. Previous work addresses the translation of out-of-vocabulary words by backing off to a dictionary. In this pa- per, we introduce a simpler and more ef- fective approach, making the NMT model capable of open-vocabulary translation by encoding rare and unknown words as se- quences of subword units. This is based on the intuition that various word classes are translatable via smaller units than words, for instance names (via character copying or transliteration), compounds (via com- positional translation), and cognates and loanwords (via phonological and morpho- logical transformations). We discuss the suitability of different word segmentation techniques, including simple character n- gram models and a segmentation based on the byte pair encoding compression algo- rithm, and empirically show that subword models improve over a back-off dictionary baseline for the WMT 15 translation tasks English→German and English→Russian by up to 1.1 and 1.3 BLEU, respectively"
Хорошо разжевал
1:14:00
Без примеров сложно сразу всё понять. Тут то есть пример, то нет примера, то начинает с одним примером, а заканчивает с другим.
Админ - от слова АД?-)
Так они перегрузили... Было бы лучше не бежать сразу в матрицы и технику, а описать "значение" и смысл того что происходит. Но это гораздо сложнее. Слово embedding по-моему просто с потолка взяли за не имением лучшего. Что куда "включено"? Что оно означает? Что каждый элемент вектора (массива) этого embedding-а означает? Мы не знаем. Но мы уверенно перемножаем всё со всем, считает скалярные произведения и хотим убедить себя, что оно что-то означает.
Ну в итоге же работает. ЛЛМки дают хороший результат. Значит что-то да означают все эти циферки внутри него. Другое дело как понять что? Этим пытается заниматься область interpretability.
Люди, которые не умеют делать трансформеры, рассказывают как работают трансформеры - это все, что нужно знать про русскоязычный data science.
А есть видео или книга с лучшим объяснением?
О! украинские побратимы решили зайти и отблагодарить автора за его поддержку.
1:18:53