[DL] CS231n Lecture 4 : Backpropagation and Neural Networks

Date:     Updated:

카테고리:

태그:

1. Backpropagation

function f의 출력에 대한 어떤 변수의 gradient를 찾기를 원한다.

첫 번째 단계는 항상 함수 f를 이용해서 computational graph로 나타내는 것이다.

Image

중간에 +노드와 *노드가 있다. 이 노드들에 이름을 붙일 수 있는데 +노드를 q로 *노드를 f로 한다.

Image

결국 찾기를 원하는 것은 x,y,z, 각각에 대한 f의 gradient이다.

backpropagation은 chain rule의 재귀적인 응용이다. chain rule에 의해 뒤에서부터 gradient 계산을 시작한다.

\(\frac{\partial f}{\partial f} = 1\)이라는 것을 알 수 있다.

Image

\(\frac{\partial f}{\partial z} = q\) 이므로 3이라는 것을 알 수 있다.

Image

같은 방식으로 \(\frac{\partial f}{\partial q} = z\) 이므로 -4이다.

여기까지는 한번의 계산으로도 쉽게 구할 수 가 있다.

하지만 다음 단계인 x, y의 gradient를 구할 때는 chain rule을 사용해야한다.

Image

f에 대한 q의 영향력은 -4이고 q에대한 x의 영향력은 1이다. 그러므로 f에 대한 x의 영향력이 -4라는 것을 알 수 있다.

Image

위 예시를 보면

각 노드는 backpropagation을 통해 계산한 local gradient를 가지고 있다. 이 값들은 상위 노드 방향으로 계속 전달이 되고, 이것을 받아 그 노드에서의 local gradient와 곱하기만 하면 상위의 gradient를 구할 수 있다. (local gradient * upstream gradients ⇒ 해당 노드의 local gradient가 된다)

즉, 노드와 연결된 노드 이외의 다른 어떤 값에 대해서 신경을 쓰지 않아도 된다.

Image

여기서 중요한 것은 computational graph를 만들 때, computational 노드에 대해 우리가 원하는 세분화된 정의를 할 수 있다는 것이다. 위 예제에서도 가장 작은 단위인 덧셈과 곱셈으로 세분화했다.

원한다면 이 노드들을 더 복잡한 그룹으로 묶어 계산할 수 있고, 마찬가지로 그 노드에서 local gradient만 적을 수 있으면 된다.

Image

하나의 복잡한 gate에서의 local gradient, expression 그리고 x에 대한 sigmoid의 미분을 알고있기 때문에 하나의 복잡한 node라고 생각할 수 있다.

즉, local gradient를 적을 수 있는 한 더 복잡한 노드 그룹을 만들 수 있다는 것이다.

Image

Add gate : gradient distributor

두 개의 노드와 연결되는 덧셈 게이트에서는 upstream gradient를 연결된 노드에 같은 값으로 나눠준다.

Max gate : gradient router

하나의 노드에는 전체 값이, 다른 노드에는 0의 gradient가 들어간다.

Mul gate : gradient switcher (scaler)

upstream gradient를 받아 다른 노드의 값으로 scaling한다.

이제 변수 x,y,z가 vector라고 설정을 하고 생각해본다. 이로 인해 발생하는 차이점은 local gradient가 Jacobian matrix로 되는것밖에 없다.

Image

Image

이렇게 되면 Jacobian matrix의 크기는 4096 x 4096이 된다. 여기에 만약 minibatch를 사용해 100개를 계산한다고 하면 409600 x 409600 크기의 행렬이 될것이다. 이것은 크기가 너무 커서 실용적이지 못하다.

Jacobian matrix의 형태는 대각행렬 형태일 것이다. 왜냐하면 input vector의 element는 output vector의 같은 element에만 영향을 미치기 때문이다.

1.1 example

Image

x의 차원은 N, W의 차원은 NxN이라고 가정한다.

중간 노드은 q를 구하기 위해서 W * N을 계산하고 위 수식을 통해 값을 계산하면 forward 계산은 비교적 쉽게 구할 수 있다.

이제 backward를 구하기 위해서 output의 gradient인 1부터 역으로 계산을 시작한다.

이 계산의 목적은 q의 각각의 요소가 f의 최종 값에 어떤 영향을 미치는지 구하고 싶은 것이다.

Image

벡터의 gradient는 항상 원본 벡터의 사이즈와 같고, 각 gradient는 최종 출력에 어떤 영향을 미치는지 알 수 있다.

1.2 Summary

NN은 매우 커서 모든 파라미터에 대해서 gradient를 직접 손으로 구하는 것은 비현실적이다. 그래서 gradient를 구하기 위해 backpropagation을 사용한다.

backpropagation은 computational graph에서 chain rule을 재귀적으로 사용하는 방법이다.

최종적으로 gradient를 구해서 각 element의 최종 output에 대한 영향을 구하는 것이 목적이다.

2. Neural Net

신경망은 함수들의 집합(Class)이다. 비선형의 복잡한 함수를 만들기 위해 간단한 함수들을 계층적으로 쌓아올려 만든다.

Image

하나의 class에 하나의 classfier만 존재를 한다. 예를들어 Horse classfier만 존재. 그래서 horse의 경우 왼쪽을 보는 말과 오른쪽을 보는 말이 중첩되어 나타나 있다. 하지만 NN의 경우 하나의 Class 내에서 여러개의 classfier가 존재한다.

Image

활성화 함수로 사용할 수 있는 함수는 여러가지가 있고 실제 뉴런에서의 동작과 가장 유사하다고 알려진 것은 ReLU라고 한다.

맨 위로 이동하기

DL 카테고리 내 다른 글 보러가기

댓글남기기