Создание нейронной сети с нуля на Python

Создание нейронной сети с нуля на Python

Содержание
  1. Пререквизиты
  2. Шаг 1: Инициализация весов и погрешностей
  3. Шаг 2: Определите функции активации
  4. Что такое сигмоидальная функция?
  5. Шаг 3: Определение прямого прохода
  6. Шаг 4: Определите алгоритм обратного распространения
  7. Шаг 5: Обучение нейронной сети
  8. Последние мысли

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

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

Входной слой: Этот слой принимает вводную информацию или характеристики и передает их на следующий слой. Аспект входных данных представлен каждым нейроном в этом слое.

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

Веса: Каждое соединение нейронов имеет соответствующий вес, который отражает силу связи. Эти веса изменяются в процессе обучения, чтобы уменьшить ошибку предсказания.

Функция активации: Каждый нейрон применяет функцию активации к взвешенной сумме своих входов. Эта функция вносит нелинейность в модель, позволяя нейронной сети изучать сложные взаимосвязи.

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

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

Пререквизиты

Прежде чем мы начнем, убедитесь, что в вашей системе установлена последняя версия Python. Мы будем использовать библиотеку NumPy для численных вычислений. Если вы еще не установили NumPy, выполните команду:

pip install numpy.

Шаг 1: Инициализация весов и погрешностей

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

import numpy as np # Определяем архитектуру нейронной сети input_size = 2 hidden_size = 3 output_size = 1 # Инициализируем веса и смещения weights_input_hidden = np.random.randn(input_size, hidden_size) bias_hidden = np.zeros((1, hidden_size)) weights_hidden_output = np.random.randn(hidden_size, output_size) bias_output = np.zeros((1, output_size))

Шаг 2: Определите функции активации

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

def sigmoid(x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(x): return x * (1 - x)

Что такое сигмоидальная функция?

Сигмоидальная функция - это математическая функция, которая отображает любое вещественное число на значение между 0 и 1. Наиболее часто используемая сигмоидальная функция - это логистическая функция, также известная как стандартная логистическая функция. Сигмоидальная функция имеет тенденцию сжимать очень большие положительные или отрицательные входы до очень близких к 0 или 1, соответственно. Это может привести к проблеме исчезающего градиента в глубоком обучении, что может сделать обучение более медленным и менее стабильным. По этой причине другие функции активации, такие как ReLu (Rectified Linear Unit), стали более популярными во многих архитектурах нейронных сетей. Но в этом уроке мы будем использовать только сигмоидальную функцию.

def sigmoid(x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(x): return x * (1 - x)

Шаг 3: Определение прямого прохода

Прямой проход включает в себя вычисление выхода нейронной сети с учетом входных данных.

def forward(x): hidden_input = np.dot(x, weights_input_hidden) + bias_hidden hidden_output = sigmoid(hidden_input) final_input = np.dot(hidden_output, weights_hidden_output) + bias_output final_output = sigmoid(final_input) return final_output

Шаг 4: Определите алгоритм обратного распространения

Обратное распространение используется для обновления весов и смещений на основе ошибки в предсказаниях.

def backward(x, y, output): error = y - output d_output = error * sigmoid_derivative(output) error_hidden = d_output.dot(weights_hidden_output.T) d_hidden = error_hidden * sigmoid_derivative(hidden_output) weights_hidden_output += hidden_output.T.dot(d_output) * скорость обучения weights_input_hidden += x.T.dot(d_hidden) * скорость обучения bias_output += np.sum(d_output, axis=0, keepdims=True) * скорость обучения bias_hidden += np.sum(d_hidden, axis=0, keepdims=True) * скорость обучения

Шаг 5: Обучение нейронной сети

Теперь давайте обучим нейронную сеть, передав ей простой набор данных.

# Определим набор данных X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])y = np.array([[0], [1], [1], [0]]) # Задаем гиперпараметры learning_rate = 0.1 epochs = 10000 # Обучаем нейронную сеть for epoch in range(epochs): output = forward(X) backward(X, y, output) # Тестируем обученную сеть output = forward(X) print("Итоговый результат после обучения:") print(output)

Последние мысли

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

Вот статья, в которой мы подробно рассказываем о том, как работает нейронная сеть.