Kronecker product
Kronecker product는 scalar에 matrix를 곱할 때를 상상하면 쉽게 이해할 수 있다.
먼저 scalar와 matrix 곱을 생각해보자. 만약 scalar a와 matrix B를 곱한다면 다음처럼 쓸 수 있다.
a⋅B=a⋅⎣⎢⎢⎡b11⋮bm1⋯⋱⋯b1n⋮bmn⎦⎥⎥⎤=⎣⎢⎢⎡ab11⋮abm1⋯⋱⋯ab1n⋮abmn⎦⎥⎥⎤
여기서 만약 a가 scalar가 아니고 matrix A라면? 그게 바로 Kronecker product가 된다. 두 matrix A와 B의 Kronecker product A⊗B는 다음과 같다.
A⊗B=⎣⎢⎢⎡a11B⋮am1B⋯⋱⋯a1nB⋮amnB⎦⎥⎥⎤
그렇다면 이 곱은 왜 사용하는가?
Kronecker product ⊗과 vectorization operator vec(⋅)간의 연관성에 따라서 하나의 긴 vector로 풀 수 있기 때문이다. 이는 잘 모르는 matrix가 풀어야 하거나 optimize해야하는 function에 있을 때 유용하다. 식으로 보자.
vec(AXB)=(BT⊗A)vec(X)
위 식에서 AXB는 matricies, BT⊗A는 matrix, vec(X)는 vector를 의미한다.
만약 AXB+X=C라는 matrix equation을 풀어야한다고 하자.
그럼 Kronecker product 공식에 따라서 다음처럼 바꿔 쓸 수 있다.
(BT⊗A)vec(X)=vec(C)
약간의 수식 과정을 보면
AXB+X=C(AB+I)X=C
이처럼 X로 묶어주고 ⊗를 실행한 것이다!
Kronecker delta
tensor에서 등장하는 개념
쉽게 말해서 두 값이 같으면 1 다르면 0을 출력하는 함수이다. 두 변수는 보통 음수가 아닌 정수 값을 가진다.
δij={01i=j,i=j.혹은 δij=[i=j] 이렇게 간략하게 표기하기도 한다.
inner product를 kronecker delta로 표현할 수 있다.
a⋅b=i,j=1∑naiδi,jbj
Ref.