CS231n

CS231n(4) Introduction to Neural Networks

민지기il 2024. 3. 4. 15:32

Backpropation and NN

예제 1

f(x,y,z)=(x+y)z 에서 x=-2, y=5, z=-4이다

왼->오 진행을 FP(Forward Pass)이고 이 과정으로 local gradient를 얻을 수 있다

오->왼 진행을 BP(Backward Pass)이고 이 과정으로 global gradient를 얻을 수 있다

df/df는 identity function이라고 한다

gradient = global gradient x local gradient 이다

 

q=x+y 이고 f=qz라고 하자 dq/dx=1 , dq/dy = 1이고 df/dq=z df/dz=q이다 

이때 우리가 원하는 건 input 값에 대한 마지막 단의 영향력이므로 df/dx, df/dy, df/dz를 알고자 한다

df/dx = df/dq * dq/dx = z 

df/dy = df/dq * dq/dy = z 

 

예제 2

 

df/dw0, df/dx0, df/dw1, df/dx1, df/dw2를 구하려고 한다 (각각 input의 최종적 loss에 대한 영향력을 구하려고 한다)

df/df = 1이다 x는 1.37이다

gradient = global gradient x local gradient

i) a(x)=1/x, dc/dx=-1/x^2 이므로

gradient = 1 x -1/(1.37)^2 = -0.53

ii) b(x)=c+x, dd/dx=1 이므로

gradient = -0.53 x 1 = -0.53

iii) c(x)=e^x, da/dx=e^x 이므로

gradient = -0.53 x e-1 = -0.2

iv) d(x)=ax, db/dx=a 이므로

gradient = -0.2 x -1 = 0.2 이다

forward 와 backward 수행 코드

 

곱셈 게이트 z=x*y에 대한 forward와 backward pass의 파이썬 구현

<Sigmoid function>

다음과 같이 정리가 된다

o(x)에서 x에 1을 대입한 1/(1+e^-1)은 0.73이다. 따라서 do/dx 값은 0.73 x 0.27 = 0.2 이다

 

<Vectorized>

 

Input에 d차원 벡터가 들어가면 output도 d차원이 된다

Jacobin matrix 크기는 input 4096, output 4096으로 4096x4096이 된다 

여기서 minibatch를 추가해서 100개씩이면 409600x409600이 된다 


매우 거대하지만 실제로는 이 행렬을 계산하지 않는다. 이는 요소별로 보기 때문에 입력의 각 요소 즉 첫번째 차원은 오직 출력의 해당 요소에만 영향을 준다 따라서 자코비안 행렬은 대각 행렬이 된다

예제1) L2 

W,x 가 다음과 같은 행렬일 때 행렬을 곱하면 0.22 0.26이 나온다
L2를 정규화하였으니 0.22와 0.26을 제곱하여 더해주면 0.116이 나온다. 

f(q) = q^2 + q1^2 + ...+qn^2이므로 
Df/dq1=2q1 이고 local gradient는 2q global gradient는 1 이므로 0.44와 0.52 값이 나오게 된다

 

예제2) 곱하기 gate

곱하기 게이트는 서로 바꿔서 계산해주면 된다

i) W

[0.22 0.26] * [0.2 0.4] 해서 W가 2x2이기 때문에 [0.2 0.4]를 전치해서 1x2로 계산하면

[0.088 0.176][0.104 0.208]이 나오게 된다

ii) x

[0.1 -0.3][0.5 0.8] * [0.22 0.26] 하면 2x2와 2x1로 2x1이 나와서 [-0.112 0.636]이 나오게 된다

 

중요한 것은 gradient를 계산했으면 이 결과가 변수의 shape와 동일한지 확인해야 한다  

 

Neural Network (신경망)

우리는 이제 단순한 Linear regression이 아니라 히든레이어를 추가한다.
히든 레이어를 input노드와 ouput노드 사이에 100개를 추가했고, 이를 102 - layer 라고 하지 않고 2 - layer NN이라고 한다.
이는 예로 들었을때, NN(Nearest Neighbor)와 같은 모델은 각각 하나의 클래스에 하나의 분류기로만 이용해서 그 특징에만 부합한 클래스만 부여했는데 히든레이어를 포함하므로써 한개의 클래스에도 여러개의 분류기가 생겨 다양한 특징을 잡아 분류할 수 있게 된 것이다

데이터를 input해서 w를 부여하고 활성화 함수를 통해 출력값을 출력하는 것이다

 

이렇게 2-layer, 3-layer NN을 만드는데, 함수는 max함수를 이용한다.

이는 활성화 함수를 말하는데 예전에는 시그모이드를 활성화 함수로 많이 이용했지만, 최근에는 relu함수를 많이 이용한다

이렇게 인풋, 여러 개의 히든, 아웃풋 레이어는 전부 서로의 모든 노드에 관여하여 값을 도출한다

그래서 이를 FC(Fully Conneted) 라고 한다