작성자 : 16기 이승주
Chain rule: 연쇄법칙으로 합성함수의 미분법을 의미한다. Neural Network에서는 이러한 합성함수의 미분법인 chain rule을 이용하여 최종 scalar 값을 weight로 미분해가며 가중치를 업데이트 하는 방식으로 학습이 진행된다.
Weight matrix의 미분은 함수의 연쇄법칙으로 이뤄져 있다.
위 그림은 지난 시간에 배운 NER 모델이며 input을 받아 hidden layer을 거쳐 하나의 스칼라 값이 나오게 한다. 스칼라 값 s을 weight로 미분을 하고자 할때 이것 또한 합성함수의 미분 형식을 그대로 따른다.
- Tip 1 : 변수를 잘 정의하고 차원을 계속 숙지한다. (각 성분에 대해 미분을 할때 weight matrix의 차원을 잘 숙지해야 계산이 어렵지 않음)
- Tip 2 : 연쇄 법칙을 잘 알고 사용한다.
- Tip 3 : 마지막 softmax 값에 대해 correct class / incorrect clas를 따로따로 미분해준다.
- Tip 4 : 행렬 미분 방법이 헷갈린다면 성분 별 부분 미분을 연습할 것.
- Tip 5 : Shape convention을 이용하자. Hidden layer에 도착하는 에러 메세지 𝛿는 그 은닉층의 차원과 같다.
Backpropagation 과정에서 미분 계산 시, 도움이 되는 팁은 위와 같다.
각각의 word들은 고유의 vector 값을 가지며 이 벡터들을 window 단위로 넘겨준다.
위 그림에서 예시로 5개의 단어가 있고 각 단어는 d차원의 벡터가 된다. 따라서 5xd 차원의 word window vector이며 window 단위로 Neural Network의 FeedForward, Backpropagation 과정을 거쳐 수행할 task에 맞춰 가중치를 업데이트 하며 각 단어 벡터들이 업데이트 된다.
이 과정을 Downstream Task라 한다.
특정 task를 위해 word vector를 Retraining 시키는 것은 항상 좋은 것은 아니다.
예로 들어 TV, telly, television 와 같은 비슷한 의미의 단어들을 워드 임베딩을 한다면 vector space 상의 세 단어는 가깝게 위치한다.
하지만 만약 훈련집합에 TV, telly가 있고 검증집합에 television이 있을 때, retraining하면 TV와 telly는 가중치를 업데이트하며 위치가 변한다.
그러나 television은 가중치가 업데이트 되지 못하고 다른 의미를 지닌 단어로 분류가 된다.
각각의 단어는 그래디언트를 받아 업데이트가 된다.
훈련집합에 있는 단어는 업데이트했기 때문에 결정경계면이 바뀌었지만 검증집합에 있는 단어는 결정경계면에 의해서 제대로 분류가 되지 않음을 확인할 수 있다.
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 하기)
"계산 그래프"를 의미한다. 그래프는 여러개의 노드와 그 노드를 잇는 선으로 표현이 된다.
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의 순서로 미분값을 계산해야 한다.
결론적으로 Chain Rule을 이용한 것과 같은 결과이다.
더 많은 Input이 있을 경우의 Back Propagation은 동일하게 Upstream gradient에 각각의 Input에 대한 Local gradient를 계산해 곱해주어 Back Propagation을 수행한다.
주요 연산에 대한 분해 과정은 아래와 같다. 대표적으로 곱셈, 덧셈, Max 연산에 대해 gradient가 어떻게 흐르는지 알아본다.
따라서 결과는 위와 같다.
한번에 모든 변수의 미분을 계산하기 (Chain rule 이용)
각 노드의 미분 계산 값을 잘 저장해두었다가 원하는 계산 값을 계산하고자 할 때 chain rule에 값을 대입하며 빠르게 계산 수행하기.
Compuation Graph.
검정색 화살표는 순전파가 진행되는 과정이고
보라색 화살표는 순전파를 통해 나온 최종 값을 바탕으로 오류를 전파하며 거꾸로 값을 업데이트 해가는 역전파과정이다.
big O() complexity
순전파의 계산량은 각각의 Input들이 노드를 타고 연산을 거치며 최종 Scalar값까지 관여한다.
역전파의 계산량은 Scalar 값으로 부터 순전파시 거쳐 지나갔던 노드를 지나며 Gradient를 구하게 됩니다. Local Gradient나 계산 방법 등의 연산을 잘 저장해두었다가 필요시에 활용하면 추가적인 연산이 필요가 없게된다.
따라서 순전파와 역전파의 시간복잡도는 동일하다.
Gradient가 잘 계산되었는지에 대한 확인은 중요하다.
Gradient를 계산하는 방법에는 2가지가 존재한다.
Neural Network 과정에서는 Numerical Gradient 방법으로 연산을 진행하지 않는다. 쉽게 미분 값을 계산할 수 있지만 적용할 때 마다 𝑓를 계속해서 계산을 해주어야 해서 연산량이 매우 많다는 단점이 존재한다.
특정 weight 에 대한 Gradient가 잘 계산 되었는가를 확인하기 위한 용도로만 Numeric Gradient Check 방식을 활용한다.
손실함수만을 이용한 모델 학습은 training error는 줄어들지만 test error는 증가하는 Overfitting 발생한다.
- 특정 Parameter를 크게 만들어주며 에러를 줄이는 것을 방지하기 위해 모델에 penalty 추가한다.
- 손실함수에 θ를 증가시키는 규제항을 추가하며 Overfitting 방지.
- 주로 R2 규제항을 많이 사용하며 feature들이 많을수록 효과적이다.
일반화에 적합한 특성을 갖게 만드는 것이다.
word vector를 개별적으로 반복해서 실행하는 것 보다 한 개의 matrix 연산 사용이 학습 시간 감소에 도움이 된다. 이 과정을 vectorization 이라 부른다.
- ReLU는 딥러닝에서 제일 먼저 고려해야하는 비선형 함수이다.
가장 간단하며서 좋은 성능을 낸다.- Leaky ReLU, Parametric ReLU 등 ReLU를 보완하고자 변형된 ReLU 함수들이 제안된다.
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의 분산을 조절해주는 방식.
적절한 Optimizer를 사용하여 최적 값을 찾아갑니다.
- 보통 SGD를 사용해도 최적화 잘 된다. 하지만 더 좋은 값을 기대한다면 learning-rate를 튜닝하는 것이 필요하다.
- 복잡한 신경망에서는 "Adaptive" Optimizers가 성능이 좋다.
- "Adaptive" Optimizer는 상대적으로 업데이트 양을 계산하며 step size, parameter를 조절해가는 방식이다.
(ex) Adagrad, RMSprop, Adam, SparseAdam...
학습시킬 때 적절한 learning rate를 설정하는 것이 중요하다.
- 0.001 정도의 Learning Rate를 일반적으로 쓴다.
- Learning Rate가 너무 크면 모델이 발산하고 너무 작으면 업데이트 양이 작아 학습이 느려진다.
- 학습이 진행될수록 learning rate를 감소시키는 방법이 좋다.
- Learning Rate Scheduling을 통해 상황에 따라 변환시키며 학습 진행한다.
15기 김현지
backpropagation의 기초적인 내용을 NLP와 연관지어 공부해볼 수 있는 시간이었습니다. Neural Networks 모델링에 대한 팁과 트릭들도 잘 정리해주셔서 너무 유익한 시간이었습니다. 감사합니다~
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에 도달하고자 한다.
16기 주지훈
Downstream Task
retraining
Backpropagation Gradient Flow
Tips and Tricks for Neural Networks
강의를 들을 때에는 역전파 연산 분해 과정이 잘 이해가 가지 않았는데, 쉽게 설명해주셔서 이해할 수 있었습니다. 감사합니다 :)