성신여대 김영훈 교수님의 K-MOOC 실습으로 배우는 머신러닝 강의 내용을 바탕으로 포스팅하였습니다.
머신러닝에서 학습이란 최적화이며, 최적화란 loss를 minimize해주는 방식을 정의하는 것이다.
2차시: 경사하강법 개요
Iterative Algorithm-based Optimization: 일반적인 상황에서 사용할 수 있는 최적화 방법
1. Gradient Descent(경사하강법)
gradient는 기울기, 경사를 의미하며
기울기가 작아지는 방향을 찾고 해당 방향으로 한 걸음씩 계속 내려가는 방식을 의미한다.
그럼 왜 기울기일까?
기울기의 방향은 함숫값을 가장 빠르게 올려줄 수 있는 뱡향을 의미한다.
그 반대 방향으로 가게 되면 반대로 함숫값이 가장 빠르게 줄어들게 될 것이다.
우리의 목표는 loss를 minimize하는 것이기 때문에 반대 방향으로 가야하고, 이에 따라 -를 붙여서 이동할 것이다.
이처럼 gradient를 이용해서 함숫값을 줄이는 방식으로 최적화를 하고 있기 때문에 gradient descent라는 용어를 사용하는 것이다.
2. 로스함수 정의
그럼 경사하강법에서 loss function은 무엇을까?
Quadratic approximation
이를 w에 대해서 미분하고 미분 값이 0일 때로 정리하면 다음과 같이 작성할 수 있다.
※ y = wx + b, 초기에 w는 random 하게 initialize하고 시작한다.
t_c는 step size, learning rate로 하이퍼파라미터라고 생각하면 된다.
다만, 머신러닝과 딥러닝 영역에서만 learning rate이라고 부르기도 하니 주의하자.
즉 위의 식을 해석해보면, W_c에 적당한 보폭으로 움직여서 W_c+1로 업데이트 해주는 것이다.
3차시: 경사하강법 심화
1. learning rate
learning rate이 작으면: over fitting, 시간이오래걸린다,
learning rate이 크면: under fitting, 시간이 비교적 적게 걸리지만 최적화된 수치를 지나칠 수가 있다.(발산 가능)
2. Stochastic Gradient Descent
데이터가 굉장히 클 경우 모든 데이터에 대한 gradient를 구할 수 없을 것이다.
그래서 그 중의 일부를 추출해서 사용하는데 이것이 바로 Stochastic Gradient Descent, SGD이다.
전체적인 작동 원리는 다음과 같다.
1️⃣ 전체 데이터를 N등분 한다. (등분한 데이터 한 그룹을 batch라고 표현한다.)
2️⃣ 첫 번째 batch에 gradient descent를 적용한 후 update한다.
3️⃣ 업데이트 한 값을 기반으로, 다시 두 번째 batch에 gradient descent를 적용한 후 update한다.
4️⃣ N 번째 batch까지 2️⃣3️⃣ 과정을 반복한다.
이처럼 SGD를 사용하면 full gradient가 한 번 업데이터하는 동안에
batch size만큼 업데이트 할 수 있게 되고, 훨씬 빠르게 해를 구할 수 있게 된다.
(이런 장점 때문에 빅데이터에서 SGD를 많이 사용한다.)
전체 데이터에 대한 gradient를 구한 것은 아니니,
완벽하게 정확한 gradient는 아니겠지만 여러 스텝을 빠르게 나아갈 수 있기 때문에 굉장히 효율적으로 함수를 최적화할 수 있게된다.
정말 극단적인 경우에는 데이터 하나만을 이용해서 Gradient를 구하고 모든 데이터에 대해 한 번씩 업데이트를 해주는 방법도 있긴 하다.(이 경우도 SGD이다.)
그러나, 하나만 가지고 추정하기에는 부정확도가 매우 크고 direction이 너무 noisy하게 추정되기 때문에 어느정도 큰 사이즈의 batch를 가지고 업데이트를 진행할 것을 추천한다. (batch의 크기는 사용 가능한 메모리 등에 따라 결정하면 된다.)
그림에서도 알 수 있듯이 가장 추천하는 것은 partial 하게 batch 크기를 정하고 업데이트하는 것이다.
정리하자면, 머신러닝 모형 Loss 함수 최적화 과정에서 일부 배치만 이용해 해를 업데이트하는 방법을 Stochastic Gradient Descent라 한다.
3. momentum
가. 경사하강법의 문제점
일반적으로 Gradient Descent를 사용할 경우 local minimum을 구할 수 있다는 것은 보장이 되지만, global minimum을 구할 수 있다는 것은 보장하지 않는다.
따라서, SGD를 사용하면 local minimum에 빠르게 수렴할 수는 있지만
구한 local minimum 값이 항상 좋은 local minimum 값이라는 것을 보장할 수는 없게되는 것이다.
(구한 값보다 훨씬 작은 값들이 존재할 수 있다.)
이런 단점을 보완하고자 사용하는 것이 바로 'Momentum'이다.
나. momentum
SGD를 통해 찾은 Local Minimum보다 더 작은 local minimum 값을 찾아 나갈 수 있는 계기를 마련해주는 것
관성 법칙에 따라 내가 진행항 뱡향으로 점 더 해를 미뤄주는 개념이다.
SGD + Momentum 는 딥러닝에서 가장 널리 사용되는 방법이다.
즉, momentum이란 이전에 업데이트 된 결과를 기억했다가 반영하여 업데이트를 하는 것이다.
'강의 내용 정리하기 > 실습으로 배우는 머신러닝' 카테고리의 다른 글
[K-mooc] 7. Ensemble Learning (0) | 2022.11.22 |
---|---|
[K-mooc] 6. Decision Tree (0) | 2022.11.22 |
[K-mooc] 3. Classification(KNN, 로지스틱 회귀모형) (0) | 2022.11.21 |
[K-mooc] 2. Machine Learning Pipeline (0) | 2022.11.21 |
[K-mooc] 1. Introduction to Machine Learning(머신러닝 개요, 선형회귀) (0) | 2022.11.21 |
댓글