[CS231N] 4. Intruduction to Neural Networks

2 분 소요

💡 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)

L4_01

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을 재귀적으로 사용

L4_02

수업에서 사용할 CNN의 가장 위층에 입력 이미지가 들어가고 아래에는 loss가 있음 → 입력 이미지는 loss function으로 가기까지 많은 layer를 거쳐 변형을 겪게 됨

Backpropagation : a simple example

\[f(x, y, z)=(x+y)z\]

우선 목표는 함수를 가지는 것 (이 경우의 함수는 f로 정의함) → 그리고 function $f$의 출력에 대한 어떤 변수의 gradient를 찾기 원함

  1. 항상 함수 $f$를 이용해서 computational graph로 나타냄

    함수를 graph로 나타내고 이 네트워크에 우리가 가지고 있는 값$(x=-2, y=5, z=-4)$를 전달

    L4_03

    $x+y$ 덧셈 노드의 이름은 $q$이고, $x$와 $y$에 각각에 대한 $q$의 gradient는 단순 덧셈이기 때문에 값은 1

    $q$와 $z$에 대한 $f$ 의 gradient는 곱셈 규칙에 의해 각각 $z$와 $q$ → 찾고자 하는것은 $x, y, z$ 각각에 대한 $f$의 gradient

  2. backpropagation은 chain rule의 재귀적인 응용 (chain rule에 의해 뒤에서부터 시작)

    L4_04

    출력 $f$에 대한 gradient를 계산하면 1

    그 다음엔 뒤로 이동해서 $z$에 대한 $f$의 gradient를 계산하면 $z$에 대한 $f$ 미분이 $q$

    L4_05

    $q$에 대한 $f$의 gradient는 $z$ → $z$는 -4의 값을 가짐

    L4_06

    $y$에 대한 $f$의 미분값을 알고 싶지만 $y$는 $f$와 바로 연결되어 있지 않음 → $f$는 $z$와 연결되어 있기 때문에 chain rule을 이용

    L4_07

    $x$에 대한 $f$의 미분값도 동일

    L4_08

    L4_10

Chain rule을 활용해서 복잡한 층의 미분값을 local gradient $\times$ upstream gradient 의 과정으로 gradient를 얻을 수 있음

Another Example

L4_11

L4_12

L4_13

L4_14

L4_15

L4_16

L4_17

L4_18

정리

L4_bonus

활용 : Sigmoid Function

L4_19

위의 식의 $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

L4_20

  1. ADD gate : gradient distributor → upstream gradient의 값을 local gradient에 나눠줌
  2. MAX gate : gradient router → 입력값이 큰 local gradient에 upstream gradient의 값을 주고 입력값이 작은 쪽에 0을 줌
  3. MUL gate : gradient switcher → local gradient $\times$ 다른 변수의 값

Gradients for Vectorized Code

이제 input 값이 스칼라가 아닌 벡터의 형태일 때

L4_10

입력값 $x, y$가 벡터의 형태라면 local gradient는 Jacobian matrix의 형태를 가지게 됨

L4_21

여기서 필요한 부분은 Jacobian matrix의 대각행렬

A Vectorized Example

\[f(x, W)=||W \cdot x||^2=\sum_{i=1}^2(W \cdot x)_i^2\]

L4_22

L4_23

L4_24

L4_25

Point!

  1. gradient는 항상 변수와 같은 shape
  2. gradient는 각 요소가 최종 출력에 영향을 얼만큼 미치는지 정량화함
  3. forward pass 값을 저장해야 backward pass에서 사용할 수 있음

댓글남기기