오늘 생성 AI 수업에서는 선형대수의 중요한 개념인 벡터와 텐서를 상세히 다뤘다. 머신러닝과 딥러닝에서 벡터와 텐서는 데이터를 컴퓨터가 이해할 수 있는 형태로 변환하는 데 필수적이다. 모든 입력 데이터는 벡터 형태로 표현되며, 이 과정에서 벡터와 텐서의 이해는 매우 중요하다.
인공지능에서 벡터란?
인공지능에서 벡터는 데이터를 수치화하여 모델이 이해할 수 있게 만드는 기본적인 구조이다. 텍스트, 이미지, 소리 등 다양한 형태의 데이터는 결국 숫자 배열인 벡터로 변환되어 처리된다. 예를 들어, 자연어 처리(NLP)에서는 단어를 벡터로 변환하는 임베딩(embedding) 기술을 사용하며, 이미지 인식에서는 픽셀 값을 벡터로 표현하여 처리한다. 따라서 벡터의 정확한 이해와 효율적인 사용은 인공지능 모델의 성능과 직결된다.
벡터의 정의와 표기법
벡터는 두 가지 방식으로 정의할 수 있다.
기하학적 정의
벡터는 크기와 방향을 가진 물리량이다. 힘이나 속도와 같은 물리적 양이 대표적이다. 벡터는 화살표로 표현되며, 화살표의 길이는 크기, 화살표의 방향은 벡터의 방향을 나타낸다.
\[ \vec{a} \]
대수적 정의
벡터는 숫자 또는 함수의 집합으로 표현된다. 일반적으로 볼드체 소문자(\(\mathbf{a}\))로 표기한다.
\[ \mathbf{a} = (a_1, a_2, \dots, a_n) \]
파이썬 예제
import numpy as np
vector = np.array([2, 4, 6])
print(vector)
벡터의 크기(norm)
벡터의 크기 또는 노름(norm)은 벡터의 길이를 의미하며 유클리드 길이로 구한다.
\[ ||\mathbf{a}|| = \sqrt{a_1^2 + a_2^2 + \dots + a_n^2} \]
파이썬 예제
vector = np.array([3, 4])
norm = np.linalg.norm(vector)
print(norm) # 출력: 5
단위 벡터와 정규화
단위 벡터는 벡터의 크기가 1이고 방향만 가진 벡터이다. 정규화는 벡터를 단위 벡터로 변환하는 과정이다.
\[ \hat{a} = \frac{\mathbf{a}}{||\mathbf{a}||} \]
파이썬 예제
unit_vector = vector / np.linalg.norm(vector)
print(unit_vector)
위치 벡터
위치 벡터는 원점에서 특정 점까지의 벡터를 의미한다.
\[ \overrightarrow{AB} = \mathbf{B} - \mathbf{A} \]
파이썬 예제
A = np.array([1, 2])
B = np.array([4, 5])
position_vector = B - A
print(position_vector)
영 벡터
영 벡터는 모든 성분이 0인 벡터로, 벡터 공간에서의 항등원 역할을 수행한다.
\[ \mathbf{0} = (0, 0, \dots, 0) \]
파이썬 예제
zero_vector = np.zeros(3)
print(zero_vector)
벡터의 선형 결합 및 연산
벡터의 선형 결합은 여러 벡터를 스칼라 곱과 덧셈을 이용해 새로운 벡터를 만드는 것이다.
벡터 덧셈 및 뺄셈
- 덧셈 \[ \mathbf{a} + \mathbf{b} = (a_1+b_1, a_2+b_2, \dots, a_n+b_n) \]
- 뺄셈 \[ \mathbf{a} - \mathbf{b} = (a_1-b_1, a_2-b_2, \dots, a_n-b_n) \]
내적과 외적
- 내적(dot product) : 두 벡터의 대응 성분 곱의 합이다.
- \[ \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + \dots + a_nb_n \]
- 외적(cross product) : 두 벡터에 수직인 새로운 벡터를 만든다.
- \[ \mathbf{a} \times \mathbf{b} = (a_2b_3 - a_3b_2,\, a_3b_1 - a_1b_3,\, a_1b_2 - a_2b_1) \]
파이썬 내적 예제
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.dot(a, b))
벡터 거리와 유사도
벡터 거리와 유사도는 데이터 분석 및 머신러닝에서 데이터를 그룹화하거나 클러스터링할 때 중요한 개념이다.
유클리드 거리
두 점 사이의 직선 거리로 가장 일반적인 거리 측정 방법이다.
\[ d = \sqrt{\sum_{i=1}^{n}(a_i - b_i)^2} \]
맨해튼 거리
두 점 사이를 축을 따라 측정한 거리이다.
\[ d = \sum_{i=1}^{n}|a_i - b_i| \]
코사인 유사도
벡터 간의 각도로 유사성을 평가한다. 1에 가까울수록 유사하며, 0에 가까울수록 유사하지 않다.
\[ \text{cosine similarity} = \frac{\mathbf{a} \cdot \mathbf{b}}{||\mathbf{a}|| \times ||\mathbf{b}||} \]
파이썬 예제
from numpy.linalg import norm
cosine_similarity = np.dot(a, b) / (norm(a) * norm(b))
print(cosine_similarity)
텐서와 텐서플로우
텐서는 다차원 배열로 벡터(1차원), 행렬(2차원)을 확장한 개념이다. 텐서는 딥러닝에서 데이터를 표현할 때 필수적인 구조이다. 텐서플로우(TensorFlow)는 텐서를 다루는 대표적인 라이브러리로, 계산 그래프를 활용해 효율적으로 연산한다.
인공신경망은 입력층, 은닉층, 출력층으로 구성되며, 데이터는 각 층에서 텐서 형태로 처리된다. 입력 데이터는 벡터 또는 텐서로 변환되어 입력층을 통해 전달되고, 은닉층에서는 가중치와 활성화 함수(ReLU 등)를 통해 가공되며, 출력층에서 최종 결과 텐서가 출력된다. 이 과정에서 텐서의 정확한 이해와 연산 능력은 인공지능 모델의 성능에 큰 영향을 미친다.
ReLU 함수 및 텐서플로우 예제
ReLU(Rectified Linear Unit)는 인공신경망에서 널리 사용되는 활성화 함수로, 음수를 0으로 설정하고 양수 값은 그대로 유지한다.
import tensorflow as tf
input_tensor = tf.constant([-2, -1, 0, 1, 2], dtype=tf.float32)
output_tensor = tf.nn.relu(input_tensor)
print(output_tensor)
오늘의 회고
오늘 학습을 통해 벡터와 텐서의 기본 개념뿐 아니라, 인공지능에서 이들의 역할과 중요성을 명확히 이해하게 되었다. 벡터는 인공지능 모델이 이해할 수 있는 유일한 데이터 형태로, 데이터 분석과 AI 모델 구축의 기본 단위이다. 앞으로 벡터 연산과 텐서의 활용 방법을 더욱 숙지하여 생성 AI 개발 역량을 키워나가고 싶다.
'[kakao x goorm] 생성 AI 응용 서비스 개발자 양성 과정 > 회고록' 카테고리의 다른 글
[kakao x goorm] 반복문과 조건문을 활용한 알고리즘 개념 정리 (0) | 2025.04.07 |
---|---|
[kakao x goorm] 조건부 확률과 베이즈 정리, 나이브 베이즈 분류기 실습까지 (1) | 2025.04.04 |
[kakao x goorm] 미분법과 오차역전파의 기초 (0) | 2025.04.03 |
[kakao x goorm] 극한, 연속, 미분 수학 (2) | 2025.04.01 |
[kakao x goorm] 생성 AI 개발자를 위한 기초 수학 정리 (0) | 2025.04.01 |