8 (913) 791-58-46
Заказать звонок

Как сделать из бумаги трансформера который трансформируется


Как сделать из бумаги трансформера оригами: поделки, игрушек роботов трансформеров своими руками

Бумажное моделирование – популярное и увлекательное хобби не только среди детей, многие взрослые люди увлекаются сборкой сложных, реалистичных поделок. Процесс превращения обычного листа в настоящую трехмерную фигуру позволяет почувствовать себя творцом, а создавать из бумаги движущиеся игрушки вдвойне интересно.

Сделанный своими руками робот трансформер из бумаги, который может по-настоящему менять форму, станет для ребенка поводом для гордости и поможет поверить в собственные силы. Такая игрушка, особенно если она была создана вместе с родителями, будет ценнее и дороже, чем любая купленная в магазине.

Особенности фантастических героев из бумаги

Для знакомства детей с бумажным творчеством лучше всего подойдет создание его любимых персонажей фильмов или комиксов – героя, который нравится, ребенок будет собирать с удовольствием, одновременно, незаметно для себя приобретая новые навыки и знания.

Новая информация лучше всего усваивается в игровой форме, поэтому время сборки игрушки вместе с ребенком можно не только объяснять ему как сделать из бумаги трансформера, но и постепенно знакомить малыша с основными понятиями механики и физики.

Примеры готовых поделок из бумаги и картона

Сложная бумажная модель Бамблби, развертки и описание работы над которой находятся ниже.

Герои комикса из бумаги в стиле Cubecraft. Фанат сериала может создать для себя настоящую кубическую вселенную трансформеров.

Трансформирующаяся модель лидера автоботов высотой 1,2 метра, собранная из плотной бумаги и картона.

Трансформер-самолет из металлизированной бумаги в технике оригами.

Еще одна версия оригами робота-самолета.

Бамблби из готовых распечатанных разверток. Если добавить такой фигурке шарниры из резинок или ниточек, то персонаж сможет двигать руками и ногами.

Как сделать робота трансформера

Хотя изготовление движущихся игрушек кажется сложным, на самом деле собрать модель любимого героя может каждый, выбрав сложность поделки в зависимости от своего возраста и навыков, главное внимательно читать описание работы и аккуратно вырезать и собирать детали.

Бумага – недорогой материал, поэтому ребенок спокойно может браться и за сборку сложных для него поделок. Даже если игрушка не получится, всегда можно попробовать еще раз, одновременно совершенствуя свое мастерство, и приучая себя не отступать перед трудностями.

Трансформирующийся Оптимус Прайм с пошаговыми фото сборки

Модель лидера автоботов из бумаги может двигать всеми конечностями, а также складываться в грузовую машину, как реальный прототип персонажа.

Для создания игрушки своими руками понадобится:

  • чертежи деталей поделки;
  • лист плотной бумаги;
  • толстая иголка или тонкое шило;
  • острые ножницы;
  • канцелярский нож;
  • клеящий карандаш;
  • линейка, желательно металлическая;
  • тонкая резинка (если вместо нее использовать леску или обычную нитку, то готовую модель будет сложно трансформировать).

Печатать схему рекомендуется на матовом листе, но, чтобы готовый Оптимус блестел, как металлический, можно использовать и глянцевый. В таком случае перед распечаткой нужно заранее проверить, как будет вести себя бумага в работе: если сгибы получаются аккуратными, и глянцевое покрытие на них не осыпается, то такой материал подходит для сборки игрушки.

Чертежи для распечатки

Схема сборки

Пошаговый план создания модели

  1. Распечатывают чертежи на плотной бумаге формата а4 (чтобы получить игрушку большего размера можно использовать формат А3).
  2. Кладут распечатку на ровную мягкую поверхность, например, на кровать или ковер, и помощи иголки или шила аккуратно проделывают все отверстия согласно схеме. Так получается удобнее и быстрее, чем потом прокалывать дырочки на каждом вырезанном фрагменте по отдельности.
  3. Вырезают детали, длинные прямые линии проще прорезать канцелярским ножом вдоль линейки.
  4. Тупой стороной ножниц продавливают вдоль линейки все линии сгиба.
  5. Сгибают неподвижные детали по намеченным линиям, и склеивают клапаны.
  6. Подвижные детали соединяют при помощи резинки: продевают ее в отверстия, и закрепляют с обоих сторон узелками.

Порядок сборки готовых деталей

К созданию итоговой фигурки приступают только после того, как все ее составные части хорошо просохнут.

  • Склеивают тело и грудь.
  • Грудь, плечи и шею скрепляют при помощи резинок.
  • Склеивают голову и шею
  • Верхние части ног, икры и стопы соединяют резинками.
  • К икрам приклеивают колеса.
  • Торс соединяют с верхними частями ног.
  • Колесики приклеивают к бедрам.
  • Склеивают бедра и верхние части ног.
  • Детали рук скрепляют при помощи резинки.
  • Наплечники, предплечья и плечи соединяют резинкой.
  • К наплечникам приклеивают выхлопные трубы.

Бумажные модели персонажей из кино и мультфильмов не только помогут ребенку развивать мелкую моторику и творческое мышление, но и станут любимыми героями его игр.

Подвижная модель Оптимуса Прайма полностью готова.

Реалистичная фигурка автобота Бамблби

Эта модель робота трансформера из бумаги на первый взгляд кажется сложной в сборке, но на самом деле, если аккуратно вырезать все детали и точно следовать инструкции, то создать самого доброго персонажа из Вселенной трансформеров очень легко.

Необходимые материалы и инструменты

Перед началом работы следует приготовить:

  • распечатки деталей;
  • ножницы с острыми концами;
  • клеящий карандаш;
  • канцелярский нож;
  • металлическую линейку.

Чтобы готовая модель была долговечнее и не боялась влаги, можно после сборки и полного высыхания игрушки покрыть ее лаком.

Детали для распечатывания

 

Инструкция по сборке

  1. Распечатывают схемы на плотной бумаге.
  2. Вырезают отдельные детали. Прямые линии будут аккуратнее, если прорезать их канцелярским ножом вдоль металлической линейки.
  3. Кончиком канцелярского ножа прорезают отверстия и закругленные линии.
  4. Продавливают линии сгиба закрытыми ножницами по краю линейки.
  5. Собирают отдельные элементы и склеивают согласно схеме, перед соединением готовых фрагментов каждый из них хорошо просушивают.

Вырезать детали лучше по мере необходимости, и сразу склеивать их в объемные части игрушки, чтобы ничего не потерять и не запутаться в мелких кусочках.

Схема монтажа поделки

Готовую игрушку трансформер из бумаги можно приклеить на подставку и хранить как коллекционную модель, или же оставить как есть, и использовать в детских играх.

Развертки трансформеров из бумаги в стиле cubecraft

Чертежи для создания cubecraft-трансформеров. Можно сделать модель одного любимого персонажа или собрать всю коллекцию героев комикса.

Схема сборки роботов трансформеров из бумаги

  • распечатывают шаблон на цветном принтере;
  • заготовку вырезают по контурам, продавливают под линейку все линии сгиба;
  • складывают фрагменты согласно схеме;
  • склеивают клапаны при помощи клеящего карандаша;
  • чтобы придать игрушке устойчивости, можно укрепить ее основные части изнутри при помощи картона или плотной бумаги.

Развертки для печати

Автоботы

Оптимус Прайм.

Бамблби.

Чейз.

Хитвейв.

Десептиконы

Мегатрон.

Гальватрон.

Саундвейв.

Оригами самолета-трансформера

Для создания этой забавной модели робота-самолета понадобится квадратный лист бумаги (можно использовать цветную, окрашенную с обоих сторон) и фломастеры для дорисовки желаемых деталей.

Видео мастер-класс сборки:

Продолжительность видеоурока примерно 10 минут, но сама сборка оригами трансформера займет около получаса, в зависимости от квалификации оригамиста.

Робот оригами хорошо будет смотреться, если выполнить его из металлизированной или глянцевой бумаги.

Оригами трансформеры Бамблби и Оптимус Прайм

Видеоуроки по созданию бумажных моделей автоботов в технике оригами. Готовые поделки могут трансформироваться в такие же машинки, как и у их реальных прототипов. Для работы понадобится бумага, ножницы и фломастеры для раскрашивания готовой игрушки.

Видео сборки Бамблби:

Для более качественного продавливания линий сгиба можно использовать пластиковую карту.

Пошаговый видео мастер-класс создания Оптимуса:

Аппликации для детей

Маленькие любители трансформеров, которые пока не умеют создавать объемные бумажные модели, могут сделать аппликацию по представленным шаблонам или просто раскрасить понравившуюся картинку.

Шаблоны для вырезания или раскрашивания

Готовые шаблоны можно распечатать или приложить к экрану компьютера тонкий лист офисной бумаги и перевести по контурам.

Умение создавать вещи с нуля своими руками пригодится ребенку и во взрослой жизни. В процессе работы совершенствуются внимательность, моторика и координация движений, а также находчивость и способность доводить до конца начатое дело.

 

Оригами трансформер с кубиками из бумаги своими руками

Игрушка трансформер оригами

Подготовьте 8 квадратов цветной бумаги 10х10 см. Из каждой нужно сложить модуль, следуя пошаговой инструкции:

  1. Сложите квадрат по диагонали пополам в двух направлениях. Разверните.
  2. Согните пополам поперек, разверните.
  3. Сформируйте базовую форму «двойной квадрат».

  4. Боковые стороны верхнего слоя сложите вниз к центру.
  5. Повторите с обратной стороны.

Сборка поделки:

  1. Уголки одного модуля вставьте в уголки другого с одной стороны.
  2. Сделайте сгиб в месте соединения.
  3. Добавьте следующий элемент.
  4. Сделайте сгиб.
  5. Добавьте остальные элементы.

  6. Соедините крайние модули между собой.
  7. Игрушка трансформируется, если прихватить ее изнутри и повернуть.

Рекомендуется делать трансформер из ярких разноцветных квадратов.

Получилось?

ДаНет

Magic Rose – cube из бумаги

Подготовьте 3 зеленых квадрата и 3 красных, оранжевых или розовых. Размер 10х10.

Сборка оранжевых модулей:

  1. Сложите квадрат поперек пополам.
  2. Разверните.
  3. Верхний край согните к центральной линии.
  4. Нижний край согните к центральной линии.
  5. Разверните 2 последние складки.
  6. Расположите заготовку так, чтобы линии сгибов были вертикальными. Верхний правый угол сложите к левой линии сгиба.
  7. Разверните. Повторите с левым нижним углом.
  8. Верхний край угла согните вниз.
  9. По пунктирной линии подогните заготовку в сторону центра.
  10. По пунктирной линии сделайте сгиб горой.
  11. На рисунке показан результат.
  12. Поверните заготовку так, чтобы сложенный угол оказался справа сверху.
  13. Нижний угол сложите аналогично.
  14. Разверните заготовку, одновременно сложите по направлениям, указанным стрелками.
  15. Уголки отверните в стороны, пригладьте.
  16. Переверните заготовку. Торчащие уголки сложите в направлении центра.

  17. Нижний угол сложите вверх, а верхний вниз.
  18. Модуль готов.

Сборка зеленых модулей:

  1. Сложите лист поперек пополам.
  2. Разверните.
  3. Верхнюю и нижнюю стороны сложите к середине.
  4. Разверните.
  5. Верхний правый и нижний левый угол сложите, как в шагах 6-7 сборки оранжевых модулей.
  6. Повторите шаги 8-10.
  7. Нижний правый угол сложите вверх.
  8. Нижний угол загните в сторону центра.
  9. Поверните заготовку на 180 градусов.
  10. По пунктирной линии сделайте складку долиной.
  11. Левый угол подогните внутрь и пригладьте.
  12. Переверните заготовку.
  13. Торчащий слева уголок сложите направо.
  14. Нижний угол сложите вверх.

  15. По пунктирной линии сделайте сгиб долиной.
  16. Модуль готов.

Сборка трансформера:

  1. Соедините между собой зеленые модули.
  2. Соедините оранжевые модули.
  3. Соедините блоки между собой. Высвободите зеленые треугольники.
  4. Чтобы сформировать розочку, отогните зеленые листики.
  5. Высвободите оранжевые лепестки.

Поделка превращается из розочки в куб и наоборот. Для этого нужно приглаживать лепестки или высвобождать их. Бумагу для такого трансформера лучше брать плотную и гладкую.

Звезда-трансформер из бумаги

Подготовьте 8 квадратов, к примеру, 4 желтых и 4 розовых.

Пошаговая инструкция:

  1. Сложите квадрат по диагонали пополам в двух направлениях, чтобы наметить линии сгибов.
  2. Согните заготовку пополам поперек.
  3. Разверните. Верхние углы сложите к центру.
  4. Согните заготовку пополам справа налево.
  5. Правый нижний угол заправьте внутрь.
  6. Сформируйте остальные элементы.
  7. Вложите один модуль в другой.
  8. Выступающие уголки красного заправьте внутрь желтого.
  9. Аналогично соедините остальные модули.
  10. При надавливании на фигуру со всех сторон отдельные модули начнут двигаться наружу и поделка приобретет вид звезды.

Трансфотрер из бумаги и идеи трансформации

В данной статье поговорим о преобразовании одной поделки в другую, используя введённое понятия — ядро трансформации поделки из бумаги. Ваш ребёнок поняв принцип преобразований сможет, менять своими руками форму той или иной поделки, представляя себе игру в трансформер из бумаги, и развиивать своё мышление.

Если вы решили сделать свой трансформер из бумаги постараемся в начале понять, что это такое. Если подходить буквально к пониманию данного понятия, то трансформер — это нечто преобразующее. Поэтому если спросить современного малыша, то наверняка он скажет, что трансформер, - это робот способный преобразовываться, например в автомобиль, космический корабль, и заново возвращать первоначальный вид. Таким образам, идею о трансформера из бумаги можно с лёгкостью донести своему малышу.

Если мы делали не малое количество поделок из бумаги, то наверняка замечали, что на определённой стадии изготовления бумажной поделки получается заготовка многофункционального назначения, то есть из которой могут делаться разнообразные бумажные изделия. Эту заготовку можно и назвать — ядро трансформера из бумаги, ведь в общем смысле трансформер, — это не что преобразующее свою форму из одной в другую, а ядро трансформера, — это будет исходная точка преобразования поделки из бумаги.

Можно сказать, что возможности конкретной поделки из бумаги трансформироваться в формы других поделок зависят от сложности своего ядра и фантазии конкретного человека. Простота своего ядра несёт меньшие возможности преобразований одной формы поделки в другую.

Так например, из кораблика из бумаги можно сделать голову вороны или гадалку. Что бы заметить ядро трансформера возвратимся в статью — как сделать кораблик из бумаги пошаговая схема, и заметим что в описании пункта десять имеется ядро трансформации поделки. На данном этапе можно сделать, выбор поделки из бумаги, кораблик или голову вороны. Как сделать кораблик из бумаги рассказывается в этой статье, и не упоминается о голове вороны. Весь секрет кроется в том, что при разворачивании заготовки в кораблик, если не давать разворачиваться к верху парусу, то получится у нас форма напоминающая голову от вороны.

Чтобы трансформировать голову вороны в кораблик мы просто поднимем к верху будущий парус, который подвернут к одному боку в внутри формы вороны.

В статье, как сделать пароход из бумаги под номером один схемы показано ядро трансформации. Начиная с этого места можно сделать или курицу из бумаги либо пароход. Что бы пароход трансформировать в курицу, возвращаем нашу поделку — пароход в заготовку для курицы и делаем курицу.

Что бы из курицы сделать пароход из бумаги проделываем то же самое в обратном порядке.

Из заготовки ядра трансформации бумажной поделки - кораблик из бумаги, можно делать так же и бумажную гадалку. Как она делается?

Берём заготовку бумажного кораблика и вместо того чтобы делать трубы и его борта, приподнимаем внутренние угры и просовываем туда пальцы. Когда пальца просунуты соединяем их в месте, аккуратно расправляем не ровности, и у нас получается гадалка из бумаги. Как трансформировать гадалку в пароходик или курицу вы наверное уже поняли.

Теперь думается, что вы сможете самостоятельно показать ребёнку идею трансформации одной поделки из бумаги в другую, и он сделав своими руками ту или иную поделку сможет, изменяя её формы и представляя, что играет в трансформер из бумаги, развивать своё мышление и фантазию.

Как сделать трансформера из бумаги своими руками: оригами или разверстка

Тем, кто любит головоломки, задачи на смекалку и поделки просто необходимо обратить внимание на куб-трансформер из бумаги. Многие его называют гексаэдр, что значит — многогранник из множества одинаковых квадратов. Его можно найти в магазинах, а можно сделать своими руками. Можно создать не только саму геометрическую фигуру, но также и ее разновидности.

Фигура из развертки

Что значит развертка? Это схема, с помощью которой можно сделать ту или иную поделку из бумаги или другого материала, например, картона. Прежде чем приступить к работе с трансформером, необходимо уметь делать развертку. Для ее создания понадобится:

  1. Бумага или цветной картон.
  2. Простой карандаш.
  3. Линейка.
  4. Ножницы.

Как говорилось выше, куб состоит из нескольких квадратов, у которого абсолютно все стороны друг другу равны. Вначале необходимо нарисовать большой квадрат посередине листочка. Стоит помнить о том, что у квадратов углы равны 90°. И также для тех кто забыл, куб имеет 6 граней. Из этого следует, что на листе должно быть именно шесть квадратов. Помимо этих, у нас остался один лишний и его нужно просто изобразить сбоку от какого-то квадрата. Теперь осталось нарисовать припуски (0,5−1 см) на трех квадратах сбоку и отрезать от них уголки под углом в 45°. Примерно такой результат должен быть:

Теперь нужно аккуратно отрезать все лишнее, согнуть грани, склеить специальные припуски и получить фигуру.

Куб-трансформер из оригами

Чтобы сделать кубик-трансформер своими руками в стиле оригами, необходимо вспомнить о том, как делаются модули. Именно благодаря модулям можно скрепить кубик без помощи клея, а сама игрушка получится очень интересной и необычной. Перейдем более подробно к вопросу о том, как сделать из бумаги куб-трансформер из оригами.

  • Для начала нужно сложить пополам квадратный лист, после чего края отогнуть к середине.
  • Затем нижний левый и верхний правый угол согните внутрь листа.
  • Теперь сложите листок пополам и углы, которые остались несогнутыми, вложите в кармашки правого и левого уголков.
  • Далее, переверните листок и полученные углы согните к вертикально находящимся углам.

Таким образом, получился модуль. Для куба таких модулей понадобится шесть штук. Все шесть модулей нужно делать аналогично. Обратите внимание, что в каждом из них присутствуют карманы, в которые и нужно будет вкладывать другие модули. Теперь остается только соединить все части оригами для создания фигуры. Делайте это по схеме, чтобы не ошибиться:

Кубик-трансформер из оригами готов. Чтобы ваша поделка былее красивой, можно сделать каждую грань разными цветами или текстурами.

Кубическая роза

Кроме квадратных поделок из бумаги, можно сделать и такое волшебное растение, как роза. Многие задаются вопросом о том, как сделать из бумаги розу-куб, если цветок имеет круглые нежные лепестки. Все очень просто, если знать схему или видеть перед собой шаблон. Итак, для изготовления розы понадобится всего лишь цветная бумага. Цвет розы можно выбрать самостоятельно, в примере указана розовая розочка. Для начала нужно приготовить розовую и зеленую бумагу. Необходимо три розовых и три зеленых квадрата размером 15×15 см.

  • Сначала берем первый розовый лист и складываем его пополам.
  • Теперь разворачиваем лист и проделываем то же самое с обеими получившимися половинками.
  • Снова разворачиваем розовый лист, переворачиваем его другой стороной и складываем углы к середине.
  • Складываем бумагу по изгибам.
  • Затем вкладываем обе стороны в кармашки. У нас получился продолговатый ромбик с уголками.
  • Теперь эти уголки нужно совместить. Точно так же делаем с двумя розовыми листами.

Работаем с зеленой бумагой аналогично тому, что мы делали с розовыми листами. Важно не ошибиться в последнем этапе, иначе куб получится неправильным.

Пришло время складывать наше красивое растение воедино. И начнем мы с зеленых модулей, у которых один уголок острее и больше другого. Именно острым и большим уголочком нужно соединить один модуль с другим, вкладывая треугольник в кармашек. В итоге должен получиться небольшой кубик.

Теперь переходим к бутону цветка и как вы заметили, все модули симметричны друг другу, поэтому их мы можем вставлять любой стороной в карман модуля. Важно помнить о том, что вставлять углы в кармашек нужно так, чтобы изгибы листа были направлены в середину. Длинные уголки розового вкладываем в кармашки зеленого модуля. Теперь распрямляем зеленый модуль и аккуратно опускает книзу уголки бутона.

Таким образом, мы получили красивую розочку в стиле оригами. Если вы вдруг захотите сложить ее обратно в куб, то проделайте все с точностью до наоборот и получится зелено-розовый куб.

Кроме таких поделок, можно сделать множество других интересных фигур, которые пришли к нам родом из Японии, где еще наши предки придумывали способы создания кубов и трансформеров. Кстати, маску для трансформера можно не только рисовать, но и делать отдельно, прикрепляя их к игрушке.

Originally posted 2018-03-19 09:58:55.

Оригами трансформер Как сделать кольцо транформер из бумаги

Автор admin На чтение 2 мин. Просмотров 75 Опубликовано Обновлено

Сегодня мы сделаем простую и увлекательную поделку оригами трансформер из бумаги. Используя только 8 квадратов, получим кольцо, которое может трансформироваться.

Для изготовления такой игрушки мы приготовим 8 квадратов одинакового размера. В нашей поделке они будут двух цветов – розового и желтого. По желанию такое кольцо можно сделать радужным, используя соответствующие цвета.

Каждый из этих квадратов мы будем складывать определенным образом, а потом соединим все вместе в кольцо без использования клея. Намечаем диагональный сгиб, складываем квадрат в виде треугольника.

Затем выполним еще один сгиб по диагонали.

Следующим этапом будет складывание квадрата в двух поперечных направлениях. Такие сгибы должны быть на заготовке перед тем, как перейти к следующему этапу.

Полностью расправляем квадрат и загибаем к средней линии только верхние уголки. Фото 6.

Затем складываем заготовку пополам.

Со стороны сгиба требуется выполнить складку внутрь.

Так выглядит наш первый модуль для изготовления трансформера.

Всего для создания кольца мы должны сделать 8 одинаковых заготовок.

Теперь приступим к их соединению. Для этого берем 2 модуля разного цвета. Уголок одного из них вставляем в складку другого.

Выступающие уголки розовой заготовки загибаем внутрь с обеих сторон.

Выравниваем края двух модулей, они должны свободно двигаться.

Добавляем следующий модуль, не забываем, что цвета в нашей поделке чередуются.

Загибаем внутрь уголки желтого модуля.

Так поочередно соединяем все 8 заготовок.

Затем скрепляем между собой крайние модули. Такой оригами трансформер кольцо получилось.

А так оно может трансформироваться.

Описание трансформатора

| Бумаги с кодом

Описание с Markdown (необязательно):

** Transformer ** - это модельная архитектура, которая избегает повторения и вместо этого полностью полагается на [механизм внимания] (https://paperswithcode.com/methods/category/attention-mechanisms-1) для построения глобальных зависимостей между вводом и выводом. . До Transformers модели преобразования доминирующей последовательности основывались на сложных рекуррентных или сверточных нейронных сетях, которые включали кодировщик и декодер.Transformer также использует кодировщик и декодер, но устранение повторения в пользу [механизмов внимания] (https://paperswithcode.com/methods/category/attention-mechanisms-1) позволяет значительно расширить распараллеливание, чем такие методы, как [RNN] ( https://paperswithcode.com/methods/category/recurrent-neural-networks) и [CNNs] (https://paperswithcode.com/methods/category/convolutional-neural-networks).

.

Как закодировать Трансформатор в Pytorch | Сэмюэл Линн-Эванс

Может ли Трансформер стать еще одним гвоздем в гроб для RNN?

Избавившись от неуклюжих циклов for, он находит способ позволить целым предложениям одновременно входить в сеть группами. Чудо; НЛП теперь использует преимущества высокоэффективных библиотек линейной алгебры Python. Эту экономию времени можно потратить на развертывание дополнительных слоев в модели.

Пока кажется, что результатом является более быстрая сходимость и лучшие результаты.Что не любить?

Мой личный опыт очень многообещающий. Он обучил 2 миллиона пар французско-английских предложений создать сложного переводчика всего за три дня.

Вы можете сами поиграть с моделью в задачах языкового перевода, если зайдете к моей реализации на Github здесь. Также ознакомьтесь с моим следующим постом, в котором я рассказываю о своем пути создания переводчика и его результатах.

Или, наконец, вы можете построить его сами. Вот руководство о том, как это сделать и как это работает.

В этом руководстве объясняется только, как кодировать модель и запускать ее, для получения информации о том, как получить данные и обработать их для seq2seq, см. Мое руководство здесь .

На схеме выше показан обзор модели трансформатора. Входными данными для кодировщика будет английское предложение, а «Outputs», поступающее в декодер, будет французским предложением.

Фактически, есть пять процессов, которые нам необходимо понять, чтобы реализовать эту модель:

Встраивание слов стало стандартной практикой в ​​NMT, обеспечивая сеть гораздо большим количеством информации о словах, чем одно горячее кодирование.Подробнее об этом читайте в моем сообщении здесь.

Встраивание выполняется просто в pytorch:

 class Embedder (nn.Module): 
def __init __ (self, vocab_size, d_model):
super () .__ init __ ()
self.embed = nn.Embedding (vocab_size, d_model) )
def forward (self, x):
return self.embed (x)

Когда каждое слово загружается в сеть, этот код выполняет поиск и извлекает его вектор внедрения. Эти векторы затем будут изучены моделью как параметры, настраиваемые с каждой итерацией градиентного спуска.

Чтобы модель могла понять предложение, ей необходимо знать две вещи о каждом слове: что это слово означает? И какова его позиция в приговоре?

Вектор внедрения для каждого слова узнает значение, поэтому теперь нам нужно ввести что-то, что сообщает сети о положении слова.

Васмари и др. ответили на эту проблему, используя эти функции для создания константы значений, зависящих от позиции:

Эта константа представляет собой 2-мерную матрицу. Pos относится к порядку в предложении, а i относится к положению вдоль измерения вектора внедрения. Затем каждое значение в матрице pos / i вычисляется с использованием приведенных выше уравнений.

Матрица позиционного кодирования - это константа, значения которой определяются приведенными выше уравнениями. При добавлении к матрице внедрения каждое вложение слова изменяется в зависимости от его положения.

Интуитивно понятный способ кодирования нашего позиционного энкодера выглядит так:

 class PositionalEncoder (nn.Module): 
def __init __ (self, d_model, max_seq_len = 80):
super () .__ init __ ()
self.d_model = d_model

# создать постоянную матрицу 'pe' со значениями, зависящими от
# pos и i
pe = torch.zeros (max_seq_len, d_model)
для pos в диапазоне (max_seq_len):
для i в диапазоне (0, d_model, 2):
pe [pos, i] = \
math.sin (pos / (10000 ** ((2 * i) / d_model)))
pe [pos, i + 1] = \
math.cos (pos / (10000 ** ((2 * (i + 1)) / d_model)))

pe = pe.unsqueeze (0)
self.register_buffer ('pe', pe)

def forward (self, x):
# сделать вложения относительно большими
x = x * math.sqrt (self.d_model)
# добавить константу во встраивание
seq_len = x.size ( 1)
x = x + Variable (self.pe [:,: seq_len], \
requires_grad = False) .cuda ()
return x

Вышеупомянутый модуль позволяет нам добавить позиционное кодирование к вектору внедрения, обеспечивая информация о структуре к модели.

Причина, по которой мы увеличиваем значения внедрения перед добавлением, состоит в том, чтобы сделать позиционное кодирование относительно меньшим.Это означает, что исходное значение вектора внедрения не будет потеряно, когда мы сложим их вместе.

Маскировка играет важную роль в трансформаторе. Он служит двум целям:

  • В кодировщике и декодере: для вывода нулевого внимания везде, где есть просто заполнение во входных предложениях.
  • В декодере: чтобы декодер не «забегал» вперед в остальной части переведенного предложения при предсказании следующего слова.

Создать маску для ввода просто:

 batch = next (iter (train_iter)) 
input_seq = batch.English.transpose (0,1)
input_pad = EN_TEXT.vocab.stoi [''] # создает маску с нулями везде, где есть заполнение на входе
input_msk = (input_seq! = Input_pad) .unsqueeze (1)

Для target_seq мы делаем то же самое, но затем создаем дополнительный шаг:

 # создаем маску как раньше target_seq = batch.French.transpose (0,1) 
target_pad = FR_TEXT.vocab.stoi ['']
target_msk = (target_seq! = target_pad) .unsqueeze (1) size = target_seq.size (1) # получить seq_len для matrixnopeak_mask = np . триу (np . штук (1, размер, размер),
k = 1) . astype ('uint8')
nopeak_mask = Variable (torch . from_numpy (nopeak_mask) == 0) target_msk = target_msk & nopeak_mask

Первым вводом в декодер будет целевая последовательность (французский перевод). Декодер предсказывает каждое выходное слово, используя все выходные данные кодировщика и французское предложение только до точки каждого предсказываемого слова.

Следовательно, нам нужно предотвратить отображение первых выходных прогнозов в предложении. Для этого мы используем nopeak_mask:

. Когда маска применяется в нашей функции внимания, каждое предсказание сможет использовать предложение только до того слова, которое оно предсказывает.

Если мы позже применим эту маску к оценкам внимания, значения там, где вход находится впереди, не смогут участвовать при вычислении выходов.

Когда у нас есть внедренные значения (с позиционным кодированием) и маски, мы можем приступить к построению слоев нашей модели.

Вот обзор многоголового уровня внимания:

Многоголовый слой внимания, каждый вход разделен на несколько заголовков, что позволяет сети одновременно уделять внимание различным подразделам каждого внедрения.

V, K и Q обозначают «ключ», «значение» и «запрос». Эти термины используются в функциях внимания, но, честно говоря, я не думаю, что объяснение этой терминологии особенно важно для понимания модели.

В случае энкодера V, K и G будут просто идентичными копиями вектора внедрения (плюс позиционное кодирование).У них будут размеры Batch_size * seq_len * d_model.

В мультиголовом внимании мы разбиваем вектор внедрения на N голов, так что они будут иметь размеры batch_size * N * seq_len * (d_model / N).

Это последнее измерение (d_model / N) мы будем называть d_k.

Давайте посмотрим код для модуля декодера:

 class MultiHeadAttention (nn.Module): 
def __init __ (self, Heads, d_model, dropout = 0.1):
super () .__ init __ ()

self.d_model = d_model
self.d_k = d_model // головки
self.h = головки

self.q_linear = nn.Linear (d_model, d_model)
self.v_linear = nn.Linear (d_model, d_model)
self.k_linear = nn.Linear (d_model, d_model)
self.dropout = nn.Dropout (dropout)
self.out = nn.Linear (d_model, d_model)

def вперед (self, q, k, v, mask = None):

bs = q.size (0)

# выполнить линейную операцию и разбить на h головы

k = self.k_linear (k) .view (bs, -1, self.h, self.d_k)
q = self.q_linear (q) .view (bs, -1, self.h, self.d_k)
v = self.v_linear (v) .view (bs, -1, self. h, self.d_k)

# транспонировать для получения размеров bs * h * sl * d_model

k = k.transpose (1,2)
q = q.transpose (1,2)
v = v.transpose ( 1,2)

# вычислить внимание с помощью функции, мы определим следующие
баллов = внимание (q, k, v, self.d_k, mask, self.dropout)

# объединить головы и пропустить через последний линейный слой
concat = scores. транспонировать (1,2).contiguous () \
.view (bs, -1, self.d_model)

output = self.out (concat)

return output

Уравнение для вычисления внимания Диаграмма из бумаги, иллюстрирующая шаги уравнения

Это единственное другое уравнение, которое мы мы будем рассматривать сегодня, и эта диаграмма из бумаги делает большую работу по объяснению каждого шага.

Каждая стрелка на диаграмме отражает часть уравнения.

Сначала мы должны умножить Q на транспонирование K. Затем это «масштабируется» путем деления результата на квадратный корень из d_k.

Шаг, который не показан в уравнении, - это операция маскирования. Перед тем, как выполнить Softmax, мы применяем нашу маску и, следовательно, уменьшаем значения там, где ввод является заполнением (или в декодере, также когда ввод находится перед текущим словом).

Еще один непоказанный шаг - это выпадение, которое мы применим после Softmax.

Наконец, последний шаг - это скалярное произведение между полученным результатом и V.

Вот код функции внимания:

 def Внимание (q, k, v, d_k, mask = None, dropout = Нет): 

балла = факел.matmul (q, k.transpose (-2, -1)) / math.sqrt (d_k)

, если маска не равна None:
mask = mask.unsqueeze (1)
score = scores.masked_fill (mask == 0, -1e9) scores = F.softmax (scores, dim = -1)

, если отсев нет Нет:
балл = отсев (баллы)

output = torch.matmul (scores, v)
return output

Ok, если вы уже поняли, похлопайте себя по плечу, поскольку мы добрались до последнего слоя, и здесь все довольно просто!

Этот уровень состоит только из двух линейных операций с промежуточными операциями relu и dropout.

 class FeedForward (nn.Module): 
def __init __ (self, d_model, d_ff = 2048, dropout = 0.1):
super () .__ init __ ()
# Мы устанавливаем d_ff по умолчанию на 2048
self.linear_1 = nn.Linear (d_model, d_ff)
self.dropout = nn.Dropout (dropout)
self.linear_2 = nn.Linear (d_ff, d_model)
def вперед (self, x):
x = self.dropout (F. relu (self.linear_1 (x)))
x = self.linear_2 (x)
return x

Слой прямой связи просто углубляет нашу сеть, используя линейные слои для анализа паттернов на выходе слоев внимания.

Нормализация очень важна в глубоких нейронных сетях. Это предотвращает слишком сильное изменение диапазона значений в слоях, что означает, что модель обучается быстрее и имеет лучшую способность к обобщению.

Мы будем нормализовать наши результаты между каждым слоем в кодировщике / декодере, поэтому перед построением нашей модели давайте определим эту функцию:

 class Norm (nn.Module): 
def __init __ (self, d_model, eps = 1e-6 ):
super () .__ init __ ()

self.size = d_model
# создать два обучаемых параметра для калибровки нормализации
self.alpha = nn.Parameter (torch.ones (self.size))
self.bias = nn.Parameter (torch.zeros (self.size))
self.eps = eps
def forward (self, x):
norm = self.alpha * (x - x.mean (dim = -1, keepdim = True)) \
/ (x.std (dim = -1, keepdim = True) + self.eps) + self.bias
return norm

Если вы понимаете детали выше, теперь вы понимаете модель. Остальное просто ставит все на свои места.

Давайте еще раз взглянем на общую архитектуру и начнем строить:

Последняя переменная: Если вы внимательно посмотрите на диаграмму, вы увидите «Nx» рядом с архитектурами кодировщика и декодера.В действительности кодер и декодер на схеме выше представляют один уровень кодера и один из декодера. N - это переменная количества слоев. Например. если N = 6, данные проходят через шесть уровней кодера (с архитектурой, показанной выше), затем эти выходные данные передаются в декодер, который также состоит из шести повторяющихся уровней декодера.

Теперь мы создадим модули EncoderLayer и DecoderLayer с архитектурой, показанной в модели выше. Затем, когда мы построим кодировщик и декодер, мы можем определить, сколько из этих слоев нужно иметь.

 # построить слой кодировщика с одним слоем внимания с несколькими головками и одним слоем с прямой связью class EncoderLayer (nn.Module): 
def __init __ (self, d_model, Head, dropout = 0.1):
super () .__ init __ ( )
self.norm_1 = Norm (d_model)
self.norm_2 = Norm (d_model)
self.attn = MultiHeadAttention (головы, d_model)
self.ff = FeedForward (d_model)
self.dropout_1 = nn.Dropout (выпадение)
self.dropout_2 = nn.Dropout (выпадение)

def forward (self, x, mask):
x2 = self.norm_1 (x)
x = x + self.dropout_1 (self.attn (x2, x2, x2, mask))
x2 = self.norm_2 (x)
x = x + self.dropout_2 (self.ff (x2) )
return x

# построить слой декодера с двумя слоями внимания с несколькими головами и
# одним слоем прямой связи

class DecoderLayer (nn.Module):
def __init __ (self, d_model, Heads, dropout = 0.1):
super () .__ init __ ()
self.norm_1 = Norm (d_model)
self.norm_2 = Norm (d_model)
self.norm_3 = Norm (d_model)

self.dropout_1 = nn.Dropout (выпадение)
self.dropout_2 = nn.Dropout (выпадение)
self.dropout_3 = nn.Dropout (выпадение)

self.attn_1 = MultiHeadAttention (головы, d_model)
self.attn_2 = MultiHeadAttention (головы, d_model)
self.ff = FeedForward (d_model) .cuda ()

def forward (self, x, e_outputs, src_mask, trg_mask):
x2 = self.norm_1 (x)
x = x + self.dropout_1 (self.attn_1 (x2 , x2, x2, trg_mask))
x2 = self.norm_2 (x)
x = x + self.dropout_2 (self.attn_2 (x2, e_outputs, e_outputs,
src_mask))
x2 = self.norm_3 (x)
x = x + self.dropout_3 (self.ff (x2))
return x # Затем мы можем создать удобную функцию клонирования, которая может генерировать несколько слоев: def get_clones (module, N):
return nn.ModuleList ([copy.deepcopy (модуль) для i в диапазоне (N)])

Теперь мы готовы создать кодировщик и декодер:

 class Encoder (nn.Module): 
def __init __ (self, vocab_size, d_model , N, головок):
super () .__ init __ ()
self.N = N
self.embed = Embedder (vocab_size, d_model)
self.pe = PositionalEncoder (d_model)
self.layers = get_clones (EncoderLayer (d_model, Head), N)
self.norm = Norm (d_model)
def forward (self, src, mask):
x = self.embed (src )
x = self.pe (x)
для i в диапазоне (N):
x = self.layers [i] (x, mask)
return self.norm (x)

class Decoder (nn.Module):
def __init __ (self, vocab_size, d_model, N, головы):
super () .__ init __ ()
self.N = N
self.embed = Embedder (vocab_size, d_model)
self.pe = PositionalEncoder (d_model)
я.Layers = get_clones (DecoderLayer (d_model, Head), N)
self.norm = Norm (d_model)
def forward (self, trg, e_outputs, src_mask, trg_mask):
x = self.embed (trg)
x = self .pe (x)
for i in range (self.N):
x = self.layers [i] (x, e_outputs, src_mask, trg_mask)
return self.norm (x)

И, наконец… Преобразователь !

Трансформатор класса
 (nn.Module): 
def __init __ (self, src_vocab, trg_vocab, d_model, N, Heads):
super () .__ init __ ()
self.encoder = Encoder (src_vocab, d_model, N, Heads)
self.decoder = Decoder (trg_vocab, d_model, N, Head)
self.out = nn.Linear (d_model, trg_vocab)
def forward (self, src, trg, src_mask, trg_mask):
e_outputs = self.encoder (src, src_mask)
d_output = self.decoder (trg, e_outputs, src_mask, trg_mask)
output = self.out (d_output)
soft return output # мы не выполняем soft return output # на выходе, так как это будет обработано
# автоматически нашей функцией потерь.

После того, как преобразователь построен, все, что остается, - это обучить этого придурка на наборе данных EuroParl.Кодирование довольно безболезненно, но будьте готовы подождать около 2 дней, чтобы эта модель начала сходиться!

Давайте сначала определим некоторые параметры:

 d_model = 512 
голов = 8
N = 6
src_vocab = len (EN_TEXT.vocab)
trg_vocab = len (FR_TEXT.vocab) model = Transformer (src_vocab, trg_modelocab, , Heads) для p в model.parameters ():
if p.dim ()> 1:
nn.init.xavier_uniform_ (p) # этот код очень важен! Он инициализирует параметры с диапазоном значений
#, который предотвращает затухание или чрезмерное усиление сигнала.
# См. Математическое объяснение в этом блоге. Optim = torch.optim.Adam (model.parameters (), lr = 0.0001, beta = (0.9, 0.98), eps = 1e-9)

И теперь все хорошо для обучения:

 def train_model (epochs, print_every = 100): 

model.train ()

start = time.time ()
temp = start

total_loss = 0

для эпох в диапазоне (эпох):

для i, партия в enumerate (train_iter):

src = batch.English.transpose (0,1)
trg = batch.French.transpose (0,1) # во французском предложении, которое мы вводим, есть все слова, кроме
# последнего, так как каждое слово используется для предсказания следующего

trg_input = trg [:,: -1]

# слова, которые мы пробуем для прогнозирования

target = trg [:, 1:]. contiguous (). view (-1)

# создать функцию для создания масок с использованием кода маски выше

src_mask, trg_mask = create_masks (src, trg_input)

preds = модель (src, trg_input, src_mask, trg_mask)

optim.zero_grad ()

loss = F.cross_entropy (preds.view (-1, preds.size (-1)),
результатов, ignore_index = target_pad)

loss.backward ()
optim.step ()

total_loss + = loss.data [0]
if ( i + 1)% print_every == 0:
loss_avg = total_loss / print_every
print ("time =% dm, epoch% d, iter =% d, loss =% .3f,
% ds на% d iters"% ( (time.time () - start) // 60,
эпоха + 1, i + 1, loss_avg, time.time () - temp,
print_every))
total_loss = 0
temp = time.time ()

Пример результатов тренировки: после нескольких дней тренировок я, казалось, сошёл на потерю около 1.3

Мы можем использовать приведенную ниже функцию для перевода предложений. Мы можем кормить его предложениями прямо из наших пакетов или вводить собственные строки.

Переводчик работает, выполняя цикл. Начнем с кодирования английского предложения. Затем мы передаем декодеру индекс токена и выходные данные кодировщика. Декодер делает предсказание для первого слова, и мы добавляем его ко входу декодера с токеном sos. Мы повторно запускаем цикл, получая следующее предсказание и добавляя его ко входу декодера, пока не дойдем до токена , сообщающего нам, что перевод завершен.

 def translate (model, src, max_len = 80, custom_string = False): 

model.eval ()

if custom_sentence == True:
src = tokenize_en (src)
предложение = \
Variable (torch.LongTensor ([ [EN_TEXT.vocab.stoi [tok] для tok
в предложении]])). Cuda () src_mask = (src! = Input_pad) .unsqueeze (-2)
e_outputs = model.encoder (src, src_mask)

output = torch.zeros (max_len) .type_as (src.data)
output [0] = torch.LongTensor ([FR_TEXT.vocab.stoi ['']])

для i в диапазоне (1, max_len):

trg_mask = np.triu (np.ones ((1, i, i),
k = 1) .astype ('uint8')
trg_mask = Variable (torch.from_numpy (trg_mask) == 0) .cuda ()

out = модель .out (model.decoder (output [: i] .unsqueeze (0),
e_outputs, src_mask, trg_mask))
out = F.softmax (out, dim = -1)
val, ix = out [:, - 1] .data.topk (1)

выводит [i] = ix [0] [0]
if ix [0] [0] == FR_TEXT.vocab.stoi ['']:
break

return '' .join (
[FR_TEXT.vocab.itos [ix] для ix в выходах [: i]]
)

И все.Смотрите мой Github здесь, где я написал этот код как программу, которая будет принимать два параллельных текста в качестве параметров и тренировать на них эту модель. Или практикуйте знания и применяйте сами!

.

python - Создайте собственный sklearn TransformerMixin, который последовательно преобразует категориальные переменные

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
.

Как работают трансформаторы. Трансформаторы - это разновидность нейронной… | Джулиано Джакалья

Нейронная сеть, используемая Open AI и DeepMind

Трансформаторы - это тип архитектуры нейронной сети, который набирает популярность. Трансформеры недавно использовались OpenAI в своих языковых моделях, а также недавно использовались DeepMind для AlphaStar - своей программы, чтобы победить лучшего профессионального игрока в Starcraft. Преобразователи

были разработаны для решения задачи преобразования последовательности , или нейронных машин. Это означает любую задачу, которая преобразует входную последовательность в выходную последовательность. Сюда входит распознавание речи, преобразование текста в речь и т. Д.

Преобразование последовательности. Входные данные представлены зеленым цветом, модель - синим, а выход - фиолетовым. GIF от 3

Для моделей, выполняющих преобразование последовательности , необходимо иметь какую-то память. Например, предположим, что мы переводим следующее предложение на другой язык (французский):

«Трансформеры» - японская [[хардкор-панк]] группа.Группа была образована в 1968 году, в разгар истории японской музыки »

В этом примере слово« группа »во втором предложении относится к группе« Трансформеры », представленной в первом предложении. Когда вы читаете о группе во втором предложении, вы знаете, что это относится к группе «Трансформеры». Это может быть важно для перевода. Есть много примеров, когда слова в некоторых предложениях относятся к словам в предыдущих предложениях.

Для перевода подобных предложений модель должна определять такого рода зависимости и связи.Рекуррентные нейронные сети (RNN) и сверточные нейронные сети (CNN) были использованы для решения этой проблемы из-за их свойств. Давайте рассмотрим эти две архитектуры и их недостатки.

Рекуррентные нейронные сети содержат петли, позволяющие информации сохраняться.

Вход представлен как x_t

На рисунке выше мы видим часть нейронной сети, A, , обрабатывающую некоторый вход x_t и выводящую h_t. Цикл позволяет передавать информацию от одного шага к другому.

Петли можно мыслить иначе. Рекуррентную нейронную сеть можно представить как несколько копий одной и той же сети, A , каждая из которых передает сообщение своему преемнику. Рассмотрим, что произойдет, если мы развернем цикл:

Развернутая рекуррентная нейронная сеть

Эта цепочечная природа показывает, что рекуррентные нейронные сети явно связаны с последовательностями и списками. Таким образом, если мы хотим перевести какой-то текст, мы можем установить каждый ввод как слово в этом тексте.Рекуррентная нейронная сеть передает информацию из предыдущих слов в следующую сеть, которая может использовать и обрабатывать эту информацию.

На следующем рисунке показано, как обычно работает модель от последовательности к последовательности с использованием рекуррентных нейронных сетей. Каждое слово обрабатывается отдельно, и результирующее предложение генерируется путем передачи скрытого состояния на этап декодирования, который затем генерирует выходные данные.

GIF от 3

Проблема долгосрочных зависимостей

Рассмотрим языковую модель, которая пытается предсказать следующее слово на основе предыдущих.Если мы пытаемся предсказать следующее слово предложения «облака в небе» , нам не нужен дальнейший контекст. Совершенно очевидно, что следующим словом будет небо.

В этом случае, когда разница между релевантной информацией и местом, которое необходимо, невелика, RNN могут научиться использовать прошлую информацию и выяснить, какое слово будет следующим в этом предложении.

Изображение из 6

Но есть случаи, когда нам нужно больше контекста. Например, предположим, что вы пытаетесь угадать последнее слово текста: «Я вырос во Франции… Я говорю свободно…». Недавняя информация предполагает, что следующим словом, вероятно, является язык, но если мы хотим сузить, какой язык, нам нужен контекст Франции, который находится дальше по тексту.

Изображение из 6

RNN становится очень неэффективным, когда разрыв между релевантной информацией и точкой, где она необходима, становится очень большим. Это связано с тем, что информация передается на каждом шаге, и чем длиннее цепочка, тем более вероятно, что информация будет потеряна по цепочке.

Теоретически RNN могут изучить эту долговременную зависимость.На практике они, кажется, не изучают их. LSTM, особый тип RNN, пытается решить эту проблему.

При составлении календаря на день мы расставляем по приоритетам встречи. Если есть что-то важное, мы можем отменить некоторые встречи и согласовать то, что важно.

RNN этого не делают. Всякий раз, когда он добавляет новую информацию, он полностью преобразует существующую информацию, применяя функцию. Изменяется вся информация, и не учитывается, что важно, а что нет.

LSTM вносят небольшие изменения в информацию путем умножения и сложения. С LSTM информация проходит через механизм, известный как состояния ячеек. Таким образом, LSTM могут выборочно запоминать или забывать важные и не очень важные вещи.

Внутри LSTM выглядит следующим образом:

Изображение из 6

Каждая ячейка принимает в качестве входных данных x_t (слово в случае перевода предложения в предложение), предыдущее состояние ячейки и выход предыдущей ячейки .Он манипулирует этими входными данными и на их основе генерирует новое состояние ячейки и выходные данные. Я не буду вдаваться в подробности о механике каждой ячейки. Если вы хотите понять, как работает каждая ячейка, я рекомендую сообщение в блоге Кристофера:

С состоянием ячейки информация в предложении, которая важна для перевода слова, может передаваться от одного слова к другому при переводе.

Проблема с LSTM

Та же проблема, что обычно случается с RNN, случается с LSTM, т.е.е. когда предложения слишком длинные, LSTM все равно не работают. Причина в том, что вероятность сохранения контекста для слова, которое находится далеко от текущего обрабатываемого слова, экспоненциально уменьшается с увеличением расстояния от него.

Это означает, что когда предложения длинные, модель часто забывает содержание удаленных позиций в последовательности. Другая проблема с RNN и LSTM заключается в том, что трудно распараллелить работу по обработке предложений, поскольку вам нужно обрабатывать слово за словом.Не только это, но еще и не существует модели зависимостей дальнего и ближнего действия. Подводя итог, можно сказать, что LSTM и RNN представляют 3 проблемы:

  • Последовательные вычисления препятствуют распараллеливанию
  • Отсутствует явное моделирование зависимостей дальнего и ближнего действия
  • «Расстояние» между позициями линейно

Для решения некоторых из этих проблем исследователи создали техника обращения внимания на конкретные слова.

При переводе предложения я обращаю особое внимание на слово, которое сейчас перевожу.Когда я расшифровываю аудиозапись, я внимательно слушаю отрывок, который активно записываю. И если вы попросите меня описать комнату, в которой я сижу, я буду оглядываться на предметы, которые описываю, в процессе.

Нейронные сети могут достичь того же поведения, используя внимание , сосредотачиваясь на части подмножества информации, которую они предоставляют. Например, RNN может следить за выходом другой RNN. На каждом временном шаге он фокусируется на разных позициях в другой RNN.

Для решения этих проблем Attention - это метод, который используется в нейронной сети. Для RNN вместо кодирования всего предложения в скрытом состоянии каждое слово имеет соответствующее скрытое состояние, которое полностью передается на этап декодирования. Затем скрытые состояния используются на каждом этапе RNN для декодирования. На следующем гифке показано, как это происходит.

Шаг , зеленый, , называется этапом кодирования , , а фиолетовый этап - этапом декодирования . GIF от 3

Идея заключается в том, что в каждом слове предложения может содержаться релевантная информация. Таким образом, чтобы декодирование было точным, оно должно учитывать каждое слово ввода, используя внимания.

Чтобы привлечь внимание к RNN при преобразовании последовательности, мы разделим кодирование и декодирование на 2 основных этапа. Одна ступенька обозначена зеленым цветом , а другая фиолетовым. Шаг , зеленый, , называется этапом кодирования , , а фиолетовый этап - этапом декодирования .

GIF из 3

Шаг, выделенный зеленым цветом, отвечает за создание скрытых состояний на входе. Вместо того, чтобы передавать декодерам только одно скрытое состояние, как мы делали до использования внимание , мы передаем все скрытые состояния, генерируемые каждым «словом» предложения, на этап декодирования. Каждое скрытое состояние используется на этапе декодирования , чтобы выяснить, на что сеть должна обратить внимание .

Например, при переводе предложения « Je suis étudiant» на английский язык требуется, чтобы на этапе декодирования при переводе учитывались разные слова.

На этой гифке показано, какой вес придается каждому скрытому состоянию при переводе предложения Je suis étudiant на английский язык. Чем темнее цвет, тем большее значение придается каждому слову. GIF из 3

Или, например, когда вы переводите предложение «L’accord sur la zone économique européenne a été signé en août 1992». с французского на английский и сколько внимания уделяется каждому входу.

Перевод предложения «L’accord sur la zone économique européenne a été signé en août 1992." на английский. Изображение из 3

Но некоторые из проблем, которые мы обсуждали, все еще не решены с помощью RNN, использующих внимание . Например, параллельная обработка входных данных (слов) невозможна. Для большого объема текста это увеличивает время, затрачиваемое на перевод текста.

Сверточные нейронные сети помогают решить эти проблемы. С их помощью мы можем

  • Тривиально распараллелить (для каждого слоя)
  • Использовать локальные зависимости
  • Расстояние между позициями логарифмическое

Некоторые из самых популярных нейронных сетей для преобразования последовательностей, Wavenet и Bytenet, являются сверточными нейронными сетями.

Wavenet, модель представляет собой сверточную нейронную сеть (CNN). Изображение из 10

Причина, по которой сверточные нейронные сети могут работать параллельно, заключается в том, что каждое слово на входе может обрабатываться одновременно и не обязательно зависит от предыдущих слов, которые нужно перевести. Более того, «расстояние» между выходным словом и любым входом для CNN составляет порядка log (N) - это размер высоты дерева, сгенерированного от выхода к входу (вы можете увидеть это на гифке выше.Это намного лучше, чем расстояние между выходом RNN и входом, которое составляет порядка N .

Проблема в том, что сверточные нейронные сети не обязательно помогают с проблемой выяснения проблемы зависимостей при переводе предложений. Именно поэтому были созданы Transformers , они представляют собой сочетание обоих CNN с вниманием.

Чтобы решить проблему распараллеливания, Transformers пытаются решить эту проблему, используя сверточные нейронные сети вместе с моделями внимания . «Внимание» увеличивает скорость перевода модели из одной последовательности в другую.

Давайте посмотрим, как работает Transformer . Трансформер - это модель, которая использует внимание для увеличения скорости. В частности, он использует самовнимания.

Трансформатор. Image from 4

Внутри Transformer имеет такую ​​же архитектуру, что и предыдущие модели, представленные выше. Но Transformer состоит из шести кодеров и шести декодеров.

Изображение из 4

Все кодировщики очень похожи друг на друга. Все кодеры имеют одинаковую архитектуру. Декодеры обладают одним и тем же свойством, то есть они очень похожи друг на друга. Каждый кодировщик состоит из двух уровней: Самовнимание, и нейронной сети прямого распространения.

Изображение из 4

Входы кодировщика сначала проходят через слой самовнимания . Это помогает кодировщику смотреть на другие слова во входном предложении при кодировании определенного слова. В декодере есть оба этих уровня, но между ними есть уровень внимания, который помогает декодеру сосредоточиться на соответствующих частях входного предложения.

Изображение из 4

Примечание: Этот раздел взят из записи блога Джея Алламара

Давайте начнем с рассмотрения различных векторов / тензоров и того, как они перемещаются между этими компонентами, чтобы превратить входные данные обученной модели в выходные. Как и в случае с приложениями НЛП в целом, мы начинаем с преобразования каждого входного слова в вектор с помощью алгоритма встраивания.

Изображение взято из 4

Каждое слово вложено в вектор размером 512. Мы представим эти векторы этими простыми рамками.

Встраивание происходит только в самый нижний кодировщик. Абстракция, которая является общей для всех кодировщиков, заключается в том, что они получают список векторов, каждый из которых имеет размер 512.

В нижнем кодировщике это будет слово embeddings, но в других кодировщиках это будет выход кодировщика, который прямо внизу. После встраивания слов в нашу входную последовательность каждое из них проходит через каждый из двух уровней кодировщика.

Изображение из 4

Здесь мы начинаем видеть одно ключевое свойство преобразователя, а именно то, что слово в каждой позиции проходит по своему собственному пути в кодировщике.Между этими путями на уровне самовнимания есть зависимости. Однако уровень прямой связи не имеет этих зависимостей, и, таким образом, различные пути могут выполняться параллельно при прохождении через слой прямой связи.

Затем мы заменим пример более коротким предложением и посмотрим, что происходит на каждом подуровне кодировщика.

Самовнимание

Давайте сначала посмотрим, как вычислить самовнимание с помощью векторов, а затем перейдем к рассмотрению того, как это на самом деле реализовано - с использованием матриц.

Выявление связи слов в предложении и уделение ему внимания . Изображение из 8

Первый шаг в вычислении самовнимания состоит в том, чтобы создать три вектора из каждого из входных векторов кодировщика (в данном случае - вложение каждого слова). Итак, для каждого слова мы создаем вектор запроса, вектор ключа и вектор значения. Эти векторы создаются путем умножения вложения на три матрицы, которые мы обучили в процессе обучения.

Обратите внимание, что эти новые векторы меньше по размерности, чем вектор внедрения.Их размерность составляет 64, в то время как векторы ввода / вывода встраивания и кодировщика имеют размерность 512. Они НЕ ДОЛЖНЫ быть меньше, это выбор архитектуры, позволяющий сделать вычисление многогранного внимания (в основном) постоянным.

Изображение взято из 4

Умножение x1 на весовую матрицу WQ дает q1, вектор «запроса», связанный с этим словом. В итоге мы создаем проекцию «запроса», «ключа» и «значения» для каждого слова во входном предложении.

Что такое векторы «запроса», «ключа» и «значения»?

Это абстракции, которые полезны для вычисления внимания и размышлений о нем.Когда вы перейдете к чтению того, как рассчитывается внимание ниже, вы будете знать почти все, что вам нужно знать о роли каждого из этих векторов.

Второй шаг в вычислении самовнимания - это подсчет баллов. Допустим, мы рассчитываем самовнимание для первого слова в этом примере - «мышление». Нам нужно сопоставить каждое слово входного предложения с этим словом. Оценка определяет, сколько внимания следует уделять другим частям входного предложения, когда мы кодируем слово в определенной позиции.

Оценка рассчитывается как скалярное произведение вектора запроса на ключевой вектор соответствующего слова, которое мы оцениваем. Итак, если мы обрабатываем самовнимание для слова в позиции №1, первая оценка будет скалярным произведением q1 и k1. Вторая оценка будет скалярным произведением q1 и k2.

Изображение из 4

На третьем и четвертом шагах баллы делятся на 8 (квадратный корень из размерности ключевых векторов, используемых в статье - 64. Это приводит к получению более стабильных градиентов.Здесь могут быть другие возможные значения, но это значение по умолчанию), затем передайте результат с помощью операции softmax. Softmax нормализует оценки, так что все они положительные и в сумме составляют 1.

Изображение из 4

Эта оценка softmax определяет, насколько каждое слово будет выражено в этой позиции. Очевидно, что слово в этой позиции будет иметь наивысший балл softmax, но иногда полезно обратить внимание на другое слово, имеющее отношение к текущему слову.

Пятый шаг - это умножение каждого вектора значений на показатель softmax (при подготовке к их суммированию).Интуиция здесь состоит в том, чтобы сохранить неизменными значения слов, на которых мы хотим сосредоточиться, и заглушить не относящиеся к делу слова (например, умножив их на крошечные числа, такие как 0,001).

Шестой этап предназначен для суммирования векторов взвешенных значений. Это дает результат слоя самовнимания в этой позиции (для первого слова).

Изображение из 4

На этом расчет самовнимания завершен. Результирующий вектор - это тот, который мы можем отправить в нейронную сеть с прямой связью.Однако в реальной реализации этот расчет выполняется в матричной форме для более быстрой обработки. Итак, давайте посмотрим на это теперь, когда мы увидели интуитивное вычисление на уровне слов.

Multihead Внимание

Трансформаторы в принципе так и работают. Есть еще несколько деталей, которые улучшают их работу. Например, вместо того, чтобы обращать внимание друг на друга только в одном измерении, Трансформеры используют концепцию многоголового внимания.

Идея заключается в том, что всякий раз, когда вы переводите слово, вы можете уделять каждому слову разное внимание в зависимости от типа вопроса, который вы задаете.На изображениях ниже показано, что это значит. Например, когда вы переводите «ударом ногой» в предложении «Я ударил по мячу», вы можете спросить «Кто ударил ногой». В зависимости от ответа перевод слова на другой язык может измениться. Или задайте другие вопросы, например, «Что сделал?» И т. Д.

.

Смотрите также