Книга Нейросети Основы читать онлайн бесплатно, автор Кевин Корт – Fictionbook, cтраница 4
Кевин Корт Нейросети Основы
Нейросети Основы
Нейросети Основы

3

  • 0
Поделиться
  • Рейтинг Литрес:4.8

Полная версия:

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

  • + Увеличить шрифт
  • - Уменьшить шрифт

2. Вычисление градиента


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


3. Обновление параметров


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


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


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


1. Инициализация параметров: Мы начинаем с случайных значений для наклона и смещения линии.

2. Вычисление градиента: Мы рассчитываем, как изменить наклон и смещение, чтобы уменьшить среднеквадратичную ошибку (разность между реальными значениями и предсказанными значениями на линии).

3. Обновление параметров: Мы корректируем наклон и смещение в направлении, которое уменьшает ошибку.


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


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


Пример кода


```python

import numpy as np

import matplotlib.pyplot as plt


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

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. Прямое распространение


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


2. Вычисление функции потерь


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


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


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


4. Обновление параметров


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


Пример кода для обратного распространения ошибки


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


```python

import numpy as np


# Функция активации (сигмоида) и ее производная

def sigmoid(x):

return 1 / (1 + np.exp(-x))


def sigmoid_derivative(x):

return x (1 – x)


# Входные данные (4 примера, 3 входных значения)

inputs = np.array([[0, 0, 1],

[1, 1, 1],

[1, 0, 1],

[0, 1, 1]])


# Истинные выходы

outputs = np.array([[0], [1], [1], [0]])


# Инициализация весов случайными значениями

weights = np.random.rand(3, 1)


# Параметры обучения

learning_rate = 0.1

n_iterations = 10000


# Обучение

for iteration in range(n_iterations):

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

input_layer = inputs

predictions = sigmoid(np.dot(input_layer, weights))


# Вычисление ошибки

error = outputs – predictions


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

adjustments = error sigmoid_derivative(predictions)


# Обновление весов

weights += np.dot(input_layer.T, adjustments) learning_rate


print("Обученные веса:")

print(weights)


# Тестирование

test_input = np.array([[1, 0, 0]])

test_output = sigmoid(np.dot(test_input, weights))

print("Предсказание для [1, 0, 0]:", test_output)

```


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


1. Функция активации и ее производная:

– Мы используем функцию активации сигмоида и ее производную для вычисления активаций и градиентов.

2. Входные данные и истинные выходы:

– Заданы входные данные и соответствующие им истинные выходы для обучения.

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

– Веса инициализируются случайными значениями.

4. Параметры обучения:

– Устанавливаются скорость обучения и количество итераций.

5. Обучение:

– На каждом шаге выполняется прямое распространение, вычисление ошибки, обратное распространение и обновление весов.

6. Тестирование:

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


Этот пример иллюстрирует, как реализуется обратное распространение ошибки и как оно используется для обновления параметров модели, чтобы уменьшить ошибку и улучшить предсказательные способности сети.


Стохастический градиентный спуск


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


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


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


2. Обновление на основе одного примера


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


3. Быстрые обновления


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

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.

Купить и скачать всю книгу
ВходРегистрация
Забыли пароль