전체 목차 · 이전: Lecture 4 · 다음: Lecture 6
책과 강의
쪽수는 인쇄쪽수입니다. 해당 절은 제공된 스캔본의 PDF 30–35번째 페이지에 있습니다. 이 글에서는 실수 대칭행렬을 기본 대상으로 하고, 복소수에서는 Hermitian 행렬이 같은 역할을 한다는 점을 덧붙입니다.
대칭행렬의 고유값은 실수입니다. 그 실수들이 모두 양수이면 행렬은 모든 영이 아닌 방향에 양의 에너지를 부여합니다. 고유값의 부호, 완전제곱식, 소거법의 피벗, 최적화 문제의 곡률이 같은 구조를 설명합니다.
1. 대칭행렬에서 출발하는 이유
S = S T S=S^T S = S T 이면 스펙트럼 정리에 의해 S = Q Λ Q T S=Q\Lambda Q^T S = Q Λ Q T 로 분해됩니다. 고유값이 실수라는 사실은 복소 고유벡터 z z z 를 허용해서도 확인할 수 있습니다.
S z = λ z ⟹ λ = z ∗ S z z ∗ z ∈ R . Sz=\lambda z\quad\Longrightarrow\quad
\lambda=\frac{z^*Sz}{z^*z}\in\mathbb R.
S z = λ z ⟹ λ = z ∗ z z ∗ S z ∈ R .
S ∗ = S S^*=S S ∗ = S 이므로 분자의 켤레가 자기 자신이고, 분모는 양의 실수입니다. 복소수 행렬에서는 단순히 S T = S S^T=S S T = S 가 아니라 S ∗ = S S^*=S S ∗ = S 인 Hermitian 조건 을 사용해야 합니다.
또한 서로 다른 고유값의 고유벡터는 직교하고, 같은 고유공간 안에서도 정규직교 기저를 선택할 수 있습니다. 이 사실 덕분에 임의의 벡터를 고유벡터 방향들로 나누어 에너지를 계산할 수 있습니다.
2. 행렬의 원소가 아니라 이차형식의 부호를 본다
실수 대칭행렬 S S S 에 대해
S ≻ 0 ⟺ x T S x > 0 for every x ≠ 0 \boxed{S\succ0\quad\Longleftrightarrow\quad
x^TSx>0\text{ for every }x\ne0}
S ≻ 0 ⟺ x T S x > 0 for every x = 0
이면 양의 정부호 라고 합니다. 약어로 SPD를 사용합니다. x T S x ≥ 0 x^TSx\ge0 x T S x ≥ 0 이면 양의 준정부호 , 즉 PSD이며 S ⪰ 0 S\succeq0 S ⪰ 0 로 씁니다. 이 정의에서 SPD는 PSD에 포함됩니다.
모든 방향에서 음수이면 음의 정부호, 양수와 음수가 되는 방향이 모두 있으면 부정부호입니다.
S = [ a b b c ] S=\begin{bmatrix}a&b\\b&c\end{bmatrix} S = [ a b b c ] 의 이차형식은
x T S x = a x 1 2 + 2 b x 1 x 2 + c x 2 2 . x^TSx=ax_1^2+2bx_1x_2+cx_2^2.
x T S x = a x 1 2 + 2 b x 1 x 2 + c x 2 2 .
대각 밖의 성분 b b b 가 교차항에서 두 번 등장하는 점에 주의해야 합니다. 예를 들어 [ 2 − 1 − 1 2 ] \begin{bmatrix}2&-1\\-1&2\end{bmatrix} [ 2 − 1 − 1 2 ] 는 음수 성분이 있지만 SPD입니다. 반면 [ 1 2 2 1 ] \begin{bmatrix}1&2\\2&1\end{bmatrix} [ 1 2 2 1 ] 는 원소가 모두 양수여도 ( 1 , − 1 ) T (1,-1)^T ( 1 , − 1 ) T 방향의 에너지가 − 2 -2 − 2 이므로 부정부호입니다.
3. 고유값 판정과 에너지 판정은 같다
x = Q c x=Qc x = Q c 이면 정규직교성으로
x T S x = c T Λ c = ∑ i = 1 n λ i c i 2 . x^TSx=c^T\Lambda c=\sum_{i=1}^n\lambda_i c_i^2.
x T S x = c T Λ c = i = 1 ∑ n λ i c i 2 .
모든 λ i > 0 \lambda_i>0 λ i > 0 이고 x ≠ 0 x\ne0 x = 0 이면 적어도 하나의 c i c_i c i 가 0이 아니므로 합은 양수입니다. 거꾸로 모든 영이 아닌 x x x 에서 에너지가 양수라면 x = q i x=q_i x = q i 를 대입하여 λ i = q i T S q i > 0 \lambda_i=q_i^TSq_i>0 λ i = q i T S q i > 0 를 얻습니다.
S ≻ 0 ⟺ λ i > 0 for all i , S ⪰ 0 ⟺ λ i ≥ 0 for all i . S\succ0\iff\lambda_i>0\text{ for all }i,\qquad
S\succeq0\iff\lambda_i\ge0\text{ for all }i.
S ≻ 0 ⟺ λ i > 0 for all i , S ⪰ 0 ⟺ λ i ≥ 0 for all i .
고유값을 작은 순서와 큰 순서의 양 끝으로 비교하면
λ min ∥ x ∥ 2 2 ≤ x T S x ≤ λ max ∥ x ∥ 2 2 . \lambda_{\min}\|x\|_2^2\le x^TSx
\le\lambda_{\max}\|x\|_2^2.
λ min ∥ x ∥ 2 2 ≤ x T S x ≤ λ max ∥ x ∥ 2 2 .
이는 Rayleigh quotient x T S x / ( x T x ) x^TSx/(x^Tx) x T S x / ( x T x ) 의 범위이기도 합니다. 등호는 해당 극단 고유값의 고유벡터 방향에서 성립합니다.
4. 다섯 가지 동치 조건
아래는 실수 대칭행렬 S의 양의 정부호성 에 대한 동치 조건입니다.
판정
조건
고유값
모든 고유값이 양수
에너지
모든 x ≠ 0 x\ne0 x = 0 에서 x T S x > 0 x^TSx>0 x T S x > 0
Gram 행렬
열이 독립인 어떤 A A A 가 있어 S = A T A S=A^TA S = A T A
선도 주행렬식
왼쪽 위 k × k k\times k k × k 블록의 행렬식 Δ k > 0 \Delta_k>0 Δ k > 0 , k = 1 , … , n k=1,\ldots,n k = 1 , … , n
피벗
행 교환 없는 대칭 소거법 S = L D L T S=LDL^T S = L D L T 의 대각 피벗이 모두 양수
문제에 따라 쉬운 판정을 고르면 됩니다. 합의 정부호성은 에너지로, 역행렬의 정부호성은 고유값으로, 작은 수치 행렬은 주행렬식이나 Cholesky 분해로 확인하는 것이 편리합니다.
5. Gram 행렬 AᵀA와 열의 독립성
모든 실수 행렬 A A A 에 대해
x T A T A x = ( A x ) T ( A x ) = ∥ A x ∥ 2 2 ≥ 0. x^TA^TAx=(Ax)^T(Ax)=\|Ax\|_2^2\ge0.
x T A T A x = ( A x ) T ( A x ) = ∥ A x ∥ 2 2 ≥ 0 .
따라서 A T A A^TA A T A 는 항상 PSD입니다. 이것이 SPD가 되려면 영이 아닌 x x x 가 A x = 0 Ax=0 A x = 0 을 만족할 수 없어야 하므로 A의 열이 독립 이어야 합니다.
예를 들어 A = [ 1 2 0 0 ] A=\begin{bmatrix}1&2\\0&0\end{bmatrix} A = [ 1 0 2 0 ] 이면
A T A = [ 1 2 2 4 ] , x T A T A x = ( x 1 + 2 x 2 ) 2 . A^TA=\begin{bmatrix}1&2\\2&4\end{bmatrix},\qquad
x^TA^TAx=(x_1+2x_2)^2.
A T A = [ 1 2 2 4 ] , x T A T A x = ( x 1 + 2 x 2 ) 2 .
x = ( − 2 , 1 ) T x=(-2,1)^T x = ( − 2 , 1 ) T 에서 에너지가 0이므로 SPD는 아닙니다. PSD에서 에너지가 0인 방향은 행렬의 영공간에 해당합니다.
거꾸로 SPD 행렬은 S = Q Λ Q T S=Q\Lambda Q^T S = Q Λ Q T 에서
S 1 / 2 = Q Λ 1 / 2 Q T S^{1/2}=Q\Lambda^{1/2}Q^T
S 1 / 2 = Q Λ 1 / 2 Q T
라는 대칭 양의 정부호 제곱근을 갖습니다. A = S 1 / 2 A=S^{1/2} A = S 1 / 2 로 놓으면 S = A T A S=A^TA S = A T A 입니다. PSD에서도 비음수 고유값의 제곱근을 사용하면 대칭 PSD 제곱근을 얻습니다.
6. 2×2 판정: 완전제곱과 피벗
a > 0 a>0 a > 0 일 때
a x 1 2 + 2 b x 1 x 2 + c x 2 2 = a ( x 1 + b a x 2 ) 2 + ( c − b 2 a ) x 2 2 . ax_1^2+2bx_1x_2+cx_2^2
=a\left(x_1+\frac ba x_2\right)^2
+\left(c-\frac{b^2}{a}\right)x_2^2.
a x 1 2 + 2 b x 1 x 2 + c x 2 2 = a ( x 1 + a b x 2 ) 2 + ( c − a b 2 ) x 2 2 .
따라서
[ a b b c ] ≻ 0 ⟺ a > 0 , a c − b 2 > 0. \begin{bmatrix}a&b\\b&c\end{bmatrix}\succ0
\quad\Longleftrightarrow\quad a>0,\quad ac-b^2>0.
[ a b b c ] ≻ 0 ⟺ a > 0 , a c − b 2 > 0 .
이 조건은 양의 선도 주행렬식 Δ 1 = a \Delta_1=a Δ 1 = a , Δ 2 = a c − b 2 \Delta_2=ac-b^2 Δ 2 = a c − b 2 의 조건이고, 피벗 a a a , c − b 2 / a c-b^2/a c − b 2 / a 가 양수라는 조건이기도 합니다.
직접 구성한 가족 S t = [ 2 1 1 t ] S_t=\begin{bmatrix}2&1\\1&t\end{bmatrix} S t = [ 2 1 1 t ] 는 t > 1 / 2 t>1/2 t > 1 / 2 이면 SPD, t = 1 / 2 t=1/2 t = 1 / 2 이면 특이한 PSD, t < 1 / 2 t<1/2 t < 1 / 2 이면 부정부호입니다. 경계에서는 완전제곱 하나만 남아 한 방향이 평평해집니다.
7. LDLᵀ와 Cholesky 분해
대칭 소거법은 S = L D L T S=LDL^T S = L D L T 로 쓸 수 있습니다. L L L 의 대각 성분은 1이고, D D D 에 피벗을 모읍니다. 예를 들어
S = [ 2 − 1 − 1 2 ] = [ 1 0 − 1 / 2 1 ] ⏟ L [ 2 0 0 3 / 2 ] ⏟ D L T . S=\begin{bmatrix}2&-1\\-1&2\end{bmatrix}
=\underbrace{\begin{bmatrix}1&0\\-1/2&1\end{bmatrix}}_L
\underbrace{\begin{bmatrix}2&0\\0&3/2\end{bmatrix}}_D L^T.
S = [ 2 − 1 − 1 2 ] = L [ 1 − 1 / 2 0 1 ] D [ 2 0 0 3 / 2 ] L T .
이때
x T S x = ( L T x ) T D ( L T x ) = 2 ( x 1 − x 2 / 2 ) 2 + 3 2 x 2 2 > 0 x^TSx=(L^Tx)^TD(L^Tx)
=2(x_1-x_2/2)^2+\frac32x_2^2>0
x T S x = ( L T x ) T D ( L T x ) = 2 ( x 1 − x 2 / 2 ) 2 + 2 3 x 2 2 > 0
입니다. 피벗이 양수이면 제곱근을 나눠 가질 수 있습니다.
S = ( L D ) ( D L T ) = R T R , R = D L T = [ 2 − 1 / 2 0 3 / 2 ] . S=(L\sqrt D)(\sqrt D L^T)=R^TR,\qquad
R=\sqrt D L^T
=\begin{bmatrix}\sqrt2&-1/\sqrt2\\0&\sqrt{3/2}\end{bmatrix}.
S = ( L D ) ( D L T ) = R T R , R = D L T = [ 2 0 − 1 / 2 3 / 2 ] .
이것이 위 삼각행렬을 사용하는 Cholesky 분해입니다. 아래 삼각행렬 C = R T C=R^T C = R T 를 사용하여 S = C C T S=CC^T S = C C T 로 쓰는 관례도 있습니다.
일반적으로 Δ 0 = 1 \Delta_0=1 Δ 0 = 1 이라 두면
d k = Δ k Δ k − 1 . d_k=\frac{\Delta_k}{\Delta_{k-1}}.
d k = Δ k − 1 Δ k .
왼쪽 위 블록의 행렬식이 그때까지의 피벗의 곱이기 때문입니다. SPD에서는 분모가 모두 양수이므로 이 계산이 중단되지 않습니다.
8. 준정부호에서는 판정을 그대로 약화하면 안 된다
에너지와 고유값 조건의 > > > 를 ≥ \ge ≥ 로 바꾸는 것은 맞습니다. Gram 표현에서는 열 독립 조건을 없애면 됩니다. 그러나 선도 주행렬식만 비음수라고 해서 PSD라고 결론 내릴 수는 없습니다.
반례는
S = [ 0 0 0 − 1 ] . S=\begin{bmatrix}0&0\\0&-1\end{bmatrix}.
S = [ 0 0 0 − 1 ] .
선도 주행렬식은 0 , 0 0,0 0 , 0 으로 비음수지만 e 2 T S e 2 = − 1 e_2^TSe_2=-1 e 2 T S e 2 = − 1 입니다. 대칭행렬의 PSD 판정에는 모든 주행렬식 이 비음수여야 합니다. 주행렬식은 같은 인덱스 집합의 행과 열을 선택한 부분행렬의 행렬식이며, 왼쪽 위 블록만을 뜻하지 않습니다.
2차원에서는 PSD 조건이 a ≥ 0 a\ge0 a ≥ 0 , c ≥ 0 c\ge0 c ≥ 0 , a c − b 2 ≥ 0 ac-b^2\ge0 a c − b 2 ≥ 0 입니다. 또한 피벗이 0인 단계에서 Δ k / Δ k − 1 \Delta_k/\Delta_{k-1} Δ k / Δ k − 1 이나 소거의 나눗셈을 무조건 계속하면 안 됩니다.
SPD는 가역입니다. PSD는 가역일 수도 있고 특이할 수도 있으며, 특이한 PSD에는 에너지가 0인 영이 아닌 방향이 존재합니다.
9. 어떤 연산이 양의 정부호성을 보존하는가?
S , T ≻ 0 S,T\succ0 S , T ≻ 0 이면
x T ( S + T ) x = x T S x + x T T x > 0 x^T(S+T)x=x^TSx+x^TTx>0
x T ( S + T ) x = x T S x + x T T x > 0
이므로 합도 SPD입니다. 양의 상수배도 SPD이며, S − 1 S^{-1} S − 1 의 고유값은 1 / λ i > 0 1/\lambda_i>0 1 / λ i > 0 이므로 역행렬도 SPD입니다.
열이 독립인 C C C 에 대해서는
x T C T S C x = ( C x ) T S ( C x ) > 0 x^TC^TSCx=(Cx)^TS(Cx)>0
x T C T S C x = ( C x ) T S ( C x ) > 0
이므로 C T S C C^TSC C T S C 도 SPD입니다. 정사각 가역 C C C 에 의한 이런 변환을 합동변환 이라고 합니다. 일반적으로 고유값 자체는 달라지지만 양수·음수·0 고유값의 개수는 보존됩니다. C = Q C=Q C = Q 가 직교이면 닮음변환이기도 하므로 고유값 자체도 같습니다.
반면 S T ST S T 는 대칭이 아닐 수 있으므로 이 글의 SPD 조건을 곧바로 적용할 수 없습니다. 곱을 합과 같은 방식으로 다루면 안 됩니다.
10. 에너지의 등고선은 타원이다
S ≻ 0 S\succ0 S ≻ 0 에 대해 x T S x = 1 x^TSx=1 x T S x = 1 을 생각합니다. y = Q T x y=Q^Tx y = Q T x 로 좌표를 바꾸면
∑ i λ i y i 2 = 1. \sum_i\lambda_i y_i^2=1.
i ∑ λ i y i 2 = 1 .
이 타원체의 축 방향은 q i q_i q i 이고 반축 길이는 1 / λ i 1/\sqrt{\lambda_i} 1 / λ i 입니다. 고유값이 클수록 같은 에너지에 도달하는 거리는 짧습니다.
S = [ 2 − 1 − 1 2 ] S=\begin{bmatrix}2&-1\\-1&2\end{bmatrix} S = [ 2 − 1 − 1 2 ] 에서는 ( 1 , 1 ) T / 2 (1,1)^T/\sqrt2 ( 1 , 1 ) T / 2 방향의 고유값이 1이고, ( 1 , − 1 ) T / 2 (1,-1)^T/\sqrt2 ( 1 , − 1 ) T / 2 방향의 고유값이 3입니다. 따라서 두 반축 길이는 1 1 1 , 1 / 3 1/\sqrt3 1 / 3 입니다.
다음 글에서 단위원을 A A A 로 변환한 타원의 반축 길이는 특잇값 σ i \sigma_i σ i 가 됩니다. 여기의 에너지 등고선 과 다음 글의 단위원의 상 은 서로 다른 대상을 설명하므로 길이 공식을 구별해야 합니다.
11. 최적화와 Hessian: 필요조건과 충분조건
이차함수
f ( x ) = 1 2 x T S x − b T x f(x)=\frac12x^TSx-b^Tx
f ( x ) = 2 1 x T S x − b T x
의 기울기는 S x − b Sx-b S x − b , Hessian은 S S S 입니다. S ≻ 0 S\succ0 S ≻ 0 이면 x ∗ = S − 1 b x_*=S^{-1}b x ∗ = S − 1 b 가 유일한 최소점이며
f ( x ) − f ( x ∗ ) = 1 2 ( x − x ∗ ) T S ( x − x ∗ ) ≥ 0. f(x)-f(x_*)=\frac12(x-x_*)^TS(x-x_*)\ge0.
f ( x ) − f ( x ∗ ) = 2 1 ( x − x ∗ ) T S ( x − x ∗ ) ≥ 0 .
일반적인 C 2 C^2 C 2 함수의 제약 없는 내부점 에서는 다음을 구별합니다.
상황
결론
x ∗ x_* x ∗ 가 국소 최소점
∇ f ( x ∗ ) = 0 \nabla f(x_*)=0 ∇ f ( x ∗ ) = 0 , ∇ 2 f ( x ∗ ) ⪰ 0 \nabla^2f(x_*)\succeq0 ∇ 2 f ( x ∗ ) ⪰ 0 가 필요
∇ f ( x ∗ ) = 0 \nabla f(x_*)=0 ∇ f ( x ∗ ) = 0 , Hessian이 SPD
엄격한 국소 최소점이라는 충분조건
정지점의 Hessian에 양·음 고유값이 모두 있음
안장점
정지점의 Hessian이 특이한 PSD
이차 정보만으로는 판정이 끝나지 않을 수 있음
예를 들어 f ( x ) = x 4 f(x)=x^4 f ( x ) = x 4 는 0에서 엄격한 최소값을 갖지만 f ′ ′ ( 0 ) = 0 f''(0)=0 f ′ ′ ( 0 ) = 0 입니다. g ( x ) = − x 4 g(x)=-x^4 g ( x ) = − x 4 도 g ′ ′ ( 0 ) = 0 g''(0)=0 g ′ ′ ( 0 ) = 0 이지만 최소점이 아닙니다. 따라서 최소점에서 Hessian이 반드시 양의 정부호여야 한다고 말하면 안 됩니다.
열린 볼록 영역 전체에서 Hessian이 PSD인 C 2 C^2 C 2 함수는 볼록합니다. SPD이면 엄격한 볼록성이 보장되지만, 위의 x 4 x^4 x 4 처럼 엄격한 볼록성에 모든 점의 SPD가 필수는 아닙니다. 볼록성과 수치 알고리즘의 수렴 조건도 구별해야 합니다.
12. 지정 문제 풀이 — I.7의 3, 14, 15번
3번: 매개변수 범위와 LDLᵀ
2차원 공식
L = [ 1 0 b / a 1 ] , D = diag ( a , c − b 2 / a ) L=\begin{bmatrix}1&0\\b/a&1\end{bmatrix},\qquad
D=\operatorname{diag}(a,c-b^2/a)
L = [ 1 b / a 0 1 ] , D = d i a g ( a , c − b 2 / a )
을 각 행렬에 적용합니다.
S
SPD 조건
L의 왼쪽 아래 성분
D의 대각 성분
[ 1 b b 9 ] \begin{bmatrix}1&b\\b&9\end{bmatrix} [ 1 b b 9 ]
− 3 < b < 3 -3<b<3 − 3 < b < 3
b b b
1 , 9 − b 2 1,\ 9-b^2 1 , 9 − b 2
[ 2 4 4 c ] \begin{bmatrix}2&4\\4&c\end{bmatrix} [ 2 4 4 c ]
c > 8 c>8 c > 8
2 2 2
2 , c − 8 2,\ c-8 2 , c − 8
[ c b b c ] \begin{bmatrix}c&b\\b&c\end{bmatrix} [ c b b c ]
c > ∣ b ∣ c>\lvert b\rvert c > ∣ b ∣
b / c b/c b / c
c , c − b 2 / c c,\ c-b^2/c c , c − b 2 / c
마지막 조건은 c > 0 c>0 c > 0 과 c 2 − b 2 > 0 c^2-b^2>0 c 2 − b 2 > 0 을 함께 표현합니다. 행렬식만 양수인 경우에는 두 고유값이 모두 음수일 수도 있습니다.
14번: 제곱 하나로 이루어진 에너지
x T S x = 4 ( x 1 − x 2 + 2 x 3 ) 2 x^TSx=4(x_1-x_2+2x_3)^2
x T S x = 4 ( x 1 − x 2 + 2 x 3 ) 2
이므로 v = ( 1 , − 1 , 2 ) T v=(1,-1,2)^T v = ( 1 , − 1 , 2 ) T 라 두면
S = 4 v v T = [ 4 − 4 8 − 4 4 − 8 8 − 8 16 ] . S=4vv^T=\begin{bmatrix}4&-4&8\\-4&4&-8\\8&-8&16\end{bmatrix}.
S = 4 v v T = ⎣ ⎡ 4 − 4 8 − 4 4 − 8 8 − 8 1 6 ⎦ ⎤ .
랭크는 1이고, S v = 4 v ( v T v ) = 24 v Sv=4v(v^Tv)=24v S v = 4 v ( v T v ) = 2 4 v 입니다. v v v 에 수직인 평면은 영공간이므로 고유값은 24 , 0 , 0 24,0,0 2 4 , 0 , 0 , 행렬식은 0입니다.
첫 피벗 4로 소거하면 나머지 블록이 전부 0이 됩니다. 예를 들어
L = [ 1 0 0 − 1 1 0 2 0 1 ] , D = diag ( 4 , 0 , 0 ) L=\begin{bmatrix}1&0&0\\-1&1&0\\2&0&1\end{bmatrix},\qquad
D=\operatorname{diag}(4,0,0)
L = ⎣ ⎡ 1 − 1 2 0 1 0 0 0 1 ⎦ ⎤ , D = d i a g ( 4 , 0 , 0 )
으로 S = L D L T S=LDL^T S = L D L T 를 쓸 수 있습니다. 양의 피벗은 4 하나이며 나머지 두 대각항은 0입니다. 이 행렬은 PSD이지만 SPD는 아닙니다.
15번: 주행렬식의 비로 피벗 구하기
S = [ 2 2 0 2 5 3 0 3 8 ] . S=\begin{bmatrix}2&2&0\\2&5&3\\0&3&8\end{bmatrix}.
S = ⎣ ⎡ 2 2 0 2 5 3 0 3 8 ⎦ ⎤ .
선도 주행렬식은 Δ 1 = 2 \Delta_1=2 Δ 1 = 2 , Δ 2 = 10 − 4 = 6 \Delta_2=10-4=6 Δ 2 = 1 0 − 4 = 6 ,
Δ 3 = 2 ( 40 − 9 ) − 2 ( 16 ) = 30 \Delta_3=2(40-9)-2(16)=30
Δ 3 = 2 ( 4 0 − 9 ) − 2 ( 1 6 ) = 3 0
입니다. 모두 양수이므로 SPD입니다. 피벗은 2 2 2 , 6 / 2 = 3 6/2=3 6 / 2 = 3 , 30 / 6 = 5 30/6=5 3 0 / 6 = 5 이고
L = [ 1 0 0 1 1 0 0 1 1 ] , D = diag ( 2 , 3 , 5 ) L=\begin{bmatrix}1&0&0\\1&1&0\\0&1&1\end{bmatrix},\quad
D=\operatorname{diag}(2,3,5)
L = ⎣ ⎡ 1 1 0 0 1 1 0 0 1 ⎦ ⎤ , D = d i a g ( 2 , 3 , 5 )
로 S = L D L T S=LDL^T S = L D L T 를 확인할 수 있습니다.
13. NumPy로 확인하기
import numpy as npS = np.array([[2. , -1. ], [-1. , 2. ]]) L = np.array([[1. , 0. ], [-.5 , 1. ]]) D = np.diag([2. , 1.5 ]) assert np.allclose(S, L @ D @ L.T)assert np.allclose(np.linalg.eigvalsh(S), [1. , 3. ])chol = np.linalg.cholesky(S) assert np.allclose(S, chol @ chol.T)counterexample = np.diag([0. , -1. ]) assert np.linalg.det(counterexample[:1 , :1 ]) == 0 assert np.linalg.det(counterexample) == 0 assert np.min (np.linalg.eigvalsh(counterexample)) < 0 v = np.array([1. , -1. , 2. ]) rank_one = 4 * np.outer(v, v) assert np.linalg.matrix_rank(rank_one) == 1 assert np.allclose(np.linalg.eigvalsh(rank_one), [0. , 0. , 24. ])L14 = np.array([[1. , 0. , 0. ], [-1. , 1. , 0. ], [2. , 0. , 1. ]]) assert np.allclose(rank_one, L14 @ np.diag([4. , 0. , 0. ]) @ L14.T)S15 = np.array([[2. , 2. , 0. ], [2. , 5. , 3. ], [0. , 3. , 8. ]]) L15 = np.array([[1. , 0. , 0. ], [1. , 1. , 0. ], [0. , 1. , 1. ]]) minors = [np.linalg.det(S15[:k, :k]) for k in range (1 , 4 )] assert np.allclose(minors, [2. , 6. , 30. ])assert np.allclose(S15, L15 @ np.diag([2. , 3. , 5. ]) @ L15.T)print ("Positive definiteness, LDL, Cholesky, and problem checks passed." )
eigvalsh는 대칭 또는 Hermitian 행렬용 함수입니다. 실제 데이터에서는 대칭성도 먼저 확인해야 하며, 아주 작은 음의 고유값이 반올림 오차인지 실제 부호인지 판정할 때에는 행렬의 크기와 허용오차를 함께 고려해야 합니다.
14. 복습 질문
행렬의 원소가 모두 양수인 것과 양의 정부호인 것은 어떻게 다른가?
A T A A^TA A T A 가 SPD가 되는 정확한 조건은 무엇인가?
완전제곱식의 계수와 L D L T LDL^T L D L T 의 피벗은 어떻게 연결되는가?
선도 주행렬식이 모두 비음수인 것만으로 PSD를 판정할 수 없는 이유는 무엇인가?
Hessian의 PSD 필요조건과 SPD 충분조건을 구별할 수 있는가?
참고 자료
Gilbert Strang, Linear Algebra and Learning from Data , 2019. Part I, I.7, pp. 44–55 . 저자 공식 교재 페이지 .
MIT OpenCourseWare, 18.065, Spring 2018. Lecture 5 , 공식 강의 전사문 .
MIT OpenCourseWare, 읽기 목록 , 전체 문제집 . 지정 문제: I.7의 3, 14, 15번 .
이전: Lecture 4 · 전체 목차 · 다음: Lecture 6