subtitles/ru/06_transformer-models-decoders.srt (260 lines of code) (raw):

1 00:00:03,750 --> 00:00:07,140 - В этом видео мы изучим архитектуру декодера. 2 00:00:07,140 --> 00:00:07,973 Примером 3 00:00:07,973 --> 00:00:11,338 популярной архитектуры только декодера является GPT-2. 4 00:00:11,338 --> 00:00:14,160 Для того чтобы понять, как работают декодеры 5 00:00:14,160 --> 00:00:17,430 мы рекомендуем посмотреть видео о кодерах. 6 00:00:17,430 --> 00:00:19,980 Они чрезвычайно похожи на декодеры. 7 00:00:19,980 --> 00:00:21,210 Декодер можно использовать 8 00:00:21,210 --> 00:00:23,760 большинства тех же задач, что и кодер, 9 00:00:23,760 --> 00:00:27,330 хотя, как правило, с небольшой потерей производительности. 10 00:00:27,330 --> 00:00:28,890 Давайте воспользуемся тем же подходом, который мы использовали 11 00:00:28,890 --> 00:00:30,300 с кодером, чтобы попытаться 12 00:00:30,300 --> 00:00:32,670 понять архитектурные различия 13 00:00:32,670 --> 00:00:34,803 между кодером и декодером. 14 00:00:35,777 --> 00:00:38,910 Мы используем небольшой пример, используя три слова. 15 00:00:38,910 --> 00:00:41,050 Мы пропускаем их через декодер. 16 00:00:41,050 --> 00:00:44,793 Мы получаем числовое представление для каждого слова. 17 00:00:46,410 --> 00:00:49,350 Здесь, например, декодер преобразует три слова. 18 00:00:49,350 --> 00:00:53,545 "Welcome to NYC" в эти три последовательности цифр. 19 00:00:53,545 --> 00:00:56,040 Декодер выдает ровно одну последовательность 20 00:00:56,040 --> 00:00:58,740 чисел на каждое входное слово. 21 00:00:58,740 --> 00:01:00,630 Это числовое представление может также 22 00:01:00,630 --> 00:01:03,783 назвать вектором признаков или тензором признаков. 23 00:01:04,920 --> 00:01:07,200 Давайте погрузимся в это представление. 24 00:01:07,200 --> 00:01:08,490 Оно содержит один вектор 25 00:01:08,490 --> 00:01:11,340 на каждое слово, прошедшее через декодер. 26 00:01:11,340 --> 00:01:14,250 Каждый из этих векторов является числовым представлением 27 00:01:14,250 --> 00:01:15,573 рассматриваемого слова. 28 00:01:16,920 --> 00:01:18,562 Размерность этого вектора определяется 29 00:01:18,562 --> 00:01:20,703 архитектурой модели. 30 00:01:22,860 --> 00:01:26,040 Декодер отличается от кодера главным образом 31 00:01:26,040 --> 00:01:28,200 своим механизмом самовнимания. 32 00:01:28,200 --> 00:01:30,843 Он использует так называемое маскированное самовнимание. 33 00:01:31,860 --> 00:01:34,650 Здесь, например, если мы сосредоточимся на слове "to" 34 00:01:34,650 --> 00:01:37,620 мы увидим, что вектор абсолютно не изменен 35 00:01:37,620 --> 00:01:39,690 словом "NYC". 36 00:01:39,690 --> 00:01:41,731 Это происходит потому, что все слова справа, также известные 37 00:01:41,731 --> 00:01:45,276 как правильный контекст слова, маскируются, а 38 00:01:45,276 --> 00:01:49,230 вместо того чтобы извлекать пользу из всех слов слева и справа. 39 00:01:49,230 --> 00:01:51,600 Таким образом, двунаправленный контекст. 40 00:01:51,600 --> 00:01:55,020 Декодеры имеют доступ только к одному контексту 41 00:01:55,020 --> 00:01:58,203 который может быть левым или правым контекстом. 42 00:01:59,539 --> 00:02:03,356 Механизм маскированного самовнимания отличается 43 00:02:03,356 --> 00:02:04,320 от механизма самовнимания тем, 44 00:02:04,320 --> 00:02:07,110 что использует дополнительную маску, скрывающую контекст 45 00:02:07,110 --> 00:02:09,390 по обе стороны от слова, 46 00:02:09,390 --> 00:02:12,810 при этом на числовое представление слова не влияют 47 00:02:12,810 --> 00:02:14,853 слова в скрытом контексте. 48 00:02:16,260 --> 00:02:18,330 Так когда же следует использовать декодер? 49 00:02:18,330 --> 00:02:22,380 Декодеры, как и кодеры, могут быть использованы как самостоятельные модели 50 00:02:22,380 --> 00:02:25,020 поскольку они генерируют числовое представление. 51 00:02:25,020 --> 00:02:28,320 Они также могут использоваться для решения самого широкого круга задач. 52 00:02:28,320 --> 00:02:31,260 Однако сила декодера заключается в том, что 53 00:02:31,260 --> 00:02:34,530 слово может иметь доступ только к своему левому контексту. 54 00:02:34,530 --> 00:02:36,690 55 00:02:36,690 --> 00:02:39,120 Они по своей природе хороши в генерации текста: 56 00:02:39,120 --> 00:02:41,010 способности генерировать слово 57 00:02:41,010 --> 00:02:45,000 или последовательность слов, учитывая известную последовательность слов. 58 00:02:45,000 --> 00:02:45,833 Это известно как 59 00:02:45,833 --> 00:02:49,083 каузальное языковое моделирование или генерация естественного языка. 60 00:02:50,430 --> 00:02:53,520 Вот пример того, как работает каузальное языковое моделирование. 61 00:02:53,520 --> 00:02:56,410 Мы начинаем с вводного слова, которым является "my", 62 00:02:57,339 --> 00:02:59,973 используем его в качестве входного сигнала для декодера. 63 00:03:00,810 --> 00:03:04,260 Модель выводит вектор чисел 64 00:03:04,260 --> 00:03:07,230 и этот вектор содержит информацию о последовательности, 65 00:03:07,230 --> 00:03:08,733 которая здесь является одним словом. 66 00:03:09,780 --> 00:03:11,430 Мы применяем небольшое преобразование 67 00:03:11,430 --> 00:03:13,110 к этому вектору так, чтобы он отображался 68 00:03:13,110 --> 00:03:16,500 на все слова, известные модели, это отображение 69 00:03:16,500 --> 00:03:19,890 которое, как мы увидим позже, называется "голова языкового моделирования". 70 00:03:19,890 --> 00:03:21,930 Мы определили, что модель считает, 71 00:03:21,930 --> 00:03:25,053 что наиболее вероятное следующее слово это "name". 72 00:03:26,250 --> 00:03:28,710 Затем мы берем это новое слово и добавляем его 73 00:03:28,710 --> 00:03:33,480 к начальной последовательности из "my", и теперь у нас есть "my name". 74 00:03:33,480 --> 00:03:36,870 Именно здесь возникает авторегрессивный аспект. 75 00:03:36,870 --> 00:03:38,490 Авторегрессионные модели 76 00:03:38,490 --> 00:03:42,513 повторно используют свои прошлые выходы в качестве входов на следующих этапах. 77 00:03:43,452 --> 00:03:46,980 И снова мы выполняем точно такую же операцию. 78 00:03:46,980 --> 00:03:49,500 Мы пропускаем эту последовательность через декодер 79 00:03:49,500 --> 00:03:51,993 и извлекаем наиболее вероятное следующее слово. 80 00:03:52,978 --> 00:03:57,978 В данном случае это слово "is", мы повторяем операцию 81 00:03:58,230 --> 00:04:02,040 пока не будем удовлетворены, начиная с одного слова. 82 00:04:02,040 --> 00:04:04,590 Теперь мы сгенерировали полное предложение. 83 00:04:04,590 --> 00:04:07,890 Мы решаем остановиться на этом, но могли бы продолжать еще какое-то время. 84 00:04:07,890 --> 00:04:12,890 GPT-2, например, имеет максимальный размер контекста 1024. 85 00:04:13,170 --> 00:04:16,830 В конечном итоге мы могли бы сгенерировать до 1024 слов, 86 00:04:16,830 --> 00:04:19,050 и декодер все еще будет помнить о 87 00:04:19,050 --> 00:04:21,003 первых словах в этой последовательности.