밥이되든 죽이되던 프로그래밍

[텅텅머리 시리즈]1.2. Matric Multiplication AB(행렬곱셈) 본문

DeepLearning/선형대수로 알아보는 딥러닝

[텅텅머리 시리즈]1.2. Matric Multiplication AB(행렬곱셈)

밥이되자 2022. 7. 3. 20:00

내적은 AB=C의 각 성분을 계산하는데 필요하다.

c_23은 (A의 2행)*(B의 3열)

각 AB=C의 성분을 계산하는 일반적인 방법은 행렬을 내적하여 원소 하나하나를 multiplication 하는 방식이다. 아래와 같이 나타낼 수 있다;

열과 행의 곱을 통해 행렬곱셈을 나타내는 방법 또한 있다.  

  •  열 u와 행 v^T를 곱하면 행렬이 만들어진다.
  • 행렬 uv^T는 간단하게 나타낼수 있는 행렬이다.
  • 외적의 과정으로 볼 수 있다.

mx1 행렬(열 u)와 1xp(행 v^T)의 곱셈은 mxp의 행렬을 생성한다

Rank가 1인 행렬의 성질

  • 행열의 모든 열은 u의 배수이고, 모든 행은 v^T의 배수이다.
  • 열공간(column space)는 1차원이다(row space의 차원(일차독립인 열의 개수)은 행렬의 Rank이다)
  • 영행렬(zero matric)이 아닌 uv^T는 항상 Rank가 1이고 모든 행렬을 이루는 가장 이상적인 기본 행렬이다.
uv^T의 행공간(row space)는 직선 v를 지나는 직선이다.
행렬 A의 행공간은 행렬 A의 전치행렬 A^T의 열공간 C(A^T)이다.

=> 행벡터, 열벡터를 모두 생각할 필요없이, 열벡터로만 생각해도 된다.

 

행렬 vu^T를 얻기 위해 uv^T의 전치행렬을 찾으면 된다.

  • 행랭크=열랭크, r개의 일차독립 열 <=> r개의 일차독립 행
  • 영행렬(zero metric)이 아닌 uv^T에는 각 하나의 일차독립 열과 행이 있다.

1.2.1 AB=(Rank 1 행렬의 합)

다시 행렬 곱셈 AB를 A의 열과 B의 행의 곱셈으로 생각해보자.

a_1 , a_2 , ... , a_n는 A의 n개의 열이라 하고, b*_1, b*_2, ... , b*_n을 B의 n개의 행이라 하자. 이제 행렬 A와 B의 곱 AB는 열 a_k와 행 b*_k의 곱셈의 합이다.

다음은 n=2인 행렬의 합(열과 행의 곱)이 AB가 되는 예이다.

-

nxn 행렬 A와 B의 곱셈에는 항상 n^3번의 곱셈 연산이 필요하다

  • 행 곱하기 열(행렬의 합): mp번의 내적, 매번 n번의 곱셈 => mnp
  • 열 곱하기 행(열과 행의 곱): n번의 외적, 매번 mp번의 곱셈 => mnp

 

1.2.2 열과 행의 곱셈에 대한 이해

그렇담 외적을 이용한 행렬 곱셈이 데이터 과학에서 필수인 이유는 무엇일까?

행렬에서의 중요한 부분을 찾기 위함이다. 중요한 부분이랑 A의 가장 큰 부분이고, 랭크 1 행렬 uv^T이다.

따라서 선행대수학에서 가장 중요한 주제는 다음과 같다.

 

A를 CR로 분해하라. 그리고 A=CR의 부분 c_{k}r*_{k}를 살펴보아라

 

A를 CR로 분해하는 것은 CR=A의 역과정이다.

  • 계산에 고윳값 또는 특잇값이 필요하다면 분해하는 데 훨씬 더 오랜 시간이 걸린다
  • 고윳값과 특잇값은 행렬의 중요한 정보를 제공한다.
  • 그 정보는 행렬을 분해하지 않으면 직접 볼수 없다

5가지 행렬분해

  1. A=LU : 소거법에서 얻는다.
    행의 일차결합으로 A에서 U, U에서 A를 얻을 수 있다.
    L은 하삼각행렬, U는 상삼각행렬이다.
  2. A=QR: 그람-슈미트를 통해 열을 직교화하여 얻는다.
    Q에 정규직교인 열이 있으며, R은 상삼각행렬이다.
  3. S=QAQ^T: 대칭행렬 S=S^T의 고윳값에서 얻는다.
    A의 대각성분은 고윳값이며, Q의 열은 정규직교인 고유벡터이다.
  4. A=XAX^T: 대각화할 수 있다.
    대각화는 행렬에 일차독립인 고유벡터가 n개 일때 가능하다
  5. A=U~V^T: 행렬A의 특잇값 분해(SVD)를 사용한다.

 

대칭행렬을 활용한 행렬분해

  • q_1,...,q_2는 직교단위(orthogonal unit) 고유벡터이다.
  • 이 백터들은 서로 직교(내적이 0)하며 Q의 열에 해당한다.
  • 대칭행렬 ㅅ의 고윳값은 실수 ㅅ_1,...,ㅅ_n이다.
  • 실수 대칭행렬 S에는 n개의 정규직교인 고유벡터 q_1,...,q_n을 가진다
    => 이 벡터를 행렬 S에 곱해도 그 방향은 변하지 않으며, 단지 ㅅ에 의해 크기만 변한다

우리의 목적은 SQ=Qㅅ의 각 열을 Sq=ㅅq에서 어떻게 찾는 지 아는 것이다.

=> Q^-1=Q^T이므로 SQ=Qㅅ의 양변에 Q^T를 곱하면 S=QㅅQ^T, 즉 대칭행렬을 얻는다. 

  • 각 고윳값과 고유벡터는 랭크가 1인 행렬 ㅅ_{k}q_{k}q^{T}_{k}를 만든다.

스펙트럼 정리(Spectral Theorem)

Comments