[CS224N] Lecture 3  - Backprop and Neural Networks / 역전파, 순전파, 신경망 분류기


학습목표

(1) 신경망을 훈련시키기 위해 어떻게 수동으로 gradient를 계산할까

(2) back propagation(역전파 알고리즘)

~미리보기~

Back propagation:
계산 그래프(computation graph)를 따라 chain rule을 재귀적으로적용하는 과정 중 하나.
Forward Pass에서 저장한 중간 값을 사용하여, ouput Layer부터 input Layer 방향으로 기울기를 계산
이 기울기는 가중치 업데이트에 사용

Back propagation 에서의 기울기 계산은 

[downstream gradient] = [upstream gradient] x [local gradient]
downstream gradient: 현재 노드의 기울기
upstream gradient:  이전(상류) 노드로부터 전달받은 기울기
local gradient: 현재 노드에서 계산된 기울기

 

---------------------------------------

Forward Pass
정의: 연산의 결과를 계산하고 중간 값을 저장하는 과정
입력 데이터를 각 층(layer)을 통해 전달하여 최종 출력을 계산
이 과정에서 각 층의 중간 출력 값을 저장

 

NER(Named Entity Recognition)이란? 

위의 문장에서 Paris는 Person이지만  아래 문장에서는 Location이다

사전에 없는 단어(패리스 힐튼 등) 가 있기 때문에 사전만의 단어로는 문장 해석을 해결할 순 없다.

context를 사용하여 이름을 가진 개체를 인식해야하는데, 신경망으로 이를 어떻게 해결할 수 있을까?

Simple NER: Window classification using binary logistic Classifier

  • 각 단어를 이웃 단어들의 context winodw 안에서 분류
  • 손으로 라벨링된 데이터를 사용하여 Logistic Classifier 훈련시켜서 각 클래스에 대해 중심단어 (YES/NO)로 분류하기 ⇒ 실제로는 다중 클래스 SOFTMAX를 사용하지만 강의에선 간단하게 ~

EX)

  • 문맥 길이 2인 문장에서 "Paris"를 위치 기반으로 분류하기
  • 문장: "the museums in Paris are amazing to see."

window 안의 단어 벡터들을 결합하여 입력 벡터를 만든다.

결과는

  • To classifier all words: 모든 단어를 classifier하기 위해 문장의 각 단어에 대해 vector를 중심으로 classifier 실행.

 

 

 

 

 

NER: Binary classification for center word being location 

  • 손실 함수 Jt(θ)=σ(s)=11+e−8​

단어의 위치 확률, σ는 sigmoid

  • sigmoid는 negative sampling과 같은 logistic transform
  • 점수 계산
  • 은닉층 벡터 h
  • 입력 벡터 x (5차원)

문맥 창에서 각 단어의 벡터들로 구성

입력 벡터가 은닉층을 거쳐 최종 출력층으로 전달

 

 

 

손실 함수와 기울기 하강법

1이면 위치, 0이면 위치가 아님

  • 그러나 실제로 Classifier는 0.9 와 같은 숫자를 return한다.
  • 예측된 확률 값(0.9)과 실제 값(1 또는 0) 사이의 차이를 손실 함수로 계산

이 경우 거리 공식 사용

  • Loss=(예측값−실제값)2

기울기 하강법을 사용하여 파라미터를 업데이트 (손실을 줄이기 위해 파라미터를 조정)

  • θ는 손실 함수의 기울기 방향의 반대 방향으로 조정 - θ는 파라미터, α: 학습률, ∇θLoss: 손실 함수의 기울기

Gradient Computing

  • Matrix calculus(행렬 미적분)
  • 기울기

입력값 x에서의 작은 변화가 출력값에 미치는 영향을 도함수를 통해 알 수 있음

입력의 작은 변화가 출력에 미치는 영향

 

x=1일 때.

변화량≈3×(입력의작은변화)

  • x=1 에서 작은 변화를 주면 출력은 약 3배.
  • 예를 들어, x=1에서 1.01로 변경하면, 1.013≈1.03

x=4일 때.

변화량≈48×(입력의작은변화)

x=4 에서 작은 변화를 주면 출력은 약 48배.

  • 예를 들어, x=4에서 4.01로 변경하면, 4.013≈64.48
  • 함수 정의

input : n개

output: 1개

  • 기울기 벡터(gradient):

함수의 기울기는 각 입력에 대한 편미분(partial derivatives)로 구성된 vector

기울기 벡터함수 f의 각 입력 변수에 대한 편미분으로 구성

각 요소는 하나의 변수에 대한 함수의 단순 미분처럼 계산

이를 각각의 input으로 편미분하면

신경망에서의 적용

  • 신경망에서 사용하는 기울기는 각 층의 가중치와 편향에 대한 편미분으로 구성
  • 학습 과정에서 Back propagation 를 통해 계산

Neural Networks 에서 Back propagation(역전파) 를 통해 기울기를 계산하기

 

Chain Rule

복합 함수의 미분을 계산하는 방법으로, 역전파 과정에서 사용

각 노드에서의 gradient 는 해당 노드의 output gradient와 gradient에 대한 미분을 곱하여 계산

  • 두 함수의 합성에서 미분을 계산
  • 두 함수의 도함수를 곱하는 것
  • one - variable function Multiply derivatives

chain rule 적용

벡터와 행렬의 경우

  • Jacobian martrix 사용

w: 행렬, x: 입력 벡터, b: 편향 벡터

비선형 활성화 함수 f를 적용

  • chain rule 적용

h에 대한 x의 편미분

h에 대한 z의 편미분 * x의 편미분

  • jacobian martix

z=Wx+b이므로 W는 상수 행렬

Nonlinearities(비선형성)

  • Jacobian Elementwise activation Function
  • 활성화 함수와 벡터

비선형성을 도입하기 위해 벡터를 활성화 함수 f (예: 시그모이드 함수)에 통과

  • Jacobian 행렬 정의

h에 대한 z의 Jacobian 행렬은 각 출력 hi에 대한 각 입력 zj의 편미분으로 구성

  • 요소별 편미분

로지스틱 함수의 단변수 미분을 얻게 된

입력이 출력에 영향을 미치지 않으므로 0을 얻는다.

  • diagonal matrix (대각 행렬)구성 ⇒ 도함수가 대각선에 있음

대각선 요소: f′(zi) 로 구성

나머지 요소: 0

Jacobians

  • Wx+b를 x에 대해 편미분

W: 가중치 행렬, x: 입력 벡터, b: 편향 벡터

⇒ 결과적으로, x에 대한 편미분은 행렬 W

이는 단변수 미적분에서 ax+b를 x에 대해 미분하면 a가 되는 것과 유사

  • Wx+b를 b에 대해 편미분
  • 이는 단변수 미적분에서 상수 항을 미분하면 1이 되는 것과 유사

u와 h의 내적 uThu에 대해 편미분

u와 h: vector u에 대한 편미분은 h의 전치 행렬 hT

역전파 계산

원래는 손실함수 Jt를 계산해야 하지만, 간단하게 score함수의 gradient를 계산

(1) 식을 단순화하기

z = Wx + b로 치환

(2) Jacobian 행렬 작성하기

(1) s를 h로 미분

(2) h를 z로 미분

(3) z를 b로 미분

모두 곱하면 최종적으로 s를 b로 미분한 값

Jacobians 헤더 확인

결과

모든 파라미터에 대해서 역전파를 수행하여 파라미터 값들을 업데이트해야함.

W에 대해 미분: S를 w로 미분하면…?

파란색: 델타

델타는 오류 신호. 편도함수를 계산하는 매개변수

델타 값은 한 번만 계산하여 효율성을 증가

Shape Convention

  • 행렬 W= n×m 형태
  • 행렬 W의 모든 요소에 대한 n x m개의 요소를 가진

1×nm 형태의 Jacobian martrix 생성

그러나,

해당 식을 계산하기 힘듬 ⇒ 실제로 기울기의 형상은 매개변수의 형상과 동일하게 유지하는 것이 편리

따라서,

∂s∂W=n∗m

δ: Local error signal ∂s∂z

x: local input signal

z = Wx + b이므로,

38분

흠 왜 세타에 T제곱일까

그림 예시에서, W23은 z3에만 기여

z1은 신경도 안 씀

  • 편미분 계산하기

zi​의Wij​에대한편미분을계산할때,

Wij⋅xij+bi형태가 됨

의 모든 항에 대해 Wij를 편미분할 때,

Wij가 포함된 항 빼고

전~부 모든 항의 편미분은 0

따라서, Wij에 대한 편미분은 xj

항의 편미분 a에 대한 ax의 편미분과 같음

답은 Xj

 

왜 신경망의 기울기를 계산할 때 transpose (전치행렬)을 사용하나?

  • 차원 맞추기
  • 결과 행렬

이렇게 하면 차원이 맞아 떨어진다

입력의 각 요소가 출력의 각 요소로 가는 방식에서

외적 행렬을 얻기 위해 형상 규칙을 사용

Jacobian vs Shape Convention

위의 식은 row vector이다

  • 하지만, shape convention에 따르면, gradient는 column vector이어야한다.
  • b가 column vector이기 때문

Jacobian vs Shape Convention

jacobian: 미분 계산이 쉽다

shape convention: SGD Stochastic Gradient Descent 구현이 유용

⇒ 기울기가 행렬과 같은 shape이므로, 기울기 업데이트가 쉬움

기울기 업데이트를 할 때 계산의 일관성을 유지할 수 있음.

그러나 실제로는 두 가지 모두 필요함

  • 과제는 shape covention으로~!

신경망에서 기울기를 계산할 때 어떤 형식을 따를까

1) Jacobian 형식을 최대한 사용한 후, 마지막에 Shape Convention

2) Always Shape Convention

  • 조금 더 해킹적일 수 있지만, 차원을 맞추기 위해 언제 transpose하거나 reshape해야 하는지 확인
  • 하지만 Gradien Shape이 항상 파라미터의 Shape과 같아야 함
  • θ( 오차 메시지) 가 항상 해당 은닉층과 같은 차원을 가진다는 점을 사용해 해결할 수 있음.

⇒ 뉴런 수와 같은 차원. 은닉층에 5개의 뉴런이 있다면, θθ도 5차원 벡터

 

 

 

Back propagation

미분을 취하고 (일반화된, 다변수, 혹은 행렬 Chain Rule을 사용하는 것

 

계산을 최소화하기 위해 상위 층에서 계산된 미분을 하위 층의 미분 계산에 재사용하는 것

Computation Graph

계산 그래프는 신경망의 연산을 tree 형태로 표현하며, 일반적인 경우에는 방향성 그래프로 나타낸다

 

 

  • 순전파 한 후, 화살표의 방향, gradient을 반대로 바꿔서 역전파를 진행
  • b, W, u와 같은 다양한 파라미터에 대해 gradient 를 전달.
  • 이런 그래디언트를 사용하여 stochastic gradient descent을 통해 b와 W의 값을 변경
  • 순전파와 역전파를 반복하며 신경망 학습 진행

------------------------------------------------------------------------------------------------

Forward Propagation (순전파)

  • 주어진 입력값을 통해 연산을 순차적으로 진행하여 최종 출력값을 구하는 과정
  • 컴파일러가 수식을 계산하는 방식과 유사

Back propagation (역전파)

  • 계산 그래프를 통해 gradient를 역방향으로 전파하여 모델의 매개변수들을 업데이트하는 과정
  • 손실 함수의 기울기를 계산하고 매개변수를 업데이트하여 손실을 최소화하는 역할을 한다.
  • 순전파 (Forward Propagation):
  • 역전파 (Backpropagation):