tanh (гиперболический тангенс)

Задача: Предсказание изменения цены акций в зависимости от рыночных факторов (например, макроэкономических показателей).

Решение: Для этой задачи строится нейросеть, которая оценивает разностные данные (рост или падение) – то есть она должна различать положительные и отрицательные значения.

1. Данные об изменении рынка подаются на входные нейроны.

2. Нейроны скрытых слоев используют функцию активации tanh, которая нормирует выходные значения от -1 до 1. Благодаря этому сеть может выдать как положительные, так и отрицательные значения, полезные для предсказания роста или падения.

3. На выходе сеть дает прогноз по изменению цены.

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

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


Обратное распространение ошибки и процесс обучения сети


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

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

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

Задача

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

Решение с использованием обратного распространения и процесса обучения

В этом примере:

1. Мы создаем простую сеть с двумя полносвязными слоями.

2. Определяем функцию ошибки (Binary Cross Entropy).

3. Используем метод обратного распространения для корректировки весов сети на каждом этапе обучения.

Код решения

```python

import torch

import torch.nn as nn

import torch.optim as optim

import numpy as np

import matplotlib.pyplot as plt

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

np.random.seed(0)

torch.manual_seed(0)

data_size = 100

X = np.random.rand(data_size, 2) * 2 – 1 # точки на плоскости от -1 до 1

Y = (X[:, 0] + X[:, 1] > 0).astype(int) # класс 1, если сумма координат > 0, иначе 0

# Преобразование в тензоры

X_tensor = torch.FloatTensor(X)

Y_tensor = torch.FloatTensor(Y).reshape(-1, 1)

# Определение нейронной сети

class SimpleNet(nn.Module):

def __init__(self):

super(SimpleNet, self).__init__()

self.fc1 = nn.Linear(2, 4) # первый полносвязный слой

self.fc2 = nn.Linear(4, 1) # выходной слой для предсказания класса