Дэвид Рид

Нейросети. Основы


Скачать книгу

Генерация данных для примера

      np.random.seed(42)

      X = 2 * np.random.rand(100, 1)

      y = 4 + 3 * X + np.random.randn(100, 1)

      # Инициализация параметров

      theta = np.random.randn(2, 1)

      # Добавление столбца единиц к X (для смещения)

      X_b = np.c_[np.ones((100, 1)), X]

      # Параметры градиентного спуска

      learning_rate = 0.1

      n_iterations = 1000

      m = len(X_b)

      # Функция для вычисления градиентов

      def compute_gradient(X_b, y, theta):

      gradients = 2/m * X_b.T.dot(X_b.dot(theta) – y)

      return gradients

      # Градиентный спуск

      for iteration in range(n_iterations):

      gradients = compute_gradient(X_b, y, theta)

      theta = theta – learning_rate * gradients

      print("Найденные параметры:", theta)

      # Визуализация результатов

      plt.scatter(X, y)

      plt.plot(X, X_b.dot(theta), color='red')

      plt.xlabel('X')

      plt.ylabel('y')

      plt.title('Линейная регрессия с использованием градиентного спуска')

      plt.show()

      ```

      Объяснение кода

      1. Генерация данных:

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

      2. Инициализация параметров:

      – Параметры модели (веса) инициализируются случайными значениями.

      3. Добавление столбца единиц:

      – К матрице X добавляется столбец единиц, чтобы учесть смещение (константный член) в линейной модели.

      4. Параметры градиентного спуска:

      – Устанавливаются параметры обучения, такие как скорость обучения (learning rate) и количество итераций (n_iterations).

      5. Функция для вычисления градиентов:

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

      6. Градиентный спуск:

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

      7. Визуализация результатов:

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

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

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

      Обратное распространение ошибки (backpropagation) – это ключевой алгоритм для обучения многослойных нейронных сетей. Этот метод позволяет эффективно вычислять градиенты функции потерь по отношению к каждому параметру сети, что необходимо для их последующего обновления. Весь процесс состоит из нескольких этапов: прямое распространение, вычисление функции потерь, обратное распространение и обновление параметров.

      1. Прямое распространение

      На этапе прямого распространения входные данные проходят через все слои