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
первых словах в этой последовательности.