본문 바로가기
KAIST MASTER📚/CS231n

[CS231n] Lecture 4 - Introduction to Neural Networks

by 말랑e 2021. 2. 1.

 

www.youtube.com/watch?v=d14TUNcbn1k&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=4

Stanford University에서 2017년도에 강의한 CS231n를 들으며 정리, 요약했다.

4강 Convolutional Neural Networks for Visual Recognition 강의 요약 시작!


저번 시간 복습

optimization : 가장 낮은 점 찾기


gradient descent

이번 시간에는 analytic gradient를 어떻게 구할지 배운다

 

L에는 R도 포함되어 있다 (regulization)

Neural Turing Machine-> 매우 복잡

그래서 backpropagation이 뭔데?

만약 input이 저렇게 주어져있고 네트워크가 저렇다면

x+y=3은 중간에 나타나는 값 (intermidiate value)

맨 오른쪽 아웃풋인 f부터 살펴보면 df/df는 1이다

df/dz는 q=3이고, df/dq는 z=-4이다

df/dy는 (dq/dy)*(df/dq)로 구할 수 있고, dq/dy = 1, df/dq = -4이다. 

모든 노드에 input과 output이 있다

dz/dx와 dz/dy를 구할 수 있다 : local gradient

이런 local gradient를 통해 Loss로부터 출발하는 gradients를 구할 수 있다

이렇게 사슬처럼 연결되어 곱해지는 방식을 보고 Chain Rule이라고 한다

 

example

우선 초록색 으로 input이 주어지고, 순서대로 계산해서 output 값을 구할 수 있다

그다음, local gradient를 구한다

f(x) = 1/x이고 x = 1.37 일 때,

f'(x) = -1/x^2 이고 x = 1.37을 대입하면 -0.53 이 나온다.

이를 upstream gradient인 1과 곱하면 이 부분의 gradient를 구할 수 있다.

 

Chain rule

이런 방법으로 local gradient와 upstream gradient를 곱해주면서 gradient를 구하는 방법을

Chain rule 이라고 한다.

 

sigmoid function

여기에서, 파란색 네모 박스 쳐진 부분을 큰 node로 잡고 sigmoid function으로 잡는다.

sigmoid function의 f'(x)가 간단히 구해지기 때문에, 연산 량을 줄일 수 있다.

x=1일 때, sigmoid(x) = 0.73이다

sigmoid'(x)= (1-sigmoid(x))*sigmoid(x)이므로, (1-0.73)*0.73=0.2로

local gradient를 간단히 구할 수 있다.

Q. add함수에서 gradient를 구하는 법은?

add gate는 gradient distributor 역할을 한다

f(x, y)=x+y일 때,

x로 미분할 경우 local gradient =1, y로 미분할 경우 local gradient = 1 이 된다.

따라서 앞의 upstream gradient를 그대로 따르게 된다.

Q. max함수에서 gradient를 구하는 법은?

max gate는 gradient router 역할을 한다

max(x, y) = x의 경우에서, x로 미분할 경우 local gradient =1, y로 미분할 경우 local gradient =0 이 된다.

이렇게 gradient가 합해지는 경우, input이 x, output이 q1, q2라고 하면

dq1/dx와 dq2/dx를 이용해서 gradient를 구할 수 있다.

(df/dq1)*(dq1/dx) + (df/dq2)*(dq2/dx) = df/dx이다

합하면 된다!

친절하게 미적분 파트도 설명해주셨다.

gradient가 vector 일 때는 gradient가 Jacobian matrix가 된다고 한다.

input으로 4096차원의 백터를 받고, output으로 4096의 벡터를 나오게 하고 싶다면,

자코비안 matrix는 4096*4096이 될 것이다.

만약 minibatch가 100이라면, 409600*409600이 될 것이다

그렇다면 자코비안 행렬은 어떻게 생겼을까?

대각 행렬이 된다. 이유는 아래 나온다

gradient의 차원은 원래 vector의 차원과 같다.

q=W*x일 때

이런 꼴이니까

qk를 w_i, j로 미분하면 k=i일 때 값은 xj, 아니라면 0이 될 것이다. : 대각행렬이 되는 이유

이를 이용해서 df/dxi를 구할 수 있다.

그래서, f를 w에 대해 미분한 것을 metrix형태로 나타내면 다음과 같다

f를 x에 대해 미분한 것도 위와 같은 방법으로 구할 수 있다.

 

코드 구현 - rough psuedo code

 

Example : Caffe layers

요약

 

뉴럴 네트워크 neural network

두 네트워크를 쌓아서  2-layer neural network를 만듦!

중간에 non-linear층 : 이 부분 없이 linear 100층 쌓아도 한 층으로 표현 가능

한 layer당 한 template 밖에 못 만들었다 - 위의 red car 말고 다른 색상, 다른 모양도 있을 것이다

그럼 다른 layer의 (h) W들이 또 다른 템플릿의 모양을 본떠서 만들어질 것

 

neuron

뉴런과 cnn의 비교

하지만 뉴런이 훨씬 복잡한 구조이다

 

Activation function의 종류

여기서부터 시간 5분도 안 남아서 간단간단하게 언급만 하고 넘어간 듯

 

뉴럴 네트워크

위는 부르는 방법에 관한 것

code부분


 

과제 부분 - Assignment

댓글