-
[Week 10] Gradient Descent with Large DatasetsCourses/Andrew Ng - Machine Learning 2022. 2. 23. 22:35
Learning With Large Datasets
이번 강의에서는 대규모 데이터를 다루는 머신 러닝에 대해 알아봅니다.
빈 칸에 들어갈 단어를 유추하는 모델을 개발한다고 가정합시다. 알고리즘은 (to,two,too) 라는 옵션 중에서 가장 문맥에 어울리는 two를 선택할 것 입니다. 데이터를 많이 학습한 알고리즘이 잘 동작하게 되고 이런 결과로 인해 가장 많은 데이터를 가진 사람이 승자라는 말도 있습니다.
하지만 많은 양의 데이터셋을 처리하려면 연산력과 속도의 제약이 붙습니다. 만약 학습 셋의 크기가 약 1억 정도라면 경사 하강법의 한 스탭을 계산하는데 1억 번 합산해야 하고 이는 엄청난 비용을 지불해야 함을 의미합니다.
그런 비용을 줄이기 위해 무작위로 예제를 선택하여 타당성 검사를 진행합니다.
예를 들어 1억개의 예제 중 1000개를 무작위로 선택하여 학습 곡선을 그려봅니다. 왼쪽은 분산이 있는 알고리즘이고 데이터 예제를 추가하면 성능이 향상될 것 입니다. 우측은 편향이 있는 알고리즘입니다. 1000개의 예제를 1억개로 늘린다고 하여도 성능 향상은 없을 것 같습니다. 이런 상황이라면 굳이 많은 양의 데이터를 학습시켜 비용의 낭비를 초래하지 않는 것이 좋습니다.
Stochastic Gradient Descent
매우 큰 데이터 셋은 경사 하강법의 계산 비용을 크게 만들기 때문에, 확률적 경사 하강법(Stochastic Gradient Descent)를 도입합니다.
일반적인 경사 하강법의 경우 가설과 정답 사이의 오차를 구하고 , 그 오차를 미분하여 얻어낸 파라미터를 갱신하여 최적화하는 과정을 거치게 됩니다. 오차가 전역 최소값에 도달했을 때 파라미터가 최적화됩니다. 문제는 m이 너무 크다는 점입니다. 만약 m이 3억이라면 , 한 스탭을 진행할 때 3억 개가 넘는 값을 합산해야 합니다. 이렇게 모든 데이터셋을 한번에 다루는 방식을 배치 경사 하강법(Batch Gradient Descent)라고 합니다. 데이터가 많을 경우 전역 최소값에 수렴하기 까지 너무 오랜 시간이 걸리게 됩니다.
이를 개선하기 위해 확률적 경사 하강법을 도입합니다. 모든 데이터셋을 계산하는 배치 경사 하강법과 달리 한번에 하나의 데이터만 계산합니다.
첫번째 단계로 데이터셋을 무작위로 섞습니다. 그 다음 i=1부터 m까지 순서대로 오차를 미분하고 파라미터를 업데이트 합니다. 배치와는 다르게 모든 계산 결과를 더한 후 업데이트 하는 것이 아닌, 무작위로 정렬된 데이터를 하나씩 계산하고 업데이트를 실행한다는 점이 다릅니다.
데이터를 무작위로 섞기 때문에 오차가 직선 궤도를 따르지 않고 무분별하게 움직이는 것처럼 보일 수 있습니다. 그러나 최종적으로는 전역 최소값 근처에서 계속 돌아다닙니다. 배치와는 달리 값이 수렴하지 않고 변화합니다. 다만 전역 최소값에 매우 근접하기 때문에 문제는 되지 않습니다.
1~m까지의 연산을 한번만 진행하는 것이 아니고 1~10번 사이의 횟수로 반복합니다. 즉 외부 루프가 있습니다. 외부 루프의 숫자를 n이라고 한다면 최종 연산 횟수는 n*m 번이 되는 셈입니다. 숫자가 커보이지만 여전히 배치 경사 하강법보다는 훨씬 더 빠르기 때문에 , 큰 데이터 셋을 다룰 때는 확률적 경사 하강법이 유리합니다.
Mini-Batch Gradient Descent
이번에는 미니 배치 경사 하강법에 대해 설명합니다. 이 방식은 때때로 확률적 경사 하강법보다 조금 더 빠를 수도 있습니다.
미니 배치 경사 하강법은 배치 경사 하강법과 확률적 경사 하강법의 중간쯤에 위치한 방법입니다. 매 스탭마다 미니 배치 b의 값만큼 합 연산을 합니다. 만약 b가 10이라면 데이터 10개의 오차를 합하고 미분한 값을 파라미터에 업데이트합니다. 무작위로 데이터를 정렬하고 한 번에 10개의 데이터를 계산합니다. 평균 오차의 제곱을 구하기 위해 10으로 나누게 됩니다.
미니 배치 경사 하강법은 벡터화 구현이 잘되어 있는 경우에는 확률적 경사 하강법보다 성능이 우수합니다. 단점은 파라미터 b를 선정해야 한다는 점입니다. 적절하게 사용한다면 다른 경사 하강법보다 더 빠르게 결과를 낼 수 있습니다.
Stochastic Gradient Descent Convergence
확률적 경사 하강법이 제대로 동작하고 수렴하는 지를 확인하기 위해 학습률 alpha를 결정하는 방법에 대해 이야기합니다.
배치 경사 하강법에서 알고리즘의 수렴 여부를 확인하는 좋은 방법은 매 반복마다 오차의 지속적 감소를 보는 것 입니다. 데이터 셋의 크기가 작다면 어렵지 않지만 숫자가 아주 크다면 이를 확인하는 것이 어려울 수도 있습니다.
따라서 확률적 경사 하강법이 수렴하는 지를 확인합니다. 확률적 경사 하강법은 매 데이터마다 오차를 확인하고 파라미터를 업데이트합니다. 따라서 매 스탭마다 오차가 감소하는 것을 볼 수 있습니다. 실제로 감소한다면 가설이 잘 작동하고 있음을 나타냅니다. 그리고 매 1000번의 반복마다 전에 계산했던 오차의 평균을 그래프로 표시합니다. 이는 알고리즘 중간에 자연스럽게 도출되는 값이므로 추가적인 계산 비용이 들지 않습니다. 이를 시각화하면 수렴 여부를 쉽게 알 수 있습니다.
매 1000번째 반복마다 누적된 오차가 지속적으로 감소한다면 잘 작동하는 것 입니다. 그래프가 전혀 줄어들지 않고 진동할 수도 있습니다. 이럴 경우 1000번이 아니라 5000번 10000번으로 체크하는 반복 횟수를 늘려서 그래프를 보면 수렴하는 것을 확인할 수도 있습니다. 혹은 더 많은 데이터 예제가 필요할 수도 있습니다. 어쩌면 학습률을 변경하거나 다른 알고리즘으로 교체를 고려해야 합니다. 그래프가 확연하게 증가한다면 알고리즘이 발산하고 있으므로 학습률을 감소시켜야 합니다.
일반적으로 확률적 경사 하강법의 학습률은 일정한 상수로 유지하지만 경우에 따라서 학습률을 천천히 줄일 수도 있습니다. 이 경우 const1 과 const2라는 추가적인 파라미터가 필요합니다. 이는 지역 최소값에 근접하면 진동하는 특성을 줄이기 위한 목적입니다. 다만 전역 최소값에 충분히 가깝게 근접하기 때문에 잘 사용하지 않습니다.
혼자서 강의를 듣고 정리한 것이니 틀린 점이 있다면 언제든지 지적 부탁드립니다 :)
'Courses > Andrew Ng - Machine Learning' 카테고리의 다른 글
[Week 11] Photo OCR (0) 2022.02.28 [Week 10] Advanced Topic (0) 2022.02.25 [Week 9] Recommender Systems (0) 2022.02.09 [Week 9] Buidling an Anomaly Detection System (0) 2022.02.08 [Week 9] Anomaly Detection (0) 2022.02.08