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

Пусть M представляет следующую матрицу

Мы видим, что элемент с индексом (2, 3) равен 2.1. В этом случае мы переместились вниз на 2 по оси Y и на 3 по оси X. Мы также можем видеть, что элемент с индексом (0,2) равен 4. В этом случае мы проехали на 0 в направлении Y и на 2 в направлении X. Мы видим, что любой элемент в матрице может быть задан двумя числами: одно относится к тому, сколько строк нужно пройти вниз, а другое - к количеству столбцов, по которым нужно пройти.

Таким образом, мы можем называть все матрицы как,

Кружок или узел представляет значение матрицы по данному индексу (i, j). Его «стрелки» (чаще называемые осью) представляют собой индексацию в определенном направлении, и в настоящее время им присвоены произвольные значения «i» и «j». В нашем случае «левая рука» с учетом значения «i» представляет, сколько мы проехали вниз в направлении Y. Точно так же правая рука, которой сейчас присвоена буква «j», показывает, как далеко мы прошли в X-направлении.

Таким образом, это по существу означает, что диаграмма ниже представляет значение 99, поскольку оно индексирует элемент (1, 2) внутри нашей матрицы M.

Примечание: Максимальное значение, которое мы можем пройти в направлении Y, равно 4, а максимальное, которое мы можем пройти в направлении X, - 3. Это означает, что максимальное значение, которое может быть присвоено для левой руки - 4, а для правой - 3. Число значений, которые может принимать ось, обычно называется ее степенью. Таким образом, степень для левой руки в нашем случае равна 5, а степень для правой руки - 4, поскольку правая рука может принимать все значения от 0 до 3.

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

Пусть A будет вектором, установленным в:

Тогда соответствующее представление A было бы:

Где «i» находится в диапазоне от 0 до 3, поэтому степень осей равна 4.

Причина, по которой мы видим только одну «руку» в этом случае, заключается в том, что для того, чтобы указать определенный элемент в векторе, нам нужно только указать, как далеко в одном конкретном направлении.

Например, в нашем случае для вектора A мы видим, что элемент с индексом 0 равен -567. Элемент с индексом 3 равен 1,2. В представлении Пенроуза это, по сути, означает:

Как мы видим, указание конкретных элементов в нашем векторе означает просто присвоение нашему компоненту «i» значения индекса.

Таким образом, в общем случае любой вектор A может быть представлен в графической записи Пенроуза следующим образом:

Любая матрица A может быть представлена:

Где «i» проходит по строкам A, а «j» - по столбцам A.

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

Наконец, поскольку скаляр - это всего лишь одно число, он не требует дальнейшего индексирования, что означает, что в графической записи это всего лишь один-единственный узел:

Таким образом, мы видим, что:

Скалярное произведение

Теперь мы увидим, насколько мощным может быть это представление тензоров.

Допустим, у нас есть два вектора, A и B.

Где,

Тогда подходящим представлением вектора A в графической записи Пенроуза будет:

So if i=2,

Подходящим представлением B будет:

So if j = 3, B[j] = B[3] = -2

Точечный продукт, который мы обсуждали в предыдущей статье, затем дает нам

В графической записи Пенроуза скалярное произведение можно аккуратно представить как:

Соединение двух узлов означает, что мы умножаем значение, которое они представляют. Соединение «двух рук» в «одну-единственную» означает, что для данного компонента «i» мы индексируем оба вектора и умножаем это значение вместе.

Так, например:

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

Поскольку C является результатом суммы всех произведений элементов A и B после их соединения на общем ребре, C определяется как:

Обратите внимание, что у нас не осталось свободных ребер, а это означает, что у нас остался скаляр, что и дает нам скалярное произведение!

Следует помнить один важный момент: мы можем соединить две оси только в том случае, если они обе имеют равную степень. Поскольку обе оси имеют одинаковую степень, мы можем сжать (или соединить) это ребро.

Умножение матриц

Пусть A и B - следующие матрицы:

Точно так же умножение матриц может быть визуализировано в графической записи с помощью:

Опять же, с матричным умножением, точно так же, как мы сделали для скалярного произведения, нам нужно убедиться, что ось, на которой мы соединяемся, имеет одинаковую степень. Для матриц это заканчивается преобразованием, поскольку количество столбцов в первой матрице должно быть таким же, как количество строк во второй матрице. Это связано с тем, что «j» индексирует столбцы первой матрицы, но при умножении матрицы он проиндексирует строки второй матрицы, заставляя нас убедиться, что обе оси имеют одинаковый размер.

После соединения осей матрицы у нас наконец остается:

Здесь мы видим, что соединение двух осей сформировало новый узел с двумя собственными осями, что представляет собой матричное умножение. Мы видим, что ось «j» исчезла, но оси «i» и «k» остались. Это имеет смысл, поскольку умножение двух матриц формирует новую матрицу с тем же количеством строк, что и первая, и тем же количеством столбцов, что и вторая, и эта информация очень ясна на нашей диаграмме.

Следует отметить один важный момент: не имеет значения, относится ли ось «i» к движению в направлении Y или ось «j» к движению в направлении X, если мы не забываем соединить два ребра. тогда и только тогда, когда они имеют одинаковую степень.

Затем след матрицы можно представить как:

Это потому, что, как мы знаем, след определяется как сумма всех элементов (0,0), (1,1), (2,2)…., (I, j), где i = j

Таким образом, при суммировании по диагонали матрицы нам нужно, чтобы компонент «i» и компонент j были равны. В графической записи Пенроуза это дано, поскольку две оси соединены.

После того, как мы соединили оси вместе, ось должна исчезнуть. Это означает, что у нас наконец остались:

Это скаляр, так как у него нет свободного края, что и возвращает след матрицы !!!

Тензорное сжатие

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

Например, рассмотрим тензоры A и B размером (4x8x2x7) и (8x7x4)

Теперь рассмотрим следующее тензорное сжатие:

По сути, это означает, что для нахождения результата тензорного сжатия, описанного выше, мы перебираем всю ось «i», затем ось «l», затем ось «j».

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

Совершенно очевидно, что в результате этого сжатия тензор, которое произошло между 3 индексами, получился вектор, так как осталось только одно свободное ребро. В этом сокращении ось «m» соединяется с осью «j», ось «n» соединяется с осью «l» и, наконец, ось «o» соединяется с осью «i».

Опять же, важно отметить, что:

Только тогда станет возможным тензорное сжатие.

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

Сжатие тензорного элемента вместе с осями «i» и «j» приведет к появлению тензора 3-го порядка, а сжатие тензора только по осям l приведет к появлению тензора 5-го порядка. Эта причина для этого оставлена ​​в качестве упражнения для читателя, используйте графические обозначения в своих интересах.

Наконец, тензорная сеть, по сути, представляет собой просто набор тензорных элементов, некоторые из которых могут быть связаны с ребром, например

Это изображение взято из Math3ma. Для получения дополнительной информации о тензорных сетях в целом посетите Math3ma для получения дополнительной информации.

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