Skip to content

Commit

Permalink
add about kernel approximations by Kroneker product
Browse files Browse the repository at this point in the history
  • Loading branch information
alexey-pronkin committed Nov 6, 2021
1 parent 88731a1 commit 402c073
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 12 deletions.
37 changes: 36 additions & 1 deletion qmlcourseRU/book/bibliography.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
# Список литературы

```{bibliography}
@book{horn1994topics,
title={Topics in matrix analysis},
author={Horn, Roger A and Horn, Roger A and Johnson, Charles R},
year={1994},
publisher={Cambridge university press}
}
@book{horn2012matrix,
title={Matrix analysis},
author={Horn, Roger A and Johnson, Charles R},
year={2012},
publisher={Cambridge university press}
}
@article{martens2015optimizing,
author = {James Martens and
Roger B. Grosse},
title = {Optimizing Neural Networks with Kronecker-factored Approximate Curvature},
journal = {CoRR},
volume = {abs/1503.05671},
year = {2015},
url = {http://arxiv.org/abs/1503.05671},
eprinttype = {arXiv},
eprint = {1503.05671},
timestamp = {Mon, 13 Aug 2018 16:47:40 +0200},
biburl = {https://dblp.org/rec/journals/corr/MartensG15.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{airola2017fast,
title={Fast Kronecker product kernel methods via generalized vec trick},
author={Airola, Antti and Pahikkala, Tapio},
journal={IEEE transactions on neural networks and learning systems},
volume={29},
number={8},
pages={3374--3387},
year={2017},
publisher={IEEE}
}
```
38 changes: 27 additions & 11 deletions qmlcourseRU/book/linalgblock/bra-ket.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ kernelspec:
---

(bra-ket)=

# Ско бки

Дисклеймер: нам нужен инструментарий для работы с более абстрактными пространствами!
Expand All @@ -20,9 +21,10 @@ kernelspec:
## Гильбертово пространство

Гильбертово пространство -- это полное пространство, определяемое:
1) скалярным произведением $(u, v)$, в простейшем частном случае - $(u, v) = u^{\dagger} v$;
2) зафиксированной нормой вида $||v|| = \sqrt{(v,v)}$;
3) метрикой $d(u,v) = ||u-v|| = \sqrt{(u-v,u-v)}$.

1. скалярным произведением $(u, v)$, в простейшем частном случае - $(u, v) = u^{\dagger} v$;
2. зафиксированной нормой вида $||v|| = \sqrt{(v,v)}$;
3. метрикой $d(u,v) = ||u-v|| = \sqrt{(u-v,u-v)}$.

## Полное пространство

Expand Down Expand Up @@ -51,7 +53,7 @@ $$
\begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_N \end{bmatrix}
$$

Часто, например, требуется показать два граничных состояния кубита $\ket{0}$, $\ket{1}$, тогда мы можем записать их просто как вектор-столбцы: $\ket{0} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}$ и $\ket{1} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}$. В следующей лекции этот вопрос будет рассмотрен детальнее.
Часто, например, требуется показать два граничных состояния кубита $\ket{0}$, $\ket{1}$, тогда мы можем записать их просто как вектор-столбцы: $\ket{0} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}$ и $\ket{1} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}$. В следующей лекции этот вопрос будет рассмотрен детальнее.

## Внешнее произведение (outer-product)

Expand Down Expand Up @@ -103,6 +105,7 @@ U_hat_star_long = np.conjugate(np.transpose(U_hat))
print(np.allclose(U_hat_star_long, U_hat_star_byhands))
```

Также в `Python` для многих операций есть соответствующие методы вместо функций и их сокращения, например `U.transpose()` -- то же самое, что `U.T`, а `U.conjugate()` -- `U.conj()`.

Важное свойство, что любой эрмитов оператор $U$ можно привести к унитарному оператору с помощью взятия матричной экспоненты от матрицы оператора, умноженного на мнимую единицу:
Expand All @@ -117,7 +120,6 @@ $$
e^V = S e^{\Lambda} S^\dagger.
$$


```{note}
В качестве упражнения для самопроверки можете показать, что такое определение эквивалентно определению через степенной ряд: $e^U = \sum_{k=0}^\infty{1 \over k!}U^k$
```
Expand Down Expand Up @@ -183,7 +185,7 @@ $$
M(v,\theta) = \begin{bmatrix}
\cos \theta + (1 - \cos \theta) x^2
& (1 - \cos \theta) x y - (\sin \theta) z
& (1 - \cos \theta) x z + (\sin \theta) y
& (1 - \cos \theta) x z + (\sin \theta) y
\\
(1 - \cos \theta) y x + (\sin \theta) z
& \cos \theta + (1 - \cos \theta) y^2
Expand Down Expand Up @@ -237,7 +239,7 @@ $$

## Произведение Кронекера

Давайте рассмотрим еще одну интересную операцию, которая называется матричным тензорным произведением (является тензорным произведением для линейных операторов) или произведением Кронекера.
Давайте рассмотрим еще одну интересную операцию, которая называется матричным прямым произведением (является тензорным произведением для линейных операторов) или произведением Кронекера.

Проще всего его необходимость можно продемонстрировать на примере двух игр: Орел/Решка и бросок кубика.
Мы можем записать состояния этих игр через вероятности событий и давайте возьмем монетку со смешенным центром тяжести и такой же кубик:
Expand All @@ -255,7 +257,7 @@ $$
\frac{2}{3} \times \frac{1}{4} && \frac{2}{3} \times \frac{1}{5} && \frac{2}{3} \times \frac{1}{7} && \frac{2}{3} \times \frac{1}{11} && \frac{2}{3} \times \frac{1}{13} && \frac{2}{3} \times \frac{4791}{20020} \end{bmatrix}
$$

С помощью произведения Кронекера (или, повторимся, -- матричного тензорного произведения) похожие огромные вектора и матрицы можно очень компактно записать:
С помощью произведения Кронекера (или, повторимся, -- матричного прямого произведения) похожие огромные вектора и матрицы можно очень компактно записать:

$$
\text{game}_{\text{vec}} = \text{coin} \otimes \text{dice} \\
Expand All @@ -278,18 +280,32 @@ A \otimes B = \begin{bmatrix} a_{11} B & \cdots & a_{1n}B \\ \vdots & \ddots & \
a_{m1} b_{p1} & a_{m1} b_{p2} & \cdots & a_{m1} b_{pq} & \cdots & \cdots & a_{mn} b_{p1} & a_{mn} b_{p2} & \cdots & a_{mn} b_{pq}
\end{bmatrix}
$$

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

Основные его свойства вы можете прочитать в статье: [_Произведение Кронекера_](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%9A%D1%80%D0%BE%D0%BD%D0%B5%D0%BA%D0%B5%D1%80%D0%B0)

Есть и другие нужные тензорные операции, например, чуть больший список вы можете найти в [этой статье](https://habr.com/ru/post/369925/) или в рекомендованной литературе по квантовой механике.

## Рекомендованная литература
Например, рассмотрим операцию $A \otimes I_m + I_n \otimes B$, где матрица $A$ размера $n \times n$, а матрица $B$ -- размера $m \times m$. Такая операция еще называется суммой Кронекера и обозначается следующим образом:

$$
A \oplus B = A \otimes I_m + I_n \otimes B
$$

Можно показать, что если $Ax = \lambda_a x$, а $Ay = \lambda_b y$, то $(A \oplus B)(x \otimes y) = (\lambda_a + \lambda_b)(x \otimes y) $. Т.е. собственные значения суммы кронекера двух матриц - сумма собственных значений этих матриц, а собственный вектор получается Кронекеровским произведением собственных векторов этих матриц. Это дает нам конструировать очень эффективно такой оператор, который является как бы суммой двух по спектру. Доказательство этого факта см. в книге {cite}`horn1994topics` теорема 4.4.5, также эта книга является отличным дополнением к стандартному курсу по линейной алгебре в бакалавриате. Если вы хотите просто вспомнить необходимый набор полезных фактов из линейной алгебры, вы можете использовать нулевую главу книги {cite}`horn2012matrix` в качестве справочника.

Такие трюки могут помогать и в классическом машинном обучении, например, есть статья об оптимизации нейронных сетей с помощью разложения матрицы вторых производных в произведения Кронекера матриц меньшего размера [_Optimizing neural networks with kronecker-factored approximate curvature_](https://arxiv.org/abs/1503.05671) {cite}`martens2015optimizing` или использование произведения Кронекера для апроксимации ядер в [_SVM_](../qsvmblock/qsvmintro.md), см., например, [_Fast Kronecker product kernel methods via generalized vec trick_](https://deepai.org/publication/fast-kronecker-product-kernel-methods-via-generalized-vec-trick) {cite}`airola2017fast`

Есть и другие нужные тензорные операции, например, чуть больший список вы можете найти в [_этом цикле статей_](https://habr.com/ru/post/261421/) или обзорно в [этой статье](https://habr.com/ru/post/369925/). Также можете посмотреть в рекомендованной литературе по квантовой механике.

## Рекомендованная литература
- Topics in matrix analysis by Roger A. Horn, Charles R. Johnson {cite}`horn1994topics` как книга расширяющая стандартный курс по [_линейной алгебре_](matrices.md)
- Quantum Mechanics: The Theoretical Minimum Illustrated Edition by Leonard Susskind, Art Friedman {cite}`susskind2014quantum` или его русский перевод {cite}`susskind2014quantum-ru`. Книга сочетает в себе довольно строгий формализм вместе с интуицией квантовой механики. Главы построены в виде конкретных примеров или задач, которые понимают, зачем та или иная теория необходима.
- Mathematics for machine learning by Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong {cite}`deisenroth2020mathematics` - отличная книжка чтобы освежить воспоминания о базовых алгоритмах в машинном обучении и о математике, которая применяется в них. [_Доступна бесплатная электронная версия_](https://mml-book.github.io/book/mml-book.pdf).
- Deep Learning by Ian Goodfellow, Yoshua Bengio, Aaron Courville {cite}`Goodfellow-et-al-2016` - отличная книжка, чтобы разобраться в основах глубокого обучения, чем-то может заменить предыдущую книгу, отличный старт, если вы хотите разобраться в автоэнкодерах или в других нейросетевых моделях.
[_Доступна бесплатная электронная версия_](https://www.deeplearningbook.org/).
[_Доступна бесплатная электронная версия_](https://www.deeplearningbook.org/).

## Что мы узнали

Expand Down

0 comments on commit 402c073

Please sign in to comment.