Концепция тензора была создана в 1900 году двумя итальянскими математиками — Туллио Леви-Чивита и Грегорио Риччи-Курбастро, и, как это обычно бывает, основывалась на работе других математиков. Страница в Википедии о тензорах начинается так:
Звучит непросто для тех, кто не разбирается в математике!
К счастью, на практике намного проще понять, что такое тензор и как он используется в науке о данных.
Я предпочитаю изображать тензор в виде вложенных “списков” чисел с любым количеством “уровней”. Другой способ представления: ячейка в электронной таблице Excel, содержащая все данные из другой таблицы. Во второй таблице каждая ячейка связана с другой таблицей и так далее. Каждую таблицу можно рассматривать как дополнительное “измерение”.
Тензор первого порядка имеет только одно измерение. В компьютерных науках это можно назвать вектором или упорядоченным набором чисел. Тензор второго порядка будет матрицей, как электронная таблица в Excel, то есть двумерным. С ростом числа измерений можно рассматривать информацию как векторы, матрицы или массивы, вложенные в массивы, с любым числом измерений (n-мерные).
Вот как можно представить тензор третьего порядка:
Каждая из групп верхнего уровня значений представлена разным цветом. В этом примере цифры каждого значения соответствуют конкретной ячейке значения в общей структуре данных. Крайняя правая цифра каждого значения соответствует группе верхнего уровня, к которой она относится. Все значения красного цвета находятся в группе верхнего уровня номер 1, зелёные — в группе номер 2 и голубые в группе номер 3.
Каждая группа верхнего уровня является матрицей (двумерной). Крайняя левая цифра каждого значения соответствует строке, в которой находится, а средняя цифра — столбцу. Таким образом сохраняется порядок всех значений, что позволяет нам выполнять вычисления на всей структуре, используя другие векторы, матрицы или массивы.
Вот та же структура, содержащая другую информацию:
Каждая буква отображает уникальное положение в структуре; та же цветовая кодировка используется для разграничения матриц верхнего уровня.
Более сложная визуализация возможна с трёхмерным кубом. Каждый вертикальный уровень такого куба будет содержать данные одной из групп верхнего уровня, создавая куб 3x3x3 с 27 уникальными местоположениями. Но возможность визуализировать тензор при помощи графики исчезает, как только мы выходим за пределы трёх измерений.
Из-за этого ограничения давайте рассмотрим, как можно закодировать те же данные, используя компьютерное ПО. С помощью Python и Numpy создадим массив числовых данных из первого примера:
from numpy import array
T = array([
[[111,121,131], [211,221,231], [311,321,331]],
[[112,122,132], [212,222,232], [312,322,332]],
[[113,123,133], [213,223,233], [313,323,333]],
])
При таком кодировании нам доступно любое количество измерений, что имеет колоссальное значение при работе с гигантскими объёмами сложных данных!
Я надеюсь, у меня получилось объяснить, что, как минимум в машинном обучении, тензоры могут быть представлены в виде вложенных массивов.
Читайте также:
- Анализ моделей машинного обучения при помощи Imandra
- Пять отличных Python-библиотек для data science
- 4 способа обработки ошибок для стеков
Перевод статьи Giovanni Rosati: What’s a Tensor?