본문 바로가기
인공지능/딥러닝

[투빅스 1주차] 선형대수

by dustnn 2026. 2. 8.
1. 전체 개요 (Introduction)
  • 선형대수학이란?
    • 선형성(linearity) + 대수학(algebra)의 결합
    • 선형성을 만족하는 기호 시스템을 다루는 학문
  • 선형성의 두 조건
    1. 가법성(Additivity)
      • f(x+y)=f(x)+f(y)f(x+y) = f(x) + f(y)
    2. 동차성(Homogeneity)
      • f(kx)=kf(x)f(kx) = kf(x)
  • 주요 도구
    • 벡터: 정보를 표현
    • 행렬: 벡터를 변환하는 연산자
  • 강점
    • 복잡한 문제를 단순한 선형 구조로 표현
    • 고차원(수십~수천 차원) 문제를 수치적으로 처리 가능
  • 주요 응용 분야
    • 인공지능: 대부분의 계산이 행렬 연산
    • 컴퓨터 그래픽스: 이동, 회전, 확대/축소 변환

 

2. 벡터 (Vector)
2.1 벡터의 개념
  • 정의: 크기와 방향을 동시에 가지는 값
  • 두 가지 관점
    • 기하학적 관점: 공간상의 화살표 (직관적, 3차원까지)
    • 대수적 관점: 수치 배열 (고차원 표현 가능)
  • 데이터 관점
    • 하나의 점 = 하나의 벡터 = 하나의 데이터

 

2.2 벡터 연산
  • 덧셈
    • 대수적: 성분끼리 더함
    • 기하학적: 평행사변형의 대각선
    • 연산 순서 무관
  • 뺄셈
    • 연산 순서에 따라 방향이 달라짐 (중요 포인트)
  • 스칼라 곱
    • 모든 성분에 상수 곱
    • 방향 유지, 크기 변화 (부호에 따라 방향 반전 가능)

 

2.3 벡터 공간과 핵심 개념
  • 벡터 공간
    • 덧셈과 스칼라 곱이 정의되고 닫혀 있는 벡터 집합
  • 선형 결합
    • 스칼라 곱 + 벡터 덧셈
    • 새로운 벡터를 만드는 기본 도구
  • 생성 공간(Span)
    • 선형 결합으로 만들 수 있는 모든 벡터의 집합
    • 딥러닝 등에서 중요한 개념
  • 선형 독립 / 종속
    • 독립: 서로를 표현할 수 없음
    • 종속: 한 벡터가 다른 벡터들의 조합으로 표현 가능
  • 기저(Basis)
    • 공간을 설명하는 최소한의 선형 독립 벡터 집합
    • “공간을 보는 눈”에 해당
  • 차원(Dimension)
    • 기저 벡터의 개수
    • 공간의 크기·복잡도 지표
  • 예시
    • 3개의 선형 독립 벡터 → 3차원 공간
    • 3개 중 하나가 나머지의 조합 → 2차원 평면
  • 선형 독립 판별 방법
    • 행렬식 (정사각행렬 조건)
    • 가우스 소거법
    • 랭크(rank) 확인 (알고리즘에서 가장 활용)

 

3. 행렬 (Matrix)
3.1 행렬의 정의
  • 숫자의 직사각형 배열 (m × n)
  • 벡터의 집합
    • 열벡터들의 모음 또는 행벡터들의 모음

 

3.2 주요 행렬의 종류와 의미
  • 단위 행렬
    • 주대각선이 1
    • 곱셈 항등원 역할
  • 대각 행렬
    • 주대각선 외 원소가 0
    • 각 축 방향의 스케일 조절
    • 계산·메모리 효율 우수
  • 전치 행렬
    • 행과 열을 바꾼 행렬
    • 내적, 공분산 행렬 계산에 사용
  • 역행렬
    • 특정 정사각행렬에서만 존재
    • 선형 연립방정식 해결의 핵심 도구
  • 대칭 행렬
    • 전치해도 자기 자신
    • 고유값이 실수, 직교 고유벡터
    • PCA(주성분 분석) 등에서 활용
  • 직교 행렬
    • 전치 행렬 = 역행렬
    • 길이는 유지, 회전·반사 변환
    • 컴퓨터 그래픽스 핵심
  • 삼각 행렬
    • 주대각선 기준 위 또는 아래가 0
    • 선형 연립방정식을 빠르게 푸는 데 사용

3.3. 행렬곱

 

행렬 곱의 정의

  • 결과 행렬의 한 원소는
    → 첫 번째 행렬의 행과 두 번째 행렬의 열의 내적
  • 곱셈 가능 조건:
    • 앞 행렬의 열 개수 = 뒤 행렬의 행 개수

 

중요한 관점

  • 행렬은 단순한 숫자 배열이 아니라
    공간을 변형시키는 함수
  • 따라서 행렬 곱 = 선형 변환의 합성

    • → 먼저 B로 변환한 뒤 A로 다시 변환

 

4. 선형 변환

 

 

행렬 곱을 선형 변환으로 이해하기
  • 입력 벡터 → 행렬 → 출력 벡터
  • 행렬이 선형성을 만족하므로:
    • 입력 공간 → 출력 공간으로의 선형 변환
  • 선형 변환의 의미:
    • 벡터 하나만 변하는 게 아니라
    • 공간 전체가 함께 변형됨

 

공간 변형의 시각적 해석
  • 모든 벡터를 격자(grid)로 생각
  • 선형 변환을 적용하면:
    • 격자가 늘어나거나, 찌그러지거나, 기울어짐
    • 하지만 다음 성질은 유지됨:
      • 원점은 항상 고정
      • 평행한 선들은 변환 후에도 평행
  • 만약:
    • 원점이 이동하거나
    • 평행 관계가 깨진다면
      선형 변환이 아님

 

선형 변환 = 관점(기저)의 변화

 

원점은 가만히 있고 공간이 오른쪽처럼 변화하는 것 -> 관점이 변화한다

  •  기존에는:
    • (1,0), (0,1)을 기준으로 공간을 봄
  • 선형 변환 후에는:
    • 새로운 기저 벡터를 기준으로 공간을 해석

즉,

  • 선형 변환은
    • 데이터를 바꾸는 것이 아니라
    • 공간을 바라보는 눈(기저)을 바꾸는 것

 

정보 왜곡과 재배치 효과
  • 특정 방향으로:
    • 데이터가 압축되거나
    • 퍼지거나
    • 원점 쪽으로 모일 수 있음
  • 이 과정에서:
    • 데이터의 상대적 위치가 재정립됨
    • 새로운 구조와 패턴이 드러남

 

선형 변환의 수학적 의미 (AX 관점)
  • A:
    • 입력 데이터
    • 행렬 의 기저(관점)로 해석한 결과
  • 딥러닝에서:
    • WX+b
    • 입력 데이터를 가중치의 눈으로 다시 바라보는 과정

 

선형 변환의 장점과 한계

장점

  • 회전, 스케일링, 압축 등 기하학적 변형을
    수치 계산으로 표현 가능
  • 차원 변환 가능
    • 고차원 → 저차원 (투영)
    • 저차원 → 고차원 (확장)

한계

  • 직선은 항상 직선으로만 변환
  • 여러 선형 변환을 쌓아도:
    • 결국 하나의 선형 변환과 동일
  • 평행 관계 유지 → XOR 문제 해결 불가

 

비선형성의 필요성

  • 선형 변환만으로는 표현력에 한계
  • 활성화 함수가 비선형성을 도입
  • 유니버설 근사 정리:
    • 비선형 활성화 함수가 있으면
    • 모든 연속 함수를 근사 가능
벡터
연산: 내적과 거리

내적

  • 결과: 스칼라
  • 의미:
    • 기하학적으로는 투영
    • 코사인 유사도로 해석 가능
  • 활용:
    • 추천 시스템
    • 어텐션 메커니즘
    • 고차원 데이터에서 방향 유사도 측정

Norm과 거리

  • Norm: 벡터 하나의 크기
    • L1(맨해튼): 이상치에 비교적 강함
    • L2(유클리드): 스케일에 민감
    • L∞: 최대 성분 기준
  • 거리: 벡터 간 차이
    • 유클리드, 맨해튼, 코사인 거리 사용

 

고유값·고유벡터와 분해

고유값·고유벡터

  • 선형 변환 후에도 방향이 변하지 않는 벡터
  • 고유값:
    • 해당 방향으로 얼마나 늘어나거나 줄어드는지

→ 시스템의 본질적인 축

 

고유값 분해

  • 행렬을:
    • 고유벡터 × 고유값 × 고유벡터⁻¹ 형태로 분해
  • 장점:
    • 계산 단순화
    • 미분방정식 분리 가능
  • 한계:
    • 정사각 행렬만 가능

특이값 분해(SVD)

  • 모든 행렬에 적용 가능
  • 입력 공간 → 크기 조정 → 출력 공간
  • 입력/출력 공간의 눈(기저)을 명확히 분리

 

PCA와 데이터 압축

  • 공분산 행렬은 대칭 행렬
  • 고유벡터가 서로 직교 → 해석 용이
  • 작은 고유값 방향 제거 → 데이터 압축

 

 

딥러닝에서의 종합 정리

 

 

간단한 NN 구조와 선형대수 개념 연결

입력 데이터 = 벡터

  • 하나의 데이터 샘플이 특성 3개를 가진다면x=[x1,x2,x3]T\mathbf{x} = [x_1, x_2, x_3]^T
  • 딥러닝에서 모든 데이터는 벡터로 표현됨
    → 선형대수의 출발점

 

가중치 = 행렬

  • 각 층 사이의 연결 가중치들은 행렬로 저장됨
  • 예를 들어:
    • 입력층(3차원) → 은닉층(노드 4개)
    • 가중치 행렬 크기: (3 × 4)

→ “이 층에서 다음 층으로 정보를 어떻게 변형할지”를 정의하는 선형 변환

 

노드 내부 연산 = 내적

  • 각 노드에서 수행되는 연산:wTx+bw^T x + b
  • 의미:
    • 입력 벡터와 가중치 벡터의 내적
      • 편향(bias)

→ 하나의 노드는
“입력을 어떤 방향으로 얼마나 반영할지” 결정

 

비선형 함수 = 표현력 확보

  • 내적 + 편향은 선형
  • 활성화 함수(ReLU 등)를 통과하면서:
    • 비선형성 확보
    • 복잡한 패턴 학습 가능

 

핵심 포인트

  • 실제 계산은:
    • 노드 하나씩 계산 ❌
    • 행렬곱으로 한 번에 계산 ⭕

→ 딥러닝 연산의 본질:

 

"선형 변환(행렬곱) + 비선형 함수의 반복"

 

수치 예제로 계산 흐름 이해하기

입력 데이터 행렬 X

  • 데이터 4개
  • 각 데이터는 특성 3개
  • 각 행 = 하나의 데이터 벡터

 

가중치 행렬 W1

W1∈R3×4

  • 첫 번째 은닉층 노드 4개
  • 각 노드는 입력 특성 3개와 연결됨

 

선형 변환: 행렬곱

Z1=XW1+B

  • (4×3) × (3×4) → (4×4)
  • 의미:
    • 데이터 4개 × 은닉층 노드 4개
    • 모든 노드의 내적 계산을 한 번에 수행

→ “각 데이터가 각 노드에서 얼마나 활성화되는지”

 

 왜 행렬곱이 중요한가?

  • 만약 행렬을 쓰지 않으면:
    • 데이터 × 노드 × 특성 만큼 반복 계산 필요
  • 행렬곱을 쓰면:
    • GPU/병렬 계산에 최적화
    • 딥러닝이 대규모로 가능해짐

 

비선형 함수 적용

A1=ReLU(Z1)

  • 음수 → 0
  • 양수 → 그대로 유지

→ 은닉층 출력 완성

 

 

실습

 

 
내적과 Norm 
두 벡터의 유사도를 판단하거나 길이를 구할 때 사용되는 함수입니다. 빈칸을 채워 함수를 완성해주세요.
import numpy as np

def calculate_similarity_components(v1, v2):
    """
    v1, v2: numpy array (1D vectors)
    반환값: 두 벡터의 내적 값, v1의 norm, v2의 norm
    """
    # 1. 두 벡터의 내적(Dot Product)을 계산하세요.
    dot_prod = np.dot(v1, v2)

    # 2. 각 벡터의 크기(Norm, L2 Norm)를 계산하세요.
    norm_v1 = np.linalg.norm(v1)
    norm_v2 = np.linalg.norm(v2)

    return dot_prod, norm_v1, norm_v2

 

선형 변환(행렬 곱)

 

from os import waitpid
def linear_transformation(x, W, b):
    """
    x: 입력 벡터 (input features)
    W: 가중치 행렬 (weight matrix)
    b: 편향 벡터 (bias)
    반환값: 선형변환 결과 z = Wx + b
    """
    # 1. 행렬 곱(Matrix Multiplication) Wx를 수행하세요.
    # 힌트: numpy의 행렬 곱 연산자(@) 또는 np.dot, np.matmul 사용
    wx = W@x

    # 2. 편향(bias)을 더하세요.
    z = wx+b

    return z

 

 

비선형성(ReLU)

 

def relu_function(z):
    """
    z: 선형변환을 거친 값
    반환값: 0보다 작으면 0, 0보다 크면 그대로 반환 (max(0, z))
    """
    # numpy의 maximum 함수 등을 사용하여 ReLU를 구현하세요.
    a = np.maximum(0, z)
    return a

 

 

응용: 간단한 유사도 기반 분류기 구현

 

입력 데이터 x가 주어졌을 때, 1차적으로 선형 변환과 비선형 변환을 거쳐 특징(feature)을 추출하고, 이 추출된 특징이 기준 벡터(reference vector)와 얼마나 유사한지 코사인 유사도(Cosine Similarity)로 판단합니다.

 

def forward_and_evaluate(x, W, b, ref_vector):

    # 1. 선형 변환
    wx = W@x
    z = wx+b

    # 2. 비선형 활성화(ReLU)
    a = np.maximum(0, z)

    # 3. 코사인 유사도 계산
    dot_prod = np.dot(a, ref_vector)
    norm_a = np.linalg.norm(a)
    norm_ref = np.linalg.norm(ref_vector)
    cos_sim = dot_prod / (norm_a * norm_ref)

    # 코사인 유사도 공식 적용 (분모가 0이 아님을 가정)

    return cos_sim