Итак, я сделал сообщение о понимании обратного распространения на Max Pooling Layer, а также Transpose Convolution. Следующим шагом будет использование этих знаний для создания многоканальной / многоуровневой CNN, так что… .lets это сделают! Кроме того, к вашему сведению, я использую оптимизатор импульса.
Прежде чем читать этот пост, я рекомендую прочитать этот вопрос Quora: « Почему Джеффри Хинтон с подозрением относится к обратному распространению и хочет, чтобы ИИ начал все сначала? » или это сообщение в блоге « Почему мы должны быть такими? С большим подозрением относится к обратному распространению ». Оба очень интересны.
Также обратите внимание, что было бы лучше, если бы вы уже хорошо разбирались в обратном распространении с помощью транспонированной свертки и максимального уровня объединения, поскольку я не буду вдаваться в подробности в этом посте.
Данные для обучения и объявление гиперпараметров
Как видно выше, все ядра представляют собой (3 * 3) матрицу, и мы выполняем очень простую двоичную задачу по набору данных Распознавание рукописных цифр только для изображений 0 и 1.
Сетевая архитектура
Вход → Изображение, имеющее размер (8 * 8)
Красная звезда → Уровень 1 с двумя разными каналами
Красный круг → Активация и максимальный уровень объединения, примененный к уровню 1
Голубая звезда → Уровень 2 с четырьмя разностными каналами
Синий круг → Операция активации и максимального объединения, примененная к уровню 2
Зеленая звезда → Уровень 3 с полностью присоединенным грузом (W3) Размер (16 * 28)
Зеленый круг → Функция активации применима к уровню 3
Розовая звезда → Слой 4 с полностью присоединенным грузом (W4) Размер (28 * 36)
Розовый кружок → Слой активации, примененный к слою 4
Черная звезда → Слой 5 с полностью присоединенным грузом (W5) Размер (36 * 1)
Черный круг → Слой активации, примененный к слою 5
Черный ящик → Функция стоимости с использованием нормы L2
Операция прямой подачи реализована
Каждый цвет представляет работу этого слоя, здесь следует отметить две вещи.
- Я выполнил нулевое заполнение перед каждым сверточным слоем, чтобы сохранить размер.
- Я использовал множество различных функций активации для каждого слоя.
Реализовано обратное распространение в соответствии с W5, W4 и W3
Стандартное обратное распространение с соответствующей производной для каждой функции активации, для стандартных полносвязных слоев, ничего особенного.
Реализовано обратное распространение по отношению ко всем W2 (W2a, W2b, W2c и W2d)
Первая строка кода (подчеркнутый зеленый) → Распространение назад от предыдущего слоя
Область в зеленой рамке → Расчет градиента для W2a, W2b, W2c и W2d в их соответствующем порядке.
Реализовано обратное распространение для всех W1 (W1a и W1b)
Первая красная рамка → Градиент в соответствии с W1a
Вторая красная рамка → Градиент в соответствии с W2a
Обучение и результаты
Довольно хорошие результаты, итоговые результаты не так уж и плохи. Как видно выше, количество эпох было установлено на 500. И Сеть классифицировала каждое изображение в тестовом наборе, кроме одного.
Преодоление математики в обратном распространении
Итак, выше показано правильное обратное распространение, где мы выполняем поэлементное умножение между производной из предыдущего слоя и производной функции активации. Однако из любопытства я решил сделать что-то вроде ниже.
Синяя линия → Простой элемент Мудрое умножение
Зеленая линия → Выполнение транспонирования только для вычисленной производной после максимального уровня объединения
Красная линия → Выполнение транспонирования только для маски максимального уровня объединения.
Для простоты я буду называть вышеуказанную сеть разорванной сетью опоры.
Я не ожидал, что сеть будет работать хорошо после изменений, мне просто было любопытно. Однако давайте посмотрим на результаты, показанные ниже. Каждый раз я проводил три разных эксперимента с разными гиперпараметрами. (Изменение размеров только последних полностью связанных слоев.)
Результат 1: обе сети имеют размерность W3 (16 * 18), W4 (18 * 20) и W5 (20,1)
Красный ящик → Результат сломанной задней опорной сети.
Синяя рамка → Результат исходной сети
Как видно, для первого эксперимента обе сети имели точность 100 на тестовых данных, однако разорванная сеть имела более низкую стоимость в эпоху 250.
Результат 2: обе сети имеют размерность W3 (16 * 48), W4 (48 * 56) и W5 (56,1)
Красный прямоугольник → Результат разорванной сети
Синий ящик → Результат исходной сети
Зеленая звезда → Ошибочные предсказания сети
На этот раз это было интересно, сломанная сеть стоила дороже, но имела точность 100 на тестовых данных. В то время как исходная сеть имела более низкую стоимость, а некоторые прогнозы на основе тестовых данных ошибались.
Результат 3: забыли размер веса (LOL), но у них был одинаковый размер для обеих сетей.
Красный ящик → Результат разорванной сети
Синий ящик → Результат исходной сети
Опять же, обе сети имели точность 100 на тестовых данных. В то время как Broken Net имеет более высокую стоимость.
Интерактивный код: исходная сеть
Примечание: онлайн-компилятор не имеет «наборов данных импорта из sklearn», поэтому я не смог просто скопировать и вставить код, который я использовал на своем ноутбуке. Поэтому я скопировал четыре обучающих примера, которые представляют рукописную цифру 0,1,1,0 в соответствующем порядке, а также скорректировал гиперпараметры.
Чтобы получить доступ к исходному сетевому коду, нажмите на эту ссылку.
Интерактивный код: разорванная сеть
Примечание: онлайн-компилятор не имеет «наборов данных импорта из sklearn», поэтому мне не удалось просто скопировать и вставить код, который я использовал на своем ноутбуке. Поэтому я скопировал четыре обучающих примера, которые представляют рукописную цифру 0,1,1,0 в соответствующем порядке, а также скорректировал гиперпараметры.
Чтобы получить доступ к неработающему сетевому коду, нажмите здесь.
Заключительные слова
Подобные результаты меня восхищают, и это причина, по которой я делаю обратное распространение вручную. Даже доктор Хинтон с подозрением относится к обратному распространению и хочет, чтобы ИИ начал все сначала. Вы, я не знаю, как начинать с LOL, но я думаю, что для нас очень важно получить более глубокое понимание обратного распространения и попробовать творческие методы, чтобы увидеть, работают ли другие методы как хорошая обратная опора.
Если будут обнаружены какие-либо ошибки, напишите мне по адресу [email protected].
Тем временем подпишитесь на меня в моем твиттере здесь и посетите мой веб-сайт или мой канал Youtube для получения дополнительной информации. Я также сделал сравнение Decoupled Neural Network здесь, если вам интересно.
Ссылки
- Перес, К. Э. (2017, 16 сентября). Почему мы должны с большим подозрением относиться к обратному распространению. Получено 29 января 2018 г. с сайта «https://medium.com/intuitionmachine/the-deeply-suspicious-nature-of-backpropagation-9bed5e2b085 effe.
- Распознавание рукописных цифр¶. (нет данных). Получено 29 января 2018 г. с сайта http://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html.
- Бхатия, Р. (18 января 2018 г.). Обратное распространение: Ахиллесова пята современного ИИ. Получено 29 января 2018 г. с сайта https://analyticsindiamag.com/back-propagation-is-it-the-achilles-heel-of-todays-ai/.
- 2018. [Онлайн]. Доступно: https://www.quora.com/Why-is-Geoffrey-Hinton-suspicious-of-backpropagation-and-wants-AI-to-start-over. [Доступ: 29 января 2018 г.].