[Programmers] 32. 인공지능 수학 기초 (5): 선형대수 (Linear Algebra) (5): 벡터의 투영/사영, 직교 행렬, QR 분해

illstandtall·2021년 5월 1일
0

Programmers dev course

목록 보기
32/34
post-thumbnail

오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!


벡터의 투영/사영, 직교 행렬, QR 분해

벡터의 내적 (Inner Product)

  • nn-벡터는 크기와 방향을 가진 물리량을 말합니다.

  • 좌표계 없이: uv=uvcosθu\cdot v = |u||v|cos\theta

  • 좌표계 에서: uv=u1v1+u2v2+...+unvnu\cdot v = u_{1} \cdot v_{1} + u_{2} \cdot v_{2} + ... + u_{n} \cdot v_{n}

  • 두 벡터의 내적이 0이면 두 벡터는 직교(Orthogonal: \perp)합니다.

    • 물리적 의미:
      uuvv가 직교일 때, uu방향으로의 전진은 vv방향에서 전혀 측정되지 않는다는 의미를 가집니다.

벡터의 투영/사영(Projrction)

  • 벡터 uu를 벡터 aa위에 투영한 결과:

    projau=(uaa)(1aa)=(uaa2a)proj_{a}u = (\frac{u \cdot a}{|a|})( \frac{1}{|a|}a) = (\frac{u \cdot a}{|a|^2}a)
    => uaa2\frac{u \cdot a}{|a|^2}: 크기(기저 aa에 대한 좌표값), aa: 방향

  • 벡터 uu를 벡터 aa위에 투영하고 남은 보완벡터(complement vector):

    uprojauu - proj_{a}u

  • 투영과 보완벡터는 서로 직교이다.

    projau(uprojau)proj_{a}u \perp (u - proj_{a}u)


직교 행렬 (orthogonal matrix)

  • 직교 좌표계에 대한 행렬 표현입니다.

  • 직교 행렬 (orthogonal matrix)

    • 주어진 행렬의 모든 열벡터가 서로 직교하는 경우입니다.
    • 직교행렬은 직교 좌표계를 의미합니다.
      - [1  42  2],[2   2 42    1     76 1 1]\left[\begin{matrix}1 \ \ 4\\ -2\ \ 2\end{matrix}\right], \left[\begin{matrix}2 \ \ \ 2 \ -4 \\ 2\ \ \ \ 1\ \ \ \ \ 7 \\ 6 \ -1 \ -1\end{matrix}\right]
  • 정규 직교 행렬 (orthonormal matrix)

    • 주어진 행렬이 직교 행렬이고 모든 열벡터의 크기가 1인 행렬을 말합니다.
    • 회전행렬이라고도 합니다.
      - [15 25 25  15],[111   26 466111    16     766311 16 166]\left[\begin{matrix} \frac{1}{\sqrt{5}} \ \frac{2}{\sqrt{5}} \ \\ -\frac{2}{\sqrt{5}}\ \ \frac{1}{\sqrt{5}}\end{matrix}\right], \left[\begin{matrix}\frac{1}{\sqrt{11}} \ \ \ \frac{2}{\sqrt{6}} \ -\frac{4}{\sqrt{66}} \\ \frac{1}{\sqrt{11}}\ \ \ \ \frac{1}{\sqrt{6}}\ \ \ \ \ \frac{7}{\sqrt{66}} \\ \frac{3}{\sqrt{11}} \ -\frac{1}{\sqrt{6}} \ -\frac{1}{\sqrt{66}}\end{matrix}\right]

직교 행렬을 이용한 선형시스템

  • 선형시스템 Ax=bAx = b에서 행렬 AA가 직교행렬이면, 해 xx는 역행렬의 계산 없이 구할 수 있습니다.

  • xxii-번째 요소는 투영으로 계산할 수 있습니다.
    즉, 벡터 bb를 행렬 AA의 각 열벡터 aia_{i}에 투영한 연산 projaibproj_{a_{i}}b로 부터 xi=baia2x_{i} = \frac{b \cdot a_{i}}{|a|^2} 알 수 있습니다.

  • xxii-번째 요소와 jj-번째 요소의 계산은 독립적이므로 xx의 계산을 병렬로 처리할 수 있습니다.

    예제) Ax=bAx = b
    [1  42 2][x1x2]=[62]\left[\begin{matrix} 1 \ \ 4 \\-2\ 2\end{matrix}\right]\left[\begin{matrix} x_{1} \\ x_{2}\end{matrix}\right] = \left[\begin{matrix} 6 \\ -2\end{matrix}\right] <=> [a1,a2]x=b[a_{1}, a_{2}]x = b

    • x1=proja1bx_{1} = proj_{a_{1}}b = a1ba12a1=[12][62]12+(2)2=6+45=2\frac{a_{1} \cdot b}{|a_{1}|^2} \cdot a_{1} =\frac{\left[\begin{matrix} 1 \\ -2\end{matrix}\right] \cdot \left[\begin{matrix} 6 \\ -2\end{matrix}\right]}{1^2 + (-2)^2} = \frac{6+4}{5} = 2
    • x2=proja2bx_{2} = proj_{a_{2}}b = a2ba22a2=[42][62]42+22=24420=1\frac{a_{2} \cdot b}{|a_{2}|^2} \cdot a_{2} =\frac{\left[\begin{matrix} 4 \\ 2\end{matrix}\right] \cdot \left[\begin{matrix} 6 \\ -2\end{matrix}\right]}{4^2 + 2^2} = \frac{24-4}{20} = 1

정규직교행렬을 이용한 선형시스템

  • 선형시스템 Ax=bAx = b에서 행렬 AA가 정규직교행렬이면, 해 xx는 역행렬의 계산 없이 구할 수 있습니다.

  • xxii-번째 요소는 내적으로 계산할 수 있습니다.
    즉, 벡터 bb를 행렬 AA의 각 열벡터 aia_{i}에 투영한 연산 projaibproj_{a_{i}}b로 부터 xi=baix_{i} = b \cdot a_{i}임을 계산할 수 있습니다.

  • xxii-번째 요소와 jj-번째 요소의 계산은 독립적이므로 xx의 계산을 병렬로 처리할 수 있습니다.

    예제) Ax=bAx = b
    [15 25 25  15][x1x2]=[62]\left[\begin{matrix} \frac{1}{\sqrt{5}} \ \frac{2}{\sqrt{5}} \ \\ -\frac{2}{\sqrt{5}}\ \ \frac{1}{\sqrt{5}}\end{matrix}\right]\left[\begin{matrix} x_{1} \\ x_{2}\end{matrix}\right] = \left[\begin{matrix} 6 \\ -2\end{matrix}\right] <=> [a1,a2]x=b[a_{1}, a_{2}]x = b

    • x1=proja1bx_{1} = proj_{a_{1}}b = a1b=[1525][62]=6+45=25a_{1} \cdot b =\left[\begin{matrix} \frac{1}{\sqrt{5}} \\ -\frac{2}{\sqrt{5}}\end{matrix}\right] \cdot \left[\begin{matrix} 6 \\ -2\end{matrix}\right] = \frac{6+4}{\sqrt{5}} = 2\sqrt{5}
    • x2=proja2bx_{2} = proj_{a_{2}}b = a2b=[2515][62]=1225=25a_{2} \cdot b =\left[\begin{matrix} \frac{2}{\sqrt{5}} \\ \frac{1}{\sqrt{5}}\end{matrix}\right] \cdot \left[\begin{matrix} 6 \\ -2\end{matrix}\right] = \frac{12-2}{\sqrt{5}} = 2\sqrt{5}

행렬분해 (2): QR 분해 (QR Decomposition)

  • 그람슈미트 과정을 행렬로 코드화한 것입니다.

  • 주어진 행렬에서 정규직교행렬을 추출하는 행렬 분해입니다.

  • 행렬 AAQRQR의 꼴로 변형시키는 분해입니다.

    • AA = QQ(Orthonormal matrix) ×R\times R (Upper triangular matrix)
  • QR 분해의 장점

    Ax=bAx = b <=> (QR)x=b(QR)x = b <=><=>
    => Q(Rx)=bQ(Rx) = b => RxRx: 내적으로 쉽게 계산 가능
    => Qy=b (,Rx=y)Qy = b \ (단, Rx = y) => QyQy: 후방 대치법으로 쉽게 계산 가능

  • QR 분해의 활용
    • QQ를 이용한 부분에서 병렬처리로 빨리계산할 수 있습니다. (RR은 불가능)
    • bb가 자주 업데이트되는 경우 사용합니다.

행렬분해: LU 분해 vs QR 분해

  • LU 분해: 선형시스템을 풀 때 병렬처리할 수 없습니다.
  • QR 분해: Q행렬이 꽉찬 구조이므로 메모리를 더 많이 차지합니다.

이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.

profile
주니어

0개의 댓글