cs231n 4강

Dev_bottle·2024년 5월 10일

cs231n

목록 보기
4/5
post-thumbnail

review...


지난 3강에서 우리는 3가지를 배웠다
1. score vector : classifier를 통과해 나온 class의 크기
2. Loss function : 바로 분류한 결과와 실제 값의 차이를 정량적으로 확인하는 function이다.
3. regularization : model의 overfitting을 막기 위한 규제 기법

세 가지 기술은 최적화 기법을 통해 모델의 파라미터 WW를 최적화 시켜줄 수 있다. 그럴러면 WL\nabla_WL을 알아야 한다.

1. Backpropagation


지난 강의의 마지막 부분에서 gradient를 해석적으로 계산하는 것이 더욱 정확하고 빠른 방법임을 설명을 통해 들었다.

그럼 다음과 같은 의문이 들 것이다.

Neural Network의 미분 계산을 어떻게 해야하지??
미분을 통해서 어떻게 가중치를 최적화시킨다는 말인가??

Computational graph

f라는 함수(computation)를 하나의 노드를 표현한 Computational graph를 통해 미분 계산과, 가중치 최적화를 보기 쉽게 표현할 수 있다.

노드의 입력 gradient를 Upstream gradient라고 하고, 노드의 local gradient에 의한 출력 gradient를 Downstream gradient라고 한다.

Downstream gradient는 chain rule에 의해서 Upstream gradient 정보를 가지게 된다.

위 사진에서 xx에 대한 Downstream gradient는 이렇게 표현한다.

Lx=Lz×zx\frac{\partial{L}}{\partial{x}} = \frac{\partial{L}}{\partial{z}}\times\frac{\partial{z}}{\partial{x}}

Patterns in backward flow

Add gate : 입력식 그대로 출력하여 주는 방식이다.
max gate : 비교되는 두 변수 중에서 max에 해당된 변수에 gradient 값을 통과시켜준다.
mul gate : 두 변수값을 switch해준다.

Scalar operation

example 1

f(x,y,z)=(x+y)zf(x,y,z)=(x+y)z

x=2,y=5,z=4x=-2, y=5, z=-4라고 예시가 주어졌다고 하자

함수 ff는 위의 그래프로 나타낼 수 있다.

이제부터 변수 x,y,zx,y,z에 대한 gradient를 계산해야한다. 각각의 노드를 표현하게 된다면 다음과 같음 함수로 이뤄진다.

f=qzq=x+yf=qz \\ q = x+y

각각의 backpropagation을 구하기 위해 chain rule를 적용하면 다음과 같이 계산된다.

example 2

f(w,x)=11+e(w0x0+w1x1+w2x2)f(w,x)=\frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2x_2)}}

에 대한 backpropagation은? 먼저 computational graph로 표현해보자

σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}는 sigmoid function으로써 classification에서 쓰이는 activation function 중에 하나이다.

여기서 sigmoid function에 대한 미분 계산을 사전에 정의해줄 수 있다면 계산 비용도 아낄 수 있지 않을까?

dσ(x)dx=ex1+ex=(1+ex11+ex)(11+ex)=(1σ(x))(σ(x))\frac{d\sigma(x)}{dx}=\frac{e^{-x}}{1+e^{-x}}=\Big(\frac{1+e^{-x}-1}{1+e^{-x}}\Big) \Big(\frac{1}{1+e^{-x}}\Big)=(1-\sigma(x))(\sigma(x))

이렇게 sigmoid function을 하나의 big node로 볼 수 있다.

Vectorized operations

모든 Neural Network의 경우에는 벡터(행렬) 형식의 입력과 출력이 진행된다. 이러한 경우에서는 어떻게 backpropagation이 진행될 것인가?

dfdx1=[dfdx1,  0,  ,  0]dfdx2=[0,  dfdx2,  ,  0]\begin{aligned} \frac{df}{dx_1} = [\frac{df}{dx_1},\; 0, \; \dots, \; 0] \\ \frac{df}{dx_2} = [0, \; \frac{df}{dx_2}, \; \dots, \; 0] \end{aligned}
\vdots%%
dfdx4096=[0,  ,  dfdx4096]\begin{aligned} \frac{df}{dx_{4096}} = [0, \; \dots, \; \frac{df}{dx_{4096}}] \end{aligned}

4096×40964096\times4096 크기의 Jacobian 행렬 계산을 해줘야한다.

사실 이 뿐만 아니라 병렬로 100개의 인풋을 받는다고 하면 input vector는 100×4096100\times4096이 될 것이고, Jacobian 행렬의 크기는 무려 [409,600×409,600][409,600\times409,600]가 될 것이다.

그러나 행렬식을 잘 보면 Jacobian 행렬은 대각행렬이므로 굳이 행렬 전체를 계산해줄 필요가 없고, 출력에 해당된 요소에만 backpropagation을 진행해주면 된다.

q=Wx=(W1,1x1++W1,nxnWn,1x1++Wn,nxn)  <Vector>f(q)=q2=q12++qn2  <scalar>\begin{aligned} q=W\cdot{x}=\begin{pmatrix} W_{1,1}x_1+ &\cdots &+W_{1,n}x_n \\ & \vdots \\ W_{n,1}x_1+ &\cdots &+W_{n,n}x_n \end{pmatrix} \space\space <Vector> \end{aligned} \\ f(q)=\lVert{q}\rVert^2=q^2_1+\cdots+q^2_n \space\space <scalar>

요소 별(W,xW, x) gradient는 다음과 같이 표현된다.

Lx=Lq×qxLW=Lq×qW\begin{aligned} \frac{\partial{L}}{\partial{x}}=\frac{\partial{L}}{\partial{q}}\times \frac{\partial{q}}{\partial{x}} \end{aligned} \\ \begin{aligned} \frac{\partial{L}}{\partial{W}}=\frac{\partial{L}}{\partial{q}}\times \frac{\partial{q}}{\partial{W}} \end{aligned}

Lq\frac{\partial{L}}{\partial{q}}은 gradient를 구하면 되는데, qx&qW\frac{\partial{q}}{\partial{x}} \& \frac{\partial{q}}{\partial{W}}는 어떻게 계산해야할까?

행렬의 미분 (from data science school)

q=Wx=(W1,1x1+W1,2x2++W1,nxnW2,1x1+W2,2x2++W2,nxnWn,1x1+Wn,2x2++Wn,nxn)f(q)=q2=q12++qn2\begin{aligned} q=W\cdot{x}=\begin{pmatrix} W_{1,1}x_1+ & W_{1,2}x_2+ & \cdots &+W_{1,n}x_n \\ W_{2,1}x_1+ & W_{2,2}x_2+ & \cdots &+W_{2,n}x_n \\ & & \vdots & \\ W_{n,1}x_1+ & W_{n,2}x_2+ & \cdots &+W_{n,n}x_n \end{pmatrix} \end{aligned} \\ f(q)=\lVert{q}\rVert^2=q^2_1+\cdots+q^2_n
일 때, 행렬 WWxx에 대한 미분 결과는 다음과 같다.


1. qx\frac{\partial{q}}{\partial{x}} 에 대한 미분

qx=(qx1qx2qxn)=(W1,1W2,1Wn,1W1,2W2,2Wn,2W1,nW2,nWn,n)=WT\frac{\partial{q}}{\partial{x}}= \begin{aligned} \begin{pmatrix} \frac{\partial{q}}{\partial{x_1}}\\ \frac{\partial{q}}{\partial{x_2}}\\ \vdots\\ \frac{\partial{q}}{\partial{x_n}} \end{pmatrix} \end{aligned} =\begin{pmatrix} W_{1,1} & W_{2,1} & \cdots & W_{n,1} \\ W_{1,2} & W_{2,2} & \cdots & W_{n,2} \\ & & \vdots & \\ W_{1,n} & W_{2,n} & \cdots &W_{n,n} \end{pmatrix} \\= W^T

2. qW\frac{\partial{q}}{\partial{W}} 에 대한 미분

qW=(qW1,1qW1,2qW1,nqW2,1qW2,2qW2,nqWn,1qWn,2qWn,n)=(x1x2xnx1x2xnx1x2xn)=(x1x2xn)=xT\frac{\partial{q}}{\partial{W}}= \begin{aligned} \begin{pmatrix} \frac{\partial{q}}{\partial{W_{1,1}}} & \frac{\partial{q}}{\partial{W_{1,2}}} & \cdots & \frac{\partial{q}}{\partial{W_{1,n}}}\\ \frac{\partial{q}}{\partial{W_{2,1}}} & \frac{\partial{q}}{\partial{W_{2,2}}} & \cdots & \frac{\partial{q}}{\partial{W_{2,n}}}\\ & & \vdots\\ \frac{\partial{q}}{\partial{W_{n,1}}} & \frac{\partial{q}}{\partial{W_{n,2}}} & \cdots & \frac{\partial{q}}{\partial{W_{n,n}}}\\ \end{pmatrix} \end{aligned} = \begin{aligned} \begin{pmatrix} x_1 & x_2 & \cdots & x_n \\ x_1 & x_2 & \cdots & x_n \\ & & \vdots \\ x_1 & x_2 & \cdots & x_n \\ \end{pmatrix} \end{aligned} = \begin{pmatrix} x_1 & x_2 & \cdots & x_n \end{pmatrix} = x^T

행렬 미분의 법칙을 알기만 한다면 다음과 같이 계산이 가능하다

Lx=Lq×qx=Lq WTLW=Lq×qW=xT Lq\begin{aligned} \frac{\partial{L}}{\partial{x}}=\frac{\partial{L}}{\partial{q}}\times \frac{\partial{q}}{\partial{x}} = \frac{\partial{L}}{\partial{q}}\space{W^T} \end{aligned} \\ \begin{aligned} \frac{\partial{L}}{\partial{W}}=\frac{\partial{L}}{\partial{q}}\times \frac{\partial{q}}{\partial{W}} = x^T\space{\frac{\partial{L}}{\partial{q}}} \end{aligned}


Conclusion


이번 챕터는 수학적인 내용이 매우 많이 나왔다.

그러나 차근차근 되짚어 본다면 또 어려운 내용이 아니므로 걱정은 하지 않도록한다! (나에게 하는 말이다)!

profile
넓은 세상을 올바르게 바라볼 수 있는 날까지!

0개의 댓글