Нейросеть, которую почти не учат или что такое резервуарные вычисления
В машинном обучении есть негласный договор. Если хочешь чтобы сеть работала — обучи все веса. Итеративно, через обратное распространение ошибки, тысячи шагов градиентного спуска. А вот к резервуарным вычислениям этот договор применяется с обратной логикой. Подавляющее большинство весов генерируются случайно и никогда не меняются. Обучается только один выходной слой.
И это, как ни странно, работает.
Начнем, впрочем, говорить про проблему — иначе непонятно, зачем вообще идти на такой компромисс.
Рекуррентные нейросети придуманы для последовательных данных — временных рядов, речи, текста. В отличие от обычных сетей, у них есть интересное состояние. Выход на шаге t зависит не только от входа на шаге t, но и от всего что было до. Это делает их мощными — и одновременно очень неудобными в обучении.
Обучают РНС через BPTT — метод обратного распространения ошибки по времени. Собственно, алгоритм раскрывает сеть во времени. Берет все T шагов, строит граф вычислений и считает градиент через него. На каждом шаге градиент проходит через матрицу весов W. Если W перемножать саму на себя T раз подряд — при собственных значениях меньше 1 произведение стремится к нулю экспоненциально. При больше 1 — к бесконечности.
Первое называется затуханием градиента, второе — взрывом градиента. И это, кстати, нюанс.
RNN плохо запоминает то, что было давно. Градиент от событий на шаге t=1 до шага t=100 затухает настолько, что сеть его просто не видит. LSTM частично решает это через систему гейтов, которые контролируют поток информации. Но LSTM тяжелее, медленнее, и проблему не убирает — немного смягчает.
Читать далее
Источник: habr.com
Похожие записи
Оцените материал:
Похожие записи
Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
