Понимание простой нейронной сети, особенно обратного распространения по размерам матрицы, со стороны программирования.

Смотри больше постов на моем сайте здесь.

Аннотация. Этот пост предназначен для тех, кто имеет общее представление о том, что такое нейронная сеть, но застрял в реализации программы из-за того, что не совсем ясно представляет себе, что происходит под капотом. Если вы новичок в машинном обучении, я предлагаю вам добавить этот пост в закладки и вернуться к нему в будущем.

Попробуйте ответить на эти три вопроса, которые могут помочь вам решить, поможет ли вам сброс этого поста:

1. Что такое a, z и большая тета?
2. Включают ли a или z узел смещения? Как насчет большой теты?
3. Что такое малая дельта и большая дельта? Они в том же порядке?

Если вы не можете четко ответить на вопросы, пожалуйста, продолжайте читать; в противном случае прервать.

Что такое нейронная сеть на самом деле?

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

Например, при наличии изображения почерка «один» программа должна вывести результат, в котором говорится, что запрос принадлежит к классу «один».

Как вы и предполагали, сначала я опубликую основную часть.

В этом примере показана простая трехслойная нейронная сеть с узлом входного слоя = 3, узлом скрытого слоя = 5 и узлом выходного слоя = 3.

Для простоты я рисую только два тэта-отношения в каждой большой тета-группе.

Вы должны изучить эту картинку Neural Network «Guidelines» с вопросами ниже:

1. Существует ли слой 0?
2. Какой слой содержит единицу смещения?
3. Есть ли в каждом слое узел с именем a0?
4. Что такое z? Это вектор, начинающийся с z1?
5. Какова разница в размерах между a и z в одном и том же слое?
6. Большая Theta принадлежит слою слева или справа от нее?

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

Обратное распространение

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

Например, обратное распространение theta1^(3) от a1^(3) должно воздействовать на все пути узлов, соединяющие уровень 2 с a1^(3).

Обратите внимание, и это важно: при переходе от уровня 2 к уровню 1 вы не должны включать тета из узла смещения!

Я записал детали матрицы демиссий при расчете всей сети. Проверьте их шаг за шагом будет полезно.

На всякий случай, если вы забыли, как выполнять умножение матриц подряд:

Теперь реализуйте это! Пожалуйста, подумайте хорошенько, если хотите продолжить!

Несколько быстрых шагов для справки. Фотографии сделаны с урока Эндрю. Я также рекомендую вам использовать их структуру кода, чтобы пропустить менее важную часть, которая создает часть тестирования и делает ваш опыт кодирования неинтересным, если вы делаете это самостоятельно.

Задание можно скачать отсюда [клик].

Нажмите здесь, чтобы посетить мой оригинальный блог для формул и решений.