본문 바로가기
math4ai/Machine Learning and Deep Learning

M4AI) Special Topics: MLDL Techniques

by 잼민ai 2024. 7. 31.
더보기

공부해야 하는 것들

  • CNN, RNN, LSTM, Transformer (NN milestones)
  • Bayes Net, Markov Chain, HMM (이걸 물어볼까..)
  • Learning Theory, Reinforcement Learning (이걸 물어볼까..2)
  • MLDL Techniques (GD/SGD, Activation, Scheduling, BatchNorm, ...

Gradient Descent & Stochastic Gradient Descent

원래 최적해의 general solution을 찾았다면 그 form을 이용해 바로 해를 구할 수도 있지만, non-convex optimization의 일부 해들은 general solution을 찾지 못하는 경우도 있고, 차원이 매우 클 경우 computationally expensive하기 때문에 gradient를 계산해서 local/global optimum을 찾는 것이 더 효율적일 때가 있음. 현재의 weight에 loss함수의 gradient를 더해주는 식으로 local/global optimum을 찾아가는 과정임!

 

근데 gradient descent는 모든 데이터샘플들을 활용해서 계산하는 것이기 때문에 느리기도 하고, 오히려 local optimum에 갇히는 경우가 많이 있다고 합니다.. 그래서 등장한 것이 stochastic gradient descent인데, 전체 데이터셋을 여러 개의 batch로 쪼개서 gradient descent를 계산해주는 방식이에요. 조금 더 빨리 Local/global optimum에 도달할 수 있다는 장점이 있고, local optimum에 갇혔을 경우 빠져나올 수 있는 여지 또한 있고, 마치 Bagging과 같은 효과를 내기 때문에 gradient descent보다는 global optimum으로 갈 가능성이 높다고 하는군요..

 

Activation

output 확률 계산을 해주는 함수입니다. 보통 시그모이드 함수를 많이 썼었는데요, gradient vanishing 문제, 즉 sigmoid의 양쪽 끝에서 그 gradient가 점점 0에 가까워지는 특징으로 인해 전체 weight의 gradient update가 느려지는 문제가 발생합니다. 이에 대한 해결책으로 ReLU 함수를 써요. 얘는 함수 특성상 양의 입력에 대해 output이 절대 음수이질 않아서($y=x\: \text{where }x>0$),, gradient vanishing 문제를 해결할 수 있다고 함.

 

LR Scheduling

보통은 weight update를 해줄 때, $\mathbf{w}^{i+1} =  \mathbf{w}^{i}-\alpha\nabla J(\mathbf{w})$처럼 $\alpha$만큼의 learning rate을 설정해줍니다. gradient 방향으로 weight를 얼마나 업데이트 해주어야 하는지를 결정하기 때문에 '적당한' 크기로 설정하는 것이 중요한데요, 그래서 lr scheduler를 씀! 우리는 이름에 "Ada-"가 들어간 애들 위주로 살펴보겠습니다.

  • AdaGrad: feature 별로 LR을 다르게 적용하는데, gradient의 second moment의 누적값을 이용합니다. 수식은 여기 참고: https://heytech.tistory.com/383 단점이 있다면.. 학습이 진행될수록 moving average의 값이 커져서 lr이 변하는 정도가 감소하여 학습이 매우 느려진다는 점?
  • RMSProp: 위에서는 단순 누적값이었다면, 여기서는 exponential moving average로 계산을 합니다. hyperparameter가 하나 추가되겠네요,, "가장 최근 time step에서의 기울기는 많이 반영하고 먼 과거의 time step에서의 기울기는 조금만 반영하는 점"을 특징으로 삼으면 될 것 같음: https://heytech.tistory.com/384
  • Momentum: '관성'을 이용해, 만약 local optimum에 있는 거라면 이전 time-step의 gradient를 반영해 빠져나올 수 있게끔 하자는 아이디어입니다. global optimum에 도달하면 최적점이기 때문에 이전 기울기가 커도 빠져나오기 어렵다는 거예요. https://heytech.tistory.com/382
  • AdaM: 제일 많이 쓰는 거 가틈; momentum + RMSprop인데, momentum과 second-moment gradient의 exponential moving average를 모두 활용하겠다는 의미임.

Batch normalization;

Layer마다 batch의 데이터 분포가 다른 Internal covariate shift 현상이 나타나면 학습 효과가 떨어지는 현상이 나타나는데, 이를 해결해주기 위해 zero-mean으로 layer마다 batch를 동일한 범위로 scale해주는 테크닉을 말합니다. Training 과정에서 batch마다 평균, std를 계산해서 scaling을 해주고, inference 단계에서는 training 과정에서의 moving average 등으로 계산된 $\mu, \: \sigma$ 등을 이용해 BN을 진행합니다.

 

나머지는 그냥 블로그 포스트들 구경하면서 마무리..

728x90