모든 Dense layer 뒤에 숨은 두 연산
행렬곱은 neural network의 핵심 연산이야. Dense layer는 수학적으로 matmul + bias add + activation. tf.matmul(a, b)는 a.shape[-1] == b.shape[-2] 필수 — 안쪽 차원이 contract. 앞쪽 차원은 batch 차원이고 일치 (또는 broadcast).
Python @ 연산자가 tf.matmul의 짧은 표기. 가독성 좋은 쪽 써.
Broadcasting은 size-1 차원을 암묵적으로 확장해서 다른 shape의 tensor끼리 연산 가능하게 해줘. 규칙: shape를 오른쪽 정렬, size-1 차원은 확장 가능, 둘 다 1이 아닌데 안 맞으면 에러. (batch, n) activation에 (n,) bias 더하기가 되는 이유는 bias가 (1, n)으로 취급되고 batch에 broadcast되기 때문.
Broadcasting은 조용해. 의도치 않게 broadcast해도 TF가 경고 안 해. row vector
(1, n)을 의도했는데 column vector (n, 1)이면 에러 없이 다른 결과 나와. 다른 size 연산 후엔 출력 shape 항상 print해.