[Seoul National Univ: ML/DL] Lecture 15. Training Neural Networks 1
본 포스팅은 서울대학교 이준석 교수님의 M3239.005300 Machine Learning & Deep Learning 1을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.
이준석 교수님에게 강의 자료 사용에 대한 허락을 받았음을 알립니다.
https://youtu.be/BIo1vEXx-9U?si=ifJk76T4ul869PK6
1. Activation Function
Activation Function에는 대표적으로 Sigmoid, tanh, ReLU가 있다. 이번 Lecture에서는 어떤 상황에서 어떤 함수를 써야 더 효과적인지에 대해 배우고, 문제점을 극복하기 위해 고안된 다른 activation function에 대해서도 배우도록 한다.
Sigmoid
Sigmoid 함수는 입력 값이 매우 크거나 작을 경우, 미분 값이 0에 가까워져 역전파 시 가중치 업데이트가 거의 이루어지지 않는다. 즉, Vanishing Gradient Problem이 존재한다. 그 외에도 zero-centered가 아니기 때문에 모든 output이 항상 양수라는 문제점이 있다.
Machine Learning에서는 Neural Network의 Layer가 깊지 않았기 때문에 Sigmoid를 사용할 수 있었다. 하지만 Deep Learning에서는 Layer가 깊기 때문에 Vanishing Gradient Problem이 존재하는 Sigmoid function은 사용할 수 없다.
단, 마지막 layer에서는 종종 output을 0~1 사이의 값으로 나타내고 싶을 때 사용한다.
Tanh
Tanh Function도 마찬가지로 Vanishing Gradient Problem이 존재한다. 하지만 Sigmoid와는 달리 zero-centered가 만족된다.
ReLU(Rectified Linear Unit)
ReLU Function은 zero-centered를 만족하지는 않지만, Vanishing Gradient Problem을 해결하였고 계산이 간편한 함수이다. 단, input이 negative한 경우 ReLU의 output은 항상 0이므로, 해당하는 뉴런은 학습되지 않는 현상이 발생할 수 있다.
Leaky ReLU(Rectified Linear Unit)
Leaky ReLU는 ReLU의 input이 negative일 때 해당하는 뉴런의 가중치가 업데이트되지 않는 현상을 개선한 함수이다. negative인 경우에 아주 작은 기울기를 부여하도록 바뀌었다.
ELU(Exponential Linear Unit)
ELU는 Leaky ReLU보다 더 부드러운 형태로 변형하여 학습 성능을 개선한 ReLU이다. 대신 expoential을 사용하므로 계산이 조금 복잡해졌다.
2. Data Preprocessing & Augmentation
Zero-centering & normalization
만약 모든 input이 positive하다면, input의 평균을 구해서 zero-centering 할 수 있을 것이다. 또한 표준 편차로 나누어서 data를 normalize하는 것이 일반적인 Data Preprocessing이다.
zero-centered를 하고자 하는 이유는 classification 할 때 가중치의 작은 변화에 덜 민감해지기 때문이다.
PCA & Whitening
Data가 zero-centered되었다면, PCA를 통해 데이터의 축을 회전시킬 수 있다. 그리고 Whitening을 통해 데이터의 분산을 조정할 수 있다.
Whitening은 데이터의 분산을 조정하고 특성 간의 상관관계를 제거하여 학습을 더 효과적으로 만들기 위한 전처리 기법이다. 주로 딥러닝과 머신러닝에서 입력 데이터의 분포를 정규화하여 학습 속도를 높이고 안정성을 개선하는 데 사용된다.
Data Augmentation
Data Augmentation(데이터 증강)은 학습 데이터의 다양성을 증가시켜 모델의 일반화 성능을 향상시키는 기법이다. 특히, 이미지 데이터에서 다양한 변환을 적용하여 overfitting을 방지하고 데이터의 부족 문제를 해결하는 데 활용된다.
Horizontal Flips(수평 반전)
이미지 데이터를 좌우로 반전하는 기법이다. 이미지의 좌우 방향이 중요하지 않은 경우(개, 고양이, 사람 얼굴 등)에 적용하면 학습 데이터의 다양성이 증가한다.
Random Crops(랜덤 자르기)
이미지를 임의의 위치에서 일부만 잘라 사용하는 기법이다.객체가 항상 중심에 위치하는 것이 아니라 다양한 위치에서 등장하도록 학습 가능하다.
Translation invariance는 input data의 몇몇 pixel들이 일정 거리만큼 Translation하더라도 모델의 출력이 크게 변하지 않는 성질을 의미한다. CNN은 Translation Invariance를 갖도록 설계하여, 같은 물체가 다른 위치에 있어도 동일하게 인식할 수 있도록 한다.
Scaling
Scaling은 데이터를 확대하거나 축소하는 변환 기법을 의미한다. 크기가 조정된 이미지로부터 임의로 자르면 성능 향상에 도움이 될 수 있다.
Scaling을 할 때는 일정 범위에서 임의의 L 값을 선택하고, 짧은 쪽 변이 L이 되도록 image를 resize한다. 그 resized image에서 무작위로 224 x 224 패치를 샘플링한다.
Color Jitter
Color Jitter는 이미지의 명도(Lightness), 채도(Saturation), 색조(Hue) 등을 랜덤하게 변형하는 데이터 증강 기법이다. 이는 딥러닝 모델이 조명 변화, 색감 차이, 환경 변화에도 강건한 성능을 가지도록 학습하는 데 도움을 준다.
명도(Lightness), 채도(Saturation), 색조(Hue)는 아래의 공식들을 통해 원래 image의 RGB 값으로 계산할 수 있다.
문제에 따라 다양한 방법으로 원래 데이터를 새로운 데이터로 창조해낼 수 있다.
3. Weight Initalization
딥러닝 모델의 학습을 시작할 때 신경망의 가중치 초깃값과 hyperparameter들을 어떤 값으로 설정하는지에 따라 학습 결과가 크게 달라진다. 적절한 초기화를 하지 않으면 Vanishing Gradeint, Exploding Gradient 등의 문제가 발생할 수 있다.
Small Gaussian Random
가중치 초기값에 0.01이라는 아주 작은 값을 곱하고 activation function으로 tanh를 사용하게 되면, layer가 커질수록 gradient와 output x가 0이 되는 것을 알 수 있다. 그 이유는 tanh를 가중치로 미분한 값은 x가 0에 가까워질수록 0에 수렴하기 때문이다.
Large Gasussian Random
이번에는 가중치의 초깃값에 0.5라는 큰 값을 곱하고 activation function으로 tanh를 사용하게 되면, layer가 커질수록 gradient는 0이 되고, x는 1과 -1 극단적인 형태를 띠게 된다. x가 커질수록 tanh는 1과 -1로 수렴하기 때문이다.
Xavier Initalization
위의 문제를 방지하기 위해 Xavier Initialization을 사용하면 적절한 범위의 가중치를 설정 가능하다. Xavier 초기화는 가중치를 앞 계층의 노드 개수를 sqrt한 값으로 나누는 방법을 채택한다. 이에 대한 증명은 아래와 같다.
Xavier Intialization은 가중치 W와 입력 데이터 x가 I.I.D Assumption을 만족한다고 가정한다. 그렇게 가정하면 W와 x는 독립임으로 E[XY] = E[X]E[Y]로 유도할 수 있게 된다. 서로 독립적이라고 생각할 수 있는 이유는 학습을 진행하기 전 초기 단계에서 가중치는 랜덤 함수로 받은 무작위 값의 matrics이기 때문에 x와는 아직 관련성이 없기 때문이다.
그리고 가중치와 입력 데이터가 평균이 0인 정규분포를 따른다고 가정한다. 그러면 E[W]와 E[x] = 0이 되고 마지막 식에 남는 것은 Var[y] = d_in(Var[W]Var[x])이다. 이때 Var[W]가 1/d_in이라면 input variance와 output variance가 같아지게 된다.
Weight Initialization for ReLU
ReLU를 activative function으로 사용할 때 Xavier initalization을 사용하면 layer가 깊어질수록 x가 0에 가까워지면 gradient가 0으로 수렴하게 된다.
Kaiming He/MSRA Initalization for ReLU
ReLU를 activation function으로 사용할 때는 Xavier initalization보다는 He initalization을 사용하는 것이 성능이 더 잘 나온다. 이는 Xavier initalization에 단순히 sqrt(2)를 곱한 값인데, ReLU는 음의 영역이 0이라 더 넓게 분포시키기 위해 Xavier에 비해 2배의 계수가 필요하다고 해석해 볼 수 있다.
4. Learning Rate Scheduling
Gradient Descent에 사용되는 learning rate hyperparameter도 traning을 할 때 중요한 역할을 한다. learning rate가 클 경우에는 loss가 일정 값 이하로 내려가지 않는 현상이 생기고, learning rate가 작을 경우에는 loss가 줄어들긴 하지만 학습 시간이 오래 걸린다는 단점이 존재한다.
그래서 결국에는 최적의 learning rate를 찾기 위해 많은 시행착오를 겪을 수 밖에 없는데, 처음에는 높은 learning rate로 시작해서 점점 learning rate를 줄여서 최적의 값을 찾는 방식을 많이 사용한다.
Learning Rate Decay
처음에는 큰 learning rate로 시작을 하고, epoch이 커질수록 learning rate를 감소시키는 방법을 Learning rate Decay라고 한다.
처음에는 Learning rate를 낮은 값에서 점점 키우는 warmup 과정을 진행하고, 전체 traning의 50%를 수행했을 경우 learning rate를 낮은 값으로 업데이트 한다. 마찬가지로 traning의 75%를 수행했을 경우에는 learning rate를 더 낮춘다.
아래는 epoch이 증가함에 따라 learning rate에 변화를 주는 세 가지 방법 예시이다.