Прежде чем продолжить, обратите внимание, что это экспериментальная модель, я просто хотел испытать себя, чтобы построить эту модель. Таким образом, существует высокая вероятность того, что в процессе обратного распространения есть ошибки. Я вернусь к этому посту, чтобы подтвердить этот вопрос. Кроме того, все GIF из этого сообщения от GIPHY.

LSTM сложно обучить и еще сложнее реализовать без использования фреймворков. И причина, на мой взгляд, в огромном количестве уравнений, которые нам нужно решить, чтобы получить градиент для каждого веса в разных временных метках. Выполняя обратное распространение по ГРУ, я понял, сколько уравнений нам нужно, чтобы получить градиент относительно одного веса во временной метке 1.

Фактически, количество необходимых нам уравнений растет экспоненциально по отношению к количеству повторяющихся соединений для каждого уровня. Таким образом, в случае LSTM количество необходимых уравнений увеличивается на… ..

4^n where n is the time stamp going in back wards direction

Также плюс альфа, если мы получаем стоимость и для другого слоя с отметкой времени, а не только для самого внешнего слоя. Пожалуйста, ознакомьтесь с моим сообщением в блоге о выполнении операций прямого и обратного распространения в lstm здесь.

Однако есть один подход к уменьшению количества необходимых нам уравнений - это использование несвязанной архитектуры нейронной сети. Используя этот подход, мы можем нарушить цепное правило, вроде… ..

Имея это в виду, позвольте мне объяснить, что я хотел сделать. Также, если вы не знакомы с LSTM, посмотрите Colah’s Blo g.

Набор данных (изображения GIF) - данные обучения

Выше представлены данные о дрессировке щенка, и мы помечаем их как 1. Также все GIF-файлы были изменены до 100 * 100 пикселей и содержат только 3 кадра. Итак, всего у нас 18 кадров.

Выше находится младшая часть обучающих данных, и мы отметим их как 0. Опять же, размер всех GIF-файлов был изменен до 100 * 100 пикселей и содержит только 3 кадра. Таким образом, у нас есть 36 кадров, включая гифки со щенками и гифками с младенцами.

Набор данных (изображения GIF) - тестовые данные

Как видно выше, у нас есть 4 GIF в качестве тестовых данных, все они снова имеют размер 100 * 100 пикселей и содержат только 3 кадра. Итого у нас 12 кадров.

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

Оранжевая рамка → Oracle Box для отметки времени 1
Красная рамка → Oracle Box для отметки времени 2
Синяя рамка → Oracle Box для отметки времени 3

Purple Box → Окончательный вывод LSTM, это значение будет подключено к полностью подключенной нейронной сети для прогнозирования того, является ли данный GIF GIF щенком или GIF ребенка.

Черный ящик → Кадр ввода для каждой отметки времени, поскольку у нас есть 3 кадра для каждого файла GIF, у нас есть 3 отметки времени.

Таким образом, используя поле оракула для каждой временной отметки, мы можем сразу же обновить наши веса. Также следует отметить, что я использовал метод ООП для реализации каждого уровня, поэтому каждый уровень будет классом. На это меня вдохновило учебное пособие по независимой нейронной сети от iamtrask.

И у каждого слоя есть три функции.
a. Инициализация → Где создаются слои Synthetic Weights
b. Синтетическое обновление с прямой связью → Выполните стандартную операцию прямой прямой связи и обновите вес с помощью синтетических градиентов
c. Обновление синтетического веса → Обновите синтетический градиент каждого слоя, используя градиент, распространенный из следующих слоев.

Понимая это, я «попытаюсь» описать каждую операцию, предоставив снимок экрана.

Развязанный уровень LSTM: прямая связь

Итак, выше показан процесс прямой связи для каждого уровня, и, как вы можете видеть, это стандартная операция прямой связи в слоях LSTM. Где у нас есть 4 ворот: забыть, вход, ячейка и выход. Каждые ворота имеют разные функции активации.

Разделенный слой LSTM: обновление градиента с использованием синтетического градиента

Подчеркнутый красный → Использование синтетического градиента для расчета частоты ошибок
Синее поле → Обновление повторяющихся весов с использованием вычисленных коэффициентов ошибок.

Итак, как показано выше, теперь мы можем обновлять повторяющиеся веса сразу после завершения операции прямой связи.

Разделенный слой LSTM: переход градиента к предыдущему слою

Подчеркнутый красный → Используя обновленные повторяющиеся веса, мы вычисляем градиент, который будет передан на предыдущий слой.

Теперь эта операция применяется только к слоям после первого слоя, поскольку у нас нет слоя 0. Однако, поскольку мы используем подход ООП, даже слой 1 выполнит эту операцию. Но мы не будем хранить возвращаемую переменную, как показано ниже.

Розовая рамка → Игнорирование возвращенного переходящего градиента из слоя 1
Желтое подчеркивание → Сохранение переходящего градиента из слоя 2 и передача его слою 1 для выполнения синтетического обновления градиента .

Разделенный слой LSTM: обновление синтетического градиента

Синяя рамка → Обновление синтетических весов Забытых ворот
Розовая рамка → Обновление синтетических весов входных ворот
Зеленая рамка → Обновление ячейки Синтетические веса ворот
Пурпурный прямоугольник → Обновление синтетических весов выходных ворот

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

Полностью связанный слой

Есть еще одна последняя часть, о которой я не говорил, и это полностью связанный слой.

Красный прямоугольник → Векторизация окончательного вывода из LSTM
Синий ящик → Стандартная операция прямой связи для полностью подключенного слоя и функция стоимости для нормы L2
Зеленый ящик → Стандартное обратное распространение для полностью связанного слоя.

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

Выше стоимость обучения, она сначала начиналась с 0,39 и упала до 0,011 в последнюю эпоху. (Я тренировался 18 эпох.)

Красный прямоугольник → Прогноз модели на тестовом наборе до обучения
Синий прямоугольник → Прогноз модели на тестовом наборе после обучения
Подчеркнутый черным цветом номер → Как изменилась уверенность модели

Выше представлен прогноз модели относительно того, был ли данный GIF GIF-изображением щенка (обозначается 1) или GIF-файлом Baby (обозначается 0). Теперь будет очень справедливо сказать, что у меня есть только 4 обучающих GIF, и три из них правильно предсказаны еще до обучения. Однако я не сосредотачиваюсь на точности, а на чем-то другом.

Пожалуйста, обратите внимание на подчеркнутые черным цифры, это то, на чем я сосредоточен. Похоже, что модель научилась некоторым функциям (я понятия не имею, какие). Это позволяет ей более уверенно принимать решение, принадлежит ли данный GIF к одной категории.

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

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

Теперь запустить этот код немного сложно, так как я использовал свой собственный набор данных. Однако не волнуйтесь, я загрузил все использованные GIF в свой общедоступный Gitlab, чтобы получить к нему доступ, пожалуйста, пройдите по этой ссылке. Для перехода на главную страницу репозитория нажмите здесь. Теперь, пожалуйста, следуйте пошаговому руководству.

  1. Загрузите файл datasmall.zip по ссылке выше. Которая, конечно же, содержит смертельный компьютерный вирус «».

2. Скопируйте код из Google Colab на свою игровую площадку. После запуска кода появится небольшая кнопка, как показано выше. (Зеленый ящик). Нажмите «Выбрать файлы» и выберите недавно загруженный файл datasmall.zip.

3. Программа завершит загрузку данных в Google Colab и продолжит работу.

Поэтому, имея в виду приведенное выше короткое руководство, нажмите здесь, чтобы получить доступ к интерактивному коду.

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

Используя эту независимую архитектуру, можно реализовать сеть LSTM, которая имеет большую глубину, чем 3 уровня. Кроме того, я начинаю новую серию, в которой я вернусь ко всей своей прошлой публикации и дважды, трижды проверю, все ли я правильно реализовал.

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

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

Ссылка

  1. Понимание сетей LSTM. (нет данных). Получено 10 февраля 2018 г. с сайта http://colah.github.io/posts/2015-08-Understanding-LSTMs/.
  2. Со, Дж. Д. (15 января 2018 г.). Only Numpy: получение прямой связи и обратного распространения в закрытых рекуррентных нейронных сетях (GRU) -… Получено 10 февраля 2018 г. из https://medium.com/@SeoJaeDuk/only-numpy-deriving-forward-feed-and- обратное распространение в стробированных рекуррентных нейронных сетях-gru-8b6810f91bad
  3. Со, Дж. Д. (11 января 2018 г.). Only Numpy: получение прямой связи и обратного распространения в долгосрочной краткосрочной памяти (LSTM), часть 1. Получено 10 февраля 2018 г. из https://becominghuman.ai/only-numpy-deriving-forward-feed-and-back- распространение-в-долгой-кратковременной-lstm-part-1-4ee82c14a652
  4. Ядерберг М., Чарнецки В. М., Осиндеро С., Виньялс О., Грейвс А. и Кавукчуоглу К. (2016). Разделенные нейронные интерфейсы с использованием синтетических градиентов. Препринт arXiv arXiv: 1608.05343.
  5. Г. (нет данных). Поиск по всем GIF-файлам и создание собственных анимированных GIF-файлов. Получено 10 февраля 2018 г. с https://giphy.com/.
  6. Глубокое обучение без обратного распространения. (нет данных). Получено 10 февраля 2018 г. с сайта https://iamtrask.github.io/2017/03/21/synthetic-gradients/.