[CS224N] Lecture 4: Back Propagation and Computation Graphs

Tobig's 15&16 Text Seminar·2021년 11월 8일
0

CS224N Review

목록 보기
4/14
post-thumbnail

작성자 : 16기 이승주

1. Matrix gradients for Neural Net

(1) Derivative wrt a weight matrix

Neural Network 과정

  • FeedForward : input vector가 weight matrix와 곱해져서, output vector를 생성한다.
  • BackPropagation : output vector를 weight matrix 에 대해 미분. FeedForward 과정을 통해 나온 predict 값과 실제 값을 통해, error signal vector를 만들고, Chain Rule을 이용해 가중치를 업데이트한다.

  • Chain rule: 연쇄법칙으로 합성함수의 미분법을 의미한다. Neural Network에서는 이러한 합성함수의 미분법인 chain rule을 이용하여 최종 scalar 값을 weight로 미분해가며 가중치를 업데이트 하는 방식으로 학습이 진행된다.

  • Weight matrix의 미분은 함수의 연쇄법칙으로 이뤄져 있다.
    위 그림은 지난 시간에 배운 NER 모델이며 input을 받아 hidden layer을 거쳐 하나의 스칼라 값이 나오게 한다. 스칼라 값 s을 weight로 미분을 하고자 할때 이것 또한 합성함수의 미분 형식을 그대로 따른다.

(2) Deriving gradients : Tips

  • Tip 1 : 변수를 잘 정의하고 차원을 계속 숙지한다. (각 성분에 대해 미분을 할때 weight matrix의 차원을 잘 숙지해야 계산이 어렵지 않음)
  • Tip 2 : 연쇄 법칙을 잘 알고 사용한다.
  • Tip 3 : 마지막 softmax 값에 대해 correct class / incorrect clas를 따로따로 미분해준다.
  • Tip 4 : 행렬 미분 방법이 헷갈린다면 성분 별 부분 미분을 연습할 것.
  • Tip 5 : Shape convention을 이용하자. Hidden layer에 도착하는 에러 메세지 𝛿는 그 은닉층의 차원과 같다.

Backpropagation 과정에서 미분 계산 시, 도움이 되는 팁은 위와 같다.

(3) Deriving gradients wrt words for window model

NLP에서 Word들에 대해서는 어떻게 미분이 적용되는가?

각각의 word들은 고유의 vector 값을 가지며 이 벡터들을 window 단위로 넘겨준다.
위 그림에서 예시로 5개의 단어가 있고 각 단어는 d차원의 벡터가 된다. 따라서 5xd 차원의 word window vector이며 window 단위로 Neural Network의 FeedForward, Backpropagation 과정을 거쳐 수행할 task에 맞춰 가중치를 업데이트 하며 각 단어 벡터들이 업데이트 된다.
이 과정을 Downstream Task라 한다.

(4) A pitfall when retraining word vectors

word vector Retraining 단점

특정 task를 위해 word vector를 Retraining 시키는 것은 항상 좋은 것은 아니다.

예로 들어 TV, telly, television 와 같은 비슷한 의미의 단어들을 워드 임베딩을 한다면 vector space 상의 세 단어는 가깝게 위치한다.
하지만 만약 훈련집합에 TV, telly가 있고 검증집합에 television이 있을 때, retraining하면 TV와 telly는 가중치를 업데이트하며 위치가 변한다.

그러나 television은 가중치가 업데이트 되지 못하고 다른 의미를 지닌 단어로 분류가 된다.
각각의 단어는 그래디언트를 받아 업데이트가 된다.
훈련집합에 있는 단어는 업데이트했기 때문에 결정경계면이 바뀌었지만 검증집합에 있는 단어는 결정경계면에 의해서 제대로 분류가 되지 않음을 확인할 수 있다.

대부분의 경우 Pre-trained된 모델을 사용하자!

  • Pre-trained 모델
    사전에 학습된 모델로 방대한 데이터 셋에 이미 학습이 되어있는 모델.(Word2Vec, Glove 등.)
    훈련 데이터 셋 포함의 유무와 관계없이 단어 간의 일정 수준 유사 관계가 형성. But, 데이터의 양이 100만개 이상이라면, 처음부터 학습시켜도 괜찮음.

  • Retraining word vector (Fine Tuning)
    Pretrained된 모델을 기반으로 목적 task에 맞게 변형하고 모델 전체를 업데이트 하여 학습을 업데이트 하는 방법.

  • Training dataset이 적은 경우 (< 10만 개 )
    Pre-trained word vector 사용
  • Training dataset이 많은 경우 (> 100만 개)
    word vector 학습 권장 (fine-tuning 하기)

2. Computation Graphs and Backpropagation

(1) Computation Graph이란?

"계산 그래프"를 의미한다. 그래프는 여러개의 노드와 그 노드를 잇는 선으로 표현이 된다.

(2) Forward propagation

  • Forward Propagation
    계산 그래프의 왼쪽부터 차례대로 연산을 해서 결과값을 얻는 과정

  • Backpropagation
    Forward Propagation을 통해 얻어진 결과와 실제값을 비교해 계산된 오차를 미분하며 가중치를 업데이트 및 학습.

  • Backpropagation 과정에서 중요한 요소
    (1) Local Gradient 
    (2) Downstream Gradient

Downstream Gradient = Local Gradient * Upstream Gradient


하나의 input과 하나의 output으로 이루어진 single node 그래프.
Back propagation 과정을 위해 진행 과정에서 Upstream gradient와 Downstream gradient의 순서로 미분값을 계산해야 한다.

  1. Local gradient는 Forward Propagation 수행 시의 output을 input으로 미분한다.
  2. 그 다음 Downstream gradient는 Local gradient에 Upstream gradient을 곱하여 도출한다.

결론적으로 Chain Rule을 이용한 것과 같은 결과이다.

더 많은 Input이 있을 경우의 Back Propagation은 동일하게 Upstream gradient에 각각의 Input에 대한 Local gradient를 계산해 곱해주어 Back Propagation을 수행한다.

Backpropagation Gradient Flow

주요 연산에 대한 분해 과정은 아래와 같다. 대표적으로 곱셈, 덧셈, Max 연산에 대해 gradient가 어떻게 흐르는지 알아본다.

1. 곱셈 연산

  • 곱셈 : input값 서로 변경 후 upstream gradient과 곱해서 보낸다.

2. Max 연산

  • Max : 더 큰 input값으로 upstream gradient 보낸다.

3. 덧셈 연산

  • 덧셈 : upstream gradient를 보낸다.

따라서 결과는 위와 같다.

(3) Efficiency: compute all gradients at once

back propagation을 수행할 때 효율적으로 미분값을 얻는 방법

한번에 모든 변수의 미분을 계산하기 (Chain rule 이용)
각 노드의 미분 계산 값을 잘 저장해두었다가 원하는 계산 값을 계산하고자 할 때 chain rule에 값을 대입하며 빠르게 계산 수행하기.

(4) Computation Graph

big O() complexity

  • Compuation Graph.
    검정색 화살표는 순전파가 진행되는 과정이고
    보라색 화살표는 순전파를 통해 나온 최종 값을 바탕으로 오류를 전파하며 거꾸로 값을 업데이트 해가는 역전파과정이다.

  • big O() complexity
    순전파의 계산량은 각각의 Input들이 노드를 타고 연산을 거치며 최종 Scalar값까지 관여한다.
    역전파의 계산량은 Scalar 값으로 부터 순전파시 거쳐 지나갔던 노드를 지나며 Gradient를 구하게 됩니다. Local Gradient나 계산 방법 등의 연산을 잘 저장해두었다가 필요시에 활용하면 추가적인 연산이 필요가 없게된다.

따라서 순전파와 역전파의 시간복잡도는 동일하다.

(5) Gradient checking : Numeric Gradient

Gradient가 잘 계산되었는지에 대한 확인은 중요하다.
Gradient를 계산하는 방법에는 2가지가 존재한다.

  • Analytic Gradient(해석적 방법) : 이 강의의 주된 내용인 계산 그래프를 통한 연산시 활용되는 Chain Rule을 이용하여 Gradient를 계산하는 방식이다.
  • Numerical Gradient(수치적 방법) : 미분의 공식을 이용해 쉽게 Gradient 계산을 하는 방법이다. h에 아주 작은 값을 대입하여 순간 기울기를 구하는 방법이며 아주 일반적으로 Gradient를 잘 계산했는지 확인하는 방법이다.

Neural Network 과정에서는 Numerical Gradient 방법으로 연산을 진행하지 않는다. 쉽게 미분 값을 계산할 수 있지만 적용할 때 마다 𝑓를 계속해서 계산을 해주어야 해서 연산량이 매우 많다는 단점이 존재한다.
특정 weight 에 대한 Gradient가 잘 계산 되었는가를 확인하기 위한 용도로만 Numeric Gradient Check 방식을 활용한다.

3. Tips and Tricks for Neural Networks

(1) Regularization


손실함수만을 이용한 모델 학습은 training error는 줄어들지만 test error는 증가하는 Overfitting 발생한다.

  • 특정 Parameter를 크게 만들어주며 에러를 줄이는 것을 방지하기 위해 모델에 penalty 추가한다.
  • 손실함수에 θ를 증가시키는 규제항을 추가하며 Overfitting 방지.
  • 주로 R2 규제항을 많이 사용하며 feature들이 많을수록 효과적이다.
    일반화에 적합한 특성을 갖게 만드는 것이다.

(2) Vectorization

  • 반복문 사용보다 벡터와 행렬 연산 사용이 학습 시간의 효율성이 더 높다.

    word vector를 개별적으로 반복해서 실행하는 것 보다 한 개의 matrix 연산 사용이 학습 시간 감소에 도움이 된다. 이 과정을 vectorization 이라 부른다.

(3) Non-Linearities

  • ReLU는 딥러닝에서 제일 먼저 고려해야하는 비선형 함수이다.
    가장 간단하며서 좋은 성능을 낸다.
  • Leaky ReLU, Parametric ReLU 등 ReLU를 보완하고자 변형된 ReLU 함수들이 제안된다.

(4) Parameter Initialization

Neural net 학습 전 가중치를 초기화하는 과정이다. 학습 전 가중치를 초기화하여 Gradient Vanishing 이나 Gradient Exploding 현상을 방지한다.

  • parameter의 초기값은 Small Random Value이어야 한다.
    Hidden Layer와 Output의 Bias term은 0으로 초기값을 준다.
    다른 모든 Weight들은 Uniform distribution에서 임의로 sampling한다.
  • Xavier Initialization 방법도 자주 사용한다.
    previous layer size와 next layer size에 맞게 weight의 분산을 조절해주는 방식.

(5) Optimizers

적절한 Optimizer를 사용하여 최적 값을 찾아갑니다.

  • 보통 SGD를 사용해도 최적화 잘 된다. 하지만 더 좋은 값을 기대한다면 learning-rate를 튜닝하는 것이 필요하다.
  • 복잡한 신경망에서는 "Adaptive" Optimizers가 성능이 좋다.
  • "Adaptive" Optimizer는 상대적으로 업데이트 양을 계산하며 step size, parameter를 조절해가는 방식이다.
    (ex) Adagrad, RMSprop, Adam, SparseAdam...

(6) Learning Rates

학습시킬 때 적절한 learning rate를 설정하는 것이 중요하다.

  • 0.001 정도의 Learning Rate를 일반적으로 쓴다.
  • Learning Rate가 너무 크면 모델이 발산하고 너무 작으면 업데이트 양이 작아 학습이 느려진다.
  • 학습이 진행될수록 learning rate를 감소시키는 방법이 좋다.
  • Learning Rate Scheduling을 통해 상황에 따라 변환시키며 학습 진행한다.
profile
2021 투빅스 15&16기 텍스트 세미나입니다.

3개의 댓글

comment-user-thumbnail
2021년 11월 8일

16기 주지훈
Downstream Task

  • 각 단어는 d차원의 벡터이고, window는 (단어수)*d 차원이다.
  • window 단위로 순전파, 역전파 과정을 거쳐 가중치를 업데이트
  • 각 단어 벡터들이 업데이트 된다.

retraining

  • retraining이 항상 좋은 결과만 내는 것은 아니다.
  • train set이 10만 개보다 적으면 pre_trained word vector, 100만 개보다 많으면 fine tuning

Backpropagation Gradient Flow

  • 곱셈: input 값 변경 후 upstream gradient와 곱해서 보낸다.
  • Max: 더 큰 input 값으로 upstream gradient 보낸다.
  • 덧셈: upstream gradient를 보낸다.

Tips and Tricks for Neural Networks

  • Regularization
  • Vectorization: matrix 연산이 효율성 더 높다.
  • non-linearities: ReLU 함수 등
  • parameter initialization
  • optimizer
  • learning rate

강의를 들을 때에는 역전파 연산 분해 과정이 잘 이해가 가지 않았는데, 쉽게 설명해주셔서 이해할 수 있었습니다. 감사합니다 :)

답글 달기

15기 김현지

  • Downstream Task: NLP에서 Word들에 대해, 각각 word vector들은 window 단위로 FeedForward, Backpropagation을 거쳐 가중치 업데이트를 하며 단어 벡터들이 업데이트 된다.
  • 특정 task를 위해 word vector를 Retraining 시키는 것은 항상 좋은 것은 아니다.
    ⇒ Pre-trained된 모델을 사용하거나 Pre-trained된 모델을 Fine tunning하여 사용하자.
  • 순전파에서는 각 Input들이 노드를 타고 연산을 거치며 최종 Scalar값까지 관여한다. 역전파는 Scalar 값으로부터 반대로 노드를 지나며 Gradient를 구하게 된다. 이때 Local gradient의 연산과 output의 연산을 잘 저장한 후 필요시에 사용하면 추가적인 연산이 필요없게 된다.
    ⇒ 순전파와 역전파의 시간복잡도는 동일하다.

Tips and Tricks for Neural Networks

  • Regularization
    • 손실함수에 θ\theta를 증가시키는 규제항을 추가하여 Overfitting을 방지한다.
    • R2 규제항을 많이 사용하며 feature들이 많을 수록 효과적이다.
    • 일반화에 적합한 특성을 갖게 만드는 것이다.
  • Vectorization
    • word vector를 개별적으로 반복해서 실행하는 것보다 한 개의 matrix 연산을 사용하는 것이 시간 효율적이다.
  • Non-Linearities
  • Parameter Initialization
    • 학습 전 가중치를 초기화하여 Gradient Vanishing이나 Gradient Exploding 현상을 방지한다.
  • Optimizers
    • 보통 SGD를 사용해도 잘 최적화 된다.
    • 복잡한 신경망에서는 Adative Optimizers가 성능이 좋다.
    • Adative Optimizers: 대적으로 업데이트 양을 계산하며 step size, parameter를 조절해가는 방식
  • Learning Rates
    • 0.001 정도의 Learning Rate를 일반적으로 쓴다.
    • Learning Rate가 너무 크면 모델이 발산하고 너무 작으면 학습이 느려진다.
    • 학습이 진행될수록 learning rate를 감소시키는 방법이 좋다.

backpropagation의 기초적인 내용을 NLP와 연관지어 공부해볼 수 있는 시간이었습니다. Neural Networks 모델링에 대한 팁과 트릭들도 잘 정리해주셔서 너무 유익한 시간이었습니다. 감사합니다~

답글 달기
comment-user-thumbnail
2021년 11월 11일

Matrix gradients for neural net
Word vector는 window 단위로 구분이 되며, feedword, backpropagation에 의해서 업데이트가 된다. 이때, 특정 task를 수행 하기 위해서 word vector를 retraining을 하는 것은 좋지 않다. 이를 위해서 기존의 pre-training 된 모델을 사용해서 단어를 embedding하면 word간의 의미를 보다 풍부하게 담을 수 있다.

Computation Graphs and Backpropagation
Local gradient는 forward의 output을 input으로 미분한 것이다.
Downstream gradient는 Local gradient에 Upstream gradient를 곱하여 만든다.

Tips and Tricks for Neural Networks
Overfitting을 줄이기 위해서 Loss function에 regularization을 더해준다.
Vectorization을 통해서 개별적 word vector를 묶어 연산 학습 시간을 감소시킨다.
Gradient vanishing 문제가 있는 relu함수를 다양한 조건을 통해 변형한다.
Optimizers를 통해서 Global minimum에 도달하고자 한다.

답글 달기