
블록 행렬 곱 (block matrix multiplication)
2020, Aug 26
- 참조 : https://ximera.osu.edu/la/LinearAlgebra/MAT-M-0023/main
- 참조 : https://math.stackexchange.com/questions/787909/block-matrix-multiplication
- 이번 글에서는 행렬 곱을 효율적으로 하기 위한
블록 행렬 곱 연산 (block matrix multiplication)
에 대하여 간략하게 알아보도록 하겠습니다. 블록 행렬 곱 연산
은 간단하게 말하여 행렬의 모든 원소 값들을 한번에 연산하는 것이 아니라 영역 별로 따로 연산하는 것을 뜻합니다. 이와 같이 문제의 범위를 여러 단위로 분할하고 최종적으로 합치는 방법을 통해 연산량을 줄일 수 있어서 많이 사용됩니다.
- 예를 들어 다음과 같이 2 x 2 크기의 행렬이 있다고 가정해 보겠습니다. 이 때, 행렬의 곱은 다음과 같이 나타낼 수 있습니다.
- 만약 위 행렬의 각 원소인 가 스칼라 값이 아니라 행렬이라면 어떻게 될까요?
- 이 경우, 표기만 조금 바꾸어서 위 식과 같이 쓸 수 있습니다. 다만 이 값은 스칼라 값이 아니기 때문에 영역을 표시하는 선을 그어서 나타내었습니다.
- 이와 같이 행렬 곱 연산을 하다 보면 전혀 영향을 끼치지 않는 원소들 끼리의 연산도 고려해야 하기 때문에 계산 비효율성이 발생할 수 있는데, 위 연산과 같이 모든 영역을 한번에 계산하지 않는 방식을 통하여 계산 효율성을 증가할 수 있습니다.
- 그러면 조금 더 구체적인 예시를 통하여 이 연산의 방식을 살펴보도록 하겠습니다.
- 위 식에서 행렬 를 살펴보면 부분은 단위 행렬이고 은 영행렬 그리고 나머지 는 특정 값을 가지는 행렬에 해당합니다. 반면 행렬 에서는 로 블록을 나누었는데 그 이유는 행렬 의 와 연산을 하기 위하여 사이즈를 나눈 것입니다.
- 이 의미 단위로 연산을 하면 단위 행렬과 영행렬 덕분에 계산 과정이 많이 생략이 되게 됩니다. 아래 식을 살펴보겠습니다.
- 위 식과 같이 의미있는 연산은 로 문제가 단순화 됩니다.
- 예제 하나를 더 보면서 이 글을 마무리 하겠습니다.