[머신러닝을 위한 대수학 - 1] 텐서는 다차원 배열이 아니다 (Multilinear algebra)

2025.04.04 22:19 442 조회

본 편을 시작으로 딥러닝에서 이야기하는 ‘텐서’가 수학적으로 어떤 대상인지를 이야기하고자 합니다. 실제로 물리학, 대수학 등의 분야에서 다루는 텐서는 상당히 추상적인 개념입니다. 이 내용을 딥러닝 쪽과 연결지어서 서술하는 글을 보지 못해 직접 써봅니다.

내용의 간결성을 위해서 엄밀한 정의와 표현은 최소한으로 하고 글을 작성합니다. 다만 사전에 선형대수학에 대한 기초적인 이해가 없다면 다소 어려운 글이 될 수 있습니다.

우선 필요한 선형대수학에서의 ‘직관’을 몇가지 짚고 넘어가겠습니다.



기저(Basis)

(선대에서 말하는 basis와 span의 개념을 이해하고 있다면 이 단락은 넘어가셔도 됩니다)

적절한 스칼라, 벡터에 관한 연산이 정의된 대수적 구조를 ‘벡터 공간(Vector space)’이라고 부릅니다. 어떤 벡터 공간에서의 기저란 간단히 말해서 평행하지 않은(선형 독립인) 성분으로 이루어진 벡터들의 집합입니다 —단, 이는 다소 불완전한 설명입니다—.


간단히 예를 들어보겠습니다.

여러분은 아래의 좌표평면에서 원점에 위치하는 데이커 D를 각각 상-하, 좌-우로 움직이는 두 방향키를 이용해 조작할 수 있습니다. 이때 D는 임의의 지점 (a,b)에 도달할 수 있을까요?

물론 가능합니다.

그러나, D의 이동을 방해하려는 어떤 세력이 여러분의 상-하 방향키(벡터)를 뽑아버렸습니다.

결과적으로 여러분의 데이커 D는 1차원에서만 살아가게 되면서 이 우주에서 가장 외로운 존재가 되었음은 물론, 도착지 (a,b)가 x축 위에 있지 않다면 D는 영원히 목표 지점에 도달할 수조차 없습니다.


여러분이 2개의 방향키를 모두 가지고 있을 때, 이 둘을 기저로 잡으면 여러분은 실벡터 공간 R^2(좌표평면) 전체를 생성(span)합니다.

그러나, 방향키를 하나만 가지고 있는 지금의 여러분은 기저 벡터가 단 하나이기에 1차원 실벡터 공간 R만을 생성할 수 있습니다.


보다 자세한 기저의 정의와 선형 독립, 선형 종속의 개념은 위키피디아를 참고할 수 있습니다.


ex.1) 좌표평면에서 x축 성분과 y축 성분에 해당하는 두 벡터 (1,0), (0,1)로 이루어진 집합은 벡터 공간 R^2의 기저입니다.

ex.2) ex.1과 동일한 공간에서 두 벡터 (1,0), (1,1) 역시 선형 독립인 R^2의 기저 벡터입니다.

ex.3) 3차원 (유클리드) 공간(R^3)에서 벡터 집합 {(1,0,0), (0,1,0), (0,0,1)}은 기저입니다.

*ex.4) 2x2 실수 행렬 전체를 원소로 가지는 벡터 공간 M_{2x2}(R)는 4개의 기저 벡터를 갖습니다.



쌍대 공간(Dual space)

이제부터 본격적인 이야기가 시작됩니다.

벡터 공간 V에는 항상 대응되는 쌍대 공간 V*가 존재합니다.

V에서의 임의의 원소 벡터 a를 가져오면 이 a를 다시 스칼라로 대응시키는 매핑(b)이 존재합니다 (이때의 매핑은 선형 변환).


*지금부터는 특별한 말이 없다면 실수 체 R^2 위의 실벡터 공간만을 다룹니다.


위 상황에서의 a에 대한 b의 작용을 보이면 아래 수식처럼 나타날 수 있습니다.

(여기서 위 첨자는 지수가 아닙니다)


이때 V*의 원소를 linear functional 혹은 dual vector라고 부릅니다. 위에서 보인 것과 같이, 쌍대 관계는 결국 행렬의 전치와 비슷한 맥락으로 작용합니다.

—대수학을 어느정도 공부한 사람의 경우 ’결국 기존의 vector space와 이것의 dual space 사이에는 isomorphism이 존재하는데 도대체 왜 구분하느냐’라는 질문을 던질 수 있는데, 일단은 넘어가겠습니다—


여기서 반드시 가져가야할 핵심 아이디어는 결국 ‘열벡터(vector)와 행벡터(dual vector)를 구분해야한다'는 사실입니다. 이를 바탕으로 우리는 자연스럽게 정의되는 여러 대상들을 떠올릴 수 있습니다.


ex.1) V의 기저를 B, V*의 기저를 B*라고 할 때, 다음과 같은 기저를 결정할 수 있습니다. 이때의 델타는 크로네커 델타(Kronecker delta)라고 합니다.

(굳이 예를 들자면 두 열벡터 (1, 0), (0, 1)와 이들의 전치 사이의 쌍대 관계가 위 사례에 포함됩니다)


*ex.2) 위에서 간접적으로 언급하긴 했지만, (V가 유한차원 벡터 공간인 경우) V ≃ V*.


(아직 이해하기 조금 어렵다면, dual vector는 결국 vector를 입력으로 받고 스칼라를 뱉는 함수라고 생각하면 됩니다)



텐서곱(Tensor product)

이런 생각을 해볼 수 있습니다: ‘두 벡터만 가지고 행렬을 구성할 수 있을까?’

위 질문을 다시 말해보자면, 임의의 행렬을 ‘무언가에 대한 기저’의 선형 결합으로 표현할 수 있느냐가 관건이 됩니다. 예컨데, E_1, E_2, E_3, E_4라는 기저가 있다면 모든 2x2 행렬을 만들어볼 수도 있습니다. 다음과 같은 것이 유사한 시도입니다.

이때 ‘새로운 기저를 만들어내는 것'이 바로 텐서곱입니다. 이는 예시를 직접 관찰해보는 것이 이해하기 좋습니다.

텐서곱은 교환법칙이 성립하지 않지만, 결합법칙과 분배법칙은 성립합니다.

이를 합 기호로 나타내면 보다 간단하게 표현할 수 있습니다.

마침내, 지금까지 써온 위첨자, 아래첨자의 구분이 빛을 발하는 순간입니다. 다음과 같이 시그마를 생략하는 표기를 Einstein notation이라고 부릅니다.

여기서 행렬의 각 성분만이 궁금하다면,



텐서(Tensor)

행렬은 1개의 vector와 1개의 dual vector를 입력 받아 스칼라를 주는 선형적인 함수입니다. 이를 (1,1)-tensor라고 합니다. 이를 T라고 이름 붙일 때, 다음과 같이 정의되는 다중선형사상을 정의할 수 있습니다.

이를 직접 행렬곱으로 나타내어 확인하면,

참고로, 열벡터(vector)는 (1,0)-tensor, 행벡터(dual vector)는 (0,1)-tensor가 됩니다.

이제 우리는 보다 일반화된 경우도 생각해볼 수 있습니다. (p,q)-tensor T는 아래와 같은 다중선형사상에 정확히 대응됩니다.

그리고 첨자 표기도 사용될 수 있습니다.

몇가지 예시로 마무리하며 내용을 정리합니다.


ex.1) 내적(dot product)은 벡터 2개를 입력으로 취하여 스칼라를 주는 (0,2)-tensor입니다. 이를 쌍선형형식(bilinear form)이라고도 부릅니다.


*ex.2) 아래는 CNN 레이어에 텐서 표기법을 적용한 결과입니다.

(여기서 f는 activation function, W는 weight, X는 input, b는 bias에 해당합니다)





다음 편에서는 다양한 텐서의 종류와 그 성질에 대해서 알아보겠습니다.


(본문에서 난해하거나 이해하기 어려운 부분이 있다면 댓글로 질문을 남겨주세요. 무엇보다 작성자는 아직 고등학교도 졸업하지 않은 비전공자이기에 내용에 보완해야할 점이 있을 수 있습니다. 보이는 부분이 있다면 마찬가지로 댓글 부탁드립니다...!)

로그인이 필요합니다
0 / 1000
rootenter
2025.04.05 00:16

방금 확인한 사실인데, 위 수식 중 하나에 가벼운 오타가 존재합니다. 
내용을 이해했다면 충분히 검증할 수 있는 부분이니, 이를 찾는 것은 연습문제로 남깁니다(?

도비콘
2025.04.05 13:17

😃👍🏻👍🏻🤜🏼🤛🏻 텐서 교육 감사합니다.

이전 글
[머신러닝을 위한 대수학 - 1.5] torch.einsum은 무적이다
대회 -
좋아요 7
조회 277
댓글 0
2달 전
현재 글
[머신러닝을 위한 대수학 - 1] 텐서는 다차원 배열이 아니다 (Multilinear algebra)
대회 -
좋아요 8
조회 442
댓글 2
2달 전
다음 글
🐍conda 가상환경 생성하기🐍
대회 -
좋아요 5
조회 226
댓글 0
2달 전