[CS231N] 4. Intruduction to Neural Networks
💡 Iamge Classification
Stanford University “CS231N” 강의를 듣고 정리하였습니다.
자막 : https://github.com/visionNoob/CS231N_17_KOR_SUB (크롬 확장 프로그램 Subtitles for Youtube)
2017 버전 강의 목차 및 슬라이드 : http://cs231n.stanford.edu/2017/syllabus.html
2017 버전 강의 동영상 링크 : https://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv
2022 버전 강의 목차 및 슬라이드 : http://cs231n.stanford.edu/schedule.html
실습 과제 : https://github.com/cs231n/cs231n.github.io/tree/master/assignments
Lecture 4 : Intruduction to Neural Networks
Analytic gradient (using Computational graphs)
input이 $x, W$인 Linear Classifier
-
파라미터 W와 데이터 x의 곱셈은 score vector를 출력함
-
hinge loss라는 다른 계산 노드를 가지고 있고 데이터 항$ L_i$를 계산하는데, 오른쪽 하단에 보이는 Regularization 또한 가지고 있음
-
이 노드(R)는 regularization항을 계산하고 최종 loss, L은 regularization 항과 데이터 항의 합임
-
computational graph를 사용해서 함수를 표현하게 됨으로써 back propagation을 사용할수 있게 됨
- back propagation은 gradient를 얻기 위해 computataional graph 내부의 모든 변수에 대해 chain rule을 재귀적으로 사용
수업에서 사용할 CNN의 가장 위층에 입력 이미지가 들어가고 아래에는 loss가 있음 → 입력 이미지는 loss function으로 가기까지 많은 layer를 거쳐 변형을 겪게 됨
Backpropagation : a simple example
\[f(x, y, z)=(x+y)z\]우선 목표는 함수를 가지는 것 (이 경우의 함수는 f로 정의함) → 그리고 function $f$의 출력에 대한 어떤 변수의 gradient를 찾기 원함
-
항상 함수 $f$를 이용해서 computational graph로 나타냄
함수를 graph로 나타내고 이 네트워크에 우리가 가지고 있는 값$(x=-2, y=5, z=-4)$를 전달
$x+y$ 덧셈 노드의 이름은 $q$이고, $x$와 $y$에 각각에 대한 $q$의 gradient는 단순 덧셈이기 때문에 값은 1
$q$와 $z$에 대한 $f$ 의 gradient는 곱셈 규칙에 의해 각각 $z$와 $q$ → 찾고자 하는것은 $x, y, z$ 각각에 대한 $f$의 gradient
-
backpropagation은 chain rule의 재귀적인 응용 (chain rule에 의해 뒤에서부터 시작)
출력 $f$에 대한 gradient를 계산하면 1
그 다음엔 뒤로 이동해서 $z$에 대한 $f$의 gradient를 계산하면 $z$에 대한 $f$ 미분이 $q$
$q$에 대한 $f$의 gradient는 $z$ → $z$는 -4의 값을 가짐
$y$에 대한 $f$의 미분값을 알고 싶지만 $y$는 $f$와 바로 연결되어 있지 않음 → $f$는 $z$와 연결되어 있기 때문에 chain rule을 이용
$x$에 대한 $f$의 미분값도 동일
Chain rule을 활용해서 복잡한 층의 미분값을 local gradient $\times$ upstream gradient 의 과정으로 gradient를 얻을 수 있음
Another Example
정리
활용 : Sigmoid Function
위의 식의 $w_0x_0+w_1x_1+w_2$를 $x$로 치환하면 sigmoid function → sigmoid function의 미분값은 $(1-\sigma(x))(\sigma(x))$ 이기 때문에 복잡한 계산 과정 없이 한번에 $0.20$ 라는 gradient를 구할 수 있음
또한, 국소적인 계산($w_0x_0+w_1x_1+w_2$을 보다 간단한 $x$로 묶음)이 가능
Patterns in backward flow
- ADD gate : gradient distributor → upstream gradient의 값을 local gradient에 나눠줌
- MAX gate : gradient router → 입력값이 큰 local gradient에 upstream gradient의 값을 주고 입력값이 작은 쪽에 0을 줌
- MUL gate : gradient switcher → local gradient $\times$ 다른 변수의 값
Gradients for Vectorized Code
이제 input 값이 스칼라가 아닌 벡터의 형태일 때
입력값 $x, y$가 벡터의 형태라면 local gradient는 Jacobian matrix의 형태를 가지게 됨
여기서 필요한 부분은 Jacobian matrix의 대각행렬
A Vectorized Example
\[f(x, W)=||W \cdot x||^2=\sum_{i=1}^2(W \cdot x)_i^2\]Point!
- gradient는 항상 변수와 같은 shape
- gradient는 각 요소가 최종 출력에 영향을 얼만큼 미치는지 정량화함
- forward pass 값을 저장해야 backward pass에서 사용할 수 있음
댓글남기기