Введение во встроенные модули PyTorch.

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

  1. пакет torch.nn

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

2. torch.utils.data.TensorDataset

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

3. torch.utils.data.random_split

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

Требуется два параметра: -

  • набор данных: - набор данных для разделения.
  • length: - список различной длины каждого подмножества.

4. torch.utils.data.DataLoader

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

5. torch.nn.Linear

Этот класс применяет линейное преобразование к входящим данным. Вместо того, чтобы инициализировать веса и смещения вручную, как мы делали в Главе 3, мы автоматически определяем модель с помощью класса nn.Linear.

Этот класс имеет следующие параметры: -

  • in_features: - размер каждой входной выборки.
  • out_features: - размер каждого выходного сэмпла.
  • bias: - Если установлено значение false, слой не будет изучать аддитивное смещение. По умолчанию установлено значение true.

Веса будут иметь форму (in_features, out_features), а смещение будет иметь форму (out_features). Они инициализируются случайным образом и могут быть изменены. У него есть метод параметров, который возвращает список всех матриц весов и смещений в модели. Для модели линейной регрессии у нас есть только одна матрица весов и матрица смещения.

6. torch.nn.Functional

Этот пакет фонарика состоит из множества функций потерь и нескольких других утилит.

7. torch.optim

Вместо того, чтобы вручную изменять веса и смещения модели с помощью градиентов, мы можем использовать оптимизатор. В этом пакете горелки реализованы различные методы оптимизации. Чтобы использовать torch.optim, мы должны создать объект оптимизатора, который будет хранить текущее состояние и обновлять параметры на основе вычисленных градиентов. Все методы оптимизации реализуют метод step (), который обновляет параметры.

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

При построении реальной модели машинного обучения мы разделим доступный набор данных на три части:

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

Алгоритм градиентного спуска

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

Есть много способов определить производную. Два общих определения:

  • Наклон касательной к графику функции.
  • Скорость изменения функции.

Градиент - это обобщение производных от нескольких переменных. Давайте использовать x как нашу переменную в функции J (x1, x2, x3): -

Здесь ∇ - это символическое представление, которое указывает, что мы берем градиент функции, а градиент внутри ‹и› используется для обозначения градиента как вектора.

В случае скаляра (одна переменная) градиент дает наклон касательной. В случае векторов градиент указывает направление наиболее быстрого увеличения функции.

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

Если мы хотим уменьшить функцию, мы хотим двигаться в направлении, противоположном самому быстрому увеличению. То есть, если мы находимся в точке x0 и хотим переместиться в ближайшую ближайшую точку (локальный минимум), наш следующий шаг должен быть в:

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

Отрицательный знак в уравнении означает, что мы движемся в направлении, противоположном градиенту.

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

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

Подводя итоги блога, теперь мы можем дать краткое объяснение различных пакетов torch, которые мы будем использовать для построения модели линейной регрессии с использованием встроенных модулей PyTorch. У нас есть хорошее представление об алгоритме градиентного спуска и алгоритме стохастического градиентного спуска.

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

Спасибо за чтение и до встречи на следующем!

Для дальнейшего чтения в блоге,

Https://github.com/cleor41/CS229_Notes/blob/master/lectures/cs229-notes1.pdf

см. эти заметки из курса Udacity.