newhaneul

[Seoul National Univ: ML/DL] Lecture 16. Training Neural Networks 2 본문

2. Artificial Intelligence/Seoul National Univ. ML&DL

[Seoul National Univ: ML/DL] Lecture 16. Training Neural Networks 2

뉴하늘 2025. 4. 2. 19:11
728x90

본 포스팅은 서울대학교 이준석 교수님의 M3239.005300 Machine Learning & Deep Learning 1을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.
이준석 교수님에게 강의 자료 사용에 대한 허락을 받았음을 알립니다.

https://youtu.be/IIBCt_g2EW0?si=zdzNoKvHAQyl-n3J

 

 

1. Regularization for Neural Networks

 

Overfitting

 

 Machien Learning에서 overfitting을 억제하기 위해 Regularization 중 Ridge regression과 Lasso regularization이 있다고 배웠었다. overfitting은 model이 traning data의 nois한 부분까지 학습하게되어 model이 복잡해지는 현상을 말한다. 

 

Ridge Regression

 

 Ridge regression은 L2 regularization으로 penality term이 회귀 계수(θ) 제곱합이다. λ는 패널티의 강도를 조절하는 hyperparameter 역할을 하는데 λ가 클수록 simple한 모델이 되고, λ가 작을수록 complex한 모델이 된다.

 

Lasso Regularization

Lasso Regularization은 penalty term이 회귀 계수(θ)의 절댓값 합이다. λ는 ridge regression과 같은 역할을 하며, lasso regularization은 ridge regression보다 θ를 더 0이 되도록 하는 성질을 갖는다.

 

Regularization for Deep Nural Networks

 

Weight Decay

 

 Weight Decay는 machine learning에서 사용했던 ridge regression, lasso regularization과 마찬가지로 weight 값이 너무 커지는 것을 방지하기 위해 penalty term을 추가하는 방법이다. 이를 통해 모델이 복잡한 패턴을 과도하게 학습하는 것을 막고, 일반화 성능을 향상시킨다.

Early Stopping

 

 Early Stopping은 학습 도중 validation set이 overfitting되기 시작할 때 학습을 중단하는 방법이다. 이는 불필요한 학습을 줄여 시간과 자원을 절약하는 역할을 한다.

 학습 과정에서 훈련 데이터의 loss는 계속 감소하지만, validation data와 test data의 loss는 어느 시점에서 다시 증가하기 시작한다. 따라서 validation data의 loss가 증가하기 전에 학습을 중단하는 것이다.

 

Dropout

 

Dropout은 학습 과정에서 랜덤하게 일부 뉴런을 비활성화(0으로 설정)하여 신경망이 특정 뉴런에 의존하지 않도록 하는 방법이다. 이를 통해 모델이 더욱 일반화되며, overfitting을 방지할 수 있다. 

 dropout의 확률은 hyperparameter이고, 대게 0.5로 설정한다. dropout이 overfitting을 방지할 수 있는 이유는 일부 뉴런을 비활성화 함으로서 뉴런 간의 Co-adaptation을 방지하여 모델이 특정 뉴런에 과도하게 의존하지 않도록 하기 때문이다.

 

 Dropout rate를 임의의 값으로 설정했다고 가정하면, training 과정에서 activation function을 거친 후 dropout을 적용한다. activation function의 outputdl h1, h2이면, 각각 크기에 맞고 1, 0으로 구성된 matric을 만들고 곱한다. 그러면 h1, h2는 u1, u2에서 원소가 0이 아니였던 영역만 살아남게 된다. 

 

 training을 마치고 test를 진행할 때는 모든 뉴런이 작동되어야 하므로 test_step을 별도로 구현해야 한다. 이때 training에서는 dropout rate에 맞게 학습하였으므로 test 과정에서 모든 뉴런을 작동하게 되면 scale이 동일하지 않게 된다. 예를 들어 p를 0.5라고 했을 때 training을 할 때는 원래의 뉴런 중 절반은 작동이 안되게 된다. 그러면 절반의 뉴런들이 남은 절반 만큼을 더 학습하므로 2배의 학습을 하게 된다. 그래서 test를 할 때는 다시 dropout rate 만큼 곱해 주어야 scale을 1로 맞출 수 있다.

 

 

 그런데 test 과정에서 hyperparameter인 droput rate를 곱하면 다른 사람이 이 코드를 적용할 때 어떤 hyperparameter인지 알기 어려울 수 있으므로 training 과정에만 drop rate를 사용하도록 아래와 같이 코드를 변경한다.  

 

Cutout

 

 Cutout은 이미지 데이터를 학습할 때 특정 영역을 무작위로 제거(masking)하는 기법으로, CNN 모델의 일반화 성능을 높이기 위해 사용된다. 즉, 입력 이미지의 일부 픽셀을 제거하는 방식이다.

 모델은 삭제된 영역이 없는 부분만으로 학습해야 하므로, 특정 영역에 의존하는 것이 방지된다. 또한 모델이 이미지 전체에서 다양한 패턴을 학습하도록 유도한다.

 

 그러나 입력 이미지 전부를 무작위로 제거하는 시간과 비용이 많이 들기 때문에 많이 사용하지 않는 기법이다.

 

2. Optimization beyond SGD

 

Problems with SGD

 

 SGD는 널리 사용되는 optimization 기법이지만 몇 가지 문제점이 있다. 대표적인 문제로 Jittering Problem, Local Optimum & Saddle Point, Inaccurate Gradient Estimation이 있다. 각각에 대해 설명한다.

SGD Problem 1: Jittering

 

 SGD는 비등방성 함수(방향에 성질, 즉 여기에서는 기울기가 달라지는 함수)에서는 탐색 경로가 비효율적이라는 것이다. 또한, SGD가 지그재그로 탐색하는 근본 원인은 기울어진 방향이 본래의 최솟값과 다른 방향을 가리켜서라는 점도 있다. 그리고 학습률(Learning Rate)이 너무 크면, 최적값 주변에서 계속 튕기는 현상이 발생한다.

 

SGD Problem 2: Local optimum and Saddle points

 

 SGD는 손실 함수가 비선형이고 복잡한 고차원 공간에서 동작하기 때문에, Local Optimum과 안장점(Saddle Point)에 빠질 위험이 있다. Local Optimum에서는 gradient가 0이 되므로 손실 함수의 일부 영역에서 더 이상 진행할 수 없게 된다. 안장점(Saddle Point)은 특정 방향에서는 증가하고, 다른 방향에서는 감소하는 지점으로, SGD가 멈출 가능성이 있게 된다.

 

SGD Problem 3: Inaccurate Gradient Estimation

 

SGD는 랜덤하게 선택한 mini-batch을 기반으로 기울기를 추정한다. 이러한 형태는 큰 규모의 데이터에서 문제가 될 수 있다. mini-batch를 증가시키는 것은 memory 때문에 제한적이기 때문에 학습 시간이 오래 걸리는 문제를 피할 수 없게 된다..

SGD + Momentum

 

 Momentum은 SGD를 개선하기 위해 도입된 개념이다. 관성의 역할을 하여 이전 업데이트 정보를 일부 반영하는 방식이다. 과거 기울기 정보를 반영하여 진동(Jittering)을 줄이고 더 부드러운 최적화 가능하고, 경사가 완만한 방향에서는 점점 더 빠르게 이동하여 최적점을 더 효과적으로 찾아간다.

 

 SGD와 비교하면 ‘지그재그 정도’가 덜한 것을 알 수 있다. 이는 x축의 힘은 아주 작지만 방향은 변하지 않아서 한 방향으로 일정하게 가속하기 때문이다. 거꾸로 y축의 힘은 크지만 위아래로 번갈아 받아서 상충하여 y축 방향의 속도는 안정적이지 않다. 전체적으로는 SGD보다 x축 방향으로 빠르게 다가가 지그재그 움직임이 줄어든다.

 

AdaGrad

 

  AdaGrad는 각 매개변수마다 개별적인 학습률을 적용하는 방법이다. 개별 매개변수에 적응적으로 학습률을 조정하면서 학습을 진행한다 즉, 자주 업데이트되는 가중치는 학습률을 줄이고, 적게 업데이트되는 가중치는 학습률을 늘리는 방식이다.

 

 python 코드를 보면 grad_squared는 기존 기울기 값을 제곱하여 계속 더해준다. 그리고 매개변수를 갱신할 때 루트의 역을 곱해 학습률을 조정한다. 이 과정에서 매개변수의 원소 중에서 많이 움직인(크게 갱신된) 원소는 학습률이 낮아지게 된다. 다시 말해 학습률 감소가 원소마다 다르게 적용됨을 뜻한다.

 

RMSProp: Leaky AdaGrad

 

RMSProp는 Adagrad의 약점을 보완한 optimization이다. Adagrad는 계속해서 이전 기울기를 더하기 때문에 grad_squared가 빠르게 증가하게 된다. 이러한 현상 때문에 learning rate가 빠르게 감소하게 되는데, 이를 방지하고자 RMSProp는 decay rate를 곱해 Adagrad보다 보수적으로 grad_squared를 업데이트 한다.

 

Adam(Adaptive Moment Estimation)

 

  Adam은 SGD + Momentum과 AdaGrad의 장점을 결합한 optimazation이다. 즉, Momentum을 활용하여 빠르게 이동하면서도, AdaGrad처럼 학습률을 개별적으로 조정한다.

 

First vs. Second-order Optimization

 

 First-Order Optimization은 손실 함수의 1차 미분만을 이용하여 최적화하는 방식이다. 일반적으로 사용되는 SGD, Momentum, Adam, RMSProp 등이 1차 최적화에 해당한다.

 

 Second-Order Optimization은 손실 함수의 2차 미분(Hessian Matrix, Hessian) 정보를 이용하여 최적화하는 방식이다. 2차 미분을 활용하면 최적의 방향을 더 정확하게 찾을 수 있지만, Hessian 행렬을 계산하고 이 역행렬을 구하는 비용이 너무 크기 때문에 deep learning처럼 매개변수가 많은 모델에서는 사용하지 않는다.

 Neural Networks는 수백만 개 이상의 매개변수(Weight, Bias 등)를 가지기에 Hessian 행렬 계산이 현실적으로 불가능하다.이에 반해 1차 최적화 알고리즘(Adam, Momentum)은 빠르고 효율적으로 최적화할 수 있도록 설계되었다. 따라서Second-Order Optimization은 너무 많은 계산 비용이 들기 때문에, 딥러닝에서는 거의 사용되지 않는다.

 

 

 

3. Batch Normalization

 

 앞서 Machine Learning Lecture에서 data들을 zero-centered하고 normalization하는 preprocessing을 하곤 했다. 하지만 deep learning에서는 여러개의 layer가 있기 때문에 첫 번째 layer에 preprocessing tranining data를 input으로 넣게 되도 학습이 진행되면서 계속 변화하는 문제가 발생하게 된다. 

Batch Normalization 

 

 아이디어는 그냥 모든 layer에서 zero-centered와 normalization을 진행하는 것이다. 

 

 training data를 normalization한 후 activation function의 input으로 주게 되면 layer가 표현하는 것을 바꿔버릴 수도 있게된다. 이러한 문제를 해결하기 위해서 학습 가능한 Scale과 Shift parameter를 학습하도록 한다.

(scale parameter)와 β (shift parameter)는 학습 가능한 parameter이다. 

 

Batch Normalization을 하는 이유는 학습 속도 향상, gradient 크기를 적절하게 유지할 수 있게 되고, 모델이 robust해지게 되는 효과가 있다.

BN은 activation function 앞에 적용되고, RNN에서는 사용하지 않는다.

 

More Recent Normalizations

 

 최근에는 Normalization을 다양한 위치에서 시행하곤 한다.

728x90