이 글에서는 서로 달라보이는 물리학과 수학의 텐서가 특별한 경우에 서로 같다는 것을 설명한다. 이 글은 벡터공간, 쌍대공간에 대한 지식을 가정하고 작성되었으며, 기호를 비롯한 많은 내용은 다음 책을 참고했다.
1. tensor의 등장
1870년대에 깁스(Josiah Willard Gibbs)는 당시 사용되던 사원수(quaternion)의 복잡성을 해소하기 위해 벡터의 내적과 외적을 정의하고 벡터해석의 시대를 연다. 연구 도중, 그의 연구방향이 이전에 그라스만(Grassmann)이 했던 것과 비슷하다는 것을 발견하고 그라스만의 연구를 복원해내고 그 중요성을 수학계에 알리게 되었다. 그 과정에서 벡터공간 개념이 생겨난다. 깁스는 내적, 외적의 개념에서 더 나아가 텐서곱을 정의한다. 하지만, 그는 이것을 “부정곱(indeterminate product)”이라고 해서 단순히 벡터들 사이의 일반적인 곱셈 정도로만 다루었고, 이것으로 여러 응용수학적인 연구를 한다. 1898년 물리학자 Voigt는 같은 형태의 수학적 툴을 가지고 크리스탈에 관한 연구를 책으로 냈는데, 여기서 처음으로 현대적인 의미를 가진 “텐서”란 용어가 등장하게 된다. Voigt가 사용한 텐서는 계산을 위한 툴 정도였지만, 나중에 수학적으로 텐서가 정의된 후에도 당시 사용형태는 크게 문제가 될 수준은 아니었다.
수학적으로 텐서를 처음 정의한 사람은 리찌(Ricci)이다. 현재 사용하는 텐서 중 물리학 분야의 정의는 Ricci의 정의를 따른다. 1901년 Ricci가 그의 제자 Levi-Civita와 작성한 논문은 아인슈타인의 상대성이론에 중요한 레퍼런스가 된다. 아인슈타인의 일반상대론은 미분기하 분야에도 많이 사용되었다. 텐서는 후에 대수적으로 추상화 되어서 미분이 들어가지 않은 형태의 정의가 구성된다. 그러면서 수학의 어떤 분야에서는 텐서의 첨자기호가 필요없게 된다.
이세돌이 대국을 했던 (당시는 딥마인드의) 알파고는 인공지능에 대한 관심을 불러일으켰다. 구글은 딥마인드를 인수하고 인공지능 개발을 위한 라이브러리인 텐서플로우(TensorFlow)를 오픈한다. 이것을 계기로 텐서가 좀 더 대중화 되었는데, 기술문서를 읽어보면 라이브러리 이름에 텐서가 붙은 이유는 자료의 저장방식과 그 자료들 사이의 특정 연산에 텐서를 사용하기 때문임을 알 수 있다. 아래 링크를 따라가보면 관련 내용을 알 수 있다.
https://www.tensorflow.org/guide/tensors
2. 텐서의 여러 정의
수학적 대상은 추상화의 과정을 거치면서 정의가 하나로 통일되는 경향이 있는데, 텐서의 경우에는 겉보기에는 전혀 다른 다양한 정의가 동시에 사용되고 있다. 각각의 정의는 활용되는 분야에서 이해하기 좋은 형태로 다듬어져 있지만, 갓 공부를 시작한 새내기 수학도들에게는 어느 정의에서 시작을 해야 할지에 대한 고민에서 시작해서, 다른 분야의 사람들과 텐서에 대한 대화를 할 때 전혀 다른 기반에서 정의된 텐서를 본인보다 너무 쉽게 사용하는 모습에 당황스러워하게 되며, 이 과정에서 텐서에 관한 학습에 특별한 진전이 보이지 않는 좌절을 경험하게 된다. 하지만, 그 다양한 정의들이 동시에 적용될 수 있는 상황에서는 서로가 같은 말을 하고 있기 때문에 어느 정의에서 공부를 시작해도 상관이 없다.
편의를 위해서, 아래에서 말하는 $V$는 어떤 field(대체로는 실수가 되겠죠) 위에서 정의된 벡터공간이고, $V^*$는 그 쌍대공간으로 고정하겠다.
2.1 multilinear map을 이용한 정의
이 정의는 가장 짧고, 텐서가 중요한 이유를 가장 잘 설명하는 정의이다. 우선, 정의는 다음과 같다.
텐서 $\mathbf T$가 multilinear map이 된 것은 텐서가 물리학에서 태어나면서 생긴 편의사항에 가깝다. $\mathbf T$의 정의역을 $V \times V$라 하고 $V$의 벡터를 진한 영문 대문자, 스칼라를 그리스 소문자로 써서 multilinear를 설명하는 식을 써보면 $$\mathbf T(\mathbf V, \alpha \mathbf W + \beta \mathbf X) = \alpha \mathbf T(\mathbf V, \mathbf W) + \beta \mathbf T(\mathbf V, \mathbf X)$$ $$\mathbf T(\alpha \mathbf V + \beta \mathbf W, \mathbf X) = \alpha \mathbf T(\mathbf V, \mathbf X) + \beta \mathbf T(\mathbf W, \mathbf X)$$ 와 같다. 즉, 벡터 곱공간의 한 성분을 제외한 나머지를 모두 고정시킨 함수 $\mathbf T$가 남은 한 성분벡터공간에서 선형성을 가진다는 것이다. 이 성질은 물리학에서 중첩의 원리를 기대해서 만들어볼 수 있는 식이다.
이 정의는 정의역을 벡터공간으로 설정했기 때문에, 처음에 텐서를 만들던 물리학자들이 가장 걱정했던 “좌표변환에 대한 불변”이 정의 자체에 내장되어 있다. 다른 정의에서 보게 되는 첨자 기호는 이 정의에서 다음과 같이 표현할 수 있다. $${T^{i_1 \cdots i_p}}_{j_1 \cdots j_q} = \mathbf T(\mathbf E^{i_1} , \cdots, \mathbf E^{i_p}, \mathbf E_{j_1}, \cdots, \mathbf E_{j_q} )$$ 여기서 $\mathbf E_i$, $\mathbf E^i$들은 각각 $V$에 미리 설정된 base vector와 그 dual vector이다.
2.2 텐서곱을 이용한 정의
위 multilinear map이 수학적으로 더 추상화된 정의이다. 대수학 책에서 많이 소개되는 형태인데, 텐서곱을 정의한 후 텐서는 단순히 벡터공간 텐서곱의 원소로 정의한다. 앞서 본 $(p,q)$-텐서는 다음과 같은 식으로 표현된다. $$ \mathbf T \in \overbrace{V \otimes \cdots \otimes V}^{p개} \otimes \underbrace{V^* \otimes \cdots \otimes V^*}_{q개}$$ $V$, $V^*$가 서로 바꿔졌음에 주의하자.
텐서의 첨자 계산에서는 Einstein Convention이라고 하는, 시그마 기호를 적게 쓰는 표현식이 자주 사용되는데, $a_i b^i$와 같이 엇갈린 첨자가 위, 아래로 같은 문자로 이루어져 있을 때는 다음 기호를 뜻한다. $$\sum_{i=1}^n a_i b^i$$ 이 약속을 사용해 표준 base $\left\{ \mathbf E^a \right\}$, $\left\{ \mathbf E_a \right\}$로 임의의 1-form과 벡터를 다음과 같이 표현할 수 있다. $$ \boldsymbol{\omega} = \omega_i \mathbf E^i, \quad \mathbf X = X^j \mathbf E_j$$ 그리고, $$\mathbf T = {T^{i_1 \cdots i_p}}_{j_1 \cdots j_q} \mathbf E_{i_1} \otimes \cdots \mathbf E_{i_p} \otimes \mathbf E^{j_1} \otimes \cdots \otimes \mathbf E^{j_q}$$ 와 같이 쓸 수 있다.
multilinear map으로 정의된 텐서와의 관계를 설명하기 위해 다음 기호를 약속하자. $$ \langle \boldsymbol{\omega}, \mathbf X \rangle = \langle \omega_i \mathbf E^i, X^j \mathbf E_j \rangle = \omega_i X^i $$ 벡터 $\mathbf X$를 1-form $\boldsymbol\omega$에 넣어 계산한 결과값인데, 함수기호보다는 위와 같이 표현하는 것이 보다 복잡한 식을 나타내기 편하다. 그러면 이 정의에서 \begin{align*} \mathbf T(\mathbf E^{i_1} , \cdots, \mathbf E^{i_p}, \mathbf E_{j_1}, \cdots, \mathbf E_{j_q} ) &= {T^{a_1 \cdots a_p}}_{b_1 \cdots b_q} \mathbf E_{a_1} \otimes \cdots \mathbf E_{a_p} \otimes \mathbf E^{b_1} \otimes \cdots \otimes \mathbf E^{b_q} (\mathbf E^{i_1} , \cdots, \mathbf E^{i_p}, \mathbf E_{j_1}, \cdots, \mathbf E_{j_q} ) \\ & = {T^{a_1 \cdots a_p}}_{b_1 \cdots b_q} \langle \mathbf E^{i_1}, \mathbf E_{a_1} \rangle \cdots \langle \mathbf E^{i_p} , \mathbf E_{a_p} \rangle \langle \mathbf E^{b_1}, \mathbf E_{j_1} \rangle \cdots \langle \mathbf E^{b_q}, \mathbf E_{j_q} \rangle \\ & = {T^{a_1 \cdots a_p}}_{b_1 \cdots b_q} \;{\delta^{i_1}}_{a_1} \cdots {\delta^{i_p}}_{a_p} {\delta^{b_1}}_{j_1} \cdots {\delta^{b_q}}_{j_q} \\ & = {T^{i_1 \cdots i_p}}_{j_1 \cdots j_q} \end{align*} 와 같이 앞서 정의한 결과와 같은 식이 얻어짐을 알 수 있다. 처음 두 줄의 계산이 잘 이해되지 않는데 급하게 알아야 할 경우는 이 문서의 제일 위에 언급된 호킹의 책을 참고하기 바란다. 18페이지에 정의가 적혀 있다. multilinearity는 정의에 따라 유도할 수 있다.
2.3 다차원배열을 이용한 정의
역사상 가장 먼저 등장하는 정의의 형태이고 Ricci가 정의한 텐서이며, 성분을 이용한 계산이 필요한 모든 분야에서 사용되는 텐서이다. 어쩌면 가장 대중적이다.
이 정의에서 텐서는 좌표변환 또는 base change에 대한 법칙이 부여된 특별한 다차원 배열이다. $\left\{ \mathbf E_{a'} \right\}$, $\left\{ \mathbf E^{a'} \right\}$을 새로운 좌표계라고 하면 이들 사이의 관계는 다음과 같은 식으로 표현된다. $$\mathbf E_{a'} = \Phi_{a'}^a \mathbf E_a, \quad \mathbf E^{a'} = \Phi_a^{a'} \mathbf E^a $$ 이때, $$\delta_{a'}^{b'} = \langle \mathbf E^{b'}, \mathbf E_{a'} \rangle = \langle \Phi_{b}^{b'} \mathbf E^b , \Phi_{a'}^{a} \mathbf E_a \rangle = \Phi_{b}^{b'} \Phi_{a'}^{a} \langle \mathbf E^b , \mathbf E_a \rangle = \Phi_{b}^{b'} \Phi_{a'}^{a} \delta_b^a = \Phi_{a}^{b'} \Phi_{a'}^{a}$$ 이므로 $\Phi_{a}^{a'}$, $\Phi_{a'}^{a}$은 서로 역행렬이다. 그러면 처음의 basis에 대해 $${T^{i_1 \cdots i_p}}_{j_1 \cdots j_q} = \mathbf T(\mathbf E^{i_1} , \cdots, \mathbf E^{i_p}, \mathbf E_{j_1}, \cdots, \mathbf E_{j_q} )$$ 라고 정의했을 때 $${T^{i'_1 \cdots i'_p}}_{j'_1 \cdots j'_q} = \mathbf T(\mathbf E^{i'_1} , \cdots, \mathbf E^{i'_p}, \mathbf E_{j'_1}, \cdots, \mathbf E_{j'_q} )$$ 을 다음과 같은 관계로 원래 basis와 연관을 시켜준다. $$ {T^{i'_1 \cdots i'_p}}_{j'_1 \cdots j'_q} = {T^{i_1 \cdots i_p}}_{j_1 \cdots j_q} \Phi^{i'_1}_{i_1} \cdots \Phi^{i'_p}_{i_p} \Phi^{j_1}_{j'_1} \cdots \Phi^{j_q}_{j'_q}$$ 이렇게 basis vector에 대해서만 정의된 다차원 배열과 좌표변환법칙을 가지면 텐서곱을 이용한 정의에서와 같은 텐서의 표기법을 얻을 수 있다. 실제로 이 법칙을 텐서곱을 이용한 정의식에 적용해보면 \begin{align*} {T^{i'_1 \cdots i'_p}}_{j'_1 \cdots j'_q} & \mathbf E_{i'_1} \otimes \cdots \mathbf E_{i'_p} \otimes \mathbf E^{j'_1} \otimes \cdots \otimes \mathbf E^{j'_q} \\ & = {T^{i'_1 \cdots i'_p}}_{j'_1 \cdots j'_q} \Phi_{i'_1}^{i_1} \cdots \Phi_{i'_p}^{i_p} \Phi_{j_1}^{j'_1} \cdots \Phi_{j_q}^{j'_q} \mathbf E_{i_1} \otimes \cdots \mathbf E_{i_p} \otimes \mathbf E^{j_1} \otimes \cdots \otimes \mathbf E^{j_q} \\ & = {T^{i_1 \cdots i_p}}_{j_1 \cdots j_q} \mathbf E_{i_1} \otimes \cdots \mathbf E_{i_p} \otimes \mathbf E^{j_1} \otimes \cdots \otimes \mathbf E^{j_q} \end{align*} 가 되므로 벡터공간의 basis를 어떻게 잡았든지 관계없이 동일한 꼴의 식이 얻어짐을 확인할 수 있다.
후기...
한 면에 실어내기에는 너무 할 말이 많은 내용이어서 필요한 설명이 많이 빠졌다. 이 글의 내용은 정확한 정의를 담고 있지 않다. 하지만, 이 글에서 말하려던 것은 텐서 정의의 부수적 장치들이 어떻게 서로를 같게 만들어주는지였다. 텐서를 다룬 책이 언뜻 보기에는 서로 연관성이 없어보이나, 결국은 서로 잘 맞도록 정의되어 있으니 현재 공부하는 분야에서 정의된 방식을 잘 따라가는 것이 빨리 텐서를 공부하는 데 도움이 될 것이다.