[TensorFlow] Lab-05-2 Logistic Regression 모두의 딥러닝 시즌 2 정리...
이번 포스팅부터는 지금까지 배운 이론들의 응용 방법과 tip에 관한 내용들이다.
강의에서 말하길 지금까지 배운 이론들은 실제 실무에선 많은 차이와 적용의 어려움이 있다고한다.
그래서 [Application & Tips] 강의를 통해 이러한 차이를 줄이길 바라면서 정리를 해보겠다.
목차
- Learning rate
- Gradient
- Good and Bad Learning rate
- Learning rate schedule 과 Annealing the learning rate (Decay)
- Data preprocessing
- Standardization / Normanalization
- Noisy Data
- Overfitting
- Regularization
- L2 Norm
Learning rate
Gradient
우리는 Linear regression이나 Logistic regression을 사용할 때, cost를 최소화하기 위한 Gradient descent algorithm을 구현하는 과정에서 learning rate의 개념을 배웠다.
Gradient descent는 위의 그래프처럼 반복을 거듭할 수록 최소값으로 수렴하게 되는 최적의 해를 찾아가는 과정인데,
Iteration을 수행할 때 다음 point를 어느 정도로 옮길지를 결정하는 것이 바로 Learning rate라고 하였다.
cost 값의 미분한 값(Gradient, 기울기) 앞에 알파라는 값이 오게 되는데 이 값이 Learning rate이며 Learning rate은 어느 정도의 크기로 기울기가 줄어드는 지점으로 이동하겠는가를 나타내는 지표이다.
간단하게 위의 식을 해석하면 다음과 같다.
W = W - Learning rate * (기울기값 : 감소시키는 방향으로의 편미분)
여기서 하이퍼 파라미터(Hyper parameter)란
- 간단히 설명하자면 model에서 사용자가 직접 세팅해 주는 값이면 Hyper Parameter라고 생각하면 될 것 같다.
- 하이퍼 파라미터의 예시로는 Learning Rate, K-NN의 K의 값 등이 있다.
- Hyperparameter에 대한 추가적인 내용 : What is the Difference Between a Parameter and a Hyperparameter?
Good and Bad Learning rate
Gradient descent에서 Gradient(기울기)는 그래프의 각 위치별로 Gradient 값이 나오게 된다. 하지만 Learning rate의 경우에는 우리가 이 값을 어떻게 설정하느냐에 따라 다양한 값이 나오게 된다.
그렇다면 우리는 과연 어느 정도의 Learning rate 값을 설정해야 학습에 좋고 나쁠까?
low learning rate : 손실(loss)감소가 선형의 형태를 보이면서 천천히 학습된다.
high learning rate : 손실 감소가 지수적인(exponential) 형태를 보이며, 구간에 따라 빠른 학습 혹은 정체가 보인다.
very high learning rate : 매우 높은 학습률은 경우에 따라, 손실을 오히려 증가시키는 상황을 발생
good learning rate : 적절한 학습 곡선의 형태로, Learning rate를 조절하면서 찾아내야 함.
위의 그래프로 확인해보면 learning rate에 따라 학습이 제 각각 진행되는 것을 확인할 수 있다.
이를 좀더 살펴보면 아래의 그래프와 같다.
학습률이 큰 경우 : 최적의 값으로 수렴하지 않고, 발산해버리는 경우가 발생한다. Overshooting이라고 한다.
학습률이 작은 경우 : 수렴하는 속도가 너무 느리고, global minimum이 아닌 local minimum을 그래프의 최저점으로 인식할 수 도 있는 문제가 발생한다.
따라서 Learning rate 값에는 정답이 없다. 보통 0.01에서 부터 시작해서 cost 값을 확인하면서 변경한다.
Learning rate schedule 과 Annealing the Learning rate(decay)
우리가 초반에 좋은 Learning rate 값을 구했다 할지라도 학습하는 과정에서 생각보다 loss가 줄어들지 않을 수도 있다.
이때 Learning rate를 적절하게 조절하는 것이 중요한데 Learning rate를 조절하는 것에는 Learning rate schedule 과 Learning rate decay가 존재한다.
여기서 Learning rate schedule란 단어 그대로 훈련 동안에 고정된 learning rate를 사용하는 것이 아니고 미리 정한 스케줄대로 learning rate를 바꿔가며 사용하는 것이다.
그리고 learning rate annealing은 learning rate schedule과 혼용되어 사용되지만 특히, learning rate가 iteration에 따라 monotonically decreasing하는 경우를 의미한다.
즉, Learning Rate Decay는 기존의 Learning Rate가 높은 경우 loss 값을 빠르게 내릴 수는 있지만, 최적의 학습을 벗어나게 만들고 낮은 경우 최적의 학습을 할 수 잇지만 그 단계까지 너무 오랜 시간이 걸리게 된다.
따라서, 처음 시작시 Learning Rate 값을 크게 준 후 일정 epoch 마다 값을 감소시켜서 Local minimum에 보다 더 빠르게 다가갈 수 있게 만들어주고 이후 learning rate를 줄여가며 local minimum에 보다 더 정확하게 수렴할 수 있게 만들어준다.
위의 그래프에서 a처럼 학습을 하는 과정에서 cost가 점점 줄어들고 더 이상 줄어들지 않는 경우가 있다.
이때 우리가 Learning rate 값을 조절함으로써 더 이상 학습이 되지 않는 과정에서 learning rate 값을 줄임으로서 추가적으로 학습이 가능하게 하는 기법이다.
Learning rate decay 기법은 다양한 기법들이 존재한다.
Step decay, Exponential decay, 1/t decay...등이 존재하며 Tensorflow code에서는 아래와 같이 사용한다.
Learning rate decay에 관련된 내용도 많아서 추후 정리.
https://velog.io/@good159897/Learning-rate-Decay%EC%9D%98-%EC%A2%85%EB%A5%98
https://hiddenbeginner.github.io/deeplearning/paperreview/2020/01/04/paper_review_AdamWR.html
다음은 Learning rate decay를 Tensorflow로 구현한 코드이다.
참고
bioinformaticsandme.tistory.com/130