2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Как создаётся тензор?
Сообщение14.06.2017, 13:06 


28/05/08
284
Трантор
Pphantom в сообщении #1225350 писал(а):
Насколько я понял, в таком случае и "разложение" - это просто представление многомерного массива в виде списка массивов меньшей размерности (возникающее в основном из-за технических проблем с представлением многомерных массивов в конкретном языке).

Нет, это все-таки вещь более интересная. Например, можно обобщать singular-value decomposition (
https://en.wikipedia.org/wiki/Higher-order_singular_value_decomposition), и их там много разных вариантов, напр., Такера. Они и на практике используются, и теоретический интерес тоже представляют.

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение14.06.2017, 13:10 
Заслуженный участник


09/05/12
25179
Narn в сообщении #1225354 писал(а):
Нет, это все-таки вещь более интересная.
Понятно, спасибо.

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение14.06.2017, 14:49 


15/04/12
162
Разложение Такера применяется для трехмерных массивов, для более высокомерных например Tensor Train, для которого тоже есть аналог SVD. Одно из применений - работа с астрономически большими сетками, например $2^{20} \times 2^{20} \times 2^{20}$ в 3D. Если использовать Tensor Train разложение (где значения функций на сетке предварительно конвертированы в $2 \times 2 \times \hdots \times 2$ массив - называется Quantized Tensor Train), то сложность и хранения и операций будет логарифмическая по отношению к размеру сетки.

Применения разнообразны, например вот статья https://arxiv.org/abs/1605.08422.

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение14.06.2017, 22:36 


07/06/17
19
Ок, спасибо, теперь понятно; верно, это то, о чём я говорил.
Только я одного всё ещё не понимаю; чтобы подробнее показать то, что я не понимаю, ещё раз приведу пример. Представьте, что имеется таблица значений вроде:

Время Длина Ширина Высота Масса
1 11.1 0.4 1.1 21
2 12.3 0.7 1.4 22
3 13.1 0.9 1.6 25
4 15.2 0.8 2.1 31
5 16.2 0.5 2.2 43
6 17 0.3 3 45

Представьте, что значений намного больше. Меня интересует вопрос, как можно представить эти данные в виде массива, как можно упростить этот массив, можно ли применить разложения? Нужно ли создавать 4-мерный массив для каждого из параметров и потом делать разложение? Как на практике люди, работающие с большими массивами, обрабатывают эти массивы?

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение14.06.2017, 23:26 
Заслуженный участник
Аватара пользователя


16/07/14
8451
Цюрих
qwarck, а что вы потом с этим хотите делать? Например, можно просто сложить структуры из 5 чисел в массив.
(или, если моменты времени у вас не случайно все натуральные и идущие подряд - считать время индексом, и складывать структуры из четырех чисел)

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение15.06.2017, 00:52 
Заслуженный участник
Аватара пользователя


01/09/13
4318
CptPwnage в сообщении #1225384 писал(а):
Если использовать Tensor Train разложение (где значения функций на сетке предварительно конвертированы в $2 \times 2 \times \hdots \times 2$ массив - называется Quantized Tensor Train), то сложность и хранения и операций будет логарифмическая по отношению к размеру сетки.

? Можно чуть подробнее?, просто идею без терминов?

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение15.06.2017, 12:34 


15/04/12
162
Если коротко, то идея в том чтобы некоторым образом обобщать разделение переменных на многомерный случай.
Например для матриц, если есть матрица $A$ ранга $1$, то ее можно записать в виде
$$ A = u v^{T}, $$
или
$$A = u \otimes v,$$
что соответсвует ситуации когда индексы $i$ и $j$ в матрице $A$ разделяются идеально. В общем случае для матрицы ранга $r$ имеем
$$A = \sum_{i=1}^{r} u_i \otimes v_i.$$
Понятно, что если ранг $r$ мал, то хранение вместо матрицы $A$ векторов $u_i, v_i$ сильно снижает объем данных которые мы храним - $O(n)$ вместо $O(n^2)$.
Если попробовать обобщать это на многомерные массивы (скажем трехмерные) в виде
$$\mathcal{X}^{ijk} = \sum_{i=1}^{r} u^{(1)}_i \otimes u^{(2)}_i \otimes  u^{(3)}_i,$$ - это так называемое каноническое разложение тензора (CP - canonical polyadic), и определить "ранг" как минимальное $r$, такое что такое разложение найдется, то оказывается что это очень плохое во всех смыслах определение, например задача о поиске CP ранга произвольного тензора является NP полной. Ну и там всякие вещи что при произвольно малом возмущении ранг может скакнуть и стать вообще любым.
Поэтому люди стали думать какие еще разложения можно придумать. Есть разложение Такера, есть TT (Tensor-Train) разложение. Первое для тензоров с больше чем $3$ модами мало используется, поэтому напишу про второе. Мы представляем $d$ - мерный тензор $X \in \mathbb{R}^{n_1 \times n_2 \hdots n_d}$ в виде списка из $d$ $3$-х мерных тензоров $G^{(i)}$, таких что $G^{(i)} \in \mathbb{R}^{r_{i-1} \times n_i \times r_i}$, где $r_i$ - числа которые называют рангами TT-тензора и $r_0 = 1, r_{d} = 1$. "Ядра" $G$ удовлетворяют соотношению
$$X^{i_1 i_2 \hdots i_d} = G^{(1)}[:, i_1, :]  G^{(2)}[:, i_2, :] \hdots G^{(d)}[:, i_d, :].$$
Поясню что имеется ввиду - $G^{(i)}$ это $3$-х мерный массив. При подстановке туда в качестве среднего индекса $i_k$ мы получаем матрицу размера $r_{i-1} \times r_i$. Произведение этих матриц дает нам число - соответствующий элемент тензора $X$ (число так как размеры крайних ядер есть $1 \times \hdots$ и $\hdots \times 1$). Посчитаем число параметров -
$$\sum_i r_i n_i r_{i-1} = O(d \max n_i r^2),$$ что существенно меньше чем изначального размер $X$ - $O(n^d).$
Для массивов $X \in \mathbb{R}^{N}$ при $N = 2^d$, можно добиться еще более сильного сжатия если сначала его превратить в тензор $\hat{X} \in \mathbb{R}^{2 \times 2 \times ... \times 2},$ тогда сложность будет линейна по $d$ - логарифмическая по $N$. Идея тут в том что мы вместо индекса используем его бинарное разложение - $i \to i_1 i_2 \hdots i_d$, и что в таких переменных у многих функций тоже разделяются переменные. Например для массива значений экспоненты на сетке
$$e^{i h } = e^{ \sum_j  2^{j} i_j h} = e^{i_0  h} e^{2i_1h} \hdots e^{2^{d-1} i_d h},$$ переменные разделяются полностью. То есть экспоненту мы можем задать фактически на любой сетке вообще практически, и для хранения понадобится всего $\approx \log N$ чисел.

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение15.06.2017, 16:31 
Заслуженный участник
Аватара пользователя


01/09/13
4318
CptPwnage
Спасибо большое.
Но, если я не путаю, при $d=2$ TT полностью эквивалентен CP, а значит имеем всё те же проблемы:
CptPwnage в сообщении #1225658 писал(а):
задача о поиске CP ранга произвольного тензора является NP полной. Ну и там всякие вещи что при произвольно малом возмущении ранг может скакнуть и стать вообще любым.
?

 Профиль  
                  
 
 Re: Как создаётся тензор?
Сообщение15.06.2017, 21:15 


15/04/12
162
Совершенно верно, при $d=2$ разложения совпадают, но это матричный случай про которой все хорошо известно. CP разложение матрицы дается SVD разложением. Проблемы у CP начинаются при $d>2$.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group