[부스트캠프 AI] Week01 (1) - 벡터/행렬

Jewon Joel Park·2022년 9월 22일

AI Math

큰 틀은 아래 흐름과 같이 진행됨

  1. 벡터들이 모여서 행렬을 이룸
  2. 행렬에서 역행렬을 계산, 이를 이용해서 선형회귀 (행렬을 이용한 회귀는 선형 모델에서만 가능)
  3. 미분/편미분을 이용한 경사하강법(Gradient Descent)
  4. GD는 연산량이 많고 Non-Convex(볼록한 함수가 아닐 때) 사용 불가 → 확률적 경사하강법(SGD; Stochastic Gradient Descent)
  5. SGD는 데이터를 한 개만 사용 → 배치마다 여러 데이터를 사용하는 Mini-batch SGD
  6. 비선형모델일 때 적용하기 위한 Neural Network

벡터 (Vector)

  • 숫자를 원소로 가지는 리스트(List) 또는 배열(Array)
  • 공간에서의 한 지점 (차원과 무관)
  • 원점으로부터의 상대적 위치
    - 스칼라를 곱하면 방향은 고정이고 길이만 변화(음수일 경우 반대방향)
  • 같은 모양의 벡터끼리는 덧셈/뺄셈/성분곱(Hadamard Product)이 가능

노름(Norm)

  • 벡터의 노름은 원점에서부터의 거리
    L1 노름: 각 성분의 변화량의 절대값의 합 (x1=i=1dxi||x||_1 = \sum_{i=1}^{d}|x_i|)
    L2 노름: 유클리드 거리 (x2=i=1dxi2||x||_2 = \sqrt{\sum_{i=1}^{d}|x_i|^2})

    def l1_norm(x):
        return np.sum(np.abs(x))
    
    def l2_norm(x):
        return np.sqrt(np.sum(x ** 2))
  • 두 벡터사이의 거리는 벡터의 뺄셈 이용 (yx=xy||y-x|| = ||x-y||)

    • 두 벡터 사이의 각도는 제 2코사인 법칙으로 계산 가능
      cosθ=x22+y22xy222x2y2=i=1dxiyix2y2\cos\theta=\cfrac{||x||_2^2+||y||_2^2-||x-y||_2^2}{2||x||_2||y||_2{}} = \cfrac{\sum_{i=1}^{d}x_iy_i}{||x||_2||y||_2}
      def angle(x, y):
      	v = np.inner(x, y) / (l2_norm(x) * l2_norm(y))
          theta = np.arccos(v)
          return theta

행렬 (Matrix)

  • 벡터를 원소로 가지는 2차원 배열 X=(xij)X=(x_{ij})
  • 전치행렬(Transpose Matrix)은 행과 열의 인덱스가 바뀐 행렬 XT=(xji)X^T=(x_{ji})
  • 벡터가 공간에서의 한 점이라면, 행렬은 여러 점들을 의미
  • 같은 모양의 행렬끼리는 덧셈/뺄셈/성분곱(Hadamard Product)/스칼라곱이 가능
  • 행렬의 곱셈은 X의 열의 개수Y의 행의 개수가 같아야 가능 (numpy의 @연산)
  • np.inner()(X의 행벡터와 Y의 행백터 사이의 내적)는 수학에서 말하는 내적과 다름
  • 행렬은 벡터공간에서 사용되는 연산자
  • 행렬 곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있음. (zi=jaijxjz_i=\sum_{j}a_{ij}x_j)
  • *모든 선형 변환(Linear Transform)은 행렬 곱으로 계산할 수 있으며, 행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수도 있음)

역행렬 (Inverse Matrix)

  • 어떤 행렬 AA의 연산을 거꾸로 되돌리는 행렬로, A1A^{-1}이라 표기
  • 행과 열의 숫자가 같고, 행렬식(Determinant)이 0이 아닌 경우에만 계산 가능)
  • 역행렬을 계산할 수 없으면 무어-펜로즈(Moore-Penrose) 역행렬 (유사역행렬; pseudo-inverse)을 이용함
    - 행렬을 이용하여 연립방정식의 해를 구할 때, 통상적으로 식의 개수와 변수의 개수가 같아야 해를 구할 수 있음.
    • 하지만 식의 개수가 변수보다 많을 경우 해는 "부정"이며, 무수히 많은 해 중에 하나를 구하는 것이 유사역행렬이라 할 수 있음.
    • Moore-Penrose 역행렬을 이용하면 yy에 근접하는 y^\hat{y}을 찾을 수 있음
      => β=(XTX)1XTy\beta=(X^{T}X)^{-1}X^Ty

회고

  • 아무래도 7차 교육과정의 영향으로, 행렬과 벡터 등 선형대수 관련 내용들을 고등학생 때에는 단 한번도 접하지 못했었다. 대학교 2학년 1학기 때에도 경영통계를 위해 간단한 미적분과 분산/표준편차 계산 등만 배웠을 뿐...

  • 난생 처음 접하는 개념이다보니, 부스트코스 입교 시험 준비를 시작할 때부터 유튜브로 선형대수를 찾아보며 공부했는데.. 역시나 넘을 수 없는 벽을 느꼈었다고 해야하나?

  • 그래도 선형대수 부분 중에서는 쉬운 부분이라 다행스럽게도 Pre-course 강의를 통해 어느 순간 이해가 딱 되는 것을 느꼈다.

  • 역행렬은 매번 계산할 때마다 느끼지만, 수학자가 아니라 개발자라 천만다행이라는 생각이 든다. numpy.linalg.inv()/numpy.linalg.pinv() 함수로 수월하게 계산할 수 있으니, 컨셉만 정확히 이해하고 있다면 유용하게 사용할 수 있을 것 같다.

profile
10년을 돌고 돌아 마침내 제자리를 찾은 문과 출신 Python 개발자의 인생기록장

0개의 댓글