2-1. 선형대수 기초: 벡터, 행렬, 텐서
1. 벡터 (Vectors)
1) 벡터의 정의와 배경: 왜 벡터인가?
우리는 일상에서 다양한 종류의 양을 다룹니다. 온도는 그 값 하나만으로 충분히 설명되는 양이며, 이를 스칼라(Scalar)라고 부릅니다. 하지만 세상에는 단순히 크기만으로 온전히 표현할 수 없는 물리량이나 정보가 많습니다. 예를 들어, 바람은 단순히 세기($10 \text{m/s}$)뿐만 아니라 어느 방향으로 부는지(동풍, 서풍)도 중요합니다. 힘이나 속도 역시 크기와 방향을 동시에 가집니다. 이처럼 크기와 방향을 모두 가지는 양을 표현하기 위해 우리는 벡터(Vector)라는 수학적 도구를 사용합니다.
컴퓨터 과학, 특히 딥러닝 분야에서 벡터는 더 추상적인 의미로 확장됩니다. 딥러닝 모델의 입력 데이터 하나하나가 여러 개의 특징(feature)으로 구성될 때, 이 특징들을 하나의 묶음으로 표현하는 데 벡터가 사용됩니다. 예를 들어, 한 사람의 나이, 키, 몸무게라는 세 가지 특징을 한데 묶어 $[30, 175, 70]$과 같은 형태로 나타낼 수 있습니다. 이 경우 벡터는 공간에서의 방향보다는 =여러 정보를 한 번에 담는 '데이터 컨테이너'=의 역할을 수행합니다.
수학적으로 벡터는 크기와 방향을 갖는 물리량을 표현하는 도구로 출발했지만, 현대 선형대수학에서는 단순히 숫자의 순서화된 리스트(ordered list of numbers)로 정의됩니다. 이 리스트의 각 원소를 성분(component)이라고 부릅니다.
2) 벡터의 표현
벡터는 보통 열 벡터(column vector) 형태로 표현됩니다. $n$차원 벡터는 $n$개의 성분을 가지며, 다음과 같이 표기할 수 있습니다.
$$ \mathbf{v} = \begin{pmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{pmatrix} $$
여기서 $v_i$는 벡터 $\mathbf{v}$의 $i$번째 성분을 나타냅니다. 때로는 공간을 절약하기 위해 전치(transpose) 연산을 사용하여 행 벡터(row vector) 형태로 표현하기도 합니다.
$$ \mathbf{v}^T = \begin{pmatrix} v_1 & v_2 & \dots & v_n \end{pmatrix} $$
차원(Dimension)은 벡터가 가지는 성분의 개수를 의미합니다. 예를 들어, $\mathbf{v} = \begin{pmatrix} 3 \\ 4 \end{pmatrix}$는 2차원 벡터이며, 2차원 평면의 한 점 또는 원점에서 해당 점으로 향하는 화살표로 시각화할 수 있습니다.
3) 벡터 연산
(1) 덧셈과 뺄셈
두 벡터의 덧셈과 뺄셈은 각 성분별로 수행됩니다. 두 벡터 $\mathbf{a}$와 $\mathbf{b}$가 같은 차원일 때만 연산이 가능합니다.
$$ \mathbf{a} = \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{pmatrix} $$
덧셈: $$ \mathbf{a} + \mathbf{b} = \begin{pmatrix} a_1 + b_1 \\ a_2 + b_2 \\ \vdots \\ a_n + b_n \end{pmatrix} $$
뺄셈: $$ \mathbf{a} - \mathbf{b} = \begin{pmatrix} a_1 - b_1 \\ a_2 - b_2 \\ \vdots \\ a_n - b_n \end{pmatrix} $$
기하학적으로 벡터의 덧셈은 하나의 벡터 끝에 다른 벡터를 이어붙여 그 시작점부터 최종 끝점까지의 새로운 벡터를 만드는 과정으로 이해할 수 있습니다. 이를 '평행사변형 법칙'이라고도 합니다.
(2) 스칼라 곱셈
벡터에 스칼라 $c$를 곱하는 것은 벡터의 각 성분에 스칼라 $c$를 곱하는 것을 의미합니다.
$$ c\mathbf{v} = c \begin{pmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{pmatrix} = \begin{pmatrix} c v_1 \\ c v_2 \\ \vdots \\ c v_n \end{pmatrix} $$
스칼라 곱셈은 벡터의 크기를 변경하며, 스칼라의 부호에 따라 방향이 반대로 바뀔 수도 있습니다. 예를 들어, $2\mathbf{v}$는 $\mathbf{v}$와 같은 방향으로 크기가 2배인 벡터를 나타냅니다.
(3) 내적 (Dot Product)
내적은 두 벡터를 곱하여 하나의 스칼라 값을 도출하는 연산입니다. 이는 두 벡터가 얼마나 같은 방향을 향하고 있는지를 정량화하는 데 사용됩니다. 내적은 스칼라 곱(Scalar Product)이라고도 불립니다.
두 벡터 $\mathbf{a}$와 $\mathbf{b}$의 내적은 다음과 같이 계산됩니다.
$$ \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + \dots + a_n b_n = \sum_{i=1}^{n} a_i b_i $$
내적의 결과는 스칼라입니다. 기하학적으로 내적은 다음과 같은 관계를 가집니다.
$$ \mathbf{a} \cdot \mathbf{b} = ||\mathbf{a}|| \cdot ||\mathbf{b}|| \cdot \cos\theta $$
여기서 $||\mathbf{a}||$와 $||\mathbf{b}||$는 각 벡터의 크기(Magnitude 또는 Norm)를 의미하며, $\theta$는 두 벡터 사이의 각도입니다.
$||\mathbf{a}|| = \sqrt{a_1^2 + a_2^2 + \dots + a_n^2}$ 입니다.
이 공식에서 알 수 있듯이:
- 두 벡터가 같은 방향을 향할수록($\theta \approx 0^\circ, \cos\theta \approx 1$) 내적 값은 커집니다.
- 두 벡터가 수직일 때($\theta = 90^\circ, \cos\theta = 0$) 내적 값은 0이 됩니다.
- 두 벡터가 반대 방향을 향할수록($\theta \approx 180^\circ, \cos\theta \approx -1$) 내적 값은 작아집니다 (음수).
딥러닝에서는 내적을 통해 두 데이터의 유사도를 측정하거나, 벡터를 다른 벡터 공간으로 투영하는 등의 핵심적인 역할을 수행합니다. 예를 들어, 자연어 처리에서 단어 임베딩 벡터 간의 내적은 두 단어의 의미적 유사도를 나타낼 수 있습니다.
4) 벡터의 기하학적 의미와 응용
벡터는 N차원 공간에서 한 점의 위치를 나타내거나, 한 지점에서 다른 지점으로의 변위(displacement)를 나타내는 데 사용됩니다. 이는 공간상의 점들을 조작하거나, 데이터 포인트들을 특정 공간에 매핑하는 딥러닝에서 매우 중요합니다.
응용 예시:
- 이미지: 흑백 이미지는 각 픽셀의 밝기 값을 나열한 벡터로 표현될 수 있습니다. (사실 2D 행렬에 가깝지만, 전처리 과정에서 1D 벡터로 평탄화되기도 합니다.)
- 텍스트: 워드 임베딩(Word Embedding)은 단어를 고차원 벡터 공간의 한 점으로 매핑하여 단어의 의미를 수치적으로 표현합니다. "왕"과 "남자" 벡터를 빼고 "여자" 벡터를 더하면 "여왕" 벡터에 가까워지는 놀라운 특성을 보입니다.
- 특징 벡터: 딥러닝 모델에 입력되는 데이터는 여러 특징으로 구성된 벡터 형태를 가집니다. 예를 들어, 특정 동물의 특징(크기, 색상, 소리 등)이 벡터의 각 성분으로 표현될 수 있습니다.

2. 행렬 (Matrices)
1) 행렬의 정의와 배경: 왜 행렬인가?
벡터가 숫자들의 순서화된 리스트였다면, 행렬(Matrix)은 이러한 벡터들을 2차원 직사각형 형태로 배열한 것입니다. 행렬은 숫자들의 직사각형 배열(rectangular array of numbers)로 정의됩니다.
$$ \mathbf{A} = \begin{pmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{pmatrix} $$
여기서 $a_{ij}$는 행렬 $\mathbf{A}$의 $i$번째 행(row)과 $j$번째 열(column)에 위치한 원소를 의미합니다. 행렬은 $m$개의 행과 $n$개의 열을 가질 때 $m \times n$ 행렬이라고 부릅니다.
행렬이 필요한 이유는 크게 두 가지입니다. 첫째, 여러 개의 벡터를 한꺼번에 다루거나 여러 개의 특징을 가진 데이터를 표현할 때 유용합니다. 예를 들어, 여러 사람의 나이, 키, 몸무게 정보를 한데 모아 표 형태로 표현할 수 있는데, 이것이 바로 행렬입니다. 둘째, 선형 변환(Linear Transformation)을 표현하고 적용하는 데 핵심적인 역할을 합니다. 벡터를 회전시키거나, 늘리거나, 특정 방향으로 투영하는 등의 공간 변환을 행렬 곱셈을 통해 효율적으로 수행할 수 있습니다. 딥러닝의 신경망(Neural Network)에서 가중치(Weights)가 바로 행렬 형태로 표현되며, 입력 데이터에 대한 변환을 담당합니다.
2) 행렬의 표현
행렬은 일반적으로 대문자 볼드체 $\mathbf{A}$, $\mathbf{B}$ 등으로 표기합니다. 행렬의 크기(dimension)는 '행의 개수 $\times$ 열의 개수'로 나타냅니다. 예를 들어, 2개의 행과 3개의 열을 가진 행렬은 $2 \times 3$ 행렬이라고 합니다.
특별한 행렬:
정방 행렬(Square Matrix): 행의 개수와 열의 개수가 같은 행렬($n \times n$ 행렬).단위 행렬(Identity Matrix): 정방 행렬 중 주 대각선 원소는 모두 1이고 나머지 원소는 모두 0인 행렬. $\mathbf{I}$로 표기하며, 곱셈에서 스칼라 1과 같은 역할을 합니다.영 행렬(Zero Matrix): 모든 원소가 0인 행렬. $\mathbf{0}$으로 표기하며, 덧셈에서 스칼라 0과 같은 역할을 합니다.대각 행렬(Diagonal Matrix): 주 대각선 원소만 값을 가지고 나머지 원소는 모두 0인 정방 행렬.
3) 행렬 연산
(1) 덧셈과 뺄셈
두 행렬의 덧셈과 뺄셈은 벡터와 마찬가지로 각 성분별로 수행됩니다. 두 행렬의 크기가 같을 때만 연산이 가능합니다.
$$ \mathbf{A} + \mathbf{B} = \begin{pmatrix} a_{11}+b_{11} & \dots & a_{1n}+b_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1}+b_{m1} & \dots & a_{mn}+b_{mn} \end{pmatrix} $$
(2) 스칼라 곱셈
행렬에 스칼라 $c$를 곱하는 것은 행렬의 모든 성분에 스칼라 $c$를 곱하는 것을 의미합니다.
$$ c\mathbf{A} = \begin{pmatrix} c a_{11} & \dots & c a_{1n} \\ \vdots & \ddots & \vdots \\ c a_{m1} & \dots & c a_{mn} \end{pmatrix} $$
(3) 행렬 곱셈 (Matrix Multiplication)
행렬 곱셈은 선형대수에서 가장 중요하고 강력한 연산 중 하나입니다. 이는 두 행렬의 내부 차원이 일치할 때만 가능합니다. 즉, $m \times n$ 행렬 $\mathbf{A}$와 $n \times p$ 행렬 $\mathbf{B}$를 곱할 때, 결과 행렬 $\mathbf{C}$는 $m \times p$ 행렬이 됩니다.
행렬 곱셈의 각 원소 $c_{ij}$는 $\mathbf{A}$의 $i$번째 행 벡터와 $\mathbf{B}$의 $j$번째 열 벡터의 내적으로 계산됩니다.
$$ \mathbf{C} = \mathbf{A} \mathbf{B} \quad \text{where} \quad c_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj} $$
예시: $$ \mathbf{A} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, \quad \mathbf{B} = \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} $$
$$ \mathbf{A}\mathbf{B} = \begin{pmatrix} (1 \cdot 5 + 2 \cdot 7) & (1 \cdot 6 + 2 \cdot 8) \\ (3 \cdot 5 + 4 \cdot 7) & (3 \cdot 6 + 4 \cdot 8) \end{pmatrix} = \begin{pmatrix} (5 + 14) & (6 + 16) \\ (15 + 28) & (18 + 32) \end{pmatrix} = \begin{pmatrix} 19 & 22 \\ 43 & 50 \end{pmatrix} $$
행렬 곱셈은 단순히 숫자를 곱하는 것을 넘어섭니다. 이는 선형 변환의 연속적인 적용을 나타내거나, 여러 입력에 대한 가중 합을 동시에 계산하는 것으로 해석될 수 있습니다. 딥러닝에서 신경망의 한 계층(layer)에서 다음 계층으로 신호가 전달될 때, 이 과정은 기본적으로 입력 벡터와 가중치 행렬의 곱셈으로 이루어집니다. 이 때문에 행렬 곱셈은 딥러닝 연산의 핵심 병목 지점이자 최적화 대상이 됩니다.
(4) 전치 (Transpose)
행렬의 전치(Transpose)는 행과 열을 서로 바꾸는 연산입니다. $m \times n$ 행렬 $\mathbf{A}$의 전치 행렬 $\mathbf{A}^T$는 $n \times m$ 행렬이 되며, $a_{ij}^T = a_{ji}$ 관계를 가집니다.
예시: $$ \mathbf{A} = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix}, \quad \mathbf{A}^T = \begin{pmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{pmatrix} $$
전치는 데이터를 재구성하거나, 내적과 행렬 곱셈에서 차원을 맞추는 데 자주 사용됩니다.
(5) 역행렬 (Inverse Matrix)
정방 행렬 $\mathbf{A}$에 대해 $\mathbf{A}\mathbf{A}^{-1} = \mathbf{A}^{-1}\mathbf{A} = \mathbf{I}$를 만족하는 행렬 $\mathbf{A}^{-1}$를 $\mathbf{A}$의 역행렬(Inverse Matrix)이라고 합니다. 역행렬은 연립 선형 방정식을 풀거나 선형 변환을 되돌리는 데 사용되지만, 모든 행렬이 역행렬을 가지는 것은 아닙니다. 딥러닝에서는 직접적인 역행렬 계산보다는 유사 역행렬(Pseudo-inverse)이나 행렬 분해(Matrix Decomposition) 기법이 더 일반적으로 활용됩니다.
4) 행렬의 역할과 응용
- 데이터셋 표현: 이미지, 텍스트 데이터의 모음, 또는 여러 샘플에 대한 특징 벡터들의 모음을 행렬로 표현할 수 있습니다. 각 행은 하나의 데이터 샘플(예: 이미지 하나), 각 열은 하나의 특징(예: 픽셀 값)을 나타냅니다.
- 선형 변환: 회전, 스케일링, 전단(shearing) 등 기하학적 변환을 행렬 곱셈으로 표현할 수 있습니다. 컴퓨터 그래픽스에서 3D 모델을 변형하거나 카메라 뷰를 변경하는 데 필수적입니다.
- 신경망 가중치: 딥러닝 모델의 각 계층은 입력 데이터를 다음 계층으로 변환하는
가중치 행렬(Weight Matrix)을 가집니다. 이 가중치 행렬이 학습 과정에서 최적화됩니다.
3. 텐서 (Tensors)
1) 텐서의 정의와 배경: 왜 텐서인가?
스칼라가 0차원, 벡터가 1차원, 행렬이 2차원 데이터를 표현하는 데 사용되었다면, 텐서(Tensor)는 이 모든 것을 일반화한 N차원 배열입니다. 즉, 텐서는 스칼라, 벡터, 행렬을 포함하는 개념이며, 3차원 이상의 데이터를 다룰 때 필수적입니다.
딥러닝, 특히 현대 인공지능 분야에서 텐서의 중요성은 아무리 강조해도 지나치지 않습니다. 왜냐하면 우리가 다루는 대부분의 데이터는 2차원 이상이기 때문입니다. 예를 들어, 컬러 이미지는 높이(height)와 너비(width) 외에 빨강(R), 초록(G), 파랑(B) 세 가지 채널(channel)을 가지고 있어 $H \times W \times C$ 형태의 3차원 배열로 표현됩니다. 여러 장의 이미지를 동시에 처리하는 딥러닝 모델의 입력은 배치(batch) 차원까지 추가되어 $B \times H \times W \times C$ 형태의 4차원 텐서가 됩니다. 비디오 데이터는 여기에 시간(time) 차원이 더해져 5차원 텐서가 될 수 있습니다.
텐서는 이러한 고차원 데이터를 효율적으로 저장하고 연산할 수 있게 하는 추상적인 데이터 구조입니다. 물리적으로는 다차원 배열이지만, 수학적으로는 좌표계 변환에 대해 특정 변환 특성을 유지하는 양으로 정의되기도 합니다. 딥러닝 프레임워크인 TensorFlow나 PyTorch는 이름에서 알 수 있듯이 텐서를 핵심 데이터 구조로 사용합니다.
2) 텐서의 차수 (Rank)
텐서의 차수(Rank 또는 Order)는 텐서가 가지는 차원(Dimension)의 개수를 의미합니다. 혼동을 피하기 위해 N-차원 배열보다는 N-랭크 텐서 또는 N-차수 텐서라고 부르는 것이 좋습니다.
- 0-랭크 텐서: 스칼라. 단일 숫자 (예: 5)
- 1-랭크 텐서: 벡터. 숫자들의 리스트 (예: $[1, 2, 3]$)
- 2-랭크 텐서: 행렬. 숫자들의 2차원 배열 (예: $\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}$)
- 3-랭크 텐서: 숫자들의 3차원 배열. 예를 들어, 흑백 이미지의 컬렉션($\text{Batch} \times \text{Height} \times \text{Width}$)
- 4-랭크 텐서: 숫자들의 4차원 배열. 예를 들어, 컬러 이미지의 컬렉션($\text{Batch} \times \text{Height} \times \text{Width} \times \text{Channels}$)
텐서의 형태(Shape)는 각 차원의 크기를 나타내는 튜플(tuple)입니다. 예를 들어, 컬러 이미지 배치의 텐서 형태는 $(B, H, W, C)$가 됩니다.
3) 텐서의 연산 (개념적 설명)
텐서 연산은 기본적으로 스칼라, 벡터, 행렬 연산의 일반화된 형태입니다.
- 성분별 연산: 덧셈, 뺄셈, 스칼라 곱셈 등은 텐서의 모든 원소에 대해 성분별(element-wise)로 적용됩니다.
- 브로드캐스팅 (Broadcasting): 크기가 다른 텐서 간의 연산을 가능하게 하는 메커니즘입니다. 예를 들어, 행렬에 스칼라를 더하면, 스칼라가 행렬의 모든 원소에 더해지는 방식으로 작동합니다. 이는 텐서의 차원을 자동으로 확장하여 연산을 수행하는 기능입니다.
- 텐서 곱셈 (Tensor Contraction): 행렬 곱셈의 고차원 버전으로, 특정 차원을 따라 원소들을 곱하고 합산하는 연산입니다. 딥러닝에서는
tf.matmul(TensorFlow)이나torch.matmul(PyTorch) 같은 함수로 구현되며, 주로 2차원 행렬 곱셈을 의미하거나,tf.einsum과 같이 더 일반적인 텐서 곱셈을 지칭할 수 있습니다. - 재구성 (Reshaping): 텐서의 총 원소 개수를 유지하면서 차원의 형태를 변경하는 연산입니다. 데이터를 특정 모델의 입력 형태로 맞출 때 자주 사용됩니다.
4) 텐서의 중요성과 딥러닝에서의 활용
텐서는 딥러닝 워크플로우의 모든 단계에서 핵심적인 역할을 합니다.
- 데이터 표현: 이미지, 오디오, 비디오, 텍스트 등 모든 종류의 입출력 데이터는 텐서 형태로 모델에 전달됩니다.
- 모델 매개변수: 신경망의 가중치(Weights)와 편향(Biases) 또한 텐서로 표현됩니다. 이들은 학습 과정에서 최적화되는 값들입니다.
- 중간 연산 결과: 신경망 계층을 통과하며 발생하는 모든 중간 활성화(activation) 값들 역시 텐서입니다.
- 하드웨어 가속: GPU와 같은 병렬 컴퓨팅 장치는 텐서 연산을 매우 효율적으로 처리하도록 설계되어 있습니다. 딥러닝 프레임워크는 이러한 하드웨어의 이점을 최대한 활용하기 위해 텐서 연산에 특화된 라이브러리(CUDA 등)를 사용합니다.
결론적으로, 텐서는 딥러닝에서 데이터의 언어이자 연산의 기반입니다. 텐서에 대한 이해는 복잡한 신경망 모델이 어떻게 데이터를 처리하고 학습하는지를 파악하는 데 필수적인 출발점입니다. 스칼라, 벡터, 행렬은 결국 텐서라는 더 큰 틀 안에 포함되는 특별한 형태들입니다. 딥러닝을 "텐서 계산 그래프(Tensor Computation Graph)"로 이해하는 관점은 현대 딥러닝 프레임워크의 동작 방식을 이해하는 데 큰 도움을 줍니다.
요약 테이블: 텐서의 차수별 분류
| 랭크 (차수) | 명칭 | 예시 데이터 | 표현 | 특성 |
|---|---|---|---|---|
| 0 | 스칼라 | 온도, 나이 | 5 |
단일 값, 크기만 가짐 |
| 1 | 벡터 | 바람, 특징 벡터 | [30, 175, 70] |
크기와 방향, 순서 있는 값들의 리스트 |
| 2 | 행렬 | 흑백 이미지, 테이블 | $\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}$ | 2차원 배열, 선형 변환 |
| 3 | 3-랭크 텐서 | 컬러 이미지, 비디오 프레임 | (Height, Width, Channel) |
3차원 배열 |
| 4 | 4-랭크 텐서 | 컬러 이미지 배치, 비디오 배치 | (Batch, Height, Width, Channel) |
4차원 배열, 고차원 데이터 처리의 일반적인 형태 |
| --- |
비슷한 글 추천
2-2. 미분과 경사하강법: 딥러닝 최적화의 핵심
미분의 개념과 경사하강법을 설명하고, 딥러닝 모델 학습 과정에서 최적화를 위해 어떻게 사용되는지 설명합니다.
4-3. PyTorch 설치 및 기본 사용법: 텐서 연산, 자동 미분
PyTorch 라이브러리의 설치 방법과 기본적인 사용법(텐서 연산, 자동 미분)을 소개하고, 예제 코드를 제공합니다.
3-1. PyTorch 소개: 텐서
PyTorch 소개, 텐서 생성, 텐서 자료형
4-1. TensorFlow 설치 및 기본 사용법: 텐서 연산, 자동 미분
TensorFlow 라이브러리의 설치 방법과 기본적인 사용법(텐서 연산, 자동 미분)을 소개하고, 예제 코드를 제공합니다.
Comments (0)
No comments yet. Be the first to comment!
Please to write a comment.