Вы находитесь на странице: 1из 7

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ


УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)

ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ

Лабораторная работа №7

по дисциплине
«Теория информации, данные, знания»

Фамилия: Алексеев
Имя: Егор
Отчество: Алексеевич
Курс: 3
№ зачетной книжки: 2010108
Группа №: ИБ – 04з

Проверил:______________

Санкт-Петербург
2023
Цель работы
Исследование принципов разработки нейронной сети на примере задачи регрессии.
Задание
1. Исследовать нейронную сеть при заданных начальных параметрах (см. таблицу).
Найти минимальное значение n_hidden_neurons, при котором сеть дает
удовлетворительные результаты.
2. Найти наилучшее значение шага градиентного спуска lr в интервале ± 100 % от
номинального значения.
3. Изменить нейронную сеть для предсказания функции y = 2x * sin(2−x)
l
1
4. Для этой задачи (п. 3) получите метрику MAE = ∑ ¿ y pred i− y target i ∨¿
l i
не хуже 0.03, варьируя: архитектуру сети, loss-функцию, lr оптимизатора или
количество эпох в обучении.
5. Метрика вычисляется с помощью выражения (pred - target).abs().mean() и
выводится оператором.

print(metric(sine_net.forward(x_validation), y_validation).item()).

Таблица. Начальные значения гиперпараметров нейронной сети


Вариант Метод оптимизации Число нейронов Шаг градиентного
в скрытом слое спуска
n_hidden_neuron lr
s
0 ADAM 10 0.01
1 ADAM 20 0.001
2 ADAM 30 0.01
2
3 ADAM 40 0.001
4 ADAM 50 0.01
5 SGD 10 0.001
6 SGD 20 0.01
7 SGD 30 0.001
8 SGD 40 0.01
9 SGD 50 0.001

Примечание

1. Подготовка данных для функции y = 2x * sin(2−x)

def target_function(x):
return 2**x * torch.sin(2**-x)

# ------Dataset preparation start--------


x_train = torch.linspace(-10, 5, 100)
y_train = target_function(x_train)
noise = torch.randn(y_train.shape) / 20.
y_train = y_train + noise
x_train.unsqueeze_(1)
y_train.unsqueeze_(1)

x_validation = torch.linspace(-10, 5, 100)


y_validation = target_function(x_validation)
x_validation.unsqueeze_(1)
y_validation.unsqueeze_(1)
# ------Dataset preparation end--------

2. Описание функции metric

def metric(pred, target):
     return (pred - target).abs().mean()

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

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

Прежде чем рассматривать процесс обучения нейронной сети, мы


рассмотрим понятие размеченной обучающей выборки.
Размеченная обучающая выборка состоит из какого-то количества
объектов, для которых мы знаем две вещи: во-первых, это некоторые
признаки x1 … xN. Для каждого объекта мы знаем некоторый набор признаков.
Кроме того, мы знаем некоторую метку объекта у1 … уN.
Мы можем на этом обучить некоторую нейронную сеть. Но, прежде
чем обучать нейронную сеть, мы разделим эту выборку на три части:
тренировочный датасет, валидационный датасет и тестовый датасет.
Тренировочный датасет – это то, что мы непосредственно используем
для обучения нашей модели. Валидационный датасет нужен для того, чтобы
подстраивать параметры обучения нашей модели (гиперпараметры). На
самом деле его никогда не используют в процессе обучения, но мы
подгоняем некоторые параметры, чтобы на этом датасете результаты были
лучше. Тестовый датасет – это датасет, на котором мы будем проверять
окончательный результат. Если у нас получится хороший результат на
тестовом датасете, это означает, что наша модель обобщила информацию,
которая ей была предоставлена.
Ход работы

4
Рассмотрим нейронную сеть с количеством скрытых нейронов равным
40 и градиентным спуском = 0,001 (согласно заданным начальным
параметрам). Получим:

Рисунок 1 – Вводные данные

Рисунок 2 – Исходные данные 2

Рисунок 3 – Результат работы

5
Рисунок 4 – Нахождение шага

Таким образом, наилучшим значением шага lr, оказалось значение 0.005.

Рисунок 5 – Нахождение шага

Для того чтобы предсказать функцию y = 2x * sin(2−x) нам необходимо


изменить тренировочный датасет.

Рисунок 6 – Результат замены датасета

6
Для достижения метрики равно 3 мы указали lr равное 0.8 и
hidden_neurons = 40, найденный экспериментальным путем.
Результат предоставлен на рис. 7.

Рисунок 7 – нахождение и вывод метрики равной 0.0236

Вывод
Изучили нейронные сети и способы их обучения, разобрались в различных
датасетах, а именно в тренировочных, валидационных и тестовых. Также изучили понятие
регрессии, задачи регрессии и способы их решения с помощью нейросетей. Исследовали
принципы разработки нейронной сети на примере задачи регрессии при заданных
начальных параметрах, соответствующих индивидуальному варианту. Изменяя
количество скрытых нейронов и коэффициент градиентного спуска, нашли минимальное
значение n_hidden_neurons, при котором сеть дает удовлетворительные результаты в
нашем случае. Также нашли наилучшее значение шага градиентного спуска lr в интервале
± 100 % от номинального значения. Также разработали новую нейронную сеть для
предсказания функции y = 2x * sin(2−x) на основе нейронной сети для предсказания
функции синуса, изменив тренировочный датасет и некоторые значения на этапе
валидационного датасета путем подбора и перебора, вычислили и вывели метрику с
помощью выражения (pred - target).abs().mean().

Вам также может понравиться