본문 바로가기
카테고리 없음

신경망 정리 10-3 (오차 역전파 활성화 함수 계층 구현, Affine/Softmax)

by 머리올리자 2021. 7. 19.

Affine 계층

 

X = np.random.rand(2) # 입력
W = np.random.rand(2, 3) # 가중치
B = np.random.rand(3) # 편향

X.shape # (2,)
W.shape # (2, 3)
B.shape # (3,)

Y = np.dot(X, W) + B

X, W, B는 각각 shape이 (2,), (2, 3), (3,)인 다차원 배열

 

신경망의 순전파 때 수행하는 행렬의 내적을 기하학에서는 affine transform이라고 함

 

위 연산을 그래프로 표현하면 아래와 같다.

 

 

이제까지의 계산 그래프는 노드 사이에 '스칼라값'이 흘렀지만, 위는 '행렬'이 흐르고 있음.

 

행렬을 사용한 역전파도 행렬의 원소마다 전개해보면 스칼라값을 사용한 지금까지의 계산 그래프와 같은 순서로 생각할 수 있다.

 

위의 T는 전치행렬을 뜻함.

 

 

W의 shape이 (2, 3)이었다면 W의 전치행렬의 shape은 (3, 2)가 된다.

 

 

위를 보면

 

X와 𝝏L/𝝏X는 같은 shape

W와 𝝏L/𝝏W는 같은 shape

 

아래와 같이 행렬의 shape을 알 수 있다.

왜 행렬의 형상에 주의?

 

행렬의 내적에서는 대응하는 차원의 원소 수를 일치시켜야 하는데 이를 위해서는 아래의 식을 동원해야 할 수도 있음

 

 

예를 들어 ∂L/∂y의 shape이 (3,)이고 W의 형상이 (2, 3)일 때, ∂L/∂X의 형상이 (2, )가 되도록하는 L/∂y와 W의 내적을 생각해보면 자연스럽게 위의 식이 유도된다.

 

(전치되는 이유 : 각 요소의 연산을 선형대수화하는 과정에서 행렬의 shape이 결정되고 전치되는 것)

디테일한 내용은 아래 링크 참고해서 추후 정리 예정

http://taewan.kim/post/backpropagation_matrix_transpose/

https://choosunsick.github.io/post/neural_network_backward_3/

 

배치용 Affine 계층

 

배치사이즈 N만큼 묶어 순전파하는 경우를 생각

 

X의 입력 shape (2, ) => (N, 2)