Итак, сегодня давайте закончим реализацию новой архитектуры RNN из этой статьи « Емкость и обучаемость в рекуррентных нейронных сетях ». И поскольку мы уже реализовали Update Gate RNN в моем последнем сообщении в блоге.
« Только Numpy: реализация и сравнение шлюза обновления Google Brain (пропускная способность и обучаемость в рекуррентных нейронных сетях) RNN, инициализация RNN доктора Хинтона и Vanilla RNN с интерактивным кодом. »

Давай закончим работу.

Сетевая архитектура: математическая форма

Эта сеть была очень другой, не только с повторяющейся частью, но и с выводом глубины (обозначена как Y - линия 19). Теперь давайте посмотрим на графическое представление Сети.

Сетевая архитектура

Синяя рамка → Повторяющиеся скрытые состояния
Красная рамка → Новый вывод глубины
Зеленая рамка → Ввод при каждой отметке времени

Опять же, очень прямо, просто чтобы добавить несколько примечаний.

σ () → Логическая функция активации сигмоида
S1 () → Функция активации ReLU ()
S2 () → Функция активации tanh ()

Операция прямой подачи (для каждой отметки времени)

Зеленая рамка → Стоимость вывода на отметке времени 1
Розовая рамка → Стоимость вывода на отметку времени 2
Пурпурная рамка → Стоимость вывода на отметке времени 3

Опять же, ничего особенного, только стандартная прямая подача RNN.

Обратное распространение в соответствии с YY3, HH3, GY3, GH3 (отметка времени = 3)

Здесь следует отметить одну вещь: я не собираюсь использовать производную по весам, скорее я буду использовать производную по YY, HH, GY и GH.

Почему? Что ж, пожалуйста, взгляните на Black Box, мы выполняем обратное распространение по отношению к входу в функцию активации. После этого мы можем либо

умножьте h2, если мы хотим выполнить обратное распространение по Wrecyy, Wrechh, Wrecgy или Wrecgh, или

умножьте x3, если мы хотим выполнить обратное распространение с учетом Wxyy, Wxhh, Wxgy или Wxgh.

Ниже приведен код для обратного распространения, реализованный для отметки времени 3.

Обратное распространение в соответствии с YY2, HH2 (отметка времени = 2)

Опять же, производная от YY2, а не от Wrecyy или Wxyy. Также обратите внимание на термин, подчеркнутый красной линией, этот термин равен нулю, поскольку нет переменной, которая связывает YY2 со стоимостью на отметке времени 3. (Это немного упрощает нашу жизнь).

Ниже приведен код для обратного распространения, реализованный для отметки времени 2.

Обратное распространение в соответствии с YY1, HH1 (отметка времени = 1)

Обратите внимание, где я поставил фиолетовую звезду, я забыл некоторые термины, это должно быть (h2 - hh3) * (d_σ ()) * (Wrecgh), а не просто (h2 - hh3).

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

Ниже приведен код для обратного распространения, реализованный для отметки времени 1.

Обучение и результаты

Поддельные данные обучения, показанные слева, просто суммируют числа в каждой временной метке. Итак, в первой строке x мы видим, что он идет от 0, 0,5, 0. Таким образом, уважаемое значение истинности будет 0, 0,5 и 0,5. (Первая строка Y.)

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

Интерактивный код

Я перешел на Google Colab для интерактивных кодов! Таким образом, вам понадобится учетная запись Google для просмотра кодов, а также вы не можете запускать сценарии только для чтения в Google Colab, поэтому сделайте копию на своей игровой площадке. Наконец, я никогда не буду спрашивать разрешения на доступ к вашим файлам на Google Диске, просто к сведению. Удачного кодирования!

Щелкните здесь, чтобы получить доступ к интерактивному коду. (Версия Google Colab)

Пожалуйста, щелкните здесь, чтобы получить доступ к интерактивному коду (Repl It Version)

Заключительные слова

У Google Brain всегда есть самые интересные варианты сетевой архитектуры.

Если будут обнаружены какие-либо ошибки, напишите мне по адресу [email protected], если вы хотите увидеть список всех моих писем, пожалуйста, просмотрите мой сайт здесь.

Тем временем подпишитесь на меня в моем твиттере здесь и посетите мой веб-сайт или мой канал Youtube для получения дополнительной информации. Я также сделал сравнение Decoupled Neural Network здесь, если вам интересно.

Ссылка

  1. Коллинз, Дж., Золь-Дикштейн, Дж., И Сусилло, Д. (2016). Емкость и обучаемость в рекуррентных нейронных сетях. Препринт arXiv arXiv: 1611.09913.
  2. Со, Дж. Д. (24 января 2018 г.). Only Numpy: внедрение и сравнение Google Brain Update Gate (возможности и обучаемость в… Получено 29 января 2018 г. из https://becominghuman.ai/only-numpy-implementing-and-comparing-google-brains-update-gate- способность-и-обучаемость-в-940f0ad80649