Pull to refresh
6
0
Глеб Рыжаков @Casaubon

User

Send message

Да, мы можем рассматривать ядра ТТ-разложения как параметризованные матрицы одинакового размера. Но по сути это и есть 3D массив (3-way tensor) (2 размерности от матрицы и ещё одна размерность -- это номер матрицы в списке). Технически, удобно такую конструкцию хранить в одном массиве. Причём, в процессе разных манипуляций с ТТ-тензором строят т.н. "развёртки" -- матрицы, состоящие из всех элементов ядра, расположенных в определённом порядке. Поэтому и говорят о 3D тензорах в этом случае.

Сходу сложно вспомнить что-то на русском языке специфичное. Всё-таки, это относительно новая область. Из английских обзоров могу посоветовать не так довольно вышедший двухтомник https://arxiv.org/abs/1609.00893 https://arxiv.org/abs/1708.09165
Так в целом подробно всё описывается, хотя, конечно, предполагается подготовка по общей линейной алгебре от читателя.

Алгоритм Копперсмита — Винограда -- это про умножение матриц. Но наш метод может решать задачи, связанные с многомерным суммированием, например. И тут оценка сложности зависит от конкретной задачи. Например, в задаче вычисления перманента матрицы есть стандартный и довольно-таки искусственный механизм суммирования, который даёт довольно хорошую сложность именно для заданной суммы, и к этой сложности мы подошли используя наш довольно общий метод.

В целом, это нормальная ситуация, когда один и тот же термин или одно и то же обозначение в разных разделах и контекстах используется по разному. Даже обозначение π может означать не то, к чему мы привыкли со школы. Так что я могу ещё согласиться, что не ввёл все необходимые определения в самом начале, стараясь делать статью попроще. Но термин "тензор" действительно многозначный, как и говорит википедия, на которую я-таки зашёл ;) https://en.wikipedia.org/wiki/Tensor_(machine_learning)
"Тензор" в смысле "многомерный массив" используется не для громкого названия, а для удобства.

Да, спасибо, согласен, писал статью как можно проще для понимания, поэтому старался использовать самые простые термины. Поправлю ;)

Есть самый первый пакет по ТТ -- ttpy , он ещё использует фортран для ускорения.
Есть более современный пакет, который основан на torch -- tntorch (автор тот самый Баллестер, который упоминается в статье)
Есть пакеты уже нашей группы -- teneva , написанный на голом питоне для совместимости с чем угодно, и его расширения на jax -- teneva_jax.
Ну а пакет, который реализует алгоритм в статье -- вот этот.

Если использовать тот самый метод, что описывается в статье -- с прямым построение ядер, то сделать композицию функций g(h(f(x))) совсем просто, так как не меняется размер образа функций, а все изменений затронут только последнюю производящую функцию (на рисунке --  f^(l)). А вообще, для произвольного ТТ-тензора, даже простая функция от него, например, экспонента, может привести сильному росту рангов. Так что в общем случае, теорем, к сожалению, нет.

Насчёт интеграла -- проще всего вначале сжать в ТТ подынтегральную функцию, а потом уже проинтегрировать в ТТ-формате: он это позволяет, и это одно из преимуществ ТТ-формата, что возможно довольно много интересных операций проводить сразу с ним. Понятно, что формально будет не интеграл, а сумма, и для хорошей точности нужно будет взять довольно много точек по оси y. В этом случае ТТ-ранг интеграла по построению будет не больше TT-ранга исходной функции. Если подынтегральная функция представляет собой произведение двух других, то можно их сжать в ТТ по сдельности, а затем перемножить в ТТ-формате. Ранги в этом случае также перемножается.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Specialist
Senior
Git
Python
Linux
Docker
Bash