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


'KAIST MASTER📚 > CS231n' 카테고리의 다른 글
[CS231n] Lecture 5 - Convolutional Neural Networks (0) | 2021.02.03 |
---|---|
[CS231n] Lecture 3 - Loss Functions and Optimization (0) | 2021.01.31 |
[CS231n] Lecture 2 - Image Classification (0) | 2021.01.30 |
댓글