Трансформатор | Electric-Blogger | Яндекс Дзен
Трансформаторы являются одними из самых распространенных электротехнических устройств, которые находят применение в самых различных областях — энергетике, промышленности, электронике, в быту. В частности, они нашли широкое практическое применение при передаче электроэнергии на большие расстояния, в распределительных системах, в различном промышленном и бытовом электрооборудовании.
Вообщем можно сказать, что трансформаторы окружают нас, порой даже незаметно, со всех сторон, начиная с трансформаторных подстанций и заканчивая зарядными устройствами для наших мобильных телефонов.
Все трансформаторы предназначены для работы только с переменным напряжением.
Трансформатор нельзя включать в сеть постоянного тока, так как при подключении трансформатора к сети постоянного тока магнитный поток в нем будет неизменный во времени и, следовательно, не будет индуктировать ЭДС в обмотках.
Вследствие этого в первичной обмотке будет протекать большой ток, так как при отсутствии ЭДС он будет ограничиваться только относительно небольшим активным сопротивлением обмотки. Этот ток может вызвать недопустимый нагрев обмотки и даже ее перегорание.
Коротко назначение трансформатора можно охарактеризовать так: это устройство, преобразующее переменный ток одного напряжения в переменный ток другого напряжения.
Существуют трансформаторы как повышающего, так и понижающего типа. Правда в этом правиле есть одно исключение.
Разделительные трансформаторы
Это исключение — разделительные трансформаторы 220/220, которые предназначены для повышения электробезопасности, за счет гальванической развязки первичных цепей обмотки от вторичных, причем вторичная цепь не должна заземляться, чтобы исключить возможность замыкания вторичных цепей на землю.
Применение такого подключения существенно снижает вероятность поражения электрическим током, так как токи, возникающие в случае пробоя изоляции на корпус, имеют небольшое значение, что обусловлено гальванической изоляцией вторичных цепей трансформатора от цепей заземления.
Такие трансформаторы еще называют трансформаторами безопасности.
Применяются они в местах с повышенными требованиями электробезопасности, таких как подвалы, мед.учреждения, помещения с повышенной влажностью и т.д.
Повышающие и понижающие трансформаторы
В повышающем трансформаторе первичная обмотка имеет более низкое напряжение, число витков во вторичной обмотке больше, чем в первичной. В понижающем трансформаторе, наоборот, вторичная обмотка имеет низкое напряжение, а число витков вторичной обмотки меньше, чем в первичной.
То есть в понижающем трансформаторе напряжение первичной обмотки U1 больше напряжения вторичной обмотки U2 в n-ое количество раз, а ток вторичной обмотки I2 больше тока первичной обмотки I1 также в n-ое количество раз.
В повышающем трансформаторе обратное соотношение между напряжениями в обмотках и между токами в них.
Например, если включить на полную мощность трансформатор, с напряжениям первичной обмотки U1 = 220V и вторичной U2 = 24V, то при номинальном токе первичной обмотки I1 = 3A, ток во вторичной обмотке будет равен I2 = 3 * (220/24) = 27,5 A.
Коэффициент трансформации
Отношение напряжения на зажимах первичной обмотки U1 к напряжению вторичной обмотки U2 трансформатора на холостом ходу называется коэффициентом трансформации и принимается равным соотношению числа витков первичной обмотки к числу витков вторичной обмотки. В случае, если количество обмоток более двух, коэффициент трансформации определяют последовательно для каждой пары.
Обозначается коэффициент трансформации буквой n (иногда встречается обозначение k) и рассчитывается как :
U1 и U2 – это напряжения на входе и выходе из трансформатора;
N1 и N2 — число витков первичной и вторичной обмоток;
Эти расчеты справедливы для трансформаторов напряжения, для трансформаторов тока формула будет выглядеть следующим образом:
I1 и I2 – это токи первичной и вторичной цепей;
То есть в данном случае коэффициент трансформации рассчитывается как отношение первичного и вторичного токов.
Эти расчеты верны для идеальных условий работы трансформатора, в реальности же необходимо учитывать потери мощности на нагрев обмоток, вихревые токи, сдвиг фаз и т.д.
Все эти факторы будут влиять на точность преобразования и вносить погрешность в расчеты. И если для общепромышленных трансформаторов это не так существенно, то для измерительных трансформаторов точность имеет большое значение.
Принцип работы трансформаторов
Принцип действия всех трансформаторов основан на явлении электромагнитной индукции.
Если первичную обмотку трансформатора подключить к сети источника переменного тока, то по ней будет проходить переменный ток, который возбуждает в сердечнике трансформатора переменный магнитный поток. Который, в свою очередь, пронизывая витки вторичной обмотки трансформатора, возбуждает в этой обмотке ЭДС. Под действием этой ЭДС по вторичной обмотке и через приемник энергии будет протекать ток.
Обмотку, подключенную к источнику питания, принято называть первичной, а обмотку, к которой подключены потребители — вторичной.
Таким образом и происходит преобразование и распределение электрической энергии.
Для улучшения магнитной связи между первичной и вторичной обмотками их размещают на магнитопроводе, собранным из отдельных листов электротехнической стали. Сами обмотки выполнены из изолированного провода.
В зависимости от формы магнитопровода и расположения обмоток, трансформаторы могут быть стержневыми, броневыми и тороидальными.
Магнитопровод стержневого однофазного трансформатора имеет два стержня, на которых помещены его обмотки. Эти стержни соединены ярмом с двух сторон так, что магнитный поток замыкается по стали.
Магнитопровод броневого однофазного трансформатора имеет один стержень, на котором полностью помещены обмотки трансформатора. Стержень с двух сторон охватывается (бронируется) ярмом так, что обмотка частично защищена магнитопроводом от механических повреждений.
У тороидального трансформатора сердечник выполнен из стальной ленты в виде кольца. Благодаря своей форме, он имеет ряд преимуществ перед другими типами — более высокий КПД, улучшенные тепловые характеристики, что благоприятно влияет на охлаждение трансформатора, более компактные габариты.
Основные характеристики трансформаторов
К основным техническим характеристикам трансформаторов относятся:
- Номинальная мощность
- Коэффициент трансформации
- Номинальный ток
- Напряжение короткого замыкания
- Ток холостого хода
- Коэффициент мощности
- Коэффициент полезного действия (КПД)
1. Номинальной мощностью трансформатора S называется полная мощность, отдаваемая его вторичной обмоткой при полной нагрузке. Напомню, что полная мощность состоит из активной и реактивной мощностей, при этом часть ее уходит на нагрев, часть на полезную работу (активная мощность), часть на создание электромагнитного поля. Подробнее об этом читайте в статье Как перевести мощность из кВА в кВт.
Измеряется номинальная мощность в вольт-амперах (ВА), или киловольт- амперах (кВА).
2. Коэффициент трансформации. Об этом мы уже говорили выше.
3. Номинальный ток. Это наибольшее допустимое значения тока в обмотках, при котором трансформатор может работать неограниченно долгое время.
4. Напряжение короткого замыкания. Это напряжение, которое нужно подать на одну из обмоток трансформатора, для того чтобы в цепи возник электрический ток. Данный показатель характеризует величину полного сопротивления трансформаторных обмоток. Зная величину напряжения К.З. можно определить возможность включения трансформаторов в параллельную работу.
5. Ток холостого хода. Это ток первичной обмотки трансформатора при разомкнутой вторичной обмотке. Методика измерений, называемая опыт холостого хода, позволяет определить коэффициент трансформации, ток, потери и сопротивление холостого хода трансформатора.
6. Коэффициент мощности. Величина, равная отношению активной мощности, потребляемой электроприемником, к ее полной мощности. Определяется характером нагрузки (активная, реактивная), подключенной к его вторичной цепи. В случае отсутствия нагрузки, на холостом ходу, трансформатор имеет очень низкий коэффициент мощности, что неблагоприятно сказывается на работе источников переменного тока и электрических сетей.
7. Коэффициент полезного действия. Данная характеристика указывает на эффективность работы трансформатора и определяется отношением преобразованной активной мощности к потребляемой. Значение КПД трансформатора зависит от электрических и магнитных потерь энергии, которые неизбежны в процессе работы устройства.
Типы трансформаторов
Силовые трансформаторы — Данный вид трансформатора предназначен для преобразования электрической энергии в электрических сетях , для питания различного электрооборудования, в осветительных цепях.
Автотрансформаторы — у данного типа трансформаторов обмотки соединены между собой гальванически. В основном автотрансформаторы применяются для изменения и регулировки напряжения.
Трансформаторы тока — трансформатор, созданный для понижения первичного тока до величины применяемой в цепях измерения, защиты, управления и сигнализации. Номинальное значение вторичной обмотки 1А , 5А. Первичная обмотка трансформатора тока включается в цепь с измеряемым переменным током, а во вторичную включаются измерительные приборы. Ток, протекающий по вторичной обмотке трансформатора тока, пропорционален току, протекающему в его первичной обмотке на коэффициент трансформации.
Разделительные трансформаторы — имеют первичную обмотку, которая не связана электрически со вторичными обмотками. Силовые разделительные трансформаторы служат для повышения безопасности в электросетях. Сигнальные разделительные трансформаторы предназначены для обеспечения гальванической развязки электрических цепей.
Импульсные трансформаторы — трансформатор, созданный для преобразования импульсных сигналов с продолжительностью импульса до 10-ов микросекунд с наименьшим искажением формы импульса. Основное применение заключается в передаче прямоугольного электронного импульса (очень крутой фронт и срез, относительно неизменная амплитуда).
Пик-трансформаторы – трансформатор, преобразующий синусоидальное напряжение в импульсы пикообразной формы. Данный вид трансформаторов применяется для управления тиристорами либо другими полупроводниковыми и электронными устройствами.
lavrinenkov.blogspot.ru
Для полноценного участия в эфирных мероприятиях в городе незаметно можно установить не так уж много антенн. Miniwhip — не пойдет — это только прием, Magnetic Loop — сложен в согласовании и перестройке по диапазонам, другие антенны не так уж и просты в размещении и эксплуатации, поэтому остается лишь вариант — «Длинный луч», Long Wire (LW). Начало луча закрепляется в зоне доступа радиолюбителя на окне, карнизе балконе изолированно от металлоконструкций здания. Второй конец отводится как можно дальше и выше от здания. Длина луча примерно соответствует половине длинны волны самого низкочастотного диапазона, предполагаемого для работы. Это условие обеспечит высокое входное сопротивления луча, которое связано с сопротивлением излучения антенны, которое в свою очередь связано с коэффициентом полезного действия соотношением:
КПД = Rизл.антенны / [Rизл.антенны + Rпотерь]
Где Rпотерь — сопротивление случайного высокочастотного заземления (ВЧЗ), которое и будет использоваться радиолюбителем. Большая величина R изл.антенны обеспечит хороший уровень КПД. Положим сопротивление потерь в ВЧЗ около 100 Ом, и при сопротивлении излучении антенны, например в 500 Ом, КПД составит 83%, что совсем не плохо!
Посмотрим на модель антенны в программе MMANA:
Определим оптимальные длины луча по диапазонам, импедансы антенны для длины луча 40.![](/800/600/https/sportatlet333.com.ua/image/data/knigi_obsie_dlja_biznesa/biznes_literatura_transformator_kniga_kupit_2.jpg)
В качестве луча я использую провод — нерасплетенную полевку П-274, она обеспечит необходимую жесткость, и электрическую проводимость. Если имеется несколько кусков полевки, их можно соединить, скручивая металлические жилы и пропаивая медные. Далее защитить лаком, и закрыть термоусадкой или изолентой.
Для протяжки провода между веток деревьев можно использовать удилище длиной 8 метров с грузиком на конце, а также веревку длиной 20 метров, которая пригодится для фиксации Long Wire на высоте.Мне удалось закрепить ближний край луча на высоте 4.5 метра, середину на высоте 6-7 метров и дальний конец на высоте 7-8 метров.
(нижний провод на фото)
В качестве ВЧЗ буду использовать металлическую раму окна. Питающий кабель перед согласующим устройством нужно сбухтовать или использовать отсекающий дроссель.
Это обеспечит минимум шумов от помещения, и минимум излучения оплеткой питающего кабеля. Для подключения луча к питающему кабелю используем согласующее устройство (СУ), в простейшем варианте LC, можно использовать Т и П схемы, а иногда и повышающие трансформаторы, например 1:9.
Рассмотрим простейший вариант согласования — LC цепочку, включенную по схеме ФНЧ, для работы с высокоомной нагрузкой. (Hi-Z).
Высокое входное сопротивление отмечено звездочкой справа на диаграмме Смита. Изменяя емкость конденсатора, изменяем активное и реактивное сопротивление до попадания на окружность 50 Ом, вращая индуктивность компенсируем остаточную реактивность до минимальных значений.
Для диапазона 80М (и выше) должно хватить максимальной индуктивности 25 мкГн и ёмкости 330 пФ. Грубый шаг переключения индуктивности может не дать получить оптимальную настройку с КСВ близким к 1. С этим приходится мириться, либо повышать дискретность переключений, либо использовать вариометр, и прочие хитрости: http://lavrinenkov.![](/800/600/https/sun9-84.userapi.com/c840723/u131611193/video/x_604663de.jpg)
Теперь посмотрим на измерения полученные с помощью NanoVNA. Подряд три картинки:
прямое измерение луча с ВЧЗ (максимальные сопротивления на 2.5 МГц, 5.6 МГц, 9.07 МГц), измерение трансофрматора 1:9 и измерение трансформатора с подключенным лучом и ВЧЗ.
Трансформатор снижает КСВ до уровня не более 4 почти во всём в диапазоне коротких волн, обычно так и представляют такие виды антенн, как универсальные многодиапазонные. Однако работа с повышенным КСВ вряд ли понравится вашему передатчику. В моем частном случае КСВ не более 1.5 получился только для диапазона 15М.
КПД передачи мощности передатчика на неоптимальную по КСВ нагрузку можно оценить по формуле:
n = 4 / [2 + КСВ + 1/КСВ]
Или посмотреть по таблице:
КСВ | 1 | 2 | 3 | 4 | 5 | 7 | 10 | 20 |
β | 100% | 88% | 75% | 64% | 55. | 44% | 33% | 18.1% |
Я бы не рекомендовал работать с передатчиком при КСВ нагрузки более 3.
Теперь подключим согласующее устройство и посмотрим на полосы согласования по коротковолновым диапазонам:
Как видим, согласование достигается на всех показанных диапазонах, кроме 160М, где согласование может быть получено при использовании более объемного ВЧЗ или системы противовесов.
Теперь посмотрим на диаграммы направленности антенны длинный луч (LW) из NEC-2. Для анализа выбраны небольшие зенитные углы, соответствующие наиболее вероятным рабочим углам.
Основная поляризация — горизонтальная, отмечена зеленым. По мере роста частоты количество лепестков увеличивается. Главные лепестки прижимаются к оси луча, усиление главных лепестков растет.
Для небольшой высоты подвеса, ошибка вычисления усиления и импедансов на ядре MININEC (MMANA) может достигать больших значений. Для сравнения приведу таблицу по MININEC и NEC-2:
Ошибка определения усиления в MININEC может достигать 6 дБ на диапазоне 80М!
Теперь проведу тестовые включения WSPR, 1 цикл 5 Вт на четырех диапазонах.
20m-5w-1600z-15.07.2021-!
30m-5w-1752z-15.07.2021-!40m-5w-1718z-15.07.2021-!
80m-5w-1928z-15.07.2021-!
Тест с неоновой лампочкой показал ее зажигание при контакте с горячим концом луча, при мощности 2.5…5 Вт на диапазонах 80М и 40М, на остальных зажигание не возникало. Необходимо оценивать потенциальный риск касания такого конца антенны, находящегося под высоким ВЧ напряжением во время передачи!
Далее для теста луча проведены свзяи:
RA3ZDM 58 мне, 59 ему, SSB, 20M, 5W, 2021.07.17 11:17z
LA5FJA 599 мне, 559 ему, CW, 20M, 5W, 2021.07.17 11:59z
youtube.com/embed/h2uEfzS_3eY» youtube-src-id=»h2uEfzS_3eY»/>
или почитать необходимый раздел книги Игоря Гончаренко «Антенны КВ и УКВ»
Лавриненков Игорь / R2AJA
Что такое трансформатор и как его проверить
Практически в каждом устройстве работающем от сети 220 вольт находится трансформатор.
Что же такое трансформатор напряжения, что он из себя представляет и какие у него задачи?
Простейший трансформатор напряжения представляет из себя минимум две индуктивные обмотки провода (катушки) которые находятся на одном сердечнике из металлического сплава с электромагнитной проводимостью.
Работа трансформатора основывается на двух принципах:
- электромагнитная индукция — ЭДС (электродвижущая сила) которая возникает в обмотке под действием магнитного потока.
- электромагнетизм — магнитное поле которое возникает от действия электрического тока во времени.
На практике все это выглядит примерно так, на первичную обмотку поступает напряжение (220 вольт) при этом ток который проходит по первичной обмотке создает переменный магнитный поток в сердечнике который в свою очередь создает ЭДС индукции в вторичных обмотках и в них возникает ток со сдвигом в 90 градусов по отношению к основному магнитному потоку.
Трансформатор имеет три режима работы:
- Режим нагрузки — основной полезный режим работы когда вторичная обмотка трансформатора подключена к нагрузке через которую протекает ток.
- Холостой режим — в таком режиме вторичные цепи никуда не подключены и соответственно ток в них не протекает. Все токи которые протекают в первичной обмотке характеризуют КПД трансформатора и потери в сердечнике на холостом ходу.
- Режим КЗ — в результате замыкания вторичной обмотки возникает короткое замыкание.
В таком режиме, с помощью специального сопротивления, можно измерить полезную мощность на нагрев проводов обмоток трансформатора
Также трансформаторы можно разделить на повышающие и понижающие, а также разделительные.
При помощи коэффициента трансформации подсчитывают отношение числа витков первичной обмотки к числу витков вторичной обмотки:
k = N1/N2
У понижающего трансформатора коэффициент трансформации всегда меньше единицы, а для повышающего трансформатора – больше.
Когда коэффициент трансформации — 1 и соответственно количество обмоток равное то такой трансформатор можно назвать разделительным, такими трансформаторами осуществляют гальваническую развязку, то есть на выходе, к примеру, можно получить те же 220 вольт но не один из выводов не будит иметь фазы и не будит нести опасности для человека по отношению к земли.
Электромагнитный сердечник
В низкочастотных трансформаторах сердечник выполнен из стали или пермаллоя (а не ферромагнетика) и не из цельного куска, а из отдельных пластин такое выполнение помогает уменьшить нагрев трансформатора в следствие вихревых токов Фуко.
![](/800/600/https/i.ytimg.com/vi/nIP4TmKzCkk/maxresdefault.jpg)
Сердечники из пластин стягивают винтами или склеивают, но в последнее время их делают не разборными и просто сваривают точечной сваркой по углам собранного трансформатора.
Склеивают как правило очень маленькие трансформаторы, например в адаптерах зарядок и другой различной малогабаритной техники.
По форме сердечники могут быть несколько типов.
Наиболее встречающимся вариантом, в последнее время, есть Ш-образный сердечник, обмотки катушки располагаются в середине трансформатора.
Реже встречаются П-образные сердечники, обмотки в таком трансформаторе две и они располагаются по бокам сердечника.
Но важное правило — сердечник должен быть замкнутым то есть магнитный поток в нем также должен быть замкнутым что и достигается при подобных конструкциях.
Отличным вариантом замкнутого магнитного сердечника есть тороидальный трансформатор. Такие сердечники характеризуются меньшим рассеиванием магнитного потока и соответственно в итоге большим КПД.
Тороидальный сердечник представляет из себя кольцо (круг) из железа или стали, это может быть цельный метал, а может быть, зачастую это стальная лента свитая в кольцо и пропитана слоем лака что предотвращает пагубное действие токов Фуко.
Однако в тороидальных трансформаторов возникают трудности в намотке провода, для заводской намотки применяются специальные довольно сложные в своей конструкции станки где провод наматывается специальной «иглой» (веретеном), в домашних же условиях намотать такой трансформатор все же можно но достаточно сложно и трудоемко, особенно если провод толстый и предполагается большое количество витков.
В высокочастотных (импульсных) трансформаторах используют сердечники из цельного материала (или двух кусков). В качестве материала применяют ферромагнетик (феррит). Необходимой особенностью в таких случаях является то что феррит и альсифер могут работать на частотах выше сотни килогерц и обладает повышенным электромагнитным сопротивлением.
Во всех импульсных блоках питания компьютеров, ноутбуков, современных телевизоров, а также другой даже мелко габаритной электронике применяются исключительно высокочастотные трансформаторы с ферритовыми, как правило Ш-образными сердечниками.
Низкочастотные трансформаторы, в основном применяются в электротехнике, подстанциях, стабилизаторах напряжения, усилителях высокого класса и т. д.
Мощность и КПД трансформатора
Думаю всем логически понятно что чем больше габариты трансформатора тем больше его мощность и больший ток на вторичных обмотках можно снять при достаточной толщине их провода.
Мощные трансформаторы это трансформаторные подстанции которые занимают целые помещения, ну а трансформатор мощностью в пару ватт может поместится и на ладошке.
В случае с трансформаторами импульсных блоков питания, на ладошке может поместится и трансформатор мощностью в 500 ватт и больше.
Общая мощность трансформатора может разделятся между вторичными обмотками, но не вся мощность первичной обмотки передается во вторичные.
Малая доля общей мощности идет на нагрев сердечника, нагрев провода в обмотках, а также небольшая часть в виде магнитного потока просто рассеивается и не принимает участия в полезной трансформации.
КПД трансформатора — это коэффициент отношение мощности вторичной обмотки (P2) к первичной (P1), и как правило он всегда меньше 100%, а полное соответствие это идеал который не встречается в существующих трансформаторах но зависит от конструкции и используемого материала трансформатора.
КПД = P2 / P1
На практике больше габаритные трансформаторы имеют больше КПД нежели малогабаритные. Для примера трансформаторы на подстанциях имеют КПД порядка 98%, а маленькие 10-ватные трансформаторы могут иметь КПД даже ниже 70%!
Почему трансформатор греется
В трансформаторе греются как провода так и магнитный сердечник.
В правильно сконструированном трансформаторе нагрев будит незначительным. Но так как производители постоянно ищут способы сэкономить производство то уменьшается количество витков и габариты сердечника до рабочего минимума.
![](/800/600/https/a.d-cd.net/e416ec9s-1920.jpg)
Такой трансформатор выполняет свои функции но при достижение максимальной мощности устройства которое питает такой трансформатор, будит происходить перегрев трансформатора при длительной его работе.
Где это необходимо, трансформаторы укомплектовывают термопредохранителем который крепится или к металлическому сердечнику или закладывается в слой изоляции первичной обмотки.
Термопредохранители применяют на температуру сработки до 130 градусов, большая температура может негативно сказываться на лаковой изоляции проводов катушки, кроме того возникает пожаронебезопасная ситуация.
Как проверить исправность трансформатора
Самая простая проверка трансформатора может быть с помощью мультиметра (тестера) в режиме измерения сопротивления. И конечно же запах «гари» и почерневшая изоляция обмоток будит свидетельствовать о дефекте и возможной поломке трансформатора.
Наиболее просто будит проверить малогабаритный низкочастотный трансформатор так как примерно известно сопротивление первичной обмотки (около 40-100 Ом).
Среднее значение сопротивления вторички с напряжением до 30 вольт можно взять примерное число до 20 Ом.
В высокочастотных импульсных трансформаторах сопротивление обмоток будут на много отличаться, и сопротивление первичной обмотки будит в основном зависит от параметров выходных ключей (транзисторов) и частоты генерации схемы блока питания.
В шырокораспространенных понижающих трансформаторах ток первичной обмотки не большой и потому применяют провод малого сечения. Во вторичной же обмотке в таком случае провод будит потолще (чем больше сердечник тем толще провод) но и как в случае с понижающим трансформатором — витков будит намного меньше нежели в первичной обмотке.
Чем толще провод — тем меньше его сопротивление. Потому мы можем быть уверены что для понижающего трансформатора сопротивление первичной обмотки для 220 вольт будит намного большим чем для вторичной.
Если в катушке одной из обмоток имеется обрыв провода данная обмотка покажет бесконечное сопротивление то есть не будит прозваниваться. В случае когда сопротивление обмотки очень маленькое, порядка 1-2 Ом то возникает подозрение на межвидковое замыкание.
Когда в трансформаторе есть несколько (вторичных) обмоток на разные напряжения как правило, то всех их проверяют по отдельности понимая что чем больше напряжение должно быть на выходе трансформатора — тем больше должно быть сопротивление данной обмотки провода.
Чтобы случайно не перепутать обмотки (первичную с вторичной) когда не понятно есть ли КЗ в обмотке, есть очень хороший способ запуска трансформатора от сети 220 вольт через лампочку накаливания (последовательно).
В данном случае при ошибке обмоток или при КЗ обмотка не перегорит так как лампочка возьмет всю нагрузку на себя и ярко засветится, об этом можно и судить о неисправности трансформатора.
Но лампочка должна быть заведомо мощнее трансформатора, кроме того снять большую нагрузку в таком подключение не получится, как только мощность нагрузки вторичной обмотки превысит мощность лампочки — нагрузку повысить не получится и лампочка будит светить в полный накал.
Решение задач по теме трансформатор ~ Блог Игнатьевой Веры
Решите устно
1. Сколько витков должна иметь первичная катушка трансформатора, чтобы повысить напряжение от 10 до 50 В, если во вторичной обмотке 80 витков?
2. Трансформатор является повышающим, если коэффициент трансформации его:
3. Сердечник трансформатора набран из отдельных изолированных пластин для:
4. Каково соотношение между напряжением и числом витков в обмотках трансформатора?
5. Первичная катушка трансформатора – это та, что…
- Трансформатор имеет коэффициент трансформации 20. Напряжение на первичной обмотке 120 В. Определите напряжение на вторичной обмотке и число витков в ней, если первичная обмотка имеет 200 витков.
- Трансформатор, содержащий в первичной обмотке 840 витков, повышает напряжение с 220 В до 660 В. Каков коэффициент трансформации и сколько витков содержится во вторичной обмотке трансформатора? В какой обмотке провод будет иметь большую площадь сечения? Решение
- Чтобы узнать, сколько витков содержится в первичной и вторичной обмотках трансформатора, на вторичную катушку намотали 11 витков провода. При включении первичной обмотки в сеть напряжением 220 В вольтметр показал, что на обмотке с 11 витками напряжение равно 4,4 В, а на вторичной обмотке — 12 В. Сколько витков в первичной и вторичной обмотках? Решение
- Мощность, потребляемая трансформатором, 90 Вт. Определите силу тока во вторичной обмотке, если напряжение на зажимах вторичной обмотки 12 В и КПД трансформатора 75%.
- Первичная обмотка понижающего трансформатора включена в сеть напряжением 220 В. Напряжение на зажимах вторичной обмотки 20В, ее сопротивление 1 Ом, сила тока 2А. Определите коэффициент трансформации и КПД трансформатора.
Трансформаторы — Класс!ная физика
Трансформаторы
- Подробности
- Просмотров: 683
Трансформаторы — это просто!
«Физика — 11 класс»
Назначение трансформаторов
Трансформатором называется электротехнические устройства с помощью которого осуществляется преобразование переменного тока, при котором напряжение увеличивается или уменьшается в несколько раз практически без потери мощности.
Впервые подобные устройства были использованы в 1878 г. русским ученым П.Н.Яблочковым для питания изобретенных им электрических свечей — нового в то время источника света.
Позднее эти устройства получили название трансфораторов.
Трансформатор Яблочкова состоял из двух цилиндрических катушек, надетых на стальной стержень, собранный из отдельных проволок.
Устройство трансформатора
Трансформатор состоит из замкнутого стального сердечника, собранного из пластин, на который надеты две (иногда и более) катушки с проволочными обмотками.
![](/800/600/https/i.ytimg.com/vi/zR0K1SsN1_g/maxresdefault.jpg)
Одна из обмоток, называемая первичной, подключается к источнику переменного напряжения. Другая обмотка, к которой присоединяют нагрузку, т. е. приборы и устройства, потребляющие электроэнергию, называется вторичной.
Условное обозначение трансформатора на электрических схемах
Трансформатор на холостом ходу
Действие трансформатора основано на явлении электромагнитной индукции, открытым Майклом Фарадеем в 1831 году.
Явление электромагнитной индукции: при изменении тока в цепи первой катушки во второй катушке, расположенной рядом, возникает электрический ток.
При питании катушки от источника постоянного тока ток во второй катушке существует только в моменты изменения тока в первой катушке, а на практике — при замыкании и размыкании цепи первой катушки.
Для длительного существования тока необходио непрерывно изменять ток в первой катушке. А это возможно, если соединить ее с источником переменного напряжения. При синусоидальном характере тока в первой катушке ток во второй катушке будет также синусоидальным.
Сердечник из трансформаторной стали концентрирует магнитное поле так, что магнитный поток существует практически только внутри сердечника и одинаков во всех его сечениях.
Мгновенное значение ЭДС индукции е во всех витках первичной или вторичной обмотки одинаково.
Согласно закону Фарадея оно определяется формулой
е = -Ф’
где
Ф’ — производная потока магнитной индукции по времени.
В первичной обмотке, имеющей N1 витков, полная ЭДС индукции
e1 = N1e
Во вторичной обмотке полная ЭДС индукции
e2 = N2e
где
N2 — число витков этой обмотки.
Отсюда следует, что
Обычно активное сопротивление обмоток трансформатора мало, и им можно пренебречь.
В этом случае модуль напряжения на зажимах первичной обмотки примерно равен модулю суммарной ЭДС индукции:
При разомкнутой вторичной обмотке трансформатора ток в ней не идет, и имеет место соотношение
Мгновенные значения ЭДС e1 и e2 изменяются синфазно, т.е. одновременно достигают максимума и одновременно проходят через ноль.
Поэтому их отношение можно заменить отношением действующих значений ЭДС и напряжений
Отношение напряжений на обмотках при работе трансформатора на холостом ходу (без нагрузки) называется коэффициентом трансформации — К.
Трансформаторы используются как для повышения напряжения, так и для понижения, т.е. могут быть повышающими и понижающими.
Если К>1, то трансформатор является понижающим,
если К, то трансформатор — повышающий.
Работа нагруженного трансформатора
Если к концам вторичной обмотки присоединить цепь, потребляющую электроэнергию, т.е. нагрузить трансформатор, то сила тока во вторичной обмотке уже не будет равна нулю.
Появившийся ток создаст в сердечнике свой переменный магнитный поток, который будет уменьшать изменения магнитного потока в сердечнике.
Уменьшение амплитуды колебаний результирующего магнитного потока не произойдет, так как
Поэтому при замыкании цепи вторичной обмотки автоматически увеличится сила тока в первичной обмотке.
Его амплитуда возрастет таким образом, что восстановится прежнее значение амплитуды колебаний результирующего магнитного потока.
Увеличение силы тока в цепи первичной обмотки происходит в соответствии с законом сохранения энергии: отдача электроэнергии в цепь, присоединенную к вторичной обмотке трансформатора, сопровождается потреблением от сети такой же энергии первичной обмоткой.
При подключении нагрузки ко вторичной цепи КПД трансформатора близок к 100%.
Мощность в первичной цепи при нагрузке трансформатора, близкой к номинальной, примерно равна мощности во вторичной цепи:
При повышении с помощью трансформатора напряжения в несколько раз, сила тока во столько же раз уменьшается (и наоборот).
Трансформатор преобразует переменный электрический ток таким образом, что произведение силы тока на напряжение примерно одинаково в первичной и вторичной обмотках
Чтобы уменььшить нагревание сердечника, его собирают из отдельных стальных пластин, которые изолируются друг от друга бумагой, лаком или окисью металла сердечника.
В трансформаторах малой мощности применяют круглые тороидальные сердечники из стальных колец или стальной ленты.
Для повышения КПД в трансформаторах обмотки высокого и низкого напряжения располагают на одних и тех же стержнях.
В радиотехнике обмотки часто наматываются на средний стерженьь.
При работе трансформатора обмотки нагреваются, для их охлаждения мощные трансформаторы помещают даже в баки с жидким маслом (масляные трансформаторы).
Трансформаторы широко используют в радиоаппаратуре, а также для передачи электроэнергии на большие расстояния в линиях электропередач, для этого строятся трансформаторные подстанции.
Источник: «Физика — 11 класс», учебник Мякишев, Буховцев, Чаругин
Производство, передача и использование электрической энергии. Физика, учебник для 11 класса — Класс!ная физика
Генерирование электрической энергии — Трансформаторы — Производство, передача и использование электрической энергии
The Illustrated Transformer — Джей Аламмар — Визуализация машинного обучения по одной концепции за раз.
Обсуждения:
Hacker News (65 баллов, 4 комментария), Reddit r / MachineLearning (29 баллов, 3 комментария)
Переводы: Испанский, Китайский (упрощенный), Корейский, Русский, Вьетнамский, Французский, Японский
Смотреть: лекция MIT по теме «Глубокое обучение» со ссылкой на эту публикацию
В предыдущем посте мы рассмотрели «Внимание» — повсеместный метод в современных моделях глубокого обучения. Внимание — это концепция, которая помогла повысить производительность приложений нейронного машинного перевода. В этом посте мы рассмотрим The Transformer — модель, которая привлекает внимание для повышения скорости обучения этих моделей. Трансформеры превосходят модель нейронного машинного перевода Google в определенных задачах. Однако самое большое преимущество заключается в том, что The Transformer поддается распараллеливанию. Фактически, Google Cloud рекомендует использовать The Transformer в качестве эталонной модели для использования своего предложения Cloud TPU.Итак, давайте попробуем разбить модель на части и посмотрим, как она работает.
Трансформатор был предложен в статье «Внимание — это все, что вам нужно». Его реализация в TensorFlow доступна как часть пакета Tensor2Tensor. Группа НЛП из Гарварда создала руководство с аннотациями к статье с использованием PyTorch. В этом посте мы попытаемся немного упростить вещи и представить концепции одну за другой, чтобы, надеюсь, облегчить понимание людям без глубоких знаний предмета.
2020 Обновление : Я создал видео «Рассказанный трансформер», в котором более мягкий подход к теме:
Взгляд высокого уровня
Давайте начнем с рассмотрения модели как единого черного ящика. В приложении машинного перевода оно берет предложение на одном языке и выводит его перевод на другом.
Раскрывая эту доброту Оптимуса Прайма, мы видим компонент кодирования, компонент декодирования и связи между ними.
Компонент кодирования представляет собой стек кодировщиков (на бумаге шесть из них складываются друг на друга — в цифре шесть нет ничего волшебного, можно определенно поэкспериментировать с другими компоновками). Компонент декодирования представляет собой стек декодеров с одинаковым числом.
Все кодировщики идентичны по структуре (но у них нет общих весов). Каждый из них разбит на два подслоя:
Входные данные кодировщика сначала проходят через слой самовнимания — слой, который помогает кодировщику смотреть на другие слова во входном предложении, когда он кодирует определенное слово.Позже мы подробнее рассмотрим самовнимание.
Выходные данные слоя самовнимания передаются в нейронную сеть с прямой связью. Точно такая же сеть прямой связи независимо применяется к каждой позиции.
У декодера есть оба этих уровня, но между ними есть уровень внимания, который помогает декодеру сосредоточиться на соответствующих частях входного предложения (аналогично тому, что делает внимание в моделях seq2seq).
Использование тензоров в картине
Теперь, когда мы рассмотрели основные компоненты модели, давайте приступим к рассмотрению различных векторов / тензоров и того, как они перемещаются между этими компонентами, чтобы превратить входные данные обученной модели в выходные данные.
Как и в случае с приложениями НЛП в целом, мы начинаем с превращения каждого входного слова в вектор с помощью алгоритма встраивания.
Каждое слово вложено в вектор размером 512. Мы представим эти векторы этими простыми прямоугольниками.
Встраивание происходит только в самый нижний кодировщик. Абстракция, которая является общей для всех кодировщиков, заключается в том, что они получают список векторов, каждый из которых имеет размер 512. В нижнем кодировщике это будет слово embeddings, но в других кодировщиках это будет выход кодировщика, который находится непосредственно под .Размер этого списка — это гиперпараметр, который мы можем установить — в основном это будет длина самого длинного предложения в нашем наборе обучающих данных.
После встраивания слов в нашу входную последовательность каждое из них проходит через каждый из двух уровней кодировщика.
Здесь мы начинаем видеть одно ключевое свойство преобразователя, а именно то, что слово в каждой позиции проходит свой собственный путь в кодировщике. Между этими путями на уровне самовнимания есть зависимости. Однако уровень прямой связи не имеет этих зависимостей, и, таким образом, различные пути могут выполняться параллельно при прохождении через слой прямой связи.
Затем мы заменим пример более коротким предложением и посмотрим, что происходит на каждом подуровне кодировщика.
Теперь мы кодируем!
Как мы уже упоминали, кодировщик получает на вход список векторов. Он обрабатывает этот список, передавая эти векторы в слой «самовнимания», затем в нейронную сеть с прямой связью, а затем отправляет выходные данные вверх следующему кодировщику.
Слово в каждой позиции проходит через процесс самовнимания. Затем каждый из них проходит через нейронную сеть с прямой связью — точно такую же сеть с каждым вектором, проходящим через нее отдельно.
Самовнимание на высоком уровне
Не обманывайтесь, когда я использую слово «самовнимание», как будто это понятие должно быть знакомо каждому. Я лично никогда не сталкивался с этой концепцией, пока не прочитал статью «Все, что вам нужно». Давайте разберемся, как это работает.
Скажем, следующее предложение является вводным предложением, которое мы хотим перевести:
” Животное не переходило улицу, потому что оно слишком устало
”
Что означает «оно» в этом предложении? Имеется в виду улица или животное? Это простой вопрос для человека, но не такой простой для алгоритма.
Когда модель обрабатывает слово «оно», самовнимание позволяет ей ассоциировать «это» с «животным».
По мере того, как модель обрабатывает каждое слово (каждую позицию во входной последовательности), самовнимание позволяет ей смотреть на другие позиции во входной последовательности в поисках подсказок, которые могут помочь улучшить кодирование этого слова.
Если вы знакомы с RNN, подумайте о том, как поддержание скрытого состояния позволяет RNN включать свое представление предыдущих слов / векторов, которые она обработала, с текущим, обрабатываемым ею. Самовнимание — это метод, который Трансформер использует для «запекания» других релевантных слов в словах, которые мы обрабатываем в данный момент.
Поскольку мы кодируем слово «оно» в кодировщике №5 (верхний кодировщик в стеке), часть механизма внимания фокусировалась на «Животном» и запекла часть его представления в кодировке «оно».
Обязательно ознакомьтесь с записной книжкой Tensor2Tensor, где вы можете загрузить модель Transformer и изучить ее с помощью этой интерактивной визуализации.
Самостоятельное внимание в деталях
Давайте сначала посмотрим, как вычислить самовнимание с помощью векторов, а затем перейдем к тому, как это на самом деле реализовано — с помощью матриц.
Первый шаг при вычислении самовнимания — создать три вектора из каждого входного вектора кодировщика (в данном случае — вложение каждого слова).Итак, для каждого слова мы создаем вектор запроса, вектор ключа и вектор значения. Эти векторы создаются путем умножения вложения на три матрицы, которые мы обучили в процессе обучения.
Обратите внимание, что эти новые векторы меньше по размерности, чем вектор внедрения. Их размерность составляет 64, в то время как векторы ввода / вывода встраивания и кодировщика имеют размерность 512. Они НЕ ДОЛЖНЫ быть меньше, это выбор архитектуры, позволяющий сделать вычисление многогранного внимания (в основном) постоянным.
Умножение x1 на весовую матрицу WQ дает q1, вектор «запроса», связанный с этим словом. В итоге мы создаем проекцию «запроса», «ключа» и «значения» для каждого слова во входном предложении.
Что такое векторы «запроса», «ключа» и «значения»?
Это абстракции, которые полезны для вычисления внимания и размышления о нем. После того, как вы перейдете к прочтению того, как рассчитывается внимание ниже, вы будете знать почти все, что вам нужно знать о роли каждого из этих векторов.
Второй шаг в вычислении самовнимания — это подсчет баллов. Предположим, мы рассчитываем самовнимание для первого слова в этом примере «Мышление». Нам нужно сопоставить каждое слово входного предложения с этим словом. Оценка определяет, сколько внимания следует уделять другим частям входного предложения, когда мы кодируем слово в определенной позиции.
Оценка рассчитывается как скалярное произведение вектора запроса на ключевой вектор соответствующего слова, которое мы оцениваем.Итак, если мы обрабатываем самовнимание для слова в позиции №1, первая оценка будет скалярным произведением q1 и k1. Вторая оценка будет скалярным произведением q1 и k2.
Третий и четвертый этапы заключаются в разделении оценок на 8 (квадратный корень из размерности ключевых векторов, используемых в статье — 64. Это приводит к получению более стабильных градиентов. Здесь могут быть другие возможные значения, но это значение по умолчанию), затем передайте результат через операцию softmax.Softmax нормализует оценки, чтобы все они были положительными и в сумме составляли 1.
. Эта оценка softmax определяет, насколько каждое слово будет выражено в этой позиции. Очевидно, что слово в этой позиции будет иметь наивысший балл softmax, но иногда полезно обратить внимание на другое слово, имеющее отношение к текущему слову.
Пятый шаг — это умножение каждого вектора значений на оценку softmax (при подготовке к их суммированию). Интуиция здесь заключается в том, чтобы сохранить неизменными значения слов, на которых мы хотим сосредоточиться, и заглушить не относящиеся к делу слова (умножив их на крошечные числа, такие как 0.001, например).
Шестой этап заключается в суммировании векторов взвешенных значений. Это производит вывод слоя самовнимания в этой позиции (для первого слова).
На этом расчет самовнимания завершен. Результирующий вектор — это тот, который мы можем отправить в нейронную сеть с прямой связью. Однако в реальной реализации этот расчет выполняется в матричной форме для более быстрой обработки. Итак, давайте посмотрим на это теперь, когда мы увидели интуицию вычисления на уровне слов.
Матрица расчета самовнимания
Первым шагом является вычисление матриц запроса, ключа и значения. Мы делаем это, упаковывая наши вложения в матрицу X и умножая ее на матрицы весов, которые мы обучили (WQ, WK, WV).
Каждая строка в матрице X соответствует слову во входном предложении. Мы снова видим разницу в размере вектора встраивания (512 или 4 прямоугольника на рисунке) и векторов q / k / v (64 или 3 прямоугольника на рисунке).
Наконец, , поскольку мы имеем дело с матрицами, мы можем объединить шаги со второго по шестой в одну формулу для вычисления выходных данных слоя самовнимания.
Расчет самовнимания в матричной форме
Многоголовый зверь
В статье дополнительно усовершенствован слой самовнимания, добавлен механизм, называемый «многоголовым» вниманием. Это улучшает производительность слоя внимания двумя способами:
Расширяет способность модели фокусироваться на разных позициях.
Да, в приведенном выше примере z1 содержит немного любой другой кодировки, но в ней может преобладать само слово.Было бы полезно, если бы мы переводили предложение вроде «Животное не перешло улицу, потому что оно слишком устало», мы хотели бы знать, к какому слову «оно» относится.
Он дает слою внимания несколько «подпространств представления». Как мы увидим далее, с многоголовым вниманием у нас есть не только один, но и несколько наборов весовых матриц запроса / ключа / значения (преобразователь использует восемь головок внимания, поэтому мы получаем восемь наборов для каждого кодировщика / декодера). . Каждый из этих наборов инициализируется случайным образом.Затем, после обучения, каждый набор используется для проецирования входных вложений (или векторов из нижних кодировщиков / декодеров) в другое подпространство представления.
С многоголовым вниманием мы поддерживаем отдельные весовые матрицы Q / K / V для каждой головы, в результате чего получаются разные матрицы Q / K / V. Как и раньше, мы умножаем X на матрицы WQ / WK / WV, чтобы получить матрицы Q / K / V.
Если мы проделаем тот же расчет самовнимания, который мы описали выше, всего восемь раз с разными весовыми матрицами, мы получим восемь разных Z-матриц
Это оставляет нам небольшую проблему.Слой прямой связи не ожидает восьми матриц — он ожидает единственную матрицу (вектор для каждого слова). Итак, нам нужен способ сжать эти восемь в единую матрицу.
Как мы это делаем? Мы объединяем матрицы, а затем умножаем их на дополнительную матрицу весов WO.
Вот и все, что нужно для многоглавого самовнимания. Я понимаю, что это довольно много матриц. Позвольте мне попытаться объединить их все в один визуальный ряд, чтобы мы могли рассматривать их в одном месте
Теперь, когда мы коснулись головок внимания, давайте вернемся к нашему предыдущему примеру, чтобы увидеть, на чем фокусируются различные головы внимания, когда мы кодируем слово «оно» в нашем примере предложения:
Когда мы кодируем слово «оно», одна голова внимания больше всего сосредотачивается на «животном», а другая — на «усталом» — в некотором смысле, представление модели слова «оно» вписывается в некоторые из представлений. как «животное», так и «уставшее».
Однако, если мы добавим к изображению все внимание, интерпретировать вещи будет сложнее:
Представление порядка последовательности с использованием позиционного кодирования
В модели, которую мы описали до сих пор, отсутствует одна вещь, так это способ учесть порядок слов во входной последовательности.
Чтобы решить эту проблему, преобразователь добавляет вектор к каждому встраиванию входа. Эти векторы следуют определенному шаблону, который модель изучает, что помогает ей определять положение каждого слова или расстояние между разными словами в последовательности.Интуиция здесь заключается в том, что добавление этих значений к вложениям обеспечивает значимые расстояния между векторами встраивания, когда они проецируются в векторы Q / K / V и во время внимания скалярного произведения.
Чтобы дать модели ощущение порядка слов, мы добавляем векторы позиционного кодирования, значения которых следуют определенному шаблону.
Если мы предположим, что вложение имеет размерность 4, фактическое позиционное кодирование будет выглядеть так:
Реальный пример позиционного кодирования с размером вложения игрушки 4
Как мог бы выглядеть этот узор?
На следующем рисунке каждая строка соответствует позиционному кодированию вектора.Таким образом, первая строка будет вектором, который мы добавим к встраиванию первого слова во входной последовательности. Каждая строка содержит 512 значений — каждое от 1 до -1. Мы присвоили им цветовую кодировку, чтобы узор был виден.
Реальный пример позиционного кодирования для 20 слов (строк) с размером встраивания 512 (столбцов). Вы можете видеть, что он разделен пополам по центру. Это потому, что значения левой половины генерируются одной функцией (которая использует синус), а правая половина генерируется другой функцией (которая использует косинус).Затем они объединяются, чтобы сформировать каждый из векторов позиционного кодирования.
Формула позиционного кодирования описана в статье (раздел 3.5). Вы можете увидеть код для генерации позиционных кодировок в get_timing_signal_1d ()
. Это не единственный возможный метод позиционного кодирования. Однако это дает преимущество возможности масштабирования до невидимой длины последовательностей (например, если нашу обученную модель просят перевести предложение длиннее, чем любое из предложений в нашем обучающем наборе).
Июль 2020 Обновление: Позиционное кодирование, показанное выше, взято из реализации Transformer2Transformer. Метод, показанный в статье, немного отличается тем, что он не соединяет напрямую, а переплетает два сигнала. На следующем рисунке показано, как это выглядит. Вот код для его создания:
Остатки
Одна деталь в архитектуре кодера, которую мы должны упомянуть, прежде чем двигаться дальше, заключается в том, что каждый подуровень (самовнимание, ffnn) в каждом кодере имеет остаточное соединение вокруг себя, за которым следует этап нормализации уровня. .
Если мы визуализируем векторы и операцию уровня-нормы, связанную с самовниманием, это будет выглядеть так:
Это также относится к подуровням декодера. Если мы представим себе преобразователь из двух стековых кодировщиков и декодеров, он будет выглядеть примерно так:
Сторона декодера
Теперь, когда мы рассмотрели большинство концепций кодировщика, мы в основном знаем, как работают компоненты декодеров.Но давайте посмотрим, как они работают вместе.
Кодер запускает обработку входной последовательности. Затем выходной сигнал верхнего кодера преобразуется в набор векторов внимания K и V. Они должны использоваться каждым декодером на его уровне «внимание кодер-декодер», который помогает декодеру сосредоточиться на соответствующих местах во входной последовательности:
После завершения этапа кодирования мы начинаем этап декодирования. Каждый шаг в фазе декодирования выводит элемент из выходной последовательности (в данном случае предложение английского перевода).
Следующие шаги повторяют процесс до тех пор, пока не будет достигнут специальный символ, указывающий, что декодер трансформатора завершил свой вывод. Выходные данные каждого шага поступают в нижний декодер на следующем временном шаге, и декодеры выводят свои результаты декодирования так же, как это сделали кодеры. И так же, как мы поступили с входами кодировщика, мы встраиваем и добавляем позиционное кодирование к этим входам декодера, чтобы указать положение каждого слова.
Слои самовнимания в декодере работают немного иначе, чем в кодировщике:
В декодере слой самовнимания может обращать внимание только на более ранние позиции в выходной последовательности.Это делается путем маскирования будущих позиций (установка для них значений -inf
) перед шагом softmax при вычислении самовнимания.
Слой «Внимание кодировщика-декодера» работает так же, как многоголовое самовнимание, за исключением того, что он создает свою матрицу запросов из нижележащего уровня и берет матрицу ключей и значений из выходных данных стека кодировщика.
Последний линейный слой и слой Softmax
Стек декодера выводит вектор чисел с плавающей запятой. Как превратить это в слово? Это работа последнего слоя Linear, за которым следует слой Softmax.
Линейный слой — это простая полносвязная нейронная сеть, которая проецирует вектор, созданный стеком декодеров, в гораздо более крупный вектор, называемый вектором логитов.
Предположим, что наша модель знает 10 000 уникальных английских слов («выходной словарь» нашей модели), которые она выучила из набора обучающих данных. Это сделало бы вектор логитов шириной 10 000 ячеек — каждая ячейка соответствует количеству уникального слова. Вот как мы интерпретируем вывод модели, за которой следует линейный слой.
Затем слой softmax превращает эти оценки в вероятности (все положительные, все в сумме дают 1,0). Выбирается ячейка с наибольшей вероятностью, и слово, связанное с ней, создается в качестве выходных данных для этого временного шага.
Этот рисунок начинается снизу с вектора, полученного на выходе стека декодера. Затем оно превращается в выходное слово.
Итоги обучения
Теперь, когда мы рассмотрели весь процесс прямого прохода через обученный преобразователь, было бы полезно взглянуть на интуицию обучения модели.
Во время обучения неподготовленная модель должна пройти точно такой же прямой проход. Но поскольку мы обучаем его на помеченном наборе обучающих данных, мы можем сравнить его выходные данные с фактическими правильными выходными данными.
Чтобы наглядно это представить, предположим, что наш выходной словарь содержит только шесть слов («а», «я», «я», «спасибо», «ученик» и «
Выходной словарь нашей модели создается на этапе предварительной обработки еще до того, как мы начинаем обучение.
Как только мы определим наш выходной словарь, мы можем использовать вектор той же ширины для обозначения каждого слова в нашем словаре. Это также называется горячим кодированием. Так, например, мы можем обозначить слово «am» с помощью следующего вектора:
Пример: быстрое кодирование нашего выходного словаря
После этого резюме, давайте обсудим функцию потерь модели — метрику, которую мы оптимизируем на этапе обучения, чтобы привести к обученной и, надеюсь, удивительно точной модели.
Функция потерь
Допустим, мы обучаем нашу модель. Допустим, это наш первый шаг на этапе обучения, и мы обучаем его на простом примере — переводе слова «мерси» в «спасибо».
Это означает, что мы хотим, чтобы на выходе было распределение вероятностей с указанием слова «спасибо». Но поскольку эта модель еще не обучена, это вряд ли произойдет.
Поскольку все параметры модели (веса) инициализируются случайным образом, (необученная) модель создает распределение вероятностей с произвольными значениями для каждой ячейки / слова.Мы можем сравнить его с фактическим результатом, а затем настроить все веса модели с помощью обратного распространения ошибки, чтобы приблизить результат к желаемому.
Как сравнить два распределения вероятностей? Мы просто вычитаем одно из другого. Для получения дополнительных сведений см. Кросс-энтропию и расхождение Кульбака – Лейблера.
Но учтите, что это упрощенный пример. Более реалистично, мы будем использовать предложение длиннее одного слова. Например — ввод: «je suis étudiant» и ожидаемый результат: «я студент».На самом деле это означает, что мы хотим, чтобы наша модель последовательно выводила распределения вероятностей, где:
- Каждое распределение вероятностей представлено вектором ширины vocab_size (6 в нашем игрушечном примере, но более реалистично число вроде 30 000 или 50 000)
- Первое распределение вероятностей имеет наивысшую вероятность в ячейке, связанной со словом «i»
- Второе распределение вероятностей имеет самую высокую вероятность в ячейке, связанной со словом «am»
- И так далее, пока пятое выходное распределение не укажет символ «
<конец предложения>
», с которым также связана ячейка из словаря из 10 000 элементов.
Целевые распределения вероятностей, с которыми мы будем обучать нашу модель в обучающем примере для одного предложения-образца.
После обучения модели в течение достаточного времени на достаточно большом наборе данных мы надеемся, что полученные распределения вероятностей будут выглядеть так:
Надеемся, что после обучения модель выдаст правильный перевод, который мы ожидаем. Конечно, это не настоящее указание на то, была ли эта фраза частью обучающего набора данных (см .: перекрестная проверка).Обратите внимание, что каждая позиция имеет небольшую вероятность, даже если она вряд ли будет результатом этого временного шага — это очень полезное свойство softmax, которое помогает процессу обучения.
Теперь, поскольку модель производит выходные данные по одному, мы можем предположить, что модель выбирает слово с наибольшей вероятностью из этого распределения вероятностей и отбрасывает остальные. Это один из способов сделать это (называется жадным декодированием). Другой способ сделать это — удержаться, скажем, за два верхних слова (например, «I» и «a»), а затем на следующем шаге запустить модель дважды: один раз предполагая, что первая выходная позиция была слово «I», и в другой раз, предполагая, что первой выходной позицией было слово «a», и какая бы версия ни вызвала меньше ошибок, учитывая обе позиции №1 и №2, сохраняется.Мы повторяем это для позиций №2 и №3… и т. Д. Этот метод называется «поиск луча», где в нашем примере для beam_size было два (это означает, что всегда две частичные гипотезы (незавершенные переводы) сохраняются в памяти), а top_beams также равно двум (что означает, что мы вернем два перевода. ). Это оба гиперпараметра, с которыми вы можете поэкспериментировать.
Двигайтесь вперед и трансформируйте
Надеюсь, вы нашли это полезным местом, чтобы начать ломать голову над основными концепциями Трансформера.Если вы хотите углубиться, я бы посоветовал следующие шаги:
Доработки:
Благодарности
Благодарим Илью Полосухина, Якоба Ушкорейта, Ллиона Джонса, Лукаша Кайзера, Ники Пармар и Ноама Шазира за отзывы о более ранних версиях этого поста.
Пожалуйста, напишите мне в Твиттер, чтобы я получил любые исправления или отзывы.
Топ-15 блогов и сайтов о трансформаторах, на которые следует подписаться в 2021 году
1. Мир трансформаторов 2005 | Новости Трансформеров
USTransformer World 2005 — крупнейшее сообщество поклонников игрушек-трансформеров.Он содержит информацию о Трансформерах 5 Последний Рыцарь, новейшем фильме Трансформеров, Поколениях Трансформеров, Шедевре, Оптимусе Прайме и Мегатроне. Наряду с ежедневными новостями доступны ресурсы по игрушкам, галереи, обои Трансформеры и многое другое.
news.tfw2005.com
29,2 тыс. ⋅ 25,3 тыс. 2 сообщения в день ⋅ фев 2003 г. Просмотреть последние сообщения ⋅ Получить адрес электронной почты
2. Allspark | Новости, обсуждения и другие интересные новости Transformers
USС 1999 года Allspark является одним из старейших активных фан-сайтов онлайн-трансформеров.Это центр сообщества, где можно найти новости и обсудить все эпохи игрушек Трансформеров, телевидения, игр и комиксов.
allspark.com
8.9K 5.2K 14 сообщений в неделю фев 1999 Просмотр последних сообщений ⋅ Получить адрес электронной почты
3. Зайбертрон | Новости Трансформеров
Чикаго, Иллинойс, СШАSeibertron.com — это огромный веб-сайт, посвященный игрушкам Трансформеров, мультфильмам, комиксам и фильмам. Популярные функции включают ежедневные новости, галереи игрушек, доску сообщений, подкаст и многое другое, чем кажется на первый взгляд!
seibertron.com / transformers / ..
41.5K 19.3K 19 сообщений в неделю Просмотр последних сообщений ⋅ Получить адрес электронной почты Контакт
4. Блог о фильмах с живыми боевиками «Трансформеры» (TFLAMB)
Атланта, Джорджия, СШАБлог о фильмах «Трансформеры» в прямом эфире освещает все новости о фильмах «Трансформеры», включая сиквел «Месть падших», игрушки, трейлеры, плакаты и все остальное о «Трансформерах», на которое стоит обратить внимание.
transformerslive.blogspot.com
1.7K 19,3K 312K 1 сообщение в неделю июл 2005 Просмотр последних сообщений ⋅ Получить адрес электронной почты Контакт
5. Трансформеры на Луне
UKДобро пожаловать в Transformers at the Moon, европейский веб-сайт Transformers. Он был создан еще в середине октября 1999 года и управляется двумя братьями-близнецами. На сайте представлена их большая коллекция фигурок Трансформеров, новости и общие ресурсы.
transformertoys.co.uk
5,8K ⋅ 1 сообщение / квартал Просмотреть последние сообщения ⋅ Получить адрес электронной почты Контакт
6.The HEXdidn’t … Блог коллекции TransFormers
Подпишитесь на этот блог, чтобы получать обзоры, мнения и личные размышления об игрушках TransFormers.hdtfblog.blogspot.com
2 сообщения в неделю ⋅ сен 2008 Просмотр последних сообщений ⋅ Получить адрес электронной почты
7. Лаборатория Уилджека
Эльдора, Айова, СШАСтаринный блог игрушек Трансформеры G1, содержащий обновленные новости, обзоры, ресурсы игрушек, галереи, распаковку и мнения. Wheeljack’s Lab — это винтажный магазин поп-культуры, специализирующийся на покупке и продаже винтажных игрушек и памятных вещей 1970-х, 1980-х и 1990-х годов.
Также в блогах Action Figure
wheeljackslab.com/blog
12,7K 264 ⋅ 2 сообщения в неделю Просмотр последних сообщений ⋅ Получить адрес электронной почты
8. Боты против минусов
Читайте самую свежую информацию о Трансформерах, медиа, видео, искусство и обои для всего, что касается Трансформеров!botsvscons.com/transformers- ..
2.8K 1.7K 1 сообщение в месяц Просмотр последних сообщений ⋅ Получить адрес электронной почты
9. Формеры | Все вещи трансформеры
USПодпишитесь на этот блог, чтобы каждый день узнавать обо всем, что касается Трансформеров, включая новости и обзоры игрушек, фильмов, комиксов, игр, фанатов и многое другое.
tformers.com
26,2 тыс. ⋅ 10,4 тыс. Последние сообщения ⋅ Получить адрес электронной почты
10. Исходный отчет | Все трансформеры. Все время.
Блог TFsource — это ваш источник всего, что связано с трансформаторами, сторонними трансформаторами, шедеврами трансформаторов и многим другим.tfsource.com/blog
104,1 тыс. ⋅ 17,4 тыс. 40 тыс. 30 сообщений в год Просмотреть последние сообщения ⋅ Получить адрес электронной почты
11. Трансформеры One Mans Obsession
Подпишитесь на этот блог, где одержимый трансформаторами человек делится обзорами различных типов трансформаторов.transformersobsession.blogsp ..
29 ⋅ декабрь 2010 г. Просмотр последних сообщений ⋅ Получить адрес электронной почты
12. Библиотека фотографий Трансформеров Sixo
UKСледите за этим блогом, где парень из Англии, который фотографирует Трансформеров, делится своими фотографиями и мыслями о Трансформерах.
sixotransformers.blogspot.com
13,1 тыс. 12,6 тыс. 10,4 тыс. 30 сообщений в год ноя 2015 Просмотреть последние сообщения ⋅ Получить контакт по электронной почте
13.Square One
ИсландияСледите за этим блогом, где Maz делится подробными статьями и галереями Трансформаторов, Предварительных Трансформаторов, Прототипов, Сторонних производителей и многого другого.
tfsquareone.blogspot.com
13,4 тыс. 6,1 тыс. март 2014 г. Просмотреть последние сообщения ⋅ Получить адрес электронной почты
14. Злой канадский десептикон | Блог Трансформеров
Торонто, Онтарио, КанадаБлог Transformers о G1, G2, Masterpiece, Knockoff, 3rd Party и WST Transformers.
angrycanadiandecepticon.blog ..
324 ⋅ авг 2013 Просмотреть последние сообщения ⋅ Получить адрес электронной почты
Блог Google AI: переосмысление внимания с помощью исполнителей
Авторы: Кшиштоф Чоромански и Люси Колвелл, ученые-исследователи, Google ResearchМодели-трансформеры достигли самых современных результатов в самых разных областях, включая естественный язык, разговоры, изображения и даже музыку. Основным блоком каждой архитектуры Transformer является модуль внимания , , который вычисляет оценки сходства для всех пар позиций во входной последовательности.Однако это плохо масштабируется с длиной входной последовательности, требуя квадратичного времени вычисления для получения всех оценок сходства, а также квадратичного размера памяти для построения матрицы для хранения этих оценок.
Для приложений, где требуется повышенное внимание, было предложено несколько быстрых и более компактных прокси, таких как методы кэширования памяти, но гораздо более распространенный способ — полагаться на рассеянное внимание . Редкое внимание сокращает время вычислений и требования к памяти для механизма внимания за счет вычисления ограниченного набора оценок сходства из последовательности, а не из всех возможных пар, что приводит к разреженной матрице, а не к полной матрице.Эти разреженные записи могут быть предложены вручную, найдены с помощью методов оптимизации, изучены или даже рандомизированы, что демонстрируется такими методами, как Sparse Transformers, Longformers, Routing Transformers, Reformers, and Big Bird . Поскольку разреженные матрицы также могут быть представлены графами и ребрами, методы разрежения также мотивированы литературой по графовым нейронным сетям с конкретными отношениями к вниманию, изложенными в Graph Attention Networks .Такие архитектуры, основанные на разреженности, обычно требуют дополнительных уровней для неявного создания механизма полного внимания.
Стандартные методы разбрызгивания. Слева: Пример схемы разреженности, когда жетоны относятся только к другим ближайшим жетонам. Справа : В сетях внимания графа токены обслуживают только своих соседей в графе, которые должны иметь более высокую релевантность, чем другие узлы. См. «Эффективные трансформаторы: обзор» для полной классификации различных методов. |
К сожалению, методы рассеянного внимания могут иметь ряд ограничений. (1) Они требуют эффективных операций умножения с разреженными матрицами, которые доступны не на всех ускорителях; (2) они обычно не предоставляют строгих теоретических гарантий своей репрезентативной силы; (3) они оптимизированы в первую очередь для моделей Transformer и генеративного предварительного обучения; и (4) они обычно складывают больше слоев внимания, чтобы компенсировать разреженные представления, что затрудняет их использование с другими предварительно обученными моделями, что требует переобучения и значительного расхода энергии.Помимо этих недостатков, механизмов разреженного внимания зачастую недостаточно для решения всего спектра проблем, к которым применяются обычные методы внимания, такие как Pointer Networks. Есть также некоторые операции, которые нельзя разделить, например, обычно используемая операция softmax, которая нормализует оценки сходства в механизме внимания и широко используется в рекомендательных системах промышленного масштаба.
Чтобы решить эти проблемы, мы представляем Performer, архитектуру Transformer с механизмами внимания, которые масштабируются линейно, что обеспечивает более быстрое обучение, позволяя модели обрабатывать большие длины, как это требуется для определенных наборов данных изображений, таких как ImageNet64, и наборов текстовых данных, таких как PG-19. .Исполнитель использует эффективную (линейную) структуру обобщенного внимания, которая позволяет использовать широкий класс механизмов внимания, основанных на различных мерах (ядрах) сходства. Эта структура реализована с помощью нашего нового алгоритма Fast Attention Via Positive Orthogonal Random Features (FAVOR +) , который обеспечивает масштабируемую низкую дисперсию и несмещенную оценку механизмов внимания, которые могут быть выражены посредством разложения карты случайных характеристик (в частности, штатный softmax-внимание).Мы получаем надежные гарантии точности для этого метода при сохранении линейной пространственной и временной сложности, что также может быть применено к автономным операциям softmax.
Generalized Attention
В исходном механизме внимания, входные данные запроса и , соответствующие строкам и столбцам матрицы, умножаются вместе и передаются через операцию softmax, чтобы сформировать матрицу внимания, которая сохраняет сходство оценки.Обратите внимание, что в этом методе нельзя разложить продукт ключа запроса обратно на его исходный запрос и ключевые компоненты после передачи его в нелинейную операцию softmax. Однако можно разложить матрицу внимания обратно на продукт случайных нелинейных функций исходных запросов и ключей, иначе известных как случайных признаков , что позволяет более эффективно кодировать информацию о сходстве. .
LHS: Стандартная матрица внимания, которая содержит все оценки сходства для каждой пары записей, сформированной операцией softmax над запросом и ключами, обозначенная q и k . RHS: Стандартная матрица внимания может быть аппроксимирована рандомизированными матрицами более низкого ранга Q ‘ и K’ со строками, кодирующими потенциально рандомизированные нелинейные функции исходных запросов / ключей. Для обычного softmax-Внимание преобразование очень компактное и включает экспоненциальную функцию, а также случайные гауссовские проекции. |
Регулярное softmax-внимание можно рассматривать как частный случай с этими нелинейными функциями, определяемыми экспоненциальными функциями и гауссовыми проекциями.Обратите внимание, что мы также можем рассуждать наоборот, реализуя более общие нелинейные функции сначала , неявно определяя другие типы мер сходства или ядра в продукте с ключом запроса. Мы формируем это как обобщенное внимание, на основе более ранней работы с методами ядра. Хотя для большинства ядер закрытых формул не существует, наш механизм все же может быть применен, поскольку он не полагается на них.
Насколько нам известно, мы первые показали, что любая матрица внимания может быть эффективно аппроксимирована в последующих приложениях Transformer с использованием случайных функций.Новым механизмом, позволяющим это сделать, является использование положительных случайных признаков , т. Е. положительных нелинейных функций исходных запросов и ключей, которые оказываются решающими для предотвращения нестабильности во время обучения и обеспечивают более точное приближение к обычному softmax. механизм внимания.
На пути к FAVOR +: быстрое внимание через ассоциативность матрицы
Разложение, описанное выше, позволяет хранить матрицу неявного внимания с линейной, а не квадратичной сложностью памяти.Используя это разложение, можно также получить механизм внимания с линейным временем . В то время как исходный механизм внимания умножает сохраненную матрицу внимания на входное значение для получения окончательного результата, после разложения матрицы внимания можно переставить матричные умножения, чтобы приблизиться к результату обычного механизма внимания, без явного построения квадратичного размера. матрица внимания. В конечном итоге это приводит к FAVOR + .
Слева: Вычисление стандартного модуля внимания, где окончательный желаемый результат вычисляется путем выполнения матричного умножения с матрицей внимания A и тензором значений V . Справа: Разъединяя матрицы Q ‘ и K’ , используемые в разложении более низкого ранга A , и проводя умножения матриц в порядке, указанном пунктирными прямоугольниками, мы получаем линейный механизм внимания, никогда явно не конструируя A или его приближение. |
Вышеприведенный анализ актуален для так называемого двунаправленного внимания , то есть непричинного внимания, при котором отсутствует понятие прошлого и будущего.Для однонаправленного (причинного) внимания, когда токены не обращают внимания на другие токены, появляющиеся позже во входной последовательности, мы немного изменяем подход, чтобы использовать вычисления суммы префикса, которые сохраняют только промежуточные итоги матричных вычислений, а не сохраняют явную нижнюю -треугольная матрица регулярного внимания.
Слева: Стандартное однонаправленное внимание требует маскировки матрицы внимания для получения ее нижней треугольной части. Справа: Несмещенное приближение на LHS может быть получено с помощью механизма префиксной суммы, где сумма префиксов внешних произведений случайных карт признаков для ключей и векторов значений строится на лету и умножается влево с помощью случайного запроса. вектор признаков, чтобы получить новую строку в результирующей матрице. |
Свойства
Сначала мы оцениваем пространственную и временную сложность исполнителя и показываем, что увеличение внимания и сокращение памяти эмпирически почти оптимальны, т.е.е., очень близко к тому, чтобы просто не использовать механизм внимания в модели.
Двунаправленная синхронизация для обычной модели трансформатора в логарифмическом графике в зависимости от времени ( T ) и длины ( L ). Строки заканчиваются на пределе памяти графического процессора. Черная линия (X) обозначает максимально возможное сжатие памяти и ускорение при использовании «фиктивного» блока внимания, который по существу обходит вычисления внимания и демонстрирует максимально возможную эффективность модели.Модель Performer почти способна достичь этой оптимальной производительности в компоненте внимания. |
Мы также показываем, что Performer, используя наше беспристрастное приближение softmax, обратно совместим с предварительно обученными моделями Transformer после небольшой настройки, что потенциально может снизить затраты на энергию за счет повышения скорости вывода без необходимости полностью переобучать ранее существовавшие модели.
Используя набор данных One Billion Word Benchmark (LM1B), мы перенесли исходные предварительно обученные веса Transformer в модель Performer, которая дает начальный ненулевой 0.07 точность (оранжевая пунктирная линия). Однако после точной настройки Performer быстро восстанавливает точность за небольшую часть исходного количества шагов градиента. |
Пример применения: моделирование белков
Белки — это большие молекулы со сложной трехмерной структурой и специфическими функциями, которые необходимы для жизни. Как и слова, белки задаются как линейные последовательности, где каждый символ является одним из 20 аминокислотных строительных блоков. Применение трансформеров к большим немеченым корпусам белковых последовательностей (например,грамм. UniRef) дает модели, которые можно использовать для точного прогнозирования складчатой функциональной макромолекулы. Performer-ReLU (который использует внимание на основе ReLU, экземпляр обобщенного внимания, который отличается от softmax) хорошо работает при моделировании данных последовательности белков, в то время как Performer-Softmax соответствует производительности Transformer, как и предсказывают наши теоретические результаты.
Эффективность моделирования белковых последовательностей.Поезд = Пунктир, Проверка = Сплошной, Однонаправленный = (U), Двунаправленный = (B). Мы используем параметры модели с 36 уровнями из ProGen (2019) для всех прогонов, в каждом из которых используется TPU-v2 16×16. Размеры пакетов были максимизированы для каждого запуска с учетом соответствующих вычислительных ограничений. |
Ниже мы визуализируем модель Protein Performer, обученную с использованием механизма приблизительного внимания на основе ReLU. Использование Performer для оценки сходства между аминокислотами позволяет восстановить структуру, аналогичную хорошо известным матрицам замен, полученным путем анализа эволюционных паттернов замен при тщательно подобранном выравнивании последовательностей.В более общем плане мы находим локальные и глобальные модели внимания, соответствующие моделям Transformer, обученным на данных о белках. Приближение плотного внимания исполнителя может улавливать глобальные взаимодействия между множеством белковых последовательностей. В качестве доказательства концепции мы обучаем модели на длинных конкатенированных последовательностях белков, что перегружает память обычной модели Transformer, но не Performer из-за его компактности.
Слева: Матрица сходства аминокислот, оцененная на основе весов концентрации внимания.Модель распознает очень похожие пары аминокислот, такие как (D, E) и (F, Y), несмотря на доступ только к последовательностям белков без предварительной информации о биохимии. Центр: Матрицы внимания из 4 слоев (строк) и 3 выбранных заголовков (столбцов) для белка BPT1_BOVIN, показывающие локальные и глобальные паттерны внимания. |
Выполнение последовательностей длиной до 8192, полученных путем конкатенации отдельных белковых последовательностей.Чтобы поместиться в память TPU, размер Transformer (количество слоев и размеры встраивания) был уменьшен. |
Заключение
Наша работа вносит свой вклад в недавние усилия по разработке методов, основанных не на разреженности, и основанных на ядре интерпретаций Трансформаторов. Наш метод совместим с другими методами, такими как обратимые слои, и мы даже интегрировали FAVOR с кодом Reformer. Мы предоставляем ссылки на документ, код исполнителя и код моделирования на языке Protein Language Modeling.Мы считаем, что наше исследование открывает совершенно новый взгляд на внимание, архитектуру Transformer и даже методы ядра.
Благодарности
Эта работа была выполнена основными дизайнерами Performer Кшиштофом Чоромански (Google Brain Team, технический и исследовательский руководитель), Валерием Лихошерстовым (Кембриджский университет) и Xingyou Song (Google Brain Team) при участии Дэвида Дохана и Андреи. Гейн, Тамас Сарлос, Питер Хокинс, Джаред Дэвис, Афроз Мохиуддин, Лукаш Кайзер, Дэвид Белэнджер, Люси Колвелл и Адриан Веллер.Мы выражаем особую благодарность группе прикладных наук за совместное руководство исследованиями по применению эффективных архитектур трансформаторов к данным о последовательности белков.
Мы также хотим поблагодарить Джошуа Мейера, Джона Платта и Тома Вейнгартена за многие плодотворные обсуждения биологических данных и полезные комментарии к этому проекту, а также Йи Тай и Мостафу Дехгани за обсуждения по сравнению исходных данных. Мы также благодарим Никиту Китаева и Войцеха Гаевского за многочисленные обсуждения Реформатора, а также Аурко Роя и Ашиша Васвани за многочисленные обсуждения Трансформатора маршрутизации.
Новая архитектура нейронной сети для понимания языков
Декодер работает аналогично, но генерирует по одному слову слева направо. Он касается не только других ранее сгенерированных слов, но и окончательных представлений, созданных кодировщиком. Поток информации
Помимо вычислительной производительности и более высокой точности, еще одним интригующим аспектом преобразователя является то, что мы можем визуализировать, на какие другие части предложения сеть обращает внимание при обработке или переводе данного слова, таким образом получая представление о том, как распространяется информация через сеть.
Чтобы проиллюстрировать это, мы выбрали пример, связанный с явлением, которое, как известно, является сложным для систем машинного перевода: разрешение кореферентности. Рассмотрим следующие предложения и их французский перевод:
Распределение собственного внимания кодировщика для слова «оно» с 5-го по 6-й уровень Трансформатора, обученного переводу с английского на французский (одна из восьми голов внимания). |
Фактически, с небольшой адаптацией, та же сеть, которую мы использовали для перевода с английского на немецкий, превзошла все ранее предложенные подходы к синтаксическому анализу, кроме одного.
Следующие шаги
Мы очень взволнованы будущим потенциалом Transformer и уже начали применять его для решения других задач, связанных не только с естественным языком, но и с очень разными входами и выходами, такими как изображения и видео.Наши текущие эксперименты значительно ускоряются библиотекой Tensor2Tensor, исходный код которой мы недавно открыли. Фактически, после загрузки библиотеки вы можете обучить свои собственные сети Transformer для перевода и синтаксического анализа, вызвав всего несколько команд. Мы надеемся, что вы попробуете, и с нетерпением ждем возможности увидеть, что сообщество может сделать с Transformer.
Благодарности
Это исследование проводили Ашиш Васвани, Ноам Шазир, Ники Пармар, Якоб Ушкорейт, Ллион Джонс, Эйдан Н.Гомес, Лукаш Кайзер и Илья Полосухин. Дополнительная благодарность Дэвиду Ченеллу за создание приведенной выше анимации.
. Нейронные сети, в частности рекуррентные нейронные сети (RNN), в настоящее время составляют основу ведущих подходов к решению задач понимания языка, таких как языковое моделирование, машинный перевод и ответы на вопросы. В статье «Внимание — это все, что вам нужно» мы представляем Transformer, новую архитектуру нейронной сети, основанную на механизме самовнимания, который, по нашему мнению, особенно хорошо подходит для понимания языка.
В нашей статье мы показываем, что Transformer превосходит как рекуррентные, так и сверточные модели в тестах перевода с академического английского на немецкий и с английского на французский. Помимо более высокого качества перевода, Transformer требует меньше вычислений для обучения и намного лучше подходит для современного оборудования машинного обучения, ускоряя обучение на порядок.
Показатели BLEU (чем выше, тем лучше) отдельных моделей в стандартном тесте перевода WMT newstest2014 с английского на немецкий. |
Показатели BLEU (чем выше, тем лучше) отдельных моделей в стандартном тесте перевода WMT newstest2014 с английского на французский. |
Нейронные сети обычно обрабатывают язык, генерируя представления в векторном пространстве фиксированной или переменной длины. Начав с представлений отдельных слов или даже частей слов, они собирают информацию из окружающих слов, чтобы определить значение заданной части языка в контексте.Например, чтобы выбрать наиболее вероятное значение и подходящее представление слова «банк» в предложении «Я прибыл в банк после пересечения…», необходимо знать, заканчивается ли предложение словом «… дорога». или «… река».
RNN в последние годы стали типичной сетевой архитектурой для перевода, обрабатывая язык последовательно слева направо или справа налево. При чтении одного слова за раз это вынуждает RNN выполнять несколько шагов для принятия решений, которые зависят от слов, находящихся далеко друг от друга.Обрабатывая приведенный выше пример, RNN может определить, что «берег», скорее всего, относится к берегу реки, только после пошагового чтения каждого слова между «берегом» и «рекой». Предыдущие исследования показали, что, грубо говоря, чем больше требуются такие шаги для принятия решений, тем сложнее повторяющейся сети научиться принимать эти решения.
Последовательный характер RNN также затрудняет полное использование преимуществ современных быстрых вычислительных устройств, таких как TPU и графические процессоры, которые превосходны при параллельной, а не последовательной обработке.Сверточные нейронные сети (CNN) намного менее последовательны, чем RNN, но в архитектурах CNN, таких как ByteNet или ConvS2S, количество шагов, необходимых для объединения информации из удаленных частей входных данных, по-прежнему растет с увеличением расстояния.
Трансформатор
Напротив, Трансформатор выполняет только небольшое постоянное количество шагов (выбирается эмпирически). На каждом этапе он применяет механизм самовнимания, который непосредственно моделирует отношения между всеми словами в предложении, независимо от их положения.В предыдущем примере «Я прибыл на берег после перехода через реку», чтобы определить, что слово «берег» относится к берегу реки, а не к финансовому учреждению, Трансформатор может научиться сразу же обращать внимание на слово «река» и примите это решение за один шаг. Фактически, в нашей модели перевода с английского на французский мы наблюдаем именно такое поведение.
Более конкретно, чтобы вычислить следующее представление для данного слова — например, «банк» — Transformer сравнивает его с каждым другим словом в предложении.Результатом этих сравнений является оценка внимания к каждому второму слову в предложении. Эти оценки внимания определяют, насколько каждое из других слов должно способствовать следующему представлению слова «банк». В этом примере устраняющая неоднозначность «река» может получить высокий балл внимания при вычислении нового представления для «банка». Затем оценки внимания используются в качестве весов для средневзвешенного значения представлений всех слов, которое подается в полностью подключенную сеть для создания нового представления для слова «берег», отражающего, что в предложении говорится о берегу реки.
Анимация ниже показывает, как мы применяем Transformer к машинному переводу. Нейронные сети для машинного перевода обычно содержат кодировщик, считывающий входное предложение и генерирующий его представление. Затем декодер генерирует выходное предложение слово за словом, обращаясь к представлению, сгенерированному кодером. Преобразователь начинает с генерации начальных представлений или вложений для каждого слова. Они представлены незакрашенными кружками. Затем, используя самовнимание, он собирает информацию из всех других слов, генерируя новое представление для каждого слова, информированное всем контекстом, представленным заполненными шариками.Затем этот шаг повторяется несколько раз параллельно для всех слов, последовательно генерируя новые представления.
Поток информации
Помимо вычислительной производительности и более высокой точности, еще одним интригующим аспектом преобразователя является то, что мы можем визуализировать, на какие другие части предложения сеть обращает внимание при обработке или переводе данного слова, таким образом получая представление о том, как распространяется информация через сеть.
Чтобы проиллюстрировать это, мы выбрали пример, связанный с явлением, которое, как известно, является сложным для систем машинного перевода: разрешение кореферентности. Рассмотрим следующие предложения и их французский перевод:
Распределение собственного внимания кодировщика для слова «оно» с 5-го по 6-й уровень Трансформатора, обученного переводу с английского на французский (одна из восьми голов внимания). |
Фактически, с небольшой адаптацией, та же сеть, которую мы использовали для перевода с английского на немецкий, превзошла все ранее предложенные подходы к синтаксическому анализу, кроме одного.
Следующие шаги
Мы очень взволнованы будущим потенциалом Transformer и уже начали применять его для решения других задач, связанных не только с естественным языком, но и с очень разными входами и выходами, такими как изображения и видео.Наши текущие эксперименты значительно ускоряются библиотекой Tensor2Tensor, исходный код которой мы недавно открыли. Фактически, после загрузки библиотеки вы можете обучить свои собственные сети Transformer для перевода и синтаксического анализа, вызвав всего несколько команд. Мы надеемся, что вы попробуете, и с нетерпением ждем возможности увидеть, что сообщество может сделать с Transformer.
Благодарности
Это исследование проводили Ашиш Васвани, Ноам Шазир, Ники Пармар, Якоб Ушкорейт, Ллион Джонс, Эйдан Н.Гомес, Лукаш Кайзер и Илья Полосухин. Дополнительная благодарность Дэвиду Ченеллу за создание приведенной выше анимации.
Модели кодировщика-декодера на базе трансформатора
! Pip install трансформаторы == 4.2.1
! pip install фраза == 0.1.95
Модель кодировщика-декодера на базе трансформатора была представлена Васвани. и другие. в знаменитом Attention — это все, что вам нужно бумага и сегодня де-факто стандартная архитектура кодера-декодера при обработке естественного языка (НЛП).
В последнее время было проведено много исследований различных предварительных тренировок объективы для моделей кодеров-декодеров на базе трансформаторов, например Т5, Барт, Пегас, ProphetNet, Мардж, и т. Д. …, но модель архитектуры остался в основном прежним.
Цель сообщения в блоге — дать подробное объяснение , как модели архитектуры кодера-декодера на основе трансформатора от последовательности к последовательности проблем.Сфокусируемся на математической модели определяется архитектурой и тем, как модель может использоваться для вывода. Попутно мы дадим некоторую справочную информацию о последовательности в последовательность. модели в NLP и разбить кодер-декодер на основе трансформатора архитектура в его кодер и декодер частей. Мы предоставляем много иллюстрации и установить связь между теорией модели кодеров-декодеров на базе трансформаторов и их практическое применение в 🤗Трансформаторы для вывода.Обратите внимание, что это сообщение в блоге , а не объясняет как такие модели можно обучить — это тема будущего блога Почта.
Модели кодеров-декодеров на базе трансформаторов являются результатом многолетней Исследование представлений , обучение моделей и архитектур . Этот Блокнот содержит краткое изложение истории нейронных кодировщики-декодеры модели. Для получения дополнительной информации читателю рекомендуется прочитать этот замечательный блог опубликовать Себастион Рудер. Кроме того, базовое понимание архитектура самовнимания рекомендуется.Следующее сообщение в блоге автора Джей Аламмар служит хорошим напоминанием об оригинальной модели Transformer. здесь.
На момент написания этого блокнота «Трансформеры включают кодировщик-декодер моделей T5 , Bart , MarianMT и Pegasus , которые кратко описаны в документации по модели резюме.
Ноутбук разделен на четыре части:
- Предпосылки — Краткая история моделей нейронных кодировщиков-декодеров дается с акцентом на модели на основе RNN.
- Кодер-декодер — Модель кодера-декодера на основе трансформатора представлена и объясняется, как модель используется для вывод.
- Энкодер — Часть модели энкодера поясняется в деталь.
- Декодер — Декодерная часть модели поясняется в деталь.
Каждая часть основана на предыдущей части, но также может быть прочитана на ее собственный.
ФонЗадачи генерации естественного языка (NLG), подполе NLP, являются лучшими выражаются как задачи от последовательности к последовательности.Такие задачи можно определить как поиск модели, которая отображает последовательность входных слов в последовательность целевые слова. Вот некоторые классические примеры: сводка , и перевод . Далее мы предполагаем, что каждое слово закодировано в векторное представление. входные слова nnn могут быть представлены как последовательность входных векторов nnn:
X1: n = {x1,…, xn}. \ Mathbf {X} _ {1: n} = \ {\ mathbf {x} _1, \ ldots, \ mathbf {x} _n \}. X1: n = {x1,…, xn}.
Следовательно, проблемы от последовательности к последовательности могут быть решены путем нахождения отображение fff из входной последовательности nnn векторов X1: n \ mathbf {X} _ {1: n} X1: n в последовательность целевых векторов mmm Y1: m \ mathbf {Y} _ {1: m} Y1: m, тогда как число векторов-мишеней ммм априори неизвестен и зависит от входных данных последовательность:
f: X1: n → Y1: m.22 для решения задач от последовательности к последовательности следовательно, означает, что количество целевых векторов mmm должно быть известно apriori и должен быть независимым от ввода X1: n \ mathbf {X} _ {1: n} X1: n. Это неоптимально, потому что для задач в NLG количество целевых слов обычно зависит от ввода X1: n \ mathbf {X} _ {1: n} X1: n и не только на входной длине nnn. Например. , статья 1000 слов можно суммировать как до 200 слов, так и до 100 слов в зависимости от его содержание.
В 2014 г. Cho et al.33. После обработки последнего входного вектора xn \ mathbf {x} _nxn, Скрытое состояние кодировщика определяет входную кодировку c \ mathbf {c} c. Таким образом, кодировщик определяет отображение:
fθenc: X1: n → c. f _ {\ theta_ {enc}}: \ mathbf {X} _ {1: n} \ to \ mathbf {c}. fθenc: X1: n → c.
Затем скрытое состояние декодера инициализируется входной кодировкой. и во время логического вывода декодер RNN используется для авторегрессивного генерировать целевую последовательность. Поясним.
Математически декодер определяет распределение вероятностей целевая последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m с учетом скрытого состояния c \ mathbf {c} c:
pθdec (Y1: m∣c).{m} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}). pθdec (Y1: m ∣c) = i = 1∏m pθdec (yi ∣Y0: i − 1, c).
Таким образом, если архитектура может моделировать условное распределение следующий целевой вектор, учитывая все предыдущие целевые векторы:
pθdec (yi∣Y0: i − 1, c), ∀i∈ {1,…, m}, p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}), \ forall i \ in \ {1, \ ldots, m \}, pθdec (yi ∣Y0: i − 1, c), ∀ i∈ {1,…, m},
, то он может моделировать распределение любой последовательности целевого вектора, заданной скрытое состояние c \ mathbf {c} c путем простого умножения всех условных вероятности.
Так как же модель архитектуры декодера на основе RNN pθdec (yi∣Y0: i − 1, c) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ { 0: i-1}, \ mathbf {c}) pθdec (yi ∣Y0: i − 1, c)?
С точки зрения вычислений, модель последовательно отображает предыдущий внутренний скрытое состояние ci − 1 \ mathbf {c} _ {i-1} ci − 1 и предыдущий целевой вектор yi \ mathbf {y} _iyi до текущего внутреннего скрытого состояния ci \ mathbf {c} _ici и a вектор логита li \ mathbf {l} _ili (показано темно-красным цветом ниже):
fθdec (yi − 1, ci − 1) → li, ci.f _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _ {i-1}, \ mathbf {c} _ {i-1}) \ to \ mathbf {l} _i, \ mathbf {c } _i.fθdec (yi − 1, ci − 1) → li, ci. c0 \ mathbf {c} _0c0 таким образом определяется как c \ mathbf {c} c, являющийся выходом скрытое состояние кодировщика на основе RNN. Впоследствии softmax используется для преобразования вектора логита li \ mathbf {l} _ili в условное распределение вероятностей следующего целевого вектора:
p (yi∣li) = Softmax (li), где li = fθdec (yi − 1, cprev). p (\ mathbf {y} _i | \ mathbf {l} _i) = \ textbf {Softmax} (\ mathbf {l} _i), \ text {with} \ mathbf {l} _i = f _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _ {i-1}, \ mathbf {c} _ {\ text {prev}}).44. Из приведенного выше уравнения мы можно видеть, что распределение текущего целевого вектора yi \ mathbf {y} _iyi напрямую обусловлено предыдущим целевым вектором yi − 1 \ mathbf {y} _ {i-1} yi − 1 и предыдущим скрытым состоянием ci −1 \ mathbf {c} _ {i-1} ci − 1. Поскольку предыдущее скрытое состояние ci − 1 \ mathbf {c} _ {i-1} ci − 1 зависит от всех предыдущие целевые векторы y0,…, yi − 2 \ mathbf {y} _0, \ ldots, \ mathbf {y} _ {i-2} y0,…, yi − 2, он может быть заявлено, что декодер на основе RNN неявно ( например, косвенно ) моделирует условное распределение pθdec (yi∣Y0: i − 1, c) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}) pθdec (yi ∣Y0: i − 1, c).55, которые эффективно выбирают целевой вектор с высокой вероятностью последовательности из pθdec (Y1: m∣c) p _ {\ theta_ {dec}} (\ mathbf {Y} _ {1: m} | \ mathbf {c}) pθdec (Y1: m ∣c).
При таком методе декодирования во время вывода следующий входной вектор yi \ mathbf {y} _iyi может затем быть выбран из pθdec (yi∣Y0: i − 1, c) p _ {\ theta _ {\ text {dec}} } (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}) pθdec (yi ∣Y0: i − 1, c) и, следовательно, добавляется к входной последовательности, так что декодер Затем RNN моделирует pθdec (yi + 1∣Y0: i, c) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _ {i + 1} | \ mathbf {Y} _ {0: i }, \ mathbf {c}) pθdec (yi + 1 ∣Y0: i, c) для выборки следующего входного вектора yi + 1 \ mathbf {y} _ {i + 1} yi + 1 и т. д. в авторегрессивный мод.
Важной особенностью моделей кодеров-декодеров на основе RNN является определение специальных векторов , таких как вектор EOS \ text {EOS} EOS и BOS \ text {BOS} BOS. Вектор EOS \ text {EOS} EOS часто представляет собой окончательный входной вектор xn \ mathbf {x} _nxn, чтобы «указать» кодировщику, что вход последовательность закончилась, а также определяет конец целевой последовательности. В качестве как только EOS \ text {EOS} EOS выбирается из вектора логита, генерация завершено. Вектор BOS \ text {BOS} BOS представляет собой входной вектор y0 \ mathbf {y} _0y0, подаваемый в декодер RNN на самом первом этапе декодирования.Для вывода первого логита l1 \ mathbf {l} _1l1 требуется ввод, и поскольку на первом шаге не было создано никаких входных данных. специальный BOS \ text {BOS} BOS входной вектор поступает на декодер RNN. Хорошо — довольно сложно! Давайте проиллюстрируйте и рассмотрите пример.
Развернутый кодировщик RNN окрашен в зеленый цвет, а развернутый RNN декодер окрашен в красный цвет.
Английское предложение «Я хочу купить машину», представленное как x1 = I \ mathbf {x} _1 = \ text {I} x1 = I, x2 = want \ mathbf {x} _2 = \ text {want} x2 = хочу, x3 = to \ mathbf {x} _3 = \ text {to} x3 = to, x4 = buy \ mathbf {x} _4 = \ text {buy} x4 = buy, x5 = a \ mathbf {x} _5 = \ text {a} x5 = a, x6 = car \ mathbf {x} _6 = \ text {car} x6 = car и x7 = EOS \ mathbf {x} _7 = \ text {EOS} x7 = EOS переводится на немецкий: «Ich will ein Auto kaufen «определяется как y0 = BOS \ mathbf {y} _0 = \ text {BOS} y0 = BOS, y1 = Ich \ mathbf {y} _1 = \ text {Ich} y1 = Ich, y2 = will \ mathbf {y} _2 = \ text {will} y2 = will, y3 = ein \ mathbf {y} _3 = \ text {ein} y3 = ein, y4 = Auto, y5 = kaufen \ mathbf {y} _4 = \ text {Auto}, \ mathbf {y} _5 = \ text {kaufen} y4 = Auto, y5 = kaufen и y6 = EOS \ mathbf {y} _6 = \ text {EOS} y6 = EOS. 66.На рисунке выше горизонтальная стрелка, соединяющая развернутый кодировщик RNN представляет собой последовательные обновления скрытых штат. Окончательное скрытое состояние кодировщика RNN, представленное c \ mathbf {c} c, затем полностью определяет кодировку входных данных. последовательность и используется как начальное скрытое состояние декодера RNN. Это можно увидеть как преобразование RNN декодера на закодированный вход.
Для генерации первого целевого вектора в декодер загружается BOS \ text {BOS} BOS вектор, показанный как y0 \ mathbf {y} _0y0 на рисунке выше.Цель вектор RNN затем сопоставляется с вектором логита l1 \ mathbf {l} _1l1 с помощью слоя прямой связи LM Head для определения условное распределение первого целевого вектора, как объяснено выше:
pθdec (y∣BOS, c). p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ mathbf {c}). pθdec (y∣BOS, c).
Выбирается слово Ich \ text {Ich} Ich (показано серой стрелкой, соединяющей l1 \ mathbf {l} _1l1 и y1 \ mathbf {y} _1y1) и, следовательно, вторая цель вектор может быть выбран:
будет ∼pθdec (y∣BOS, Ich, c).\ text {will} \ sim p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ text {Ich}, \ mathbf {c}). will∼pθdec (y∣BOS, Ich, c).
И так до тех пор, пока на шаге i = 6i = 6i = 6, вектор EOS \ text {EOS} EOS не будет выбран из l6 \ mathbf {l} _6l6, и декодирование не будет завершено. Результирующая цель последовательность составляет Y1: 6 = {y1,…, y6} \ mathbf {Y} _ {1: 6} = \ {\ mathbf {y} _1, \ ldots, \ mathbf {y} _6 \} Y1: 6 = {y1,…, y6}, что является «Ich will ein Auto kaufen» в нашем примере выше.
Подводя итог, модель кодера-декодера на основе RNN, представленная fθencf _ {\ theta _ {\ text {enc}}} fθenc и pθdec p _ {\ theta _ {\ text {dec}}} pθdec, определяет распределение p (Y1: m∣X1: n) p (\ mathbf {Y} _ {1: m} | \ mathbf {X} _ {1: n}) p (Y1: m ∣X1: n) к факторизация:
pθenc, θdec (Y1: m∣X1: n) = ∏i = 1mpθenc, θdec (yi∣Y0: i − 1, X1: n) = ∏i = 1mpθdec (yi∣Y0: i − 1, c), с c = fθenc (X).{m} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}), \ text {with} \ mathbf {c} = f _ {\ theta_ {enc}} (X). pθenc, θdec (Y1: m ∣X1: n) = i = 1∏m pθenc, θdec (yi ∣Y0: i − 1, X1: n) = i = 1 ∏m pθdec (yi ∣Y0: i − 1, c), где c = fθenc (X).
Во время логического вывода эффективные методы декодирования могут авторегрессивно сгенерировать целевую последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m.
Модель кодера-декодера на основе RNN взяла штурмом сообщество NLG. В В 2016 г. компания Google объявила о полной замене разработанной услуги перевода с помощью единой модели кодировщика-декодера на основе RNN (см. здесь).44 Нейронная сеть может определять распределение вероятностей по всем слова, т.е. p (y∣c, Y0: i − 1) p (\ mathbf {y} | \ mathbf {c}, \ mathbf {Y} _ {0: i-1}) p (y∣c , Y0: i − 1) как следует. Сначала сеть определяет отображение входов c, Y0: i − 1 \ mathbf {c}, \ mathbf {Y} _ {0: i-1} c, Y0: i − 1 во встроенное векторное представление y ′ \ Mathbf {y ‘} y ′, что соответствует целевому вектору RNN. Встроенный векторное представление y ′ \ mathbf {y ‘} y ′ затем передается на «язык модель головы «, что означает, что он умножается на слова. матрица вложения , i.66 Sutskever et al. (2014) меняет порядок ввода так, чтобы в приведенном выше примере ввод векторы будут соответствовать x1 = car \ mathbf {x} _1 = \ text {car} x1 = car, x2 = a \ mathbf {x} _2 = \ text {a} x2 = a, x3 = buy \ mathbf { x} _3 = \ text {buy} x3 = buy, x4 = to \ mathbf {x} _4 = \ text {to} x4 = to, x5 = want \ mathbf {x} _5 = \ text {want} x5 = Хочу, x6 = I \ mathbf {x} _6 = \ text {I} x6 = I и x7 = EOS \ mathbf {x} _7 = \ text {EOS} x7 = EOS. В мотивация состоит в том, чтобы обеспечить более короткую связь между соответствующими пары слов, такие как x6 = I \ mathbf {x} _6 = \ text {I} x6 = I и y1 = Ich \ mathbf {y} _1 = \ text {Ich} y1 = Ich.Исследовательская группа подчеркивает, что обращение входной последовательности было ключевой причиной того, что их модель улучшена производительность машинного перевода.
Кодер-декодерВ 2017 г. Vaswani et al. представил Transformer и тем самым дал Рождение модели преобразователей кодировщиков-декодеров.
Аналогичен моделям кодировщика-декодера на базе RNN, трансформаторный модели кодировщика-декодера состоят из кодировщика и декодера, которые оба стека по блока остаточного внимания .Ключевое нововведение трансформаторные модели кодировщика-декодера заключается в том, что такое остаточное внимание блоки могут обрабатывать входную последовательность X1: n \ mathbf {X} _ {1: n} X1: n переменной длина nnn без отображения повторяющейся структуры. Не полагаясь на рекуррентная структура позволяет преобразовывать кодировщики-декодеры высокая степень распараллеливания, что делает модель на порядки больше вычислительно эффективен, чем модели кодировщика-декодера на основе RNN на современное оборудование.
Напоминаем, что для решения задачи от последовательности к последовательности нам необходимо найти отображение входной последовательности X1: n \ mathbf {X} _ {1: n} X1: n на выход последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m переменной длины mmm.Посмотрим как модели кодеров-декодеров на основе трансформаторов используются для поиска такого отображение.
Подобно моделям кодировщика-декодера на основе RNN, трансформатор на основе модели кодировщика-декодера определяют условное распределение целевых векторы Y1: n \ mathbf {Y} _ {1: n} Y1: n с заданной входной последовательностью X1: n \ mathbf {X} _ {1: n} X1: n:
pθenc, θdec (Y1: m∣X1: n). p _ {\ theta _ {\ text {enc}}, \ theta _ {\ text {dec}}} (\ mathbf {Y} _ {1: m} | \ mathbf {X} _ {1: n}). pθenc, θdec (Y1: m ∣X1: n).
Кодер на основе трансформатора кодирует входную последовательность X1: n \ mathbf {X} _ {1: n} X1: n в последовательность из скрытых состояний X‾1: n \ mathbf {\ overline { X}} _ {1: n} X1: n, таким образом определяя отображение:
fθenc: X1: n → X‾1: n.f _ {\ theta _ {\ text {enc}}}: \ mathbf {X} _ {1: n} \ to \ mathbf {\ overline {X}} _ {1: n}. fθenc: X1: n → X1: n.
Часть декодера на основе трансформатора затем моделирует условное распределение вероятностей последовательности целевых векторов Y1: n \ mathbf {Y} _ {1: n} Y1: n с учетом последовательности закодированных скрытых состояний X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n:
pθdec (Y1: n∣X‾1: n). p _ {\ theta_ {dec}} (\ mathbf {Y} _ {1: n} | \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: n ∣X1: n ).
По правилу Байеса это распределение можно разложить на множители условное распределение вероятностей целевого вектора yi \ mathbf {y} _iyi учитывая закодированные скрытые состояния X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и все предыдущие целевые векторы Y0: i − 1 \ mathbf {Y} _ {0: i-1} Y0: i − 1:
pθdec (Y1: n∣X‾1: n) = ∏i = 1npθdec (yi∣Y0: i − 1, X‾1: n).{n} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: n ∣X1: n) = i = 1∏n pθdec (yi ∣Y0: i − 1, X1: n).
Трансформаторный декодер тем самым отображает последовательность закодированных скрытых указывает X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и все предыдущие целевые векторы Y0: i − 1 \ mathbf {Y} _ {0: i-1} Y0: i − 1 в вектор logit li \ mathbf {l} _ili. Логит вектор li \ mathbf {l} _ili затем обрабатывается операцией softmax для определить условное распределение pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i -1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n), так же, как это делается для декодеров на основе RNN.Однако в отличие от Декодеры на основе RNN, распределение целевого вектора yi \ mathbf {y} _iyi равно , явно (или напрямую) обусловлено всеми предыдущими целевыми векторами y0,…, yi − 1 \ mathbf {y} _0, \ ldots, \ mathbf {y} _ {i-1} y0,…, yi − 1 Как мы увидим позже деталь. 0-й целевой вектор y0 \ mathbf {y} _0y0 настоящим представлен специальный «начало предложения» BOS \ text {BOS} вектор BOS.
Определив условное распределение pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0 : i-1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n), теперь мы можем авторегрессивно сгенерировать вывод и, таким образом, определить отображение входной последовательности X1: n \ mathbf {X} _ {1: n} X1: n в выходную последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m при выводе.
Давайте визуализируем полный процесс авторегрессивной генерации модели кодеров-декодеров на базе трансформатора.
Трансформаторный энкодер окрашен в зеленый цвет, а Трансформаторный декодер окрашен в красный цвет. Как и в предыдущем разделе, мы показываем, как английское предложение «Я хочу купить машину», представленное как x1 = I \ mathbf {x} _1 = \ text {I} x1 = I, x2 = want \ mathbf {x} _2 = \ text { want} x2 = want, x3 = to \ mathbf {x} _3 = \ text {to} x3 = to, x4 = buy \ mathbf {x} _4 = \ text {buy} x4 = buy, x5 = a \ mathbf {x} _5 = \ text {a} x5 = a, x6 = car \ mathbf {x} _6 = \ text {car} x6 = car и x7 = EOS \ mathbf {x} _7 = \ text {EOS} x7 = EOS переводится на немецкий: «Ich will ein Auto kaufen «определяется как y0 = BOS \ mathbf {y} _0 = \ text {BOS} y0 = BOS, y1 = Ich \ mathbf {y} _1 = \ text {Ich} y1 = Ich, y2 = will \ mathbf {y} _2 = \ text {will} y2 = will, y3 = ein \ mathbf {y} _3 = \ text {ein} y3 = ein, y4 = Auto, y5 = kaufen \ mathbf {y} _4 = \ text {Auto}, \ mathbf {y} _5 = \ text {kaufen} y4 = Auto, y5 = kaufen и y6 = EOS \ mathbf {y} _6 = \ text {EOS} y6 = EOS.
Сначала кодировщик обрабатывает всю входную последовательность X1: 7 \ mathbf {X} _ {1: 7} X1: 7 = «Я хочу купить машину» (представлен светом зеленые векторы) в контекстуализированную кодированную последовательность X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7. Например. x‾4 \ mathbf {\ overline {x}} _ 4×4 определяет кодировка, которая зависит не только от ввода x4 \ mathbf {x} _4x4 = «buy», но и все остальные слова «я», «хочу», «к», «а», «машина» и «EOS», т.е. контекст.
Затем входная кодировка X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7 вместе с BOS вектор, i.е. y0 \ mathbf {y} _0y0, подается на декодер. Декодер обрабатывает входные данные X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7 и y0 \ mathbf {y} _0y0, чтобы первый логит l1 \ mathbf {l} _1l1 (показан более темным красным) для определения условное распределение первого целевого вектора y1 \ mathbf {y} _1y1:
pθenc, dec (y∣y0, X1: 7) = pθenc, dec (y∣BOS, я хочу купить автомобиль EOS) = pθdec (y∣BOS, X‾1: 7). p _ {\ theta_ {enc, dec}} (\ mathbf {y} | \ mathbf {y} _0, \ mathbf {X} _ {1: 7}) = p _ {\ theta_ {enc, dec}} (\ mathbf {y} | \ text {BOS}, \ text {Я хочу купить машину EOS}) = p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ mathbf {\ overline { X}} _ {1: 7}).pθenc, dec (y∣y0, X1: 7) = pθenc, dec (y∣BOS, я хочу купить машину EOS) = pθdec (y∣BOS, X1: 7).
Затем выбирается первый целевой вектор y1 \ mathbf {y} _1y1 = Ich \ text {Ich} Ich из распределения (обозначено серыми стрелками) и теперь может быть снова подается на декодер. Теперь декодер обрабатывает как y0 \ mathbf {y} _0y0 = «BOS» и y1 \ mathbf {y} _1y1 = «Ich» для определения условного распределение второго целевого вектора y2 \ mathbf {y} _2y2:
pθdec (y∣BOS Ich, X‾1: 7). p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich}, \ mathbf {\ overline {X}} _ {1: 7}).pθdec (y∣BOS Ich, X1: 7).
Мы можем снова выполнить выборку и создать целевой вектор y2 \ mathbf {y} _2y2 = «буду». Мы продолжаем в авторегрессивном режиме до тех пор, пока на шаге 6 не появится EOS. вектор выбирается из условного распределения:
EOS∼pθdec (y∣BOS Ich will ein Auto kaufen, X‾1: 7). \ text {EOS} \ sim p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich будет ein Auto kaufen}, \ mathbf {\ overline {X}} _ {1: 7}). EOS∼pθdec (y∣BOS Ich будет ein Auto kaufen, X1: 7).
И так далее в авторегрессивном режиме.
Важно понимать, что энкодер используется только в первом прямой переход к карте X1: n \ mathbf {X} _ {1: n} X1: n в X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n. Начиная со второго прямого прохода, декодер может напрямую использовать ранее рассчитанная кодировка X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n. Для ясности, давайте проиллюстрируем первый и второй прямой проход для нашего пример выше.
Как видно, только на шаге i = 1i = 1i = 1 мы должны кодировать «Я хочу купить автомобиль EOS «на X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7.На шаге i = 2i = 2i = 2 контекстные кодировки «Я хочу купить машину EOS» просто повторно используется декодером.
В 🤗Трансформаторах это авторегрессивное поколение выполняется под капотом.
при вызове метода .generate ()
. Воспользуемся одним из наших переводов
модели, чтобы увидеть это в действии.
из трансформаторов импортных MarianMTModel, MarianTokenizer
tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
model = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")
input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»).input_ids
output_ids = model.generate (input_ids) [0]
печать (tokenizer.decode (output_ids))
Выход:
Ich will ein Auto kaufen
Вызов .generate ()
многое делает скрытно. Сначала проходит input_ids
в кодировщик. Во-вторых, он передает заранее определенный токен, которым является символ MarianMTModel
вместе с закодированными input_ids
в декодер.11. Более подробно о том, как работает декодирование с поиском луча, можно
посоветовал прочитать этот блог
Почта.
В приложение мы включили фрагмент кода, который показывает, как простая Метод генерации может быть реализован «с нуля». Чтобы полностью понять, как авторегрессивное поколение работает под капотом, это Настоятельно рекомендуется прочитать Приложение.
Подводя итог:
- Кодировщик на основе трансформатора определяет отображение от входа последовательность X1: n \ mathbf {X} _ {1: n} X1: n в контекстуализированную последовательность кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n.
- Трансформаторный декодер определяет условное распределение pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n).
- При соответствующем механизме декодирования выходная последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m может автоматически выбираться из pθdec (yi∣Y0: i − 1, X‾1: n), ∀i∈ {1,…, m} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf { Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}), \ forall i \ in \ {1, \ ldots, m \} pθdec (yi ∣ Y0: i − 1, X1: n), ∀i∈ {1,…, m}.
Отлично, теперь, когда мы получили общий обзор того, как работают модели кодеров-декодеров на базе трансформатора, мы можем погрузиться глубже в
как кодировщик, так и декодер части модели. В частности, мы
увидит, как именно кодировщик использует слой самовнимания
чтобы получить последовательность контекстно-зависимых векторных кодировок и как
Уровни самовнимания позволяют эффективно распараллеливать. Тогда мы будем
подробно объясните, как слой самовнимания работает в декодере
модель и как декодер зависит от выхода кодировщика с перекрестное внимание слоев для определения условного распределения pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf { Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n).11 В случае "Helsinki-NLP / opus-mt-en-de"
декодирование
параметры доступны
здесь,
где мы видим, что модель применяет поиск луча с num_beams = 6
.
Как упоминалось в предыдущем разделе, энкодер на базе трансформатора отображает входную последовательность в контекстуализированную последовательность кодирования:
fθenc: X1: n → X‾1: n. 11.Двунаправленный Слой самовнимания помещает каждый входной вектор x′j, ∀j∈ {1,…, n} \ mathbf {x ‘} _ j, \ forall j \ in \ {1, \ ldots, n \} x′j, ∀j∈ {1,…, n} по отношению ко всем входные векторы x′1,…, x′n \ mathbf {x ‘} _ 1, \ ldots, \ mathbf {x’} _ nx′1,…, x′n и тем самым преобразует входной вектор x′j \ mathbf {x ‘} _ jx′j в более «изысканный» контекстное представление самого себя, определяемое как x′′j \ mathbf {x »} _ jx′′j. Таким образом, первый блок кодера преобразует каждый входной вектор входная последовательность X1: n \ mathbf {X} _ {1: n} X1: n (показана светло-зеленым цветом ниже) из контекстно-независимое векторное представление в контекстно-зависимое векторное представление, и следующие блоки кодировщика дополнительно уточняют это контекстное представление до тех пор, пока последний блок кодировщика не выдаст окончательное контекстное кодирование X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n (показано более темным зеленый внизу).22.
Наш примерный энкодер на базе трансформатора состоит из трех энкодеров. блоков, тогда как второй блок кодировщика показан более подробно в красный прямоугольник справа для первых трех входных векторов x1, x2andx3 \ mathbf {x} _1, \ mathbf {x} _2 и \ mathbf {x} _3x1, x2 иx3. Двунаправленный Механизм самовнимания проиллюстрирован полносвязным графом в показаны нижняя часть красного поля и два слоя прямой связи. в верхней части красного квадрата.Как было сказано ранее, мы сосредоточимся только на о двунаправленном механизме самовнимания.
Как видно, каждый выходной вектор слоя самовнимания x′′i, ∀i∈ {1,…, 7} \ mathbf {x »} _ i, \ forall i \ in \ {1, \ ldots, 7 \} x′′i, ∀i∈ {1,…, 7} зависит непосредственно от все входных вектора x′1,…, x′7 \ mathbf {x ‘} _ 1, \ ldots, \ mathbf {x’} _ 7x′1,…, x′7. Это означает, например , что входное векторное представление слова «хочу», то есть x′2 \ mathbf {x ‘} _ 2x′2, находится в прямой связи со словом «купить», и.е. x′4 \ mathbf {x ‘} _ 4x′4, но также со словом «I», т.е. x′1 \ mathbf {x’} _ 1x′1. Выходное векторное представление «хочу», , то есть x′′2 \ mathbf {x »} _ 2x′′2, таким образом, представляет собой более точный контекстный представление слова «хочу».
Давайте подробнее рассмотрим, как работает двунаправленное самовнимание. Каждый входной вектор x′i \ mathbf {x ‘} _ ix′i входной последовательности X′1: n \ mathbf {X’} _ {1: n} X′1: n блока кодера проецируется на ключевой вектор ki \ mathbf {k} _iki, вектор значений vi \ mathbf {v} _ivi и вектор запроса qi \ mathbf {q} _iqi (показаны ниже оранжевым, синим и фиолетовым соответственно) с помощью трех обучаемых весовых матриц Wq, Wv, Wk \ mathbf {W} _q, \ mathbf {W} _v, \ mathbf {W} _kWq, Wv, Wk:
qi = Wqx′i, \ mathbf {q} _i = \ mathbf {W} _q \ mathbf {x ‘} _ i, qi = Wq x′i, vi = Wvx′i, \ mathbf {v} _i = \ mathbf {W} _v \ mathbf {x ‘} _ i, vi = Wv x′i, ki = Wkx′i, \ mathbf {k} _i = \ mathbf {W} _k \ mathbf {x ‘} _ i, ki = Wk x′i, ∀i∈ {1,… n}.\ forall i \ in \ {1, \ ldots n \}. ∀i∈ {1,… n}.
Обратите внимание, что одинаковых весовых матриц применяются к каждому входному вектору xi, ∀i∈ {i,…, n} \ mathbf {x} _i, \ forall i \ in \ {i, \ ldots, n \} xi, ∀i∈ {i,…, n}. После проецирования каждого входной вектор xi \ mathbf {x} _ixi в вектор запроса, ключа и значения, каждый вектор запроса qj, ∀j∈ {1,…, n} \ mathbf {q} _j, \ forall j \ in \ {1, \ ldots, n \} qj, ∀j∈ {1,…, n} равен в сравнении ко всем ключевым векторам k1,…, kn \ mathbf {k} _1, \ ldots, \ mathbf {k} _nk1,…, kn. Чем больше похожий один из ключевых векторов k1,… kn \ mathbf {k} _1, \ ldots \ mathbf {k} _nk1,… kn должен вектор запроса qj \ mathbf {q} _jqj, тем важнее соответствующий вектор значений vj \ mathbf {v} _jvj для выходного вектора x′′j \ mathbf {x »} _ jx′′j.\ intercal \ mathbf {q} _j) Softmax (K1: n⊺ qj) как показано в уравнении ниже. Для полного описания слой самовнимания, читателю рекомендуется взглянуть на это сообщение в блоге или исходная бумага.
Хорошо, это звучит довольно сложно. Проиллюстрируем
двунаправленный слой самовнимания для одного из векторов запросов нашего
пример выше. Для простоты предполагается, что наш примерный
Декодер на базе трансформатора использует только одну концентрирующую головку конфиг.num_heads = 1
и что нормализация не применяется.
Слева показан ранее проиллюстрированный второй блок кодера. снова и справа, детальная визуализация двунаправленного Механизм самовнимания дан для второго входного вектора x′2 \ mathbf {x ‘} _ 2x′2, который соответствует входному слову «хочу». Вначале проецируются все входные векторы x′1,…, x′7 \ mathbf {x ‘} _ 1, \ ldots, \ mathbf {x’} _ 7x′1,…, x′7 к соответствующим векторам запросов q1,…, q7 \ mathbf {q} _1, \ ldots, \ mathbf {q} _7q1,…, q7 (вверху фиолетовым цветом показаны только первые три вектора запроса), значение векторы v1,…, v7 \ mathbf {v} _1, \ ldots, \ mathbf {v} _7v1,…, v7 (показаны синим) и ключ векторы k1,…, k7 \ mathbf {k} _1, \ ldots, \ mathbf {k} _7k1,…, k7 (показаны оранжевым).{\ intercal} K1: 7⊺ и q2 \ mathbf {q} _2q2, таким образом, делает его можно сравнить векторное представление «хочу» со всеми другими входные векторные представления «Я», «К», «Купить», «А», «Автомобиль», «EOS», чтобы веса самовнимания отражали важность каждого из другие входные векторные представления x′j, с j ≠ 2 \ mathbf {x ‘} _ j \ text {, с} j \ ne 2x′j, с j = 2 для уточненного представления x′′2 \ mathbf { x »} _ 2x′′2 слова «хочу».
Чтобы лучше понять значение двунаправленного слой самовнимания, предположим, что следующее предложение обрабатывается: « Красивый дом удачно расположен в центре города. где до него легко добраться на общественном транспорте ».Слово «это» относится к «дому», который находится на расстоянии 12 «позиций». В энкодеры на основе трансформатора, двунаправленный слой самовнимания выполняет одну математическую операцию, чтобы поместить входной вектор «дом» во взаимосвязи с входным вектором «оно» (сравните с первая иллюстрация этого раздела). Напротив, в RNN на основе кодировщик, слово, которое находится на расстоянии 12 «позиций», потребует не менее 12 математические операции, означающие, что в кодировщике на основе RNN линейный количество математических операций не требуется.Это делает его много кодировщику на основе RNN сложнее моделировать контекстные представления. Также становится ясно, что энкодер на основе трансформатора гораздо менее склонен к потере важной информации, чем основанный на RNN модель кодер-декодер, поскольку длина последовательности кодирования равна оставил то же самое, , т.е. len (X1: n) = len (X‾1: n) = n \ textbf {len} (\ mathbf {X} _ {1: n}) = \ textbf {len} (\ mathbf {\ overline {X}} _ {1: n}) = nlen (X1: n) = len (X1: n) = n, в то время как RNN сжимает длину из ∗ len ((X1: n) = n * \ textbf {len} ((\ mathbf {X} _ {1: n}) = n ∗ len ((X1: n) = n просто len (c) = 1 \ textbf {len} (\ mathbf {c}) = 1len (c) = 1, что очень затрудняет работу RNN для эффективного кодирования дальнодействующих зависимостей между входными словами.\ intercal \ mathbf {K} _ {1: n}) + \ mathbf {X ‘} _ {1: n}. X′′1: n = V1: n Softmax (Q1: n⊺ K1: n) + X′1: n.
Выходные данные X′′1: n = x′′1,…, x′′n \ mathbf {X »} _ {1: n} = \ mathbf {x »} _ 1, \ ldots, \ mathbf { x »} _ nX′′1: n = x′′1,…, x′′n вычисляется с помощью серии умножений матриц и softmax операция, которую можно эффективно распараллелить. Обратите внимание, что в Модель кодировщика на основе RNN, вычисление скрытого состояния c \ mathbf {c} c должно выполняться последовательно: вычисление скрытого состояния первый входной вектор x1 \ mathbf {x} _1x1, затем вычислить скрытое состояние второй входной вектор, который зависит от скрытого состояния первого скрытого вектор и др.Последовательный характер RNN не позволяет эффективно распараллеливание и делает их более неэффективными по сравнению с модели кодировщиков на базе трансформаторов на современном оборудовании GPU.
Отлично, теперь мы должны лучше понять а) как модели кодировщиков на основе трансформаторов эффективно моделируют контекстные представления и б) как они эффективно обрабатывают длинные последовательности входные векторы.
Теперь давайте напишем небольшой пример кодирующей части нашего MarianMT модели кодировщика-декодера
для проверки того, что объясненная теория
выполняется на практике.11 Подробное объяснение роли слоев прямой связи
в трансформаторных моделях выходит за рамки этого ноутбука. это
утверждал в Yun et. al, (2017)
что слои прямой связи имеют решающее значение для сопоставления каждого контекстного вектора x′i \ mathbf {x ‘} _ ix′i индивидуально с желаемым выходным пространством, которое самовнимание слой самостоятельно не справляется. Должен быть
здесь отмечено, что каждый выходной токен x ′ \ mathbf {x ‘} x ′ обрабатывается
тот же слой прямой связи. Подробнее читателю рекомендуется прочитать
бумага.22 Однако входной вектор EOS необязательно добавлять к
входная последовательность, но, как было показано, во многих случаях улучшает производительность.
В отличие от 0-го BOS \ text {BOS} целевой вектор BOS
декодер на основе трансформатора требуется как начальный входной вектор для
предсказать первый целевой вектор.
из трансформаторов импортных MarianMTModel, MarianTokenizer
импортный фонарик
tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
модель = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")
вложения = модель.get_input_embeddings ()
input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»). input_ids
encoder_hidden_states = model.base_model.encoder (input_ids, return_dict = True) .last_hidden_state
input_ids_perturbed = tokenizer («Я хочу купить дом», return_tensors = «pt»). input_ids
encoder_hidden_states_perturbed = model.base_model.encoder (input_ids_perturbed, return_dict = True) .last_hidden_state
print (f "Длина вложений ввода {вложений (input_ids).форма [1]}. Длина encoder_hidden_states {encoder_hidden_states.shape [1]} ")
print ("Кодировка для` I` равна его возмущенной версии ?: ", torch.allclose (encoder_hidden_states [0, 0], encoder_hidden_states_perturbed [0, 0], atol = 1e-3))
Выходы:
Длина вложений ввода 7. Длина encoder_hidden_states 7
Кодировка для `I` равна его возмущенной версии ?: False
Сравниваем длину вложений входных слов, i.е. вложений (input_ids)
, соответствующие X1: n \ mathbf {X} _ {1: n} X1: n, с
длина encoder_hidden_states
, соответствующая X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n. Кроме того, мы переадресовали последовательность слов
«Хочу купить машину» и немного возмущенный вариант «Хочу
купить дом «через кодировщик, чтобы проверить, есть ли первая выходная кодировка,
соответствует «I», отличается, когда в
входная последовательность.
Как и ожидалось, выходная длина вложений входного слова и кодировщика выходные кодировки, i.е. len (X1: n) \ textbf {len} (\ mathbf {X} _ {1: n}) len (X1: n) и len (X‾1: n) \ textbf {len} (\ mathbf { \ overline {X}} _ {1: n}) len (X1: n), равно. Во-вторых, это может быть отметил, что значения закодированного выходного вектора x‾1 = «I» \ mathbf {\ overline {x}} _ 1 = \ text {«I»} x1 = «I» отличаются, когда последнее слово меняется с «автомобиль» на «дом». Однако это не должно вызывать сюрприз, если кто-то понял двунаправленное самовнимание.
Кстати, модели с автокодированием , такие как BERT, имеют точно такие же архитектура как модели кодировщика на базе трансформатора. Автокодирование модели используют эту архитектуру для массового самоконтроля предварительное обучение текстовых данных в открытом домене, чтобы они могли сопоставить любое слово последовательность к глубокому двунаправленному представлению. В Devlin et al. (2018) авторы показывают, что предварительно обученная модель BERT с одним классификационным слоем для конкретной задачи сверху может достичь результатов SOTA по одиннадцати задачам НЛП. Все автокодирование модели 🤗Трансформаторов можно найти здесь.
ДекодерКак упоминалось в разделе Encoder-Decoder , преобразователь на основе трансформатора декодер определяет условное распределение вероятностей цели последовательность с учетом контекстуализированной кодирующей последовательности:
pθdec (Y1: m∣X‾1: n), p _ {\ theta_ {dec}} (\ mathbf {Y} _ {1: m} | \ mathbf {\ overline {X}} _ {1: n} ), pθdec (Y1: m ∣X1: n),
, который по правилу Байеса можно разложить на произведение условного распределения следующего целевого вектора с учетом контекстуализированного кодирующая последовательность и все предыдущие целевые векторы:
pθdec (Y1: m∣X‾1: n) = ∏i = 1mpθdec (yi∣Y0: i − 1, X‾1: n).{m} p _ {\ theta_ {dec}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: m ∣X1: n) = i = 1∏m pθdec (yi ∣Y0: i − 1, X1: n).
Давайте сначала разберемся, как декодер на основе трансформатора определяет распределение вероятностей. Трансформаторный декодер представляет собой набор блоки декодера , за которыми следует плотный слой, «голова LM». Стек блоков декодера сопоставляет контекстуализированную последовательность кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и последовательность целевого вектора с добавлением вектор BOS \ text {BOS} BOS и переход к последнему целевому вектору i.е. Y0: i − 1 \ mathbf {Y} _ {0: i-1} Y0: i − 1, в закодированную последовательность целевых векторов Y‾0: i − 1 \ mathbf {\ overline {Y}} _ {0: i-1} Y0: i-1. Затем «голова LM» отображает закодированные последовательность целевых векторов Y‾0: i − 1 \ mathbf {\ overline {Y}} _ {0: i-1} Y0: i − 1 до a последовательность логит-векторов L1: n = l1,…, ln \ mathbf {L} _ {1: n} = \ mathbf {l} _1, \ ldots, \ mathbf {l} _nL1: n = l1,…, ln, тогда как размерность каждого логит-вектора li \ mathbf {l} _ili соответствует размер словарного запаса. {\ intercal} \ mathbf {\ overline {y}} _ {i-1 }) = Softmax (Wemb⊺ y i − 1) = Softmax (li).= \ text {Softmax} (\ mathbf {l} _i). = Softmax (li).
Собираем все вместе, чтобы смоделировать условное распределение последовательности целевых векторов Y1: m \ mathbf {Y} _ {1: m} Y1: m, целевые векторы Y1: m − 1 \ mathbf {Y} _ {1: m-1} Y1: m − 1 Добавляется специальным вектором BOS \ text {BOS} BOS, , то есть y0 \ mathbf {y} _0y0, сначала отображаются вместе с контекстуализированными кодирующая последовательность X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n в вектор логита последовательность L1: m \ mathbf {L} _ {1: m} L1: m. Следовательно, каждый целевой вектор логита li \ mathbf {l} _ili преобразуется в условную вероятность распределение целевого вектора yi \ mathbf {y} _iyi с использованием softmax операция.{m} p _ {\ theta_ {dec}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: m ∣X1: n) = i = 1∏m pθdec (yi ∣Y0: i − 1, X1: n).
В отличие от трансформаторных энкодеров, в трансформаторных декодеры, закодированный выходной вектор y‾i \ mathbf {\ overline {y}} _ iy i должен быть хорошее представление следующего целевого вектора yi + 1 \ mathbf {y} _ {i + 1} yi + 1 и не самого входного вектора. Кроме того, закодированный выходной вектор y‾i \ mathbf {\ overline {y}} _ iy i должен быть обусловлен всеми контекстными кодирующая последовательность X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n.22. Слой однонаправленного самовнимания. ставит каждый из своих входных векторов y′j \ mathbf {y ‘} _ jy′j только во взаимосвязь с все предыдущие входные векторы y′i, с i≤j \ mathbf {y ‘} _ i, \ text {with} i \ le jy′i, с i≤j для все j∈ {1,…, n} j \ in \ {1, \ ldots, n \} j∈ {1,…, n} для моделирования распределения вероятностей следующие целевые векторы. Слой перекрестного внимания помещает каждый из входные векторы y′′j \ mathbf {y »} _ jy′′j во взаимосвязи со всеми контекстуализированными кодирующие векторы X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n, чтобы обусловить распределение вероятностей следующих целевых векторов на входе кодировщик тоже.
Хорошо, давайте визуализируем декодер на основе трансформатора для нашего Пример перевода с английского на немецкий.
Мы видим, что декодер отображает вход Y0: 5 \ mathbf {Y} _ {0: 5} Y0: 5 «BOS», «Ich», «will», «ein», «Auto», «kaufen» (показаны светло-красным) вместе с контекстуализированной последовательностью «я», «хочу», «к», «купить», «а», «автомобиль», «EOS», т.е. X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7 (показано темно-зеленым) в векторы логита L1: 6 \ mathbf {L} _ {1: 6} L1: 6 (показано на темно-красный).
Применение операции softmax к каждому l1, l2,…, l5 \ mathbf {l} _1, \ mathbf {l} _2, \ ldots, \ mathbf {l} _5l1, l2,…, l5 может таким образом определить условные распределения вероятностей:
pθdec (y∣BOS, X‾1: 7), p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ mathbf {\ overline {X}} _ {1: 7} ), pθdec (y∣BOS, X1: 7), pθdec (y∣BOS Ich, X‾1: 7), p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich}, \ mathbf {\ overline {X}} _ {1: 7 }), pθdec (y∣BOS Ich, X1: 7), …, \ Ldots,…, pθdec (y∣BOS Ich будет ein Auto kaufen, X‾1: 7). p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich будет ein Auto kaufen}, \ mathbf {\ overline {X}} _ {1: 7}).pθdec (y∣BOS Ich будет ein Auto kaufen, X1: 7).
Общая условная вероятность:
pθdec (Ich будет ein Auto kaufen EOS∣X‾1: n) p _ {\ theta_ {dec}} (\ text {Ich будет ein Auto kaufen EOS} | \ mathbf {\ overline {X}} _ {1: n }) pθdec (Ich будет ein Auto kaufen EOS∣X1: n)
Следовательно,может быть вычислено как следующее произведение:
pθdec (Ich∣BOS, X‾1: 7) ×… × pθdec (EOS∣BOS Ich будет ein Auto kaufen, X‾1: 7). p _ {\ theta_ {dec}} (\ text {Ich} | \ text {BOS}, \ mathbf {\ overline {X}} _ {1: 7}) \ times \ ldots \ times p _ {\ theta_ {dec} } (\ text {EOS} | \ text {BOS Ich будет ein Auto kaufen}, \ mathbf {\ overline {X}} _ {1: 7}).pθdec (Ich∣BOS, X1: 7) ×… × pθdec (EOS∣BOS Ich будет использовать Auto kaufen, X1: 7).
В красном поле справа показан блок декодера для первых трех целевые векторы y0, y1, y2 \ mathbf {y} _0, \ mathbf {y} _1, \ mathbf {y} _2y0, y1, y2. В нижнем части, механизм однонаправленного самовнимания проиллюстрирован и в в центре проиллюстрирован механизм перекрестного внимания. Давай сначала сосредоточьтесь на однонаправленном самовнимании.
Как при двунаправленном самовнимании, при однонаправленном самовнимании, векторы запросов q0,…, qm − 1 \ mathbf {q} _0, \ ldots, \ mathbf {q} _ {m-1} q0,…, qm − 1 (показаны на фиолетовый внизу), ключевые векторы k0,…, km − 1 \ mathbf {k} _0, \ ldots, \ mathbf {k} _ {m-1} k0,…, km − 1 (показаны оранжевым ниже), и векторы значений v0,…, vm − 1 \ mathbf {v} _0, \ ldots, \ mathbf {v} _ {m-1} v0,…, vm − 1 (показаны на синий ниже) проецируются из соответствующих входных векторов y′0,…, y′m − 1 \ mathbf {y ‘} _ 0, \ ldots, \ mathbf {y’} _ {m-1} y′0,…, y′m −1 (показано светло-красным цветом ниже).Однако при однонаправленном самовнимании каждый вектор запроса qi \ mathbf {q} _iqi сравнивается только с его соответствующим ключевым вектором и все предыдущие, а именно k0,…, ki \ mathbf {k} _0, \ ldots, \ mathbf {k} _ik0,…, ki, чтобы получить соответствующие веса внимания . Это предотвращает включение любой информации в выходной вектор y′′j \ mathbf {y »} _ jy′′j (показан темно-красным цветом ниже) о следующем входном векторе yi, с i> j \ mathbf {y} _i, \ text {с} i> jyi, с i> j для все j∈ {0,…, m − 1} j \ in \ {0, \ ldots, m — 1 \} j∈ {0,…, m − 1}.\ intercal \ mathbf {q} _i) + \ mathbf {y ‘} _ i. y′′i = V0: i Softmax (K0: i⊺ qi) + y′i.
Обратите внимание, что диапазон индекса векторов ключей и значений равен 0: i0: i0: i вместо 0: m − 10: m-10: m − 1, который будет диапазоном ключевых векторов в двунаправленное самовнимание.
Давайте проиллюстрируем однонаправленное самовнимание для входного вектора y′1 \ mathbf {y ‘} _ 1y′1 для нашего примера выше.
Как видно, y′′1 \ mathbf {y »} _ 1y′′1 зависит только от y′0 \ mathbf {y ‘} _ 0y′0 и y′1 \ mathbf {y’} _ 1y′1 .Поэтому положим векторное представление слова «Ich», т.е. y′1 \ mathbf {y ‘} _ 1y′1 только в отношении самого себя и Целевой вектор «BOS», , т.е. y′0 \ mathbf {y ‘} _ 0y′0, но не с векторное представление слова «воля», т.е. y′2 \ mathbf {y ‘} _ 2y′2.
Итак, почему так важно, чтобы мы использовали однонаправленное самовнимание в декодер вместо двунаправленного самовнимания? Как указано выше, декодер на основе трансформатора определяет отображение из последовательности ввода вектор Y0: m − 1 \ mathbf {Y} _ {0: m-1} Y0: m − 1 в логиты, соответствующие следующим входные векторы декодера, а именно L1: m \ mathbf {L} _ {1: m} L1: m.В нашем примере это означает, например, , что отображен входной вектор y1 \ mathbf {y} _1y1 = «Ich» в вектор логита l2 \ mathbf {l} _2l2, который затем используется для прогнозирования входной вектор y2 \ mathbf {y} _2y2. Таким образом, если y′1 \ mathbf {y ‘} _ 1y′1 будет иметь доступ к следующим входным векторам Y′2: 5 \ mathbf {Y ‘} _ {2: 5} Y′2: 5, декодер будет просто скопируйте векторное представление «воли», , т.е. y′2 \ mathbf {y ‘} _ 2y′2, чтобы получить его выход y′′1 \ mathbf {y’ ‘} _ 1y′′1. Это было бы перенаправлен на последний уровень, так что закодированный выходной вектор y‾1 \ mathbf {\ overline {y}} _ 1y 1 по существу просто соответствовал бы векторное представление y2 \ mathbf {y} _2y2.
Это явно невыгодно, поскольку декодер на основе трансформатора никогда не учись предсказывать следующее слово, учитывая все предыдущие слова, а просто скопируйте целевой вектор yi \ mathbf {y} _iyi через сеть в y‾i − 1 \ mathbf {\ overline {y}} _ {i-1} y i − 1 для всех i∈ {1,… , m} i \ in \ {1, \ ldots, m \} i∈ {1,…, m}. В чтобы определить условное распределение следующего целевого вектора, распределение не может быть обусловлено следующим целевым вектором. Нет смысла предсказывать yi \ mathbf {y} _iyi из p (y∣Y0: i, X‾) p (\ mathbf {y} | \ mathbf {Y} _ {0: i}, \ mathbf {\ overline {X}}) p (y∣Y0: i, X), поскольку распределение обусловлено целевым вектором, который предполагается модель.Следовательно, однонаправленная архитектура самовнимания позволяет нам определить причинно-следственное распределение вероятностей , которое необходимо для эффективного моделирования условного распределения следующих целевой вектор.
Отлично! Теперь мы можем перейти к слою, который соединяет кодировщик и декодер — механизм перекрестного внимания !
Слой перекрестного внимания принимает в качестве входных данных две векторные последовательности: выходы слоя однонаправленного самовнимания, i.е. Y′′0: m − 1 \ mathbf {Y »} _ {0: m-1} Y′′0: m − 1 и контекстуализированные векторы кодирования X‾1: n \ mathbf {\ overline {X }} _ {1: n} X1: n. Как и в слое самовнимания, запрос векторы q0,…, qm − 1 \ mathbf {q} _0, \ ldots, \ mathbf {q} _ {m-1} q0,…, qm − 1 являются проекциями выходные векторы предыдущего слоя, , то есть Y′′0: m − 1 \ mathbf {Y »} _ {0: m-1} Y′′0: m − 1. Однако векторы ключа и значения k0,…, km − 1 \ mathbf {k} _0, \ ldots, \ mathbf {k} _ {m-1} k0,…, km − 1 и v0,…, vm −1 \ mathbf {v} _0, \ ldots, \ mathbf {v} _ {m-1} v0,…, vm − 1 — проекции контекстуализированные векторы кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n.Имея определены векторы ключа, значения и запроса, вектор запроса qi \ mathbf {q} _iqi затем сравнивается с все ключевых вектора и используется соответствующая оценка для взвешивания соответствующих векторов значений, как и в случае двунаправленное самовнимание, чтобы дать выходной вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i для всех i∈0,…, m − 1i \ in {0, \ ldots , m-1} i∈0,…, m − 1. \ intercal \ mathbf {q} _i) + \ mathbf {y »} _ я.y ′ ′ ′ i = V1: n Softmax (K1: n⊺ qi) + y′′i.
Обратите внимание, что диапазон индекса векторов ключей и значений равен 1: n1: n1: n соответствует количеству контекстуализированных векторов кодирования.
Давайте визуализируем механизм перекрестного внимания Давайте для ввода вектор y′′1 \ mathbf {y »} _ 1y′′1 для нашего примера выше.
Мы видим, что вектор запроса q1 \ mathbf {q} _1q1 (показан фиолетовым цветом) равен получено из y′′1 \ mathbf {y »} _ 1y′′1 (показано красным) и, следовательно, полагается на вектор представление слова «Ич».Вектор запроса q1 \ mathbf {q} _1q1 затем сравнивается с ключевыми векторами k1,…, k7 \ mathbf {k} _1, \ ldots, \ mathbf {k} _7k1,…, k7 (показаны желтым), соответствующими представление контекстного кодирования всех входных векторов кодировщика X1: n \ mathbf {X} _ {1: n} X1: n = «Я хочу купить автомобиль EOS». Это ставит вектор представление «Ich» в прямую связь со всеми входами кодировщика векторы. Наконец, веса внимания умножаются на значение векторы v1,…, v7 \ mathbf {v} _1, \ ldots, \ mathbf {v} _7v1,…, v7 (показаны бирюзовым) в вывести в дополнение к входному вектору y′′1 \ mathbf {y »} _ 1y′′1 выходной вектор y ′ ′ ′ 1 \ mathbf {y » ‘} _ 1y ′ ′ ′ 1 (показан темно-красным ).
Итак, интуитивно, что именно здесь происходит? Каждый выходной вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i является взвешенной суммой всех проекций значений входы кодировщика v1,…, v7 \ mathbf {v} _ {1}, \ ldots, \ mathbf {v} _7v1,…, v7 плюс вход сам вектор y′′i \ mathbf {y »} _ iy′′i ( см. формулу , проиллюстрированную выше). Ключ механизм понимания следующий: в зависимости от того, насколько похож проекция запроса вектора входного декодера qi \ mathbf {q} _iqi на проекция ключа входного вектора кодировщика kj \ mathbf {k} _jkj, тем более важна проекция значения входного вектора кодировщика vj \ mathbf {v} _jvj.В общих чертах это означает, что чем больше «родственный» входное представление декодера относится к входному представлению кодировщика, больше влияет ли входное представление на выход декодера представление.
Круто! Теперь мы можем увидеть, как эта архитектура хорошо обрабатывает каждый вывод. вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i на взаимодействии между входом кодировщика векторы X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и входной вектор y′′i \ mathbf {y »} _ iy′′i. Еще одно важное наблюдение на этом этапе заключается в том, что архитектура полностью не зависит от количества nnn контекстуализированные векторы кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n, на которых выходной вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i обусловлен.{\ text {cross}} _ {v} Wvcross для получения ключевых векторов k1,…, kn \ mathbf {k} _1, \ ldots, \ mathbf {k} _nk1,…, kn и векторов значений v1 ,…, Vn \ mathbf {v} _1, \ ldots, \ mathbf {v} _nv1,…, vn соответственно используются всеми позиции 1,…, n1, \ ldots, n1,…, n и все векторы значений v1,…, vn \ mathbf {v} _1, \ ldots, \ mathbf {v} _n v1,…, vn суммируются к единственному взвешенный усредненный вектор. Теперь также становится очевидным, почему декодер на основе трансформатора не страдает зависимостью от дальнего действия Проблема, от которой страдает декодер на основе RNN.Потому что каждый декодер логит вектор напрямую зависит от каждого отдельного закодированного выходного вектора, количество математических операций для сравнения первого закодированного выходной вектор и последний логит-вектор декодера составляют по существу только один.
В заключение, однонаправленный слой самовнимания отвечает за согласование каждого выходного вектора со всеми предыдущими входными векторами декодера а текущий вектор ввода и слой перекрестного внимания — отвечает за дальнейшее кондиционирование каждого выходного вектора на всех закодированных входных данных векторы.22 Опять же, подробное объяснение роли прямого игра слоев в моделях на основе трансформатора выходит за рамки этого ноутбук. Это утверждается в Yun et. аль, (2017), что слои с прямой связью имеют решающее значение для сопоставления каждого контекстного вектора x′i \ mathbf {x ‘} _ ix′i индивидуально в желаемое пространство вывода, которое слой с самовниманием не может справиться самостоятельно. Здесь следует отметить, что каждый выходной токен x ‘\ mathbf {x’} x ‘обрабатывается одним и тем же уровнем прямой связи. Для большего Подробности, читателю рекомендуется прочитать статью.
из трансформаторов импортных MarianMTModel, MarianTokenizer
импортный фонарик
tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
model = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")
вложения = модель.get_input_embeddings ()
input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»). input_ids
decoder_input_ids = tokenizer (" Ich will ein", return_tensors = "pt", add_special_tokens = False) .input_ids
decoder_output_vectors = модель.base_model.decoder (decoder_input_ids) .last_hidden_state
lm_logits = torch.nn.functional.linear (decoder_output_vectors, embeddings.weight, bias = model.final_logits_bias)
decoder_input_ids_perturbed = tokenizer (" Ich will das", return_tensors = "pt", add_special_tokens = False) .input_ids
decoder_output_vectors_perturbed = model.base_model.decoder (decoder_input_ids_perturbed) .last_hidden_state
lm_logits_perturbed = torch.nn.functional.linear (decoder_output_vectors_perturbed, embeddings.weight, bias = model.final_logits_bias)
print (f "Форма входных векторов декодера {embeddings (decoder_input_ids) .shape}. Форма логитов декодера {lm_logits.shape}")
print ("Кодировка для` Ich` равна его измененной версии ?: ", torch.allclose (lm_logits [0, 0], lm_logits_perturbed [0, 0], atol = 1e-3))
Выход:
Форма входных векторов декодера torch.Size ([1, 5, 512]). Форма декодера logits torch.Size ([1, 5, 58101])
Кодировка для `Ich` равна его измененной версии ?: True
Мы сравниваем выходную форму вложений входных слов декодера, i.е. вложений (decoder_input_ids)
(соответствует Y0: 4 \ mathbf {Y} _ {0: 4} Y0: 4,
здесь
соответствует BOS, а «Ich will das» токенизируется до 4
токены) с размерностью lm_logits
(соответствует L1: 5 \ mathbf {L} _ {1: 5} L1: 5). Также мы передали последовательность слов
«
Ich will das» и слегка возмущенная версия
«
Ich will das» вместе с encoder_output_vectors
через кодировщик, чтобы проверить, есть ли второй lm_logit
, соответствующий «Ich», отличается, когда только последнее слово
изменено во входной последовательности («ein» -> «das»).
Как и ожидалось, выходные формы вложений входных слов декодера и
lm_logits, т.е. размерность Y0: 4 \ mathbf {Y} _ {0: 4} Y0: 4 и L1: 5 \ mathbf {L} _ {1: 5} L1: 5 в последнем измерение. В то время как
длина последовательности такая же (= 5), размерность входа декодера
вложение слов соответствует model.config.hidden_size
, тогда как
размерность lm_logit
соответствует размеру словаря model.config.vocab_size
, как описано выше.Во-вторых, можно отметить
что значения закодированного выходного вектора l1 = «Ich» \ mathbf {l} _1 = \ text {«Ich»} l1 = «Ich» совпадают при изменении последнего слова
от «эйн» до «дас». Однако это не должно вызывать удивления, если
человек понял однонаправленное самовнимание.
В заключение отметим, что модели с авторегрессией , такие как GPT2, имеют та же архитектура, что и на базе трансформатора декодер моделей , если один удаляет слой перекрестного внимания, потому что автономный авторегрессивный модели не привязаны к каким-либо выходам энкодера.Так авторегрессивный модели по сути такие же, как модели с автоматическим кодированием , но заменяют двунаправленное внимание с однонаправленным вниманием. Эти модели также можно предварительно обучить работе с массивными текстовыми данными в открытом домене, чтобы показать впечатляющая производительность в задачах генерации естественного языка (NLG). В Radford et al. (2019), авторы показывают, что предварительно обученная модель GPT2 может достичь SOTA или закрыть к результатам SOTA при выполнении различных задач NLG без особой настройки. Все авторегрессивные модели 🤗Трансформаторов можно найти здесь.
Хорошо, вот и все! Теперь вы должны хорошо понимать модели кодеров-декодеров на базе трансформатора и как их использовать с 🤗Библиотека трансформеров.
Большое спасибо Виктору Саню, Саше Рашу, Сэму Шлейферу, Оливеру Остранду, Теду Московицу и Кристиану Кивику за ценные отзывы.
Приложение Как упоминалось выше, следующий фрагмент кода показывает, как можно программировать
простой метод генерации кодера-декодера на базе трансформатора модели.Здесь мы реализуем простой метод жадного декодирования , используя torch.argmax
для выборки целевого вектора.
из трансформаторов импортных MarianMTModel, MarianTokenizer
импортный фонарик
tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
model = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")
input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»). input_ids
decoder_input_ids = tokenizer ("", add_special_tokens = False, return_tensors = "pt").input_ids
assert decoder_input_ids [0, 0] .item () == model.config.decoder_start_token_id, "` decoder_input_ids` должен соответствовать `model.config.decoder_start_token_id`"
output = model (input_ids, decoder_input_ids = decoder_input_ids, return_dict = True)
encoded_sequence = (outputs.encoder_last_hidden_state,)
lm_logits = outputs.logits
next_decoder_input_ids = torch.argmax (lm_logits [:, -1:], ось = -1)
decoder_input_ids = torch.cat ([decoder_input_ids, next_decoder_input_ids], axis = -1)
lm_logits = модель (Нет, encoder_outputs = encoded_sequence, decoder_input_ids = decoder_input_ids, return_dict = True).логиты
next_decoder_input_ids = torch.argmax (lm_logits [:, -1:], ось = -1)
decoder_input_ids = torch.cat ([decoder_input_ids, next_decoder_input_ids], axis = -1)
lm_logits = модель (Нет, encoder_outputs = encoded_sequence, decoder_input_ids = decoder_input_ids, return_dict = True) .logits
next_decoder_input_ids = torch.argmax (lm_logits [:, -1:], ось = -1)
decoder_input_ids = torch.cat ([decoder_input_ids, next_decoder_input_ids], axis = -1)
print (f "Создано на данный момент: {tokenizer.decode (decoder_input_ids [0], skip_special_tokens = True)}")
Выходы:
На данный момент создано: Ich Ich
В этом примере кода мы показываем именно то, что было описано ранее.Мы
передайте ввод «Я хочу купить машину» вместе с BOS \ text {BOS} BOS
токен модели кодировщика-декодера и выборка из первого логита l1 \ mathbf {l} _1l1 (, т.е. первая строка lm_logits
). Настоящим наша выборка
стратегия проста: жадно выбрать следующий входной вектор декодера, который
имеет наибольшую вероятность. Затем авторегрессивным образом мы передаем
выбранный входной вектор декодера вместе с предыдущими входами для
модель кодировщика-декодера и снова образец.Повторяем это в третий раз.
В результате модель сформировала слова «Ич Ич». Первое
слово точное! Второе слово не очень хорошее. Мы можем видеть здесь,
что хороший метод декодирования является ключом к успешной генерации последовательности
из заданного модельного распределения.
На практике используются более сложные методы декодирования для выборки lm_logits
. Большинство из них покрыто
это сообщение в блоге.
Внимание — это все, что вам нужно: Откройте для себя бумагу Transformer | автор: Эдуардо Муньос
Подробная реализация модели Transformer в Tensorflow
Изображение Винсона Тана с сайта PixabayВ этом посте мы опишем и демистифицируем соответствующие артефакты в документе «Внимание — это все, что вам нужно» (Vaswani, Ashish & Shazeer, Noam & Parmar, Niki & Uszkoreit, Jakob & Jones, Llion & Gomez, Aidan & Kaiser, Lukasz & Polosukhin, Illia.(2017)) [1] . Эта статья была большим достижением в использовании механизма внимания, являясь основным усовершенствованием модели под названием Transformer. Самые известные современные модели, возникающие в задачах НЛП, состоят из десятков трансформаторов или некоторых их вариантов, например, GPT-2 или BERT.
Мы опишем компоненты этой модели, проанализируем их работу и построим простую модель, которую мы применим к небольшой проблеме NMT (нейронный машинный перевод). Чтобы узнать больше о проблеме, которую мы будем решать, и узнать, как работает основной механизм внимания, я рекомендую вам прочитать мой предыдущий пост «Руководство по модели кодер-декодер и механизму внимания».
В задачах преобразования последовательности в последовательность, таких как нейронный машинный перевод, первоначальные предложения были основаны на использовании RNN в архитектуре кодер-декодер. Эти архитектуры имеют большое ограничение при работе с длинными последовательностями, их способность сохранять информацию от первых элементов была потеряна, когда новые элементы были включены в последовательность. В кодировщике скрытое состояние на каждом шаге связано с определенным словом во входном предложении, обычно одним из самых последних.Следовательно, если декодер получает доступ только к последнему скрытому состоянию декодера, он потеряет соответствующую информацию о первых элементах последовательности. Затем, чтобы справиться с этим ограничением, была представлена новая концепция — механизм внимания .
Вместо того, чтобы обращать внимание на последнее состояние кодера, как это обычно делается с RNN, на каждом шаге декодера мы смотрим на все состояния кодера, имея возможность получить доступ к информации обо всех элементах входной последовательности.Это то, что делает внимание, оно извлекает информацию из всей последовательности, взвешенной суммы всех прошлых состояний кодера . Это позволяет декодеру назначать больший вес или важность определенному элементу ввода для каждого элемента вывода. Учимся на каждом шаге фокусироваться на правильном элементе ввода, чтобы предсказать следующий выходной элемент.
Но этот подход по-прежнему имеет важное ограничение: каждая последовательность должна обрабатываться по одному элементу за раз. И кодер, и декодер должны дождаться завершения шагов t-1
для обработки шага t-го
. Таким образом, при работе с огромным корпусом это очень трудоемко и неэффективно с точки зрения вычислений. .
В этой работе мы предлагаем Transformer, модельную архитектуру, избегающую повторения и вместо этого полностью полагающуюся на механизм внимания для выявления глобальных зависимостей между вводом и выводом. Transformer обеспечивает значительно большее распараллеливание … Transformer — это первая модель преобразования, полностью полагающаяся на собственное внимание при вычислении представлений своих входных и выходных данных без использования выровненных по последовательности RNN или свертки.
Бумага «Внимание — это все, что вам нужно» [1]
Модель Transformer извлекает признаки для каждого слова, используя механизм самовнимания, чтобы выяснить, насколько важны все остальные слова в предложении w.r.t. к вышеупомянутому слову. И никакие повторяющиеся единицы не используются для получения этих функций, они просто взвешенные суммы и активации, поэтому они могут быть очень распараллеливаемыми и эффективными.
Но мы углубимся в его архитектуру (следующий рисунок), чтобы понять, что делают все эти части [1].
Из статьи Васвани и др. «Внимание — это все, что вам нужно», 2017 [1]Мы можем заметить, что модель кодировщика находится слева, а декодер — справа. Оба содержат базовый блок «сети внимания и прямой связи», повторенный N раз. Но сначала нам нужно глубоко изучить основную концепцию: механизм самовнимания.
Самовнимание — это операция от последовательности к последовательности: последовательность векторов входит, а последовательность векторов выходит. Назовем входные векторы
x1
,x2
,…,xt
и соответствующие выходные векторыy1
,y2
,…,yt
.Все векторы имеют размерность k. Чтобы создать выходной вектори
, операция самовнимания просто берет средневзвешенное значение по всем входным векторам, самым простым вариантом является скалярное произведение.Трансформаторы с нуля Питер Блум [2]
В механизме самовнимания нашей модели нам нужно ввести три элемента: запросы, значения и ключи
Запрос, значение и ключ
Каждый входной вектор в механизме самовнимания используется тремя различными способами: запрос, ключ и значение.В каждой роли он сравнивается с другими векторами для получения собственного вывода yi
(запрос), для получения j-го вывода yj
(ключ) и для вычисления каждого вектора вывода после того, как веса были установлены (значение ).
Для получения этих ролей нам нужны три весовые матрицы размером kxk и вычисляем три линейных преобразования для каждого xi
:
Эти три матрицы обычно известны как K , Q и V, три обучаемых весовых уровня, которые применяются к одному и тому же закодированному входу .Следовательно, поскольку каждая из этих трех матриц поступает из одного и того же входа, мы можем применить механизм внимания входного вектора к самому себе, «самовнимание».
Масштабируемое скалярное произведение Внимание
Входные данные состоят из запросов и ключей размерности
dk
и значений размерностиdv
. Мы вычисляем скалярное произведение запроса со всеми ключами, делим каждый на квадратный корень изdk
и применяем функциюsoftmax
для получения весов значений.Документ «Внимание — это все, что вам нужно» [1]
Затем мы используем матрицы Q , K и V для расчета оценок внимания. Баллы измеряют, насколько много внимания следует уделять другим местам или словам входной последовательности относительно слова в определенной позиции . То есть скалярное произведение вектора запроса на ключевой вектор соответствующего слова, которое мы оцениваем. Итак, для позиции 1 мы вычисляем скалярное произведение (.) q1
и k1
, затем q1
. к2
, к1
. k3
и так далее,…
Затем мы применяем «масштабированный» коэффициент, чтобы получить более стабильные градиенты. Функция softmax не может работать должным образом с большими значениями, что приводит к исчезновению градиентов и замедлению обучения [2]. После «softmaxing» мы умножаемся на матрицу значений, чтобы сохранить значения слов, на которых мы хотим сосредоточиться, и минимизируем или удаляем значения для нерелевантных слов (их значение в матрице V должно быть очень маленьким).
Формула для этих операций:
Из статьи Васвани и др. «Внимание — это все, что вам нужно»., 2017 [1]. Формула масштабированного скалярного произведения внимания.Multi-head Attention
В предыдущем описании оценки внимания сосредоточены на всем предложении одновременно, это даст одинаковые результаты, даже если два предложения содержат одни и те же слова в разном порядке. Вместо этого мы хотели бы обратить внимание на разные части слов. «Мы можем придать собственному вниманию большую способность различения, , объединив несколько голов самовнимания, разделив векторы слов на фиксированное количество (h, количество голов) частей, и тогда самовнимание будет применяется к соответствующим фрагментам с использованием подматриц Q, K и V. », [2] Питер Блум,« Трансформеры с нуля ». Это дает х различных выходных матриц оценок.
Из статьи Васвани и др., «Внимание — это все, что вам нужно», 2017 [1] Но следующий уровень (уровень прямой связи) ожидает только одну матрицу, вектор для каждого слова, поэтому «после вычисления скалярное произведение каждой головы, мы объединяем выходные матрицы и умножаем их на дополнительную матрицу весов Wo
, ” [3].Эта итоговая матрица собирает информацию от всех головок внимания.
Блог ЧКЭ: Обзоры трансформаторов
На этой странице перечислены игрушки-трансформеры, которые я просмотрел. Для игрушек, на которые я делал обзоры, есть гиперссылки. [Последнее обновление: 31 октября 2021] Age of Extinction
— Evolution 2-Pack Bumblebee (Deluxe with Legends)
— Drift (Deluxe)
— Grimlock (Voyager)
— Evasion Mode Optimus Prime (Voyager)
— Удар (AD-14 Deluxe)
— Lockdown (Deluxe)
— Lockdown (One-Step Changer)
— Optimus Prime (Leader)
— Scorn (Deluxe)
— Slash (One-Step Changer)
— Slog (Voyager)
— Slug (Deluxe)
— Strafe (Deluxe)
— Snarl (Deluxe)
Alternity и Binaltech
— Binaltech Bluestreak (Voyager)
— Alternity Ultra Magnus
— Binaltech
Skids (Voyager) — Binaltech Tracks (Voyager — синяя версия)
Animated
— Bulkhead (Activator)
— Bumblebee (Activator)
— Grimlock (Activator)
— Megatron (Leader)
— Oil Slick (Deluxe)
— Rodimus (Animated) )
— Samurai Prowl (Deluxe)
— Starscream (Activato). r)
— Wingblade Optimus Prime (Voyager — версия TakaraTomy)
Autobot Alliance and Reveal the Shield
— Battle Blade Bumblebee (Deluxe)
— Breacher (Scout)
— Brimstone (Scout)
— Special Ops Jazz (Deluxe Jazz) )
— Джаз с капитаном Ленноксом (Альянс людей)
— Мегатрон (Легенды)
— Prowl (Легенды)
— Опустошение (Легенды)
— Морские брызги (Вояджер)
— Старскрим (Лидер)
— Старскрим (Легенды)
— Sunspot (Scout)
— Terradive (Deluxe)
— Tomahawk (Deluxe)
— Tracks (Deluxe)
— Windcharger (Scout)
— Wreck-Gar (Deluxe)
BotBots
— Arcade Renegades (16 шт. 3)
— 24K-Bit
— Bankshot
— Chilla Gorilla
— Clawsome
— Crackle Corn
— Driver Ted
— Duderoni
— Greed Feed
— Knotzel
— Old Cool
— Papa Click
— Skillz Spud
— Skillz Spud
Маффин
— Сладкий чит
— Туту Паффз
— Запрет на запястье
— Hot Rod (Deluxe)
— Jetfire (Warrior)
— Slipstream (Warrior)
— Devastator (SS-69 Box Set)
— Skipjack (Voyager)
— Slug (SS86 Leader)
— Galactic Odyssey Коллекция — Dominus Criminal Pursuit
— Barricade (Deluxe)
— Punch / Counterpunch (Deluxe)
— Galactic Odyssey Collection — Paradron Medics
— Lifeline (Deluxe)
Поколения: War for Cybertron: Kingdom
— Ковчег (Титан)— Рактонит (Делюкс)
— Носорог (Вояджер)
— Затонувший Гар (Вояджер)
Поколения: Война за Кибертрон Трилогия
Поколения Выбирают Поколения
00040004 Коллекция Glass
Добавить комментарий