Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 4:32Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -4:32 1xСкорость воспроизведения2x1.75x1.5x1.25x1x, выбрано0.75x0.5xГлавыГлавыОписанияОтключить описания, выбраноСубтитрынастройки субтитров, откроется диалог настройки субтитровСубтитры выкл., выбраноЗвуковая дорожкаPicture-in-PictureПолноэкранный режимThis is a modal window.Начало диалоговго окна. Кнопка Escape закроет или отменит окноТекстColorБелыйЧерныйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйФонColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйПрозрачныйОкноColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачныйПолупрозрачныйПрозрачностьРазмер шрифта50%75%100%125%150%175%200%300%400%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Находчивые ребята из фейсбука предложили использовать архитектуру, состоящую целиком из свёрток[1,2] — свёрточные модули хорошо распараллеливаются, так как зависимости по данным — локальны и укладываются в ширину ядра свёртки. Свёртки абсолютно инвариантны к смещению, к абсолютной позиции относительно начала последовательности. То есть, по умолчанию, они не знают, видят они сейчас слово в начале предложения или в конце предложения. Часто это не очень хорошо. И поэтому, в таких архитектурах используются так называемое "позиционное кодирование", то есть к вектору признаков каждого токена прибавляется какой-то код, который зависит от индекса слова в предложении. Одну возможную схему позиционного кодирования мы рассматривали в лекции про трансформер. Для того, чтобы учесть, с помощью свёрточных блоков, зависимости между словами, находящимися на расстоянии "N", требуется порядка O(N/K) слоёв, где K — это ширина ядра свёртки. При этом, каждый новый слой использует свой набор параметров — они не разделяются между слоями. Это делает обработку длинных зависимостей очень дорогой в смысле использования памяти. Если мы используем прореженные свёртки, то обработка длинных зависимостей становится немного дешевле, но, всё равно — дороже, чем для рекурренток (дороже, в первую очередь, в смысле количества памяти). Такие архитектуры обладают всеми преимуществами вышеописанной архитектуры Google Machine Translation. То есть, они достаточно выразительные, мощные, и на ряде задач они дают лучшее качество, чем seq2seq модели, основанные на рекуррентках. При этом, в энкодере используется двунаправленный контекст, то есть, для вычисления вектора слова на каком-то уровне, используются как соседи слева, так и соседи справа. Свёрточные нейросети гораздо эффективнее с вычислительной точки зрения, то есть, они лучше заполняют вычислительные мощности видеокарт. Однако, как мы уже сказали, длинные зависимости учитывать дорого, а это нужно при обработке текста. И с проблемой разнообразия мы по-прежнему ещё ничего не сделали. Следующее логичное развитие — это использовать трансформер, состоящий целиком из механизмов внутреннего внимания.[3] Эта архитектура также состоит из двух частей — энкодера и декодера. В энкодере используется полный механизм внимания, учитывающий все пары элементов последовательности. В декодере у нас ситуация особая — когда мы генерируем очередное слово, мы не видим ничего справа. Мы можем опираться только на часть сгенерированной последовательности слева от текущего слова. Для того, чтобы в режиме обучения игнорировать часть последовательности справа от текущего слова, используется так называемый "механизм внутреннего внимания с маской". Маска применяется перед софтмаксами, внутри механизма внимания, и приводит к тому, что некоторые позиции получают нулевой вес и не участвуют в вычислении результирующих векторов. Так же, как и в полносвёрточных архитектурах, здесь необходимо позиционное кодирование для того, чтобы сообщить нейросети информацию о том, где, относительно начала текста, находится каждое входное слово. На практике, часто используется синусоидальный сигнал, который складывается, добавляется к эмбеддингу токена. Как мы уже говорили в лекции про трансформер и про механизмы внимания, стоимость обработки зависимостей любой длины — константна и не зависит от расстояния между элементами последовательностей, между которыми зависимость существует.
[1] Gehring J. et al. Convolutional sequence to sequence learning //Proceedings of the 34th International Conference on Machine Learning-Volume 70. – JMLR. org, 2017. – С. 1243-1252.
[2] Gehring J. et al. A convolutional encoder model for neural machine translation //arXiv preprint arXiv:1611.02344. – 2016.
[3] Vaswani, Ashish, et al. Attention is all you need. Advances in neural information processing systems. 2017.
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.