[CS231n 4강] Introduction to Neural Networks

[CS231n 4강] Introduction to Neural Networks

Tags
AI
CS231n
Published
October 2, 2024
Author
JH
태그
종류
학문 분야

Backpropagation에 대해서

이전 강의에서 어떻게 Gradient Descent를 사용해서 최적화를 시킬 수 있는지에 대해 다루었다.
이번 강의에서는 임의의 복잡한 함수의 Analytic gradient를 계산하는 방법인 역전파(Backpropagation)에 대해 다룬다.
Backpropagation은 gradient를 얻기 위해 computational graph 내부의 모든 변수에 대해 chain rule을 재귀적으로 적용한다.

Backpropagation: a simple example

notion image
Backpropagation의 가장 간단한 예제는 위와 같다.
f에 대한 q의 미분값과 z의 미분값을 구하고, 이를 이용해 f에 대한 x의 미분값과 y의 미분값을 구한다.
notion image
이를 일반화하면 다음과 같이 나타낼 수 있다.
local gradient를 구한 후, L에 대한 상류 노드의 gradient 값을 구하면 최종적으로 L에 대한 입력 노드의 gradient 값을 구할 수 있다.

Gradients add at branches

notion image
위와 같이 다변수 chain rule에 대해서도 생각해볼 수 있다.
여러 개의 노드와 연결된 경우, gradient를 구할 때도 각 노드로부터 오는 gradient를 합쳐서 구하게 된다.

A vectorized example

notion image
이번에는 벡터화된 예시에 대해 생각해보자. input과 output이 벡터일 때 gradient는 Jacobian matrix가 된다.
Jacobian matrix에 대해 간단한 예시를 들자면, 만약 이고, 이라고 한다면 Jacobian matrix는
가 된다. 따라서, 위의 경우 input vector는 4096 차원이고, output vector도 4096 차원이기 때문에 Jacobian matrix의 크기는 총 4096 x 4096이 된다.
그러나, 실제로 이 전체 Jacobian matrix를 작성할 필요는 없다. 우리는 출력에 대한 x의 영향에 대해서만 알면 된다.
notion image
notion image
실제 예시는 위와 같다. 어려운 계산식은 없으니 직접 해보자.

Modularized implementation: forward / backward API

notion image
notion image
Backpropagation 과정을 실제 모듈화된 방식으로 구현해보자면 위와 같을 것이다.
forward pass에서는 노드의 출력을 계산하는 함수를 구현하고, backward pass에서는 gradient를 계산한다.