реклама
Бургер менюБургер меню

Джеймс Дэвис – Нейросети: создание и оптимизация будущего (страница 6)

18

```python

# Новая модель

model = nn.Linear(1, 1)

optimizer = optim.SGD(model.parameters(), lr=0.01)

# Обучение с использованием стохастического градиентного спуска

losses = []

for epoch in range(epochs):

for x, y in zip(X_tensor, Y_tensor):

optimizer.zero_grad()

prediction = model(x.view(-1, 1))

loss = criterion(prediction, y.view(-1, 1))

loss.backward()

optimizer.step()

losses.append(loss.item())

# График ошибки

plt.plot(losses)

plt.xlabel("Step")

plt.ylabel("Loss")

plt.title("Stochastic Gradient Descent")

plt.show()

```

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

3. Мини-Batch Градиентный Спуск

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

```python

# Новая модель

model = nn.Linear(1, 1)

optimizer = optim.SGD(model.parameters(), lr=0.01)

batch_size = 10 # Размер мини-батча

# Обучение с использованием мини-batch градиентного спуска

losses = []

for epoch in range(epochs):

permutation = torch.randperm(X_tensor.size()[0])

for i in range(0, X_tensor.size()[0], batch_size):

indices = permutation[i:i + batch_size]

batch_x, batch_y = X_tensor[indices], Y_tensor[indices]

optimizer.zero_grad()

predictions = model(batch_x)

loss = criterion(predictions, batch_y)

loss.backward()

optimizer.step()

losses.append(loss.item())

# График ошибки

plt.plot(losses)

plt.xlabel("Step")

plt.ylabel("Loss")

plt.title("Mini-Batch Gradient Descent")

plt.show()

```

Пояснение: Мини-batch градиентный спуск делит данные на небольшие части, например, по 10 примеров на батч. Это позволяет получить более сглаженный процесс обучения с эффективностью близкой к SGD.

Сравнение методов

Каждый метод имеет свои плюсы и минусы:

– Batch Gradient Descent: высокая точность, но требует много вычислительных ресурсов и неэффективен для больших данных.

– Stochastic Gradient Descent: быстрое обновление весов, но кривая ошибки "шумная".

– Mini-Batch Gradient Descent: компромисс между точностью и скоростью, подходит для больших данных.

Для больших наборов данных чаще используется Mini-Batch Gradient Descent, так как он обеспечивает хорошее соотношение точности и скорости.

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

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

Понятие глубины: что делает сеть глубокой?

Когда мы говорим о «глубине» нейронной сети, мы имеем в виду количество слоев в ней:

– Малые (неглубокие) сети: Обычно содержат один или два скрытых слоя. Это сети, которые используются для простых задач с ограниченными по сложности данными, например, распознавание чисел на картинках.

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

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

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

Преимущества глубокой архитектуры по сравнению с традиционными методами