Понимание простой нейронной сети, особенно обратного распространения по размерам матрицы, со стороны программирования.
Смотри больше постов на моем сайте здесь.
Аннотация. Этот пост предназначен для тех, кто имеет общее представление о том, что такое нейронная сеть, но застрял в реализации программы из-за того, что не совсем ясно представляет себе, что происходит под капотом. Если вы новичок в машинном обучении, я предлагаю вам добавить этот пост в закладки и вернуться к нему в будущем.
Попробуйте ответить на эти три вопроса, которые могут помочь вам решить, поможет ли вам сброс этого поста:
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 вы не должны включать тета из узла смещения!
Я записал детали матрицы демиссий при расчете всей сети. Проверьте их шаг за шагом будет полезно.
На всякий случай, если вы забыли, как выполнять умножение матриц подряд:
Теперь реализуйте это! Пожалуйста, подумайте хорошенько, если хотите продолжить!
Несколько быстрых шагов для справки. Фотографии сделаны с урока Эндрю. Я также рекомендую вам использовать их структуру кода, чтобы пропустить менее важную часть, которая создает часть тестирования и делает ваш опыт кодирования неинтересным, если вы делаете это самостоятельно.
Задание можно скачать отсюда [клик].
Нажмите здесь, чтобы посетить мой оригинальный блог для формул и решений.