[Deep Learning] Deep Learning Basic, Optimization
딥러닝 기본
딥러닝 소개
딥러닝에 대한 기본적인 용어와 딥러닝의 역사를 알아보자.
딥러닝 기본 용어
- data - 모델 훈련에 필요한 데이터 (풀고자 하는 문제에 의존적)
- model - 데이터를 어떻게 변형 시키는 모델
- loss - 모델을 학습에 나쁜 정도를 측정하는 것.
- algorithm - loss 손실을 최소화 시키는 파라미터를 맞추는것.
Historical Review
Denny Britz 논문 참고 Deep Learning’s Most Important Ideas - A Brief Historical Review
AlexNet(2012)
- 딥러닝을 이용해 최초 머신러닝 대회 우승(이미지넷 대회)
- 이전에는 SVM등 머신러닝 방법이 대회를 휩쓸었다.
DQN(2013)
- 알파고를 만든 회사(딥 마인드)에서 개발.
- Q-Learning 강화 학습 방법론을 DL에 접목시켰다.
Encoder / Decoder(2014)
- 다른 언어로 되어있는 문장이 또 다른 언어의 연속으로 결과를 출력(번역 문제에서)
- Sequence to Sequence 모델
- 이후 기계 번역의 트렌드가 바뀌엇다.
Adam Optimizer(2014)
- 학습시키려고 하는 모델에 대부분 사용된다.
- 다른것들 보다 결과가 잘나와서 그냥 사용함…
GAN(Generative Adversarial Network, 2015)
- 이미지분야에서 많이 사용된다.
- 논문의 감사문구에 술집언급..(~술집에서 술이 너무 맛이없어서 연구가 생각나 개발했다고함~)
ResNet (Residual Networks, 2015)
- 이후 딥러닝의 딥러닝이 가능해졌다.
- 이전 레이어를 많이 쌓게되면 테스트에서 성능이 안나왔지만 이 ResNet이 개발 된후 레이어를 많이 쌓았을때 성능을 내게 했다.
Transformer(2017)
- “Attention Is All You Need” 의 논문 제목을 사용했다.
- RNN을 모두 대체했고, CV쪽도 넘어 보고 있다.
BERT (find-tuned NLP models, 2018)
- Bidirectional Encoder Representations from Transformers의 약자
- language 모델
- 데이터가 부족할 때, 적절한 예제의 데이터의 훈련을 통해 결과를 내고싶은 데이터에 적용하여 사용함.
BIG Language Models(GPT-X, 2019)
- BERT의 끝판왕
- language 모델, 엄청난 파라미터를 사용하기 때문에 BIG 을 사용.
- 175billion 파라미터를 사용
Self Supervised learning(2020)
- SimCLR(구글)
- 분류 문제에서 학습데이터가 한정적일때, 학습데이터 이외에 label이 없는 데이터도 학습에 함께 사용한다.
뉴럴 네트워크 - MLP(Multi-Layer Perceptron)
신경망의 정의와 Deep Neural Networks에 대해 알아보자
Neural Networks
- 포유류 뇌의 신경망을 모방하는 컴퓨터 시스템이다.
Multi-Layer Perceptron(MLP)
- 네트워크에 히든 레이어가 숨어 있다. (더 좋은 훈련을 위해)
loss function
상황에 맞게 사용해야한다.
- MSE(min squared error) - 최소 제곱근 오차, 회귀문제에 사용
- CE(cross entropy) - 분류문제에 사용하며, 해당하는 출력값의 확률을 증가시킨다는 것.
- MLE(Maximum Likelihood Estimation) - 확률적인 문제를 해결하고 싶을때(ex 얼굴 이미지를 보고 나이를 맞추고 싶다.)
Optimizer
- Gradient Descent - loss function 의 local 미니엄을 반복적으로 찾는 기본적인 optimization algorithm 이다.
여러 용어들을 알아보자.
Generalization
- Training error 가 최소화 됬다고 해서 Test error 가 적다고 할 수 없다.
- Training error와 Test error의 차이를(일반화 성능)
Underfitting vs Overfitting
- Overfitting - 학습데이터는 다 맞지만 Test 데이터에는 결과가 적합하지않다.
- Underfitting - 너무 간단하거나 훈련을 조금 시켜서 학습 데이터도 제대로 맞추지 못하는 것.
Cross-validation
- 훈련을 최적화 하기 위해 검증 데이터를 따로 사용하는데, 학습 데이터와, 검증 데이터를 교차로 사용하여 훈련 시킨다.
- 12345, 12345, 처음것은 1번 데이터를 검증, 2345를 훈련데이터 집단으로 사용하고, 두번째는 2번 데이터를 검증, 1345는 훈련데이터로 사용한다.
Bias and Variance
- High variance 는 오버피팅이 될 확률이 높다.
Bias and Variance Tradeoff
- 학습 데이터에 노이즈가 껴 있다면, 노이즈가 있는 타겟 데이터를 최소화 하는 것은 세가지로 나눌 수 있는데 bias, variance, noise이며 이중 한가지를 바꾸면 다른 것이 커지는 tradeoff 이다.
- t 는 타겟, \(\hat{f}\) 는 뉴럴 네트워크의 출력 값이다.
- bias 와 variance 를 동시에 줄이는 것은 힘들다
Bootstrapping
- 전체의 데이터 중 일부의 데이터를 사용하여 여러 모델을 만들고, 여러개으 모델을 가지고 여러가지를 하겠다.
Bagging vs Boosting
- Bagging(Bootstrapping aggregating)
- 부트스트래핑으로 훈련된 여러 모델
- 앙상블은 배깅에 속할때가 있다.
- Boosting
- 일부 데이터만 사용하여 훈련시킨 모델을 가지고 나머지 데이터의 결과를 보고, 좋지않은 결과를 보여준 데이터를 좋은 결과가 나오는 모델을 따로 만들어 합쳐 strong model을 만든다.
Gradient Descent Methods
- Stochastic gradient Descent - 하나의 샘플에 대해 gradient를 구해 업데이트를 반복한다.
- Mini-batch gradient descent - 데이터의 일부만 사용하여 gradient를 업데이트 한다.
- Batch gradient Descent - 전체 데이터의 gradient를 업데이트 한다.
Batch-size Matters
- 큰 배치를 사용하게 되면 sharp minimizer에 도달하게 된다.
- 작은 배치를 사용하게 되면 flat minimizer에 도달하게 된다.
- 위 그림에서 flat minimizer와 sharp minimizer를 보면 flat minimizer는 testing 에서 별로 차이가 큰 것 처럼 보이지 않지만(일반화 성능이 높다), sharp minimizer는 Training과 testing에서의 갭이 클수 있다.(일번화 성능이 낮다.)
- 결과적으로 작은 배치를 사용하는것이 좋은 성능을 낸다.
Gradient Descent
\(W_{t+1}\leftarrow W_t - \eta g_t\)
- step size를 정하는 것이 너무 힘들다.
Momentum
\(a_{t+1}\leftarrow\beta a_{t} + g_t\)
\(W_{t+1}\leftarrow W_t - \eta a_{t+1}\)
- 더 빨리 학습을 시켜주기 위해
- beta가 모멘텀을 잡게 되고 gt를 이용해 계산한 accumulation 을 이용해 다음을 업데이트 시켜준다.
NAG (Nesterov Accelerated Gradient)
\(a_{t+1}\leftarrow\beta a_{t} + \nabla(W_t-\eta\beta a_t)\)
\(W_{t+1}\leftarrow W_t - \eta a_{t+1}\)
- \(\nabla(W_t-\eta\beta a_t)\) 부분은 Lookahead gradient를 계산한다.
- local minimum을 빠르게 찾을 수 있다.
Adagrad
\(W_{t+1} = W_t - \frac{\eta}{\sqrt{G_t+\epsilon}}g_t\)
- 지금까지 parameter가 많이 변했는지, 조금 변했는지 확인한다.
- 많이 변한 파라미터는 적게 변화시키고, 조금 변했다면 많이 파라미터를 변화 시킨다.
- 변한 기준을 위 식의 \(G_t\)로 표현한다.
- 오랜 학습을 하면 \(G_t\) 가 점점 커져 학습이 멈춰지는 현상이 발생한다.
Adadelta
\(G_t = \gamma G{t-1} + (1-\gamma)g_{t}^{2}\)
\(W_{t+1} = W_t - \frac{\sqrt{H_{t-1}+\epsilon}}{\sqrt{G_t + \epsilon}}g_t\)
\(H_t = \gamma H_{t-1} + (1-\gamma)(\nabla W_t)^2\)
- 위의 \(G_t\) 가 커져 학습이 멈춰지는 걸 막기위한 확장 판이다.
- G와 H를 업데이트 통해 문제를 해결함.
- 특이점은 learning rate가 없다.
- 많이 사용안함
RMSprop
\(G_t = \gamma G{t-1} + (1-\gamma)g_t^2\)
\(W_{t+1} = W_t - \frac{\eta}{\sqrt{G_t +\epsilon}}g_t\)
- Geoff Hinton이 논문으로 출판되진 않았지만 강의에서 그냥 말했는데 성능이 좋았음
- \(\eta\)라는 스텝사이즈를 추가하였다.
Adam
\(m_t = \beta_1m_{t=1} + (1-\beta_1)g_t\)
\(v_t = \beta_2v_{t-1} + (1-\beta_2)g_t^2\)
\(W_{t+1} = W_t - \frac{\eta}{\sqrt{v_t+\epsilon}}\frac{\sqrt{1-\beta_2^t}}{1-b_1^t}m_t\)
- 가장 많이 사용하는 Optimizer
- 모멘텀과 adaptive learning rate 를 합쳐 적용해 사용.
Regularization
학습 데이터에만 잘 작동하는게 아니라 테스트 데이터에도 잘 작동하도록 하게 인위적으로 훈련을 방해하는 것.
Early stopping
- validation data를 사용하여 성능이 향상되지않는 곳에서 정지 시킨다.
Parameter Norm Penalty
- 함수의 공간에서 함수를 최대한 부드러운 함수로 보자.(부드러운 함수일 수록 일반화 성능이 높을 것이다.)
Data Augmentation
- 더 많은 데이터는 항상 좋다
- 기존 훈련 데이터의 변화를 통해 데이터의 양을 크게 한다.
- ex) 강아지 사진을 옆으로 돌린 사진 데이터는 늘어나지만 라벨은 그대로 강아지이다.
Noise Robustness
- 입력데이터에 인위적으로 노이즈와 weights를 더해준다.
Label Smoothing
- 학습데이터 두개를 랜덤으로 뽑아 혼합하여 데이터를 추가한다.
- CutMix의 경우는 라벨을 섞고, 이미지도 섞어 버린 상태에서 데이터를 추가한다.
Dropout
- 뉴럴 네트워크의 일부 웨이트를 0으로 바꾸는 것이다.
Batch Normalization
- 평균과 표준편차를 계산하여 각 레이어를 표준화 한다.
- 각 레이어의 값들을 평균을 빼주고 표준편차를 나눠준다.
Comments