Gradient Descent(경사 하강)에 대해서 알아봅시다!
물론 잘 되어 있는 포스트가 많기 때문에, 간단하게 쓰겠습니다.
Gradient Descent란, Machine Learning에서 궁극적으로 하려고 하는 목표,
즉, local minimum/maximum을 찾고자 할 때 사용하는 최적화 방법이라고 할 수 있겠습니다.
보통 이때, 로컬 미니멈/맥시멈을 찾는 주체는 loss function 또는 cost function이라고 할 수 있겠습니다.
이 Gradient Descent는, Linear Regression(선형 회귀)에서도 사용하고,
CNN, RNN, 등 거의 모든 Machine Learning에서 사용하지만,
Gradient Descent를 배울 때는 그 복잡도 때문에 항상 Linear Regression에서의 예를 찾는 편입니다.
Linear regression 에서의 세타0, 세타1은 각각 y절편과 기울기의 값을 나타내고,
Cost Function은 다음과 같은 값으로 주어지며, Cost Function의 값을 최소화 하는 방향으로 Gradient Descent를 합니다.
그럼 Gradient Descent는 어떻게 하는걸까요?
다음과 같이 Gradient Descent를 정의합니다.
주의할 점은, temp0와 temp1을 구한 후 한꺼번에 업데이트를 해야하지,
temp0를 구하고 업데이트하고 temp1을 구하는 방식으로는 하지 않는다는 사실입니다.
그리고 위의 gradient descent에서 가장 중요한 파라미터가 alpha인데, 이를 Learning Rate이라고 합니다.
이 Learning Rate이 너무 크면, 학습시간은 줄어들지만 local minimum을 지나쳐버릴 수 있는 경우가 있고(Diverge한다고 표현합니다),
Learning rate이 작다면, 학습시간이 너무 길어진다는 단점이 있습니다!
Linear Regression의 경우 parameter(변수)가 두 개밖에 없기 때문에,
3d로 visualization이 가능하다는 장점이 있습니다.
3d로 visualization을 나타내면 다음과 같습니다.
게다가 Gradient Descent의 Default는 Batch Gradient Descent라고도 하는데,
이와 더불어서 Stocastic Gradient Descent도 있습니다.
이 둘의 차이는, Batch Gradient Descent는 모든 데이터를 사용하는 방법이고,
Stochastic Gradient Descent는 하나의 데이터만 사용하는 방법입니다.
왜냐하면 Batch Gradient Descent를 사용하기에 Data의 양이 너무 많을 수 있기 때문입니다.
또, Mini-batch Gradient Descent는 임의의 작은 샘플세트에 대해서 기울기를 구하는 방법입니다.
(SGD와 BGD의 중간 정도의 방법)
여기 블로그에서 Mini-batch, Stochastic, Batch Gradient Descent에 대해서 잘 정리해 두었네요.
https://light-tree.tistory.com/133
https://towardsdatascience.com/batch-mini-batch-stochastic-gradient-descent-7a62ecba642a (영어)
reference : Coursera Machine Learning (Andrew Ng)