블록 행렬 곱 (block matrix multiplication)

블록 행렬 곱 (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 크기의 A,B 행렬이 있다고 가정해 보겠습니다. 이 때, 행렬의 곱은 다음과 같이 나타낼 수 있습니다.


  • AB=[a11a12a21a22][b11b12b21b22]=[a11b11+a12b21a11b12+a12b22a21b11+a22b21a22b12+a22b22]


  • 만약 위 행렬의 각 원소인 aij,bij가 스칼라 값이 아니라 행렬이라면 어떻게 될까요?


  • AB=[A11A12A21A22][B11B12B21B22]=[A11B11+A12B21A11B12+A12B22A21B11+A22B21A22B12+A22B22]


  • 이 경우, 표기만 조금 바꾸어서 위 식과 같이 쓸 수 있습니다. 다만 이 값은 스칼라 값이 아니기 때문에 영역을 표시하는 선을 그어서 나타내었습니다.
  • 이와 같이 행렬 곱 연산을 하다 보면 전혀 영향을 끼치지 않는 원소들 끼리의 연산도 고려해야 하기 때문에 계산 비효율성이 발생할 수 있는데, 위 연산과 같이 모든 영역을 한번에 계산하지 않는 방식을 통하여 계산 효율성을 증가할 수 있습니다.


  • 그러면 조금 더 구체적인 예시를 통하여 이 연산의 방식을 살펴보도록 하겠습니다.


  • A=[10000010002142131175]=[I2O23PQ]
  • B=[4256731016]=[XY]


  • 위 식에서 행렬 A를 살펴보면 I2 부분은 단위 행렬이고 O23은 영행렬 그리고 나머지 P,Q는 특정 값을 가지는 행렬에 해당합니다. 반면 행렬 B에서는 X,Y로 블록을 나누었는데 그 이유는 행렬 AP,Q와 연산을 하기 위하여 사이즈를 나눈 것입니다.
  • 이 의미 단위로 연산을 하면 단위 행렬과 영행렬 덕분에 계산 과정이 많이 생략이 되게 됩니다. 아래 식을 살펴보겠습니다.


  • AB=[IOPQ][XY]=[IX+OYPX+QY]=[XPX+QY]=[4256308827]


  • 위 식과 같이 의미있는 연산은 PX+QY로 문제가 단순화 됩니다.


  • 예제 하나를 더 보면서 이 글을 마무리 하겠습니다.


  • A=[2131101200100001]B=[120100051110]


  • AB=[PQO22I2][XO21YZ]=[PX+QYQZYZ]
  • AB=[4183351051110]


선형대수학 글 목차