Визуализируйте преобразование веса через слои

В этом блоге я попытаюсь объяснить вам, как трансформируются данные при прохождении через слои нейронной сети. Поскольку нейронная сеть считается «черным ящиком» для многих ученых в этой области, быстрое понимание того, как данные преобразовываются в процессе, может дать вам четкое понимание и укрепить уверенность в нейронных сетях, если вы новичок.

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

Данные, используемые в этом посте, представляют собой данные, сгенерированные мобильным роботом, где значения X относятся к значениям датчика, а значения Y (цель) относятся к скоростям.

Хорошо. Давайте погрузимся!

Структура наших данных:

Наши данные содержат 3123 экземпляра с 4 функциями, из которых две функции являются независимыми, а две — зависимыми. Быстрая выборка данных дается

Архитектура нашей нейронной сети:

Чтобы обучить эти данные, я использовал простую искусственную нейронную сеть, как показано на рисунке ниже, со скрытым слоем, состоящим из 4 нейронов. Поскольку у нас есть два выхода, которые нужно предсказать, я использовал два нейрона в выходном слое. Я нормализовал данные, и сигмовидная функция активации использовалась как в скрытом, так и в выходном слоях.

Инициализация весов:

Перед передачей наших данных в сеть мы инициализируем наши веса. Я использовал случайную функцию numpy для инициализации весов и смещений.

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

Чтобы объяснить размер весов, скрытые веса должны иметь количество входных признаков в качестве размера столбца и количество нейронов в скрытом размере в качестве размера строки. Итак, в нашем случае я определил веса как матрицу 4 * 2. Точно так же для выходного слоя я определил 2 * 4 как 4 значения из скрытого слоя и два нейрона в выходном слое.

Поделиться:

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

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

Прогнозируемое значение сравнивается с фактическим значением y и вычисляется ошибка.

Теперь эта ошибка распространяется обратно, и веса корректируются в соответствии с потерями.

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

Чтобы продолжить обратное распространение, вычисляется среднеквадратическая ошибка.

rmse = np.mean(np.square(df_y — ao))

В нашем примере rmse равен 0,45463339210753806.

Затем градиент находится как для скрытого слоя, так и для выходного слоя.

Градиент рассчитывается по следующей формуле

gradient_output = (ошибка * sigmoid_derivative(zo))
градиент_скрытый = np.dot(wo.T, градиент_выход) * sigmoid_derivative(zh)

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

delta_w1 = np.dot(gradient_hidden.reshape((-1, 1)), np.array(df_x).reshape((1, -1)) )
delat_w2 = np.dot(np. array(gradient_output).reshape((-1, 1)) , ah.reshape((1, -1)) )

Как только мы вычислим дельта-веса, мы будем обновлять фактические веса, умножая скорость обучения на дельта-веса. В нашем случае я взял 0,5 в качестве скорости обучения.

wh += 0,5 *delta_w1
wo += 0,5 *delat_w2

Теперь снова шаг прямого распространения повторяется для всех остальных значений на входе. Одно полное обучение всех входных данных в обучении обозначает одну полную эпоху.

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

Конечные примечания

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

Спасибо, что зашли так далеко. Если вам понравилась моя работа, дайте мне хлопок (или несколько хлопков).