Дата публикации Jun 6, 2018
В течение последних двух недель мне не терпелось реализовать разныеРекуррентные нейронные сети(RNN) и, наконец, у меня есть время, чтобы реализовать все из них. Ниже приведен список различных случаев RNN, которые я хотел попробовать.
Случай а: Ванильная рекуррентная нейронная сеть
Случай b: многопотоковая рекуррентная нейронная сеть
Случай c: сцепленная рекуррентная нейронная сеть
Случай d: внутренняя сверточная рекуррентная нейронная сеть
Случай e: Lag 2 Recurrent Neural Network
Обратите внимание, что все эти модели просто для развлечения и для выражения моего творчества. Кроме того, базовый код, который я собираюсь использовать в этом посте, взят из моего старого поста «Gated Recurrent Convolution NN для распознавания текста».
Ванильная рекуррентная нейронная сеть
Всего есть 5 различных вариантов RNN, которые я хочу реализовать. Тем не менее, для полного понимания всех реализаций было бы неплохо иметь четкое представление о ванильном RNN (случай a - это обычный RNN, поэтому, если вы понимаете код для случая a, то вы готовы идти).
Если кто-то хочет просмотреть простой RNN, пожалуйста, посетите мой старый пост в блоге «Only Numpy: ванильная рекуррентная нейронная сеть, дающая обратное распространение через практику времени».
Случай a: Ванильная рекуррентная нейронная сеть (результаты)
Красная коробка→ 3 сверточный слой
оранжевый→ Глобальный средний пул и SoftMax
Зеленый круг→ Скрытая единица во время 0
Синий круг→ Ввод в 4 метки времени
Черный ящик→ Рекуррентная нейронная сеть с 4 временными метками
Как видно выше, базовая сеть представляет собой простую сеть RNN в сочетании с сверточной нейронной сетью для классификации. RNN имеет метку времени 4, что означает, что мы собираемся предоставить сети 4 различных вида ввода для каждой метки времени. И для этого я собираюсь добавить немного шума к исходному изображению.
Синяя линия→ Стоимость поезда со временем
Оранжевая линия→ Точность поезда с течением времени
Зеленая линия→ Стоимость теста с течением времени
Красная линия→ Проверка точности с течением времени
Как видно выше, наша базовая сеть уже работает хорошо. Теперь вопрос заключается в том, как работают другие методы, и сможет ли он упорядочиться лучше, чем наша базовая сеть.
Случай b: многопотоковая рекуррентная нейронная сеть (идея / результаты)
Красная коробка→ 3 сверточный слой
оранжевый→ Глобальный средний пул и SoftMax
Зеленый круг→ Скрытая единица во время 0
Синий круг→ Свертка входного потока
Желтый круг→ Полностью подключенный сетевой поток
Черный ящик→ Рекуррентная нейронная сеть с 4 временными метками
Идея этого RNN состоит в том, чтобы просто предоставлять другое представление данных для RNN. В нашей базовой сети у нас есть сеть или необработанное изображение или изображение с добавленным шумом.
Красная коробка→ Дополнительные четыре слоя CNN / FNN для «обработки» ввода
Синяя коробка→ Создание входов на каждой отметке времени
Как видно из приведенного ниже, теперь наш RNN принимает вход тензорного размера с [batch_size, 26, 26, 1], уменьшая ширину и высоту на 2. И я надеялся, что различное представление данных будет действовать как регуляризация. (Аналогично увеличению данных)
Синяя линия→ Стоимость поезда со временем
Оранжевая линия→ Точность поезда с течением времени
Зеленая линия→ Стоимость теста с течением времени
Красная линия→ Проверка точности с течением времени
Как видно из вышесказанного, сеть работала довольно хорошо и на тестовых изображениях превзошла нашу базовую сеть на 1 процент.
Случай c: объединенная рекуррентная нейронная сеть (идея / результаты)
Красная коробка→ 3 сверточный слой
оранжевый→ Глобальный средний пул и SoftMax
Зеленый круг→ Скрытая единица во время 0
Синий круг→ Ввод в 4 метки времени
Черный ящик→ Рекуррентная нейронная сеть с 4 временными метками
Черная изогнутая стрелка→ Объединенный вход для каждой отметки времени
Этот подход очень прост, идея заключалась в том, что на каждой отметке времени будут извлекаться различные функции, и для сети может быть полезно иметь больше функций с течением времени. (Для повторяющихся слоев.)
Синяя линия→ Стоимость поезда со временем
Оранжевая линия→ Точность поезда с течением времени
Зеленая линия→ Стоимость теста с течением времени
Красная линия→ Проверка точности с течением времени
К сожалению, это был огромный провал. Я предполагаю, что пустые скрытые значения не помогают (один бит) для работы сети.
Случай d: внутренняя сверточная рекуррентная нейронная сеть (идея / результаты)
Красная коробка→ 3 сверточный слой
оранжевый→ Глобальный средний пул и SoftMax
Зеленый круг→ Скрытая единица во время 0
Синий круг→ Ввод в 4 метки времени
Черный ящик→ Рекуррентная нейронная сеть с 4 временными метками
Серая стрела→ Выполнение внутренней свертки перед переходом на следующую отметку времени
Как видно выше, эта сеть принимает те же данные, что и наша базовая сеть. Однако на этот раз мы собираемся выполнить дополнительные операции свертки во внутреннем представлении данных.
Правильное изображение→ Объявление 3 нового слоя свертки
Левое изображение (красная коробка)→ Если текущий внутренний уровень не None, мы собираемся выполнить дополнительную операцию свертки.
У меня фактически не было теоретической причины этой реализации, я просто хотел посмотреть, работает ли она LOL.
Синяя линия→ Стоимость поезда со временем
Оранжевая линия→ Точность поезда с течением времени
Зеленая линия→ Стоимость теста с течением времени
Красная линия→ Проверка точности с течением времени
Как видно из вышесказанного, сеть отлично справилась со сближением, однако не смогла превзойти нашу базовую сеть. (К сожалению).
Случай e: Lag 2 Recurrent Neural Network (идея / результаты)
Красная коробка→ 3 сверточный слой
оранжевый→ Глобальный средний пул и SoftMax
Зеленый круг→ Скрытая единица в момент времени 0 (или отставание от 1)
Синий круг→ Ввод в 4 метки времени
Черный ящик→ Рекуррентная нейронная сеть с 4 временными метками
Фиолетовый круг→ Скрытый государственный лаг 2
В традиционной настройке RNN мы полагаемся только на самые предыдущие значения, чтобы определить текущее значение. Какое-то время я думал, что у нас нет оснований ограничивать время просмотра (или отставание) как 1. Мы можем расширить эту идею до задержки 3 или задержки 4 и т. Д. (Просто для простоты я взял задержку 2)
Синяя линия→ Стоимость поезда со временем
Оранжевая линия→ Точность поезда с течением времени
Зеленая линия→ Стоимость теста с течением времени
Красная линия→ Проверка точности с течением времени
К счастью, сеть работает лучше, чем базовая сеть. (Но с очень небольшим запасом), однако этот тип сети будет наиболее подходящим для данных временных рядов.
Интерактивный код / Прозрачность
Для Google Colab вам понадобится учетная запись Google для просмотра кодов, также вы не можете запускать сценарии только для чтения в Google Colab, поэтому сделайте копию на игровой площадке. Наконец, я никогда не буду запрашивать разрешение на доступ к вашим файлам на Google Диске, только к вашему сведению. Удачного кодирования! Также для прозрачности я загрузил все журналы тренировок на свой github.
Чтобы получить доступ к коду дляесли щелкнуть здесь, дляжурналы нажмите здесь.
Чтобы получить доступ к коду дляслучай b нажмите здесь, дляжурналы нажмите здесь.
Чтобы получить доступ к коду дляслучай с нажмите здесь, дляжурналы нажмите здесь.
Чтобы получить доступ к коду дляслучай с нажмите здесь, дляжурналы нажмите здесь.
Чтобы получить доступ к коду дляслучай с нажмите здесь, дляжурналы нажмите здесь.
Заключительные слова
Я хотел пересмотреть RNN в течение достаточно долгого времени, наконец, я смог это сделать.
Если обнаружены какие-либо ошибки, пожалуйста, напишите мне на jae.duk.seo@gmail.com, если вы хотите увидеть список всех моих писем, пожалуйста,посмотреть мой сайт здесь,
Тем временем следуйте за мной в моем твиттереВоти посетитьмой веб-сайтили мойYouTube каналдля получения дополнительной информации. Я также реализовалШирокие Остаточные Сети, пожалуйста, нажмите здесь, чтобы просмотреть блог позт.
Ссылка
© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map