Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 3:10Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -3:10 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%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Нашлись ребята, которые решили упростить LSTM, и придумали "gated recurrent unit" или "грушку". Ключевая идея здесь ровно такая же — поток ошибки постоянного объёма. Однако теперь потоком ошибки управляют не два шлюза, а один — по сути, этот шлюз на каждом шаге осуществляет выбор между двумя альтернативами: оставить предыдущее значение, или обновить. Обновление вычисляется похожим образом (тоже с тангенсом). Однако тут внутри есть ещё один шлюз, который управляет чувствительностью вектора "g" к предыдущему значению состояния. В результате, количество параметров сократилось на треть — ну что ж неплохо. На практике GRU и LSTM, в большинстве задач, работают практически одинаково и дают очень близкое качество. То есть сеть упростилась, стала учиться лучше, но при этом осталось достаточно мощной. Кажется, одна из проблем рекурренток частично решена. Однако есть вторая проблема — скорость. По-прежнему, рекуррентки относительно плохо распараллеливаются — в первую очередь из-за вот этих вот зависимостей. В результате каждый элемент вектора скрытого состояния зависит от всего вектора предыдущего состояния. Это заметили авторы ещё одного вида рекурренток, который называется "simple recurrent unit".[1] Они заменили матрицу и матричное произведение на вектор и поэлементное произведение. Таким образом, теперь можно параллельно вычислять значение разных элементов рекуррентных векторов в рамках одного шага. С учётом того, что, на практике, размерность этих векторов составляет от нескольких сотен до пары тысяч, это даёт очень хороший прирост производительности. Кроме того, в этой сети ещё в два раза меньше параметров, поэтому она ещё меньше переобучается. Да, она слабее, чем LSTM, но, на практике, за счёт более простой структуры, процесс обучения идёт более эффективно и качество решения задачи остаётся прежним, или может даже немного улучшится. В этом видео мы разобрались, что такое рекуррентные нейросети, какие сложности в процессе их обучения возникают — в первую очередь это взрыв градиента (тогда градиенты просто отсекают[2]) и затухание градиента. Для борьбы со второй проблемой придумывают специальные архитектуры. Самая старая, проверенная и популярная — LSTM. Относительно недавно был предложен облегченный вариант — "грушка". И ещё более недавно придумали, как можно упростить и, при этом, ускорить рекуррентки — примером такой работы является simple recurrent unit.
[1] Lei T. et al. Simple recurrent units for highly parallelizable recurrence //arXiv preprint arXiv:1709.02755. – 2017. (https://arxiv.org/abs/1709.02755)
[2] How to Avoid Exploding Gradients With Gradient Clipping https://machinelearningmastery.com/how-to-avoid-exploding-gradients-in-neural-networks-with-gradient-clipping/

К сожалению, у нас пока нет статистики ответов на данный вопрос, но мы работаем над этим.