Отчет по лабораторной работе #1 выполнил:
- Казанцев Михаил Максимович
- РИ-210914 Отметка о выполнении заданий (заполняется студентом):
Задание | Выполнение | Баллы |
---|---|---|
Задание 1 | # | - |
Задание 2 | # | - |
Задание 3 | # | - |
знак "*" - задание выполнено; знак "#" - задание не выполнено;
- Данные о работе: название работы, фио, группа, выполненные задания.
- Цель работы.
- "Hello world" на Unity и Python
- Задание 1.
- Код реализации выполнения задания. Визуализация результатов выполнения (если применимо).
- Задание 2.
- Код реализации выполнения задания. Визуализация результатов выполнения (если применимо).
- Задание 3.
- Код реализации выполнения задания. Визуализация результатов выполнения (если применимо).
- Выводы.
Ознакомиться с основными операторами языка Python на примере реализации линейной регрессии.
Ход работы:
- Произведём подготовку данных для работы с алгоритмом линейной регрессии. 10 видов данных были установлены случайным образом, и данные находились в линейной зависимости. Данные преобразуются в формат массива, чтобы их можно было вычислить напрямую при использовании умножения и сложения.
- Определим связанные функции.
- Функция модели: определяет модель линейной регрессии wx+b. Функция потерь: функция потерь среднеквадратичной ошибки.
- Функция оптимизации: метод градиентного спуска для нахождения частных производных w и b.
- Так же заведём функцию, которая производит некоторое число итераций, после чего выводит результаты модели
(Таким образом каждый эксперимент будет занимать всего одну строчку)
- Инициализация модели
- Результаты модели после 1, 2, 3, 4, 5 и 10000 итераций соответственно
- Как видно, после достаточного числа итераций, выход модели стал похож на входные данные
Должна ли величина loss стремиться к нулю при изменении исходных данных? Ответьте на вопрос, приведите пример выполнения кода, который подтверждает ваш ответ.
-
Первый набор данных чётко следует линейной зависимости
-
Второй набор данных - просто случайные числа, без всякой видимой зависимости
-
Теперь запустим тот-же самый алгоритм оптимизации:
-
Для первого набора данных
- Для второго набора данных
- В первом эксперименте, где через данные чётко шла линия, модель смогла её найти. Поэтому величина loss стала почти равна нулю
- Во втором экспирименте, где в данных небыло никакой зависимости, модель её и не нашла. Поэтому величина loss особо не изменилась после 90000 итераций
- Таким образом - у значения loss есть минимальное число, которое зависит от модели и набора данных. В процессе обучения loss не может опуститься ниже этого значения, т.к. модели не хватает параметров чтобы идеально отразить все нюансы данных
- Чем "шумнее" набор данных и чем меньше параметров имеет модель, тем дальше наш loss будет от нуля
- (к счастью, на практике это и не важно. Даже наоборот, если модель начинает операться на этот шум, тогда происходит overfitting. Это значит, что модель будет плохо работать на реальных данных)
- В изначальном наборе данных присутсвует достаточно много шума - данные не лежат на одной линии - поэтому наша модель(по сути просто линия) никогда не сможет идеально подстроится под эти данные. Соответственно и значение loss никогда не достигнет нуля(или даже ста)
Какова роль параметра Lr? Ответьте на вопрос, приведите пример выполнения кода, который подтверждает ваш ответ. В качестве эксперимента можете изменить значение параметра.
- Для начала - очень маленькое значение Lr(0.000000001)
-
Модели не хватает шагов, чтобы достичь оптимальных параметров. Поэтому нужно больше вычислительных ресурсов/времени чтобы достичь минимального loss
-
Теперь очень большое значение Lr(0.5)
-
Модель выходит из под контроля и "взрывается". Т.е. значения параметров уходят в бесконечность
-
(а если и не взрывается, то может иметь результат хуже, чем с малыми значениями Lr)
-
Если же мы найдём идеальное значение Lr(в данном случае 0.0005), то мы можем получить отличиный результат за короткое время
- Я освежил знания NumPy, Matplotlib и PyTorch
- разобрал как learning rate и распределение данных влияет на алгоритм градиентного спуска(пусть даже с очень простой моделью)
- вспомнил как работать с GitHub
- Можно найти в файле DA_in_GameDev_lab1.ipynb этого репозитория
- Эксперименты выполнялись в среде Google Colaboratory