📖 학습주제

머신러닝, Scikit-learn, 실전 머신러닝 문제 실습 (2)


머신러닝을 위한 기초 선형대수

선형대수를 알아야 하는 이유

Deep learning을 이해하기 위해서 반드시 선형대수 + 행렬미분 + 확률의 탄탄한 기초가 필요하다.
Transformer의 attention matrix의 예를 보자.

Att(Q,K,V)=D1AV,A=exp(QKT/d),D=diag(A1L)Att_{\lrarr}(Q,K,V) = D^{-1}AV, A = exp(QK^T/\sqrt{d}), D = diag(A1_{L})

이렇게 핵심 아이디어가 행렬에 관한 식으로 표현되는 경우가 많다.

기본 표기법 (Basic Notation)

  • ARm×nA \in \mathbb{R}^{m \times n}mm개의 행과 nn개의 열을 가진 행렬을 의미
  • xRnx \in \mathbb{R}^{n}nn개의 원소를 가진 벡터를 의미
    - nn개의 행과 1개의 열을 가진 행렬로 생각할 수 있다.
    - 열벡터(column vector)라고 부르기도 함(명시적으로 행벡터(row vector)를 표현하고자 한다면 xTx^T로 씀, TT는 transpose)
  • 벡터 xxii번째 원소를 xix_i로 표기
    x=[x1x2xixn]x = \begin{bmatrix}x_1\\x_2\\\vdots\\x_i\\\vdots\\x_n \end{bmatrix}
  • aija_{ij} (또는 Aij,Ai,jA_{ij}, A_{i,j})는 행렬 AAii번째 행, jj번째 열의 원소를 의미
    A=[a11a12a1na21a22a2nam1am2amn]A = \begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn} \end{bmatrix}
  • 행렬AAjj번째 열을 aja_j(또는 AjA_{\cdot j}), ii번째 행을 aiTa_{i}^{T}(또는 AiTA_{i \cdot}^T)로 표기

In Python

  • numpy(이하 np)의 array를 이용해 배열을 생성할 수 있다.
  • np.expand_dims(arr, axis) : 배열의 차원을 확장
  • arr.shape : 배열의 형태
  • arr[:, j] : 열벡터, arr[i, :] : 행벡터

행렬의 곱셉 (Matrix Multiplication)

행렬 ARm×nA \in \mathbb{R}^{m \times n}, BRn×pB \in \mathbb{R}^{n \times p}에 대해, 두 행렬의 곱 CRm×pC \in \mathbb{R}^{m \times p}는 다음과 같이 정의된다.

Cij=k=1nAikBkjC_{ij} = \displaystyle\sum_{k=1}^{n}{A_{ik}B_{kj}}

벡터 ×\times 벡터 (Vector-Vector Products)

벡터 x,yRnx,y \in \mathbb{R}^{n}에 대해, 두 벡터의 내적(inner product) xTyx^Ty는 다음과 같이 정의된다.

xTyR=[x1x2xn][y1y2yn]=i=1nxiyix^Ty \in \mathbb{R} = \begin{bmatrix}x_1&x_2&\cdots&x_n \end{bmatrix}\begin{bmatrix}y_1\\y_2\\\vdots\\y_n \end{bmatrix} = \displaystyle\sum_{i=1}^{n}{x_{i}y_{i}}

벡터 xRm,yRnx \in \mathbb{R}^{m}, y \in \mathbb{R}^{n}에 대해, 두 벡터의 외적(outer product) xyTxy^T는 다음과 같이 정의된다.

xyTRm×n=[x1x2xm][y1y2yn]=[x1y1x1y2x1ynx2y1x2y2x2ynxmy1xmy2xmyn]xy^T \in \mathbb{R}^{m \times n} = \begin{bmatrix}x_1\\x_2\\\vdots\\x_m \end{bmatrix}\begin{bmatrix}y_1&y_2&\cdots&y_n \end{bmatrix} = \begin{bmatrix}x_1y_1&x_1y_2&\cdots&x_1y_n\\x_2y_1&x_2y_2&\cdots&x_2y_n\\\vdots&\vdots&\ddots&\vdots\\x_my_1&x_my_2&\cdots&x_my_n \end{bmatrix}

행렬 ×\times 벡터 (Matrix-Vector Products)

행렬 ARm×nA \in \mathbb{R}^{m \times n}와 벡터 xRnx \in \mathbb{R}^{n}에 대해, 각 행렬과 벡터의 곱 yyy=AxRmy = Ax \in \mathbb{R}^m으로 정의된다.

In Python

  • arr1.dot(arr2) : arr1과 arr2의 내적
  • np.matmul(arr1, arr2) : arr1과 arr2의 행렬곱

중요 연산과 성질들 (Operations and Properties)

  • 정방행렬(square matrix) : 행과 열의 개수가 동일
  • 상삼각행렬(upper triangular matrix) : 정방행렬이며 대각선 원소 아래 원소들이 모두 0
  • 하삼각행렬(lower triangular matrix) : 정방행렬이며 대각선 원소 위 원소들이 모두 0
  • 대각행렬(diagonal matrix) : 정방행렬이며 대각선 원소를 제외한 모든 원소가 0
  • 단위행렬(identity matrix): 대각행렬이며 대각선 원소들이 모두 1. II로 표시

In Python

  • np.diag(arr) : 대각행렬을 리턴
  • np.eye(n) : 크기 n의 단위행렬을 리턴

전치 (Transpose)

행렬 ARm×nA \in \mathbb{R}^{m \times n}에 대해, 그 행렬의 전치행렬을 ATRn×mA^T \in \mathbb{R}^{n \times m}으로 표기하고 다음과 같이 정의한다.

AijT=AjiA^T_{ij} = A_{ji}

전치의 성질

  • (AT)T=A(A^T)^T = A
  • (AB)T=BTAT(AB)^T = B^TA^T
  • (A+B)T=AT+BT(A+B)^T = A^T+B^T

In Python

  • arr.T : 전치행렬을 리턴

대칭행렬 (Symmetic Matrices)

정방행렬 ARn×nA \in \mathbb{R}^{n \times n}과 그 행렬의 전치행렬 ATRn×nA^T \in \mathbb{R}^{n \times n}에 대해,
A=ATA=A^T이면 AA를 대칭행렬이라고 하고 A=ATA=-A^T이면 반대칭행렬이라고 한다.

대칭행렬의 성질

  • AATAA^T는 항상 대칭
  • A+ATA+A^T는 대칭, AATA-A^T는 반대칭

대각합(Trace)

정방행렬 ARn×nA \in \mathbb{R}^{n \times n}에 대해, i=1nAii\displaystyle\sum_{i=1}^{n}A_{ii}AA의 대각합이라고 하고 tr(A)tr(A)로 표기한다.

대각합의 성질

ARn×n,BRn×n,tRA \in \mathbb{R}^{n \times n}, B \in \mathbb{R}^{n \times n}, t \in \mathbb{R}에 대해,

  • tr(A)=tr(AT)tr(A) = tr(A^T)
  • tr(A+B)=tr(A)+tr(B)tr(A+B)=tr(A)+tr(B)
  • tr(tA)=ttr(A)tr(tA) = t\cdot tr(A)

행렬곱(ABorABCAB\,or\, ABC)이 정방행렬이 되는 A,B,CA,B,C에 대해

  • tr(AB)=tr(BA)tr(AB)=tr(BA)
  • tr(ABC)=tr(BCA)=tr(CAB)tr(ABC)=tr(BCA)=tr(CAB)

norm

벡터공간에서 벡터의 길이, 크기, 거리 등을 나타낼 때 사용되며, l2(Euclidean  norm)l_2(Euclidean\; norm)은 다음과 같이 정의된다.

x2=i=1nxi2,(x22=xTx)|\left|x|\right|_2=\sqrt{\displaystyle\sum_{i=1}^{n}x_{i}^2},\quad (|\left|x|\right|_2^2=x^Tx )

lp(Frobenius  norm)l_p(Frobenius\;norm)

xp=(i=1nxip)1/p|\left|x|\right|_p=(\displaystyle\sum_{i=1}^{n}x_{i}^p)^{1/p}

Frobenius  normFrobenius\;norm에 대해

AF=i=1mj=1nAij2=tr(ATA)|\left|A|\right|_F=\sqrt{\displaystyle\sum_{i=1}^{m}\displaystyle\sum_{j=1}^{n}A_{ij}^2}=\sqrt{tr(A^TA)}

In Python

numpy.linalg(이하 LA)를 import

  • LA.norm(arr) : norm값 리턴

선형독립

벡터들의 집합 X={x1,x2,,xn}RnX = \lbrace x_1,x_2,\cdots,x_n \rbrace \subset \mathbb{R}^n에 대해, 모든 XX의 원소가 다른 원소들의 선형 결합으로 나타낼 수 없을 때 이를 선형독립(Linear Independent)이라고 한다. (반대는 선형 종속(Linear dependent))

Rank

  • Column rank : 행렬 ARm×nA \in \mathbb{R}^{m \times n}의 열들의 부분집합 중에서 가장 큰 선형독립인 집합의 크기
  • Row rank : 행렬 ARm×nA \in \mathbb{R}^{m \times n}의 행들의 부분집합 중에서 가장 큰 선형독립인 집합의 크기
  • 모든 행렬의 column rank와 row rank는 동일하며 행렬 AA의 랭크를 rank(A)rank(A)로 표시한다.

Rank의 성질

행렬 ARm×nA \in \mathbb{R}^{m \times n}, BRn×pB \in \mathbb{R}^{n \times p}에 대해

  • rank(A)min(m,n)rank(A) \leq min(m,n)
  • rank(A)=min(m,n)rank(A) = min(m,n)일 때, AAfull  rankfull\; rank라고 한다.
  • rank(A)=rank(AT)rank(A) = rank(A^T)
  • rank(AB)min(rank(A),rank(B))rank(AB) \leq min(rank(A),rank(B))
  • rank(A+B)rank(A)+rank(B)rank(A+B) \leq rank(A)+rank(B), (단, A,BRm×nA,B \in \mathbb{R}^{m \times n})

In Python

  • LA.matrix_rank(A) : rank를 리턴

역행렬(Inverse matrix)

정방행렬 ARn×nA \in \mathbb{R}^{n \times n}에 대해, AA1=I=A1AAA^{-1}=I=A^{-1}A일 때, A1A^{-1}AA의 역행렬이라고 하며 이 때, AAinvertibleinvertible(또는 nonsingularnon-singular)하다고 한다.

역행렬의 성질

  • A  is  invertibleA  is  full  rankA\; is\; invertible \Leftrightarrow A\; is\; full\;rank
  • (A1)1=A(A^{-1})^{-1} = A
  • (AB)1=B1A1(AB)^{-1}=B^{-1}A^{-1}
  • (AT)1=(A1)T(A^T)^{-1}=(A^{-1})^T

In Python

  • LA.inv(A) : 역행렬을 리턴

직교행렬 (Orthogonal Matrices)

두 벡터 x,yRnx, y \in \mathbb{R}^n에 대해 xTy=0x^Ty=0 일 때, 두 벡터가 직교(Orthogonal)한다고 하며 모든 열들이 서로 직교이고 정규화된 정방행렬 URn×nU\in \mathbb{R}^{n\times n}를 직교행렬이라고 한다. 또한, x2=1\|x\|_2 = 1인 벡터 xRnx\in \mathbb{R}^n를 정규화(normalized)된 벡터라고 한다.

직교행렬의 성질

  • UTU=IU^TU = I
  • UUT=IUU^T = I
  • U1=UTU^{-1} = U^T
  • Ux2=x2\|Ux\|_2 = \|x\|_2 for any xRnx\in \mathbb{R}^{n}
    • Ux2=((Ux)T(Ux))1/2=(xTUTUx)1/2=(xTx)1/2=x2\|Ux\|_2 = \big((Ux)^T(Ux)\big)^{1/2} = \big(x^TU^TUx\big)^{1/2} = (x^Tx)^{1/2} = \|x\|_2

치역(Range), 영공간(Nullspace)

생성집합(Span)

벡터의 집합 X={x1,x2,,xn}X = \{x_1,x_2,\ldots,x_n\}에 대해,
Y={v:v=i=1nαixi,αiR}Y=\left\{ v : v = \sum_{i=1}^n\alpha_i x_i, \alpha_i \in \mathbb{R} \right\}XX의 생성집합(SpanSpan)이라고 하고 span(X)\mathrm{span}(X)로 표기한다.

치역 (range)

행렬 ARm×nA\in \mathbb{R}^{m\times n}에 대해, AA의 모든 열들에 대한 생성(spanspan)을 치역이라고 하며 R(A)\mathcal{R}(A)로 표기한다.

R(A)={vRm:v=Ax,xRn}\mathcal{R}(A) = \{ v\in \mathbb{R}^m : v = Ax, x\in \mathbb{R}^n\}

영공간 (nullspace)

행렬 ARm×nA\in \mathbb{R}^{m\times n}에 대해, AA와 곱해졌을 때 0이 되는 모든 벡터들의 집합을 영공간이라고 하며 N(A)\mathcal{N}(A)로 표기한다.

N(A)={xRn:Ax=0}\mathcal{N}(A) = \{x\in \mathbb{R}^n : Ax = 0\}

치역, 영공간에 대한 성질

  • {w:w=u+v,uR(AT),vN(A)}=Rn and R(AT)N(A)={0}\{w : w = u + v, u\in \mathcal{R}(A^T), v \in \mathcal{N}(A)\} = \mathbb{R}^n ~\mathrm{and}~ \mathcal{R}(A^T) \cap \mathcal{N}(A) = \{0\}

직교여공간(orthogonal complements)

R(AT)\mathcal{R}(A^T)N(A)\mathcal{N}(A)를 직교여공간(orthogonal complements)라고 하며 R(AT)=N(A)\mathcal{R}(A^T) = \mathcal{N}(A)^\perp라고 표시한다.

사영 (projection)

AA의 치역 R(A)\mathcal{R}(A), 벡터 yRmy\in \mathbb{R}^m에 대해, 다음을 만족할 때 Proj(y;A)\mathrm{Proj}(y;A)R(A)\mathcal{R}(A) 위로 벡터 yy의 사영(projection)이라고 한다.

Proj(y;A)=argminvR(A)vy2=A(ATA)1ATy\mathrm{Proj}(y;A) = \mathop{\mathrm{argmin}}_{v\in \mathcal{R}(A)} \| v - y \|_2 = A(A^TA)^{-1}A^Ty

UTU=IU^TU = I인 정방행렬 UUUUT=IUU^T = I임을 증명

  • UU의 치역은 전체공간이므로 임의의 yy에 대해 Proj(y;U)=y\mathrm{Proj}(y;U) = y이어야 한다.
  • 모든 yy에 대해 U(UTU)1Uy=yU(U^TU)^{-1}Uy = y이어야 하므로 U(UTU)1UT=IU(U^TU)^{-1}U^T= I이다.
  • 따라서 UUT=IUU^T = I이다.

행렬식 (Determinant)

정방행렬 ARn×nA\in \mathbb{R}^{n\times n}의 행렬식(determinant) A|A| (또는 det(A)\det (A))는 다음과 같이 계산할 수 있다.

A=A1,1×A\1,\1A1,2×A\1,\2+A1,3×A\1,\3A1,4×A\1,\4+±A1,n×A\1,\n|A| = A_{1,1}\times|A_{\backslash1,\backslash1}| - A_{1,2}\times|A_{\backslash1,\backslash2}| + A_{1,3}\times|A_{\backslash1,\backslash3}| - A_{1,4}\times|A_{\backslash1,\backslash4}| + \cdots ± A_{1,n}\times|A_{\backslash1,\backslash n}|

여기서 A\i,\jA_{\backslash i,\backslash j}ii번째 행과 jj번째 열을 없애버린 행렬을 의미한다.

e.g.)

A=[123456780]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 0 \end{bmatrix}

위의 식을 사용하면 아래와 같이 전개된다.

A=1×[5680]2×[4670]+3×[4578]|A| = 1 \times \left | \begin{bmatrix} 5 & 6 \\ 8 & 0 \end{bmatrix} \right | - 2 \times \left | \begin{bmatrix} 4 & 6 \\ 7 & 0 \end{bmatrix} \right | + 3 \times \left | \begin{bmatrix} 4 & 5 \\ 7 & 8 \end{bmatrix} \right |

이제 위의 2×22 \times 2 행렬들의 행렬식을 계산한다.

[5680]=5×06×8=48\left | \begin{bmatrix} 5 & 6 \\ 8 & 0 \end{bmatrix} \right | = 5 \times 0 - 6 \times 8 = -48

[4670]=4×06×7=42\left | \begin{bmatrix} 4 & 6 \\ 7 & 0 \end{bmatrix} \right | = 4 \times 0 - 6 \times 7 = -42

[4578]=4×85×7=3\left | \begin{bmatrix} 4 & 5 \\ 7 & 8 \end{bmatrix} \right | = 4 \times 8 - 5 \times 7 = -3

따라서,

A=1×(48)2×(42)+3×(3)=27|A| = 1 \times (-48) - 2 \times (-42) + 3 \times (-3) = 27

#### 행렬식의 기하학적 해석

행렬

[a1Ta2TanT]\begin{bmatrix} \rule[.5ex]{1.7ex}{0.5pt} & a_1^T & \rule[.5ex]{1.7ex}{0.5pt}\\ \rule[.5ex]{1.7ex}{0.5pt} & a_2^T & \rule[.5ex]{1.7ex}{0.5pt}\\ & \vdots &\\ \rule[.5ex]{1.7ex}{0.5pt} & a_n^T & \rule[.5ex]{1.7ex}{0.5pt} \end{bmatrix}

이 주어졌을 때, 행 벡터들의 선형결합(단 결합에 쓰이는 계수들은 0에서 1사이)이 나타내는 Rn\mathbb{R}^n 공간 상의 모든 점들의 집합 SS를 생각해보자. 엄밀하게 나타내자면
S={vRn:v=i=1nαiai where 0αi1,i=1,,n}S = \{v\in \mathbb{R}^n : v=\sum_{i=1}^n \alpha_i a_i ~\mathrm{where}~ 0\leq \alpha_i \leq 1, i=1,\ldots,n\}

중요한 사실은 행렬식의 절대값이 이 SS의 부피(volume)과 일치한다는 것이다!

예를 들어, 행렬

A=[1332]A = \begin{bmatrix} 1 & 3 \\ 3 & 2 \end{bmatrix}

의 행벡터들은

a1=[13]a2=[32]a_1 = \begin{bmatrix} 1\\ 3 \end{bmatrix} a_2 = \begin{bmatrix} 3\\ 2 \end{bmatrix}

이다. SS에 속한 점들을 2차원평면에 나타내면 다음과 같다.

평행사변형 SS의 넓이는 7인데 이 값은 AA의 행렬식 A=7|A|=-7의 절대값과 일치함을 알 수 있다.

행렬식의 성질

  • I=1|I|=1
  • AA의 하나의 행에 tRt\in \mathbb{R}를 곱했을 때, 행렬식은 tAt|A|
  • AA의 두 행들을 교환했을 때 행렬식은 A-|A|
  • A,BRn×nA, B\in \mathbb{R}^{n\times n}에 대해,
    - A=AT|A| = |A^T|
    - AB=AB|AB| = |A| |B|
    - A=0A  is  not  invertible|A|=0 \Leftrightarrow A\; is\; not\; invertible
    - AAnonsingularnon-singular할 때, A1=1/A|A^{-1}| = 1/|A|.

In Python

  • LA.det(A) : 행렬식 값을 리턴

이차형식 (Quadratic Forms)

정방행렬 ARn×nA\in \mathbb{R}^{n\times n}와 벡터 xRnx\in \mathbb{R}^n가 주어졌을 때, scalarscalarxTAxx^TAx를 이차형식(quadratic form)이라고 하며 다음과 같이 표현할 수 있다.

xTAx=xT(Ax)=i=1nxi(Ax)i=i=1nxi(j=1nAijxj)=i=1nj=1nAijxixjx^TAx = x^T(Ax) = \sum_{i=1}^n x_i(Ax)_i = \sum_{i=1}^n x_i \left(\sum_{j=1}^n A_{ij}x_j\right) = \sum_{i=1}^n\sum_{j=1}^n A_{ij}x_ix_j

다음이 성립함을 알 수 있다.

xTAx=(xTAx)T=xTATx=xT(12A+12AT)xx^TAx = (x^TAx)^T = x^TA^Tx = x^T\left(\frac{1}{2}A + \frac{1}{2}A^T\right)x

따라서 이차형식에 나타나는 행렬을 대칭행렬로 가정하는 경우가 많다.

양/음의 (준)정부호

  • 대칭행렬 ASnA\in \mathbb{S}^n이 0이 아닌 모든 벡터 xRnx\in \mathbb{R}^n에 대해서 xTAx>0x^TAx \gt 0을 만족할 때, 양의 정부호(positive  definitepositive\; definite)라고 하고 A0A\succ 0(또는 단순히 A>0A \gt 0)로 표시한다. 모든 양의 정부호 행렬들의 집합을 S++n\mathbb{S}_{++}^n으로 표시한다.
  • 대칭행렬 ASnA\in \mathbb{S}^n이 0이 아닌 모든 벡터 xRnx\in \mathbb{R}^n에 대해서 xTAx0x^TAx \ge 0을 만족할 때, 양의 준정부호(positive  semidefinitepositive\; semi-definite)라고 하고 A0A\succeq 0(또는 단순히 A0A \ge 0)로 표시한다. 모든 양의 준정부호 행렬들의 집합을 S+n\mathbb{S}_{+}^n으로 표시한다.
  • 대칭행렬 ASnA\in \mathbb{S}^n이 0이 아닌 모든 벡터 xRnx\in \mathbb{R}^n에 대해서 xTAx<0x^TAx \lt 0을 만족할 때, 음의 정부호(negative  definitenegative\; definite)라고 하고 A0A\prec 0(또는 단순히 A<0A \lt 0)로 표시한다.
  • 대칭행렬 ASnA\in \mathbb{S}^n이 0이 아닌 모든 벡터 xRnx\in \mathbb{R}^n에 대해서 xTAx0x^TAx \leq 0을 만족할 때, 음의 준정부호(negative  semidefinitenegative\; semi-definite)라고 하고 A0A\preceq 0(또는 단순히 A0A \leq 0)로 표시한다.
  • 대칭행렬 ASnA\in \mathbb{S}^n가 양의 준정부호 또는 음의 준정부호도 아닌 경우, 부정부호(indefiniteindefinite)라고 한다. 이것은 x1TAx1>0,x2TAx2<0x_1^TAx_1 > 0, x_2^TAx_2 < 0을 만족하는 x1,x2Rnx_1, x_2\in \mathbb{R}^n이 존재한다는 것을 의미한다.

positive  definitepositive\; definite 그리고 negative  definitenegative\; definite 행렬은 full  rankfull\; rank이며 따라서 invertibleinvertible이다.

Gram matrix

임의의 행렬 ARm×nA\in \mathbb{R}^{m\times n}이 주어졌을 때 행렬 G=ATAG = A^TAGram  matrixGram\; matrix라고 부르고 항상 (positive  semidefinitepositive\; semi-definite이다. 만약 mnm\ge n이고 AAfull  rankfull\; rank이면, GGpositive  definitepositive\; definite이다.

고유값 (Eigen values), 고유벡터 (Eige nvectors)

정방행렬 ARn×nA\in \mathbb{R}^{n\times n}이 주어졌을 때, Ax=λx,x0Ax = \lambda x, x\neq 0을 만족하는 λC\lambda \in \mathbb{C}AA의 고유값(eigen  valueeigen\;value) 그리고 xCnx\in \mathbb{C}^n을 연관된 고유벡터(eigen  vectoreigen\;vector)라고 한다.

In Python

  • LA.eig(A) : 고유값, 고유벡터 리턴

고유값, 고유벡터의 성질

  • trA=i=1nλi\mathrm{tr}A = \displaystyle\sum_{i=1}^n \lambda_i
  • A=i=1nλi|A| = \displaystyle\prod_{i=1}^n \lambda_i
  • rank(A)\mathrm{rank}(A)는 0이 아닌 AA의 고유값의 개수와 같다.
  • AAnonsingularnon-singular일 때, 1/λi1/\lambda_iA1A^{-1}의 고유값이다(고유벡터 xix_i와 연관된). 즉, A1xi=(1/λi)xiA^{-1}x_i = (1/\lambda_i)x_i이다.
  • 대각행렬 D=diag(d1,,dn)D = \mathrm{diag}(d_1,\ldots,d_n)의 고유값들은 d1,,dnd_1,\ldots,d_n이다.

행렬미분 (Matrix Calculus)

Gradient

행렬 ARm×nA\in \mathbb{R}^{m\times n}를 입력으로 받아서 실수값을 돌려주는 함수 f:Rm×nRf : \mathbb{R}^{m\times n} \to \mathbb{R}이 있다고 하자. ffgradientgradient는 다음과 같이 정의된다.

Af(A)Rm×n=[f(A)A11f(A)A12f(A)A1nf(A)A21f(A)A22f(A)A2nf(A)Am1f(A)Am2f(A)Amn]\nabla_Af(A)\in \mathbb{R}^{m\times n} = \begin{bmatrix} \frac{\partial f(A)}{\partial A_{11}} & \frac{\partial f(A)}{\partial A_{12}} & \cdots & \frac{\partial f(A)}{\partial A_{1n}}\\ \frac{\partial f(A)}{\partial A_{21}} & \frac{\partial f(A)}{\partial A_{22}} & \cdots & \frac{\partial f(A)}{\partial A_{2n}}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial f(A)}{\partial A_{m1}} & \frac{\partial f(A)}{\partial A_{m2}} & \cdots & \frac{\partial f(A)}{\partial A_{mn}} \end{bmatrix}

(Af(A))ij=f(A)Aij(\nabla_Af(A))_{ij} = \frac{\partial f(A)}{\partial A_{ij}}

특별히 AA가 벡터 xRnx\in \mathbb{R}^n인 경우는,

xf(x)=[f(x)x1f(x)x2f(x)xn]\nabla_x f(x) = \begin{bmatrix} \frac{\partial f(x)}{\partial x_1}\\ \frac{\partial f(x)}{\partial x_2}\\ \vdots\\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix}

Hessian

x2f(x)Rn×n=[2f(x)x122f(x)x1x22f(x)x1xn2f(x)x2x12f(x)x222f(x)x2xn2f(x)xnx12f(x)xnx22f(x)xn2]\nabla_x^2 f(x)\in \mathbb{R}^{n\times n} = \begin{bmatrix} \frac{\partial^2 f(x)}{\partial x_1^2} & \frac{\partial^2 f(x)}{\partial x_1x_2} & \cdots & \frac{\partial^2 f(x)}{\partial x_1x_n}\\ \frac{\partial^2 f(x)}{\partial x_2x_1} & \frac{\partial^2 f(x)}{\partial x_2^2} & \cdots & \frac{\partial^2 f(x)}{\partial x_2x_n}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial^2 f(x)}{\partial x_nx_1} & \frac{\partial^2 f(x)}{\partial x_nx_2} & \cdots & \frac{\partial^2 f(x)}{\partial x_n^2} \end{bmatrix}

(x2f(x))ij=2f(x)xixj(\nabla_x^2 f(x))_{ij} = \frac{\partial^2 f(x)}{\partial x_i \partial x_j}

중요한 공식

x,bRnx, b\in \mathbb{R}^n, ASnA\in \mathbb{S}^n일 때 다음이 성립한다.

  • xbTx=b\nabla_x b^Tx = b
  • xxTAx=2Ax\nabla_x x^TAx = 2Ax
  • x2xTAx=2A\nabla_x^2 x^TAx = 2A
  • AlogA=A1\nabla_A \log |A| = A^{-1} (AS++nA\in\mathbb{S}_{++}^n인 경우)

벡터가 아닌 경우

  • (bx)=b(bx)' = b
  • (ax2)=2ax(ax^2)' = 2ax
  • (logx)=x1(\log x)' = x^{-1}

0개의 댓글