벡터에만 내적을 하는 줄 알았더니 행렬에도 내적개념이 있었다(!!!). conv layer에서 kernel이 이미지 행렬과 이렇게 연산한다. 강의에서 그냥 'dot product'라고 해서 '행렬을 어떻게 내적하지?'하고 생각하면서 행렬곱을 한 다음에 요소들을 다 더해주는 줄 알았는데 그게 아니라 크기가 같은 두 행렬을 hadamard product하고 나서 요소들을 다 더해준다. 수식으로는 이렇게 쓴다.
⟨A,B⟩F=∑i∑jai,j⋅bi,j
예를 들어 이미지 행렬 X와, kernel 행렬 W가 주어질 때 Conv layer에서 어떻게 연산하는지 살펴보자.
X=⎣⎢⎡x11x21x31x12x22x32x13x23x33⎦⎥⎤, W=[w11w21w12w22]일 때, X의 부분행렬은 4가지로 생각할 수 있다.
X11=[x11x21x12x22] X12=[x12x22x13x23] X21=[x21x31x22x32] X22=[x22x32x23x33]
⟨W,X⟩F=[⟨W,X11⟩F⟨W,X21⟩F⟨W,X12⟩F⟨W,X22⟩F] 이렇게 정리할 수 있다.