행렬, 역행렬, 경사하강법

bolim·2022년 1월 19일
0

Math

목록 보기
2/9

행렬

  • 벡터를 원소로 가지는 2차원 배열
  • 코드(넘파이) 에서는 행벡터 기준으로 한다.

X=[x11x12x1mx21x22x2mxn1xn2xnm]X = \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1m} \\ x_{21} & x_{22} & \cdots & x_{2m} \\ \vdots & \vdots & \cdots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{nm}\end{bmatrix}

  • 덧셈, 뺄셈, 성분곱 모두 벡터와 같다.

행렬의 곱셈

  • 코드 → @ 연산 (X@Y)

XY → X의 열과 y의 행이 같아야 한다.

행렬 내적

np.inner → X의 행의 개수와 Y의 행의 개수가 같아야 한다.

XTT=(kxikyjk)XT^T = (\sum_k x_{ik}y_{jk})

수학에선 tr(XYT)tr(XY^T), np.inner는 i번째 행벡터와 j번째 행벡터 사이 내적이 계산됨으로 다르다!!

행렬곱 의미

  • 벡터를 다른 차원의 공간으로 보내준다.

XmX_mAA를 곱하여 ZnZ_n을 계산하는 것은 m차원의 공간에서 A를 이용하여 n차원의 공간으로 보내는 것

여기서 A는 연산자로 이해한다.

→ 패턴 추출, 데이터 압축 가능

모든 선형변환(linear transform)은 행렬곱으로 계산가능

역행렬

  • 조건 1) 행과 열의 숫자가 같은 지 2) 주어진 행렬의 determinant가 0이 아닌 지

AA1=IAA^{-1} = I

np.linalg.inv로 계산가능

조건에 맞지 않으면 유사역행렬, 무어-펜로즈 역행렬 A+A^+이용

n > m인 경우 A+=(ATA)1ATA^+ = (A^TA)^-1A^T

A+A=IA^+A = I 성립

n < m인 경우 A+=AT(ATA)1A^+ = A^T(A^TA)^-1

AA+=IAA^+ = I 성립

np.linalg.pinv로 계산가능

응용 : 선형회귀분석

(y절편 생략)

Xβ=y^β=X+yX\beta = \hat{y} \Rightarrow \beta = X^+y 이때 y는 L2 norm을 최소화

경사하강법

미분

  • 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구
import sympy as sym
from sympy.abc import x
sym.diff(sym.poly(x**2 + 2*x + 3),x)

eie_i : i 번째 값만 1 이고 나머지는 0인 단위벡터

  • 미분값을 빼면서 함수의 극소값의 위치를 찾아간다.

δXif(x)=limh0f(x+hei)f(x)h\delta_{X_i} f(x) = \lim_{h\rightarrow 0}\frac{f(x+he_i) - f(x)}{h}

f=(δX1f,δX2f,,δXdf)\nabla f = (\delta_{X_1} f,\delta_{X_2} f,\cdots,\delta_{X_d} f)

→ convex 하지않은 함수도 수렴하기 위해 확률적 경사하강법

확률적 경사하강법

  • 데이터 일부를 활용하여 업데이트한다.
  • 만능은 아니지만 딥러닝의 경우 SGE가 경사하강법보다 길증적으로 더 낫다고 검증됨
  • 효율적인 연산, 메모리
  • 미니배치 사이즈 - 학습시 고려사항
profile
나는야 호기심 많은 느림보🤖

0개의 댓글