Понимание представления данных

Прежде чем продолжить, давайте просмотрим образец набора данных с именем mnist. Это один из наиболее распространенных наборов данных, используемых для многих методов машинного обучения и глубокого обучения. Вы можете скачать его с http://yann.lecun.com/exdb/mnist/

База данных рукописных цифр MNIST, доступная на этой странице, содержит обучающий набор из 60 000 примеров и тестовый набор из 10 000 примеров. Это подмножество более крупного набора, доступного в NIST. Цифры были нормализованы по размеру и центрированы на изображении фиксированного размера.

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

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

Темы для обсуждения

  • Краткое описание тензоров и их типов.
  • Ключевые атрибуты (количество осей, dtype, формы)
  • Реальные примеры тензоров данных.
  • Операции с тензорами (изменение формы, скалярное произведение, трансляция)
  • Движок нейронных сетей (оптимизация на основе градиента, производная)

Тензоры

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

Типы тензоров / Представление тензоров

  • Scaler / 0D Tensors — содержит только одно число, например.

нп.массив(32)

  • Векторы/одномерные тензоры — массив чисел называется вектором или одномерными тензорами, например.

np.массив([1,2,3,4,5])

приведенный выше вектор имеет 5 элементов и представлен в виде 5-мерных векторов, пожалуйста, не рассматривайте 5D-вектор как 5D-тензор. 5D-вектор имеет только одну ось и 5 измерений вдоль ее оси, тогда как 5D-тензоры имеют 5 осей.

Размерность может быть обозначена как количество записей по определенной оси или количество осей в тензорах. Да, согласен, это сбивает с толку.

  • Матрицы/двумерные тензоры —массивn векторов представляет собой матрицу, матрица имеет 2 оси, часто называемые строками и столбцами. Вы можете визуально, например.

np.массив([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])

  • 3D-тензоры и тензоры больших размеров —если вы упаковываете такие матрицы в новый массив, вы получаете 3D-тензор, а упаковывая 3D-тензор, получаете 4D-тензор и так далее. на.

Ключевые атрибуты

  • Количество осей — вы можете просмотреть тензорную ось с помощью простой функции numpy с именем ndim.
  • Shape — вы можете просмотреть форму вашего тензора, используя функцию с именем shape в numpy, которая возвращает кортеж целых чисел, который описывает, сколько измерений имеет тензор по каждой оси.
  • Тип данных или dtype — вы можете просмотреть свой тип данных тензора, используя функцию numpy с именем dtype, тип данных которой, например, «float32», «float 64», «unit8» и т. д.

Реальные примеры тензоров данных

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

  • Векторные данные / форма 2D-тензора
  • Таймсерии / Последовательности / Трехмерная тензорная форма
  • Изображение / Форма тензора 4D
  • Видеоданные / Форма тензора 5D

Векторные данные / 2D тензорные данные

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

Например,. набор данных текстового документа, который представляет количество раз, которое каждое слово появляется в нем (скажем, словарь 10 000 слов). Каждый документ можно закодировать как вектор из 10 000 значений, и, таким образом, запись из 600 слов может быть сохранена в тензоре (600,10000).

Таймсерии / Последовательности / Трехмерная тензорная форма

Всегда имеет смысл хранить последовательные данные или данные временных рядов в трехмерном тензоре с явной временной осью. Каждая выборка может быть закодирована как вектор (2D-тензор), и, таким образом, пакет данных будет закодирован как 3D-тензор.

Например,. набор данных твитов, где мы кодируем каждый твит как последовательность из 280 символов из алфавита из 128 уникальных символов, и, таким образом, каждый твит может быть закодирован как двумерный тензор формы (280 128), а набор данных из 10 000 твитов будет привести к (10000,280,128).

Изображение / Форма тензора 4D

Изображение в основном имеет три измерения: высоту, ширину и глубину цвета. Хотя данные в градациях серого, особенно такие как данные mnist, имеют один цветовой канал и, следовательно, могут храниться в двумерных тензорах, по соглашению тензоры изображений всегда являются трехмерными с одномерным цветовым каналом для изображений в градациях серого. Пакет из 128 изображений в градациях серого размером 256 × 256 может таким образом, можно хранить в тензоре формы (128, 256, 256, 1), а набор из 128 цветных изображений можно хранить в тензоре формы (128, 256, 256, 3).

Видеоданные / Форма тензора 5D

Видеоданные — это один из немногих типов реальных данных, для которых вам понадобятся 5D-тензоры. Видео можно понимать как последовательность кадров, каждый кадр представляет собой цветное изображение. Поскольку каждый кадр может храниться в тензоре 3D (высота, ширина, глубина цвета), последовательность кадров может храниться в тензоре 4D (кадры, высота, ширина, глубина цвета), и, таким образом, пакет различных видео может храниться в 5D-тензор формы (образцы, кадры, высота, ширина, глубина цвета). Например, 60-секундный видеоклип YouTube размером 144 × 256 с частотой 4 кадра в секунду будет иметь 240 кадров. Пакет из четырех таких видеоклипов будет храниться в тензоре формы (4, 240, 144, 256, 3). Всего 106 168 320 значений! Если бы dtype тензора был float32, то каждое значение было бы сохранено в 32 битах, поэтому тензор представлял бы 405 МБ. Тяжелый! Видео, с которыми вы сталкиваетесь в реальной жизни, намного легче, потому что они не хранятся в формате float32 и обычно сжимаются с большим коэффициентом (например, в формате MPEG).

Механизмы нейронных сетей или тензорные операции

  • Элементарные операции — рассматриваются операции, которые применяются независимо к каждой записи в тензоре.
  • Вещание — с помощью вещания вы можете легко применить 2 тензорных элемента мудрых операций.
  • Тензорная точка —точечная операция, также называемая произведением, является наиболее распространенной и полезной тензорной операцией. В отличие от поэлементных операций, она объединяет элементы во входных тензорах.
  • Изменение формы тензора.Изменение формы тензора означает перестановку его строк и столбцов в соответствии с заданной формой. Естественно, преобразованный тензор имеет то же общее количество коэффициентов, что и исходный тензор.

Движок нейронных сетей

  • Оптимизация на основе градиента — слои нейронных сетей обычно преобразуют входные данные, например, для

выходной слой = relu (точка (W, ввод) + b)

в этом выражении W и b — это тензоры, которые являются атрибутами слоя, известными как веса и обучаемый параметр слоя. Эти веса содержат информацию, полученную сетями из обучающих данных. Первоначально эти весовые матрицы заполняются небольшими случайными значениями (шаг, называемый случайной инициализацией). Конечно, нет оснований ожидать, что relu(dot(W, input) + b), когда W и b случайны, даст какие-либо полезные представления. Полученные представления бессмысленны, но они являются отправной точкой. Далее следует постепенная корректировка этих весов на основе сигнала обратной связи. Это постепенное приспособление, также называемое
обучением.

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

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

В конечном итоге мы получаем сеть с очень низкими потерями обучающих данных: малое несоответствие между прогнозами y_pred и ожидаемыми целями y. Сеть «научилась» сопоставлять свои входные данные с правильными целями. Издалека это может выглядеть как волшебство, но когда мы сводим его к элементарным шагам, оказывается, что все просто.

Производная тензорной операции: градиент —Градиент — это производная тензорной операции. Это обобщение концепции
производных для функций многомерных входных данных, то есть для функций, которые принимают тензоры в качестве входных данных. Производная функции f(x) одного коэффициента может быть интерпретирована как наклон кривой f. Точно так же градиент (f) (W0) можно интерпретировать как тензор, описывающий кривизну f (W) вокруг W0.

  • Стохастический градиентный спуск.Для дифференцируемой функции теоретически возможно найти ее минимум аналитически: известно, что минимум функции — это точка, где производная равна 0, поэтому все, что вам нужно нужно найти все точки, в которых производная стремится к 0, и проверить, для какой
    из этих точек функция имеет наименьшее значение. Применительно к нейронной сети это означает аналитический поиск комбинации значений веса, которая дает наименьшую возможную функцию потерь. Это можно сделать, решив уравнение градиента (f) (W) = 0 для W.
  • Сцепление производных: алгоритм обратного распространения —В предыдущем алгоритме мы небрежно предположили, что, поскольку функция дифференцируема, мы можем явно вычислить ее производную. На практике функция нейронной сети состоит из множества связанных вместе тензорных операций, каждая из которых имеет простую известную производную. Например, это сеть f, состоящая из трех тензорных операций, a, b и c, с весовыми матрицами W1, W2 и W3:

f(W1, W2, W3) = a(W1, b(W2, c(W3)))

Исчисление говорит нам, что такая цепочка функций может быть получена с использованием следующего тождества, называемого цепным правилом: f(g(x)) = f’(g(x)) * g’(x). Применение цепного правила к вычислению значений градиента нейронной сети приводит к алгоритму, называемому обратным распространением (также иногда называемым дифференциацией обратного режима). Обратное распространение начинается с окончательного значения потерь и работает в обратном направлении от верхних слоев к нижним, применяя цепное правило для вычисления вклада каждого параметра в значение потерь.

Спасибо .