확장성이란 무엇인가?

엄청난 양의 데이터는 언제나 과학자들과 데이터 분석가들이 당면하는 도전 과제였습니다. 훈련 객체의 개수를 n이라 할 때 최근 머신 러닝 알고리즘의 계산 복잡도는 O(n²), 심지어 O(n³)에 이르는데, 과거에 과학자들과 데이터 분석가들은 좀 더 효율적인 데이터 알고리즘에 의존함으로써 그런 대용량 데이터세트와 관련된 문제를 처리했습니다.

데이터 세트는 사례가 많거나 변수들이 많은 경우, 아니면 이 둘 모두가 많은 경우 크기가 커질 수 있는데, 확장 가능한 알고리즘은 문제의 크기에 따라 실행 시간이 거의 선형으로 증가하므로 이런 데이터세트를 효율적으로 처리할 수 있습니다. 따라서 이는 더 많은 시간을 더 많은 데이터와 1:1로 교환하는 문제일 뿐입니다. 하지만, 어떠한 머신 러닝 알고리즘은 대용량 데이터를 다뤄야 하는 상황에서 확장되지 않습니다. 단순히 작업이 멈춘다거나 실행 시간이 지수 함수처럼 비선형적인 형태로 증가해서 학습이 불가능한 경우가 있습니다.

근래에는 저렴한 스토리지, 대용량 RAM, 다중 프로세서 CPU의 도입으로 엄청난 변화의 물결이 있었습니다. 이러한 큰 변화의 주인공은 바로 하둡 분산 시스템(Hadoop Distributed File System) 기반의 오픈소스 프레임워크인 하둡(Hadoop), 맵리듀스(Map Reduce), 그리고 일반적인 컴퓨터 네트워크상의 병럴 처리 기법이 있습니다.

이러한 변화가 규모가 큰 문제를 해결하는 방법에 얼마나 깊고 긍정적인 영향을 미쳤는지 확인하기 위해 대용량 데이터세트의 분석을 방해했던, 방해하고 있는 요인들을 알아보도록 하겠습니다.

  • 분석에 걸리는 시간에 영향을 미치는 연산(Computing)
  • 단위 시간당 스토리지에서 메모리로 이동하는 데이터양에 영향을 미치는 I/O
  • 한 번에 처리할 수 있는 데이터양에 영향을 미치는 메모리

또한, 하드웨어가 가지는 한계는 분석 중인 데이터 유형에 따라 많은 영향을 미치게 됩니다.

  • 긴 데이터(Tall Data) : 사례의 수가 많은 데이터
  • 넓은 데이터(Wide Data) : 특징(Featuress)의 개수가 많은 데이터
  • 길고 넓은 데이터(Tall and Wide Data) : 특징과 사례가 모두 많은 데이터
  • 희소 데이터(Sparse Data) : 0 성분 개수가 많거나, 0으로 변환돌 가능성이 있는 성분 데이터가 많은 데이터

추가적으로, 데이터로 학습을 진행하기 위해서는 사용할 알고리즘이 중요합니다. 각 알고리즘마다 자신만의 특성을 가지는데, 이 특성은 편향(Bias) 혹은 분산(Variance)에 따라 서로 상이하게 영향을 받는 방법을 사용해서 데이터를 매핑하는 방식에 기인합니다. 따라서 지금까지 머신 러닝으로 해결해왔던 문제들에 관해서는 경험 혹은 실증적 검증에 근거해 특정 알고리즘이 다른 알고리즘보다 더 낫다고 판단했습니다. 규모가 큰 문제를 다룰 때는 알고리즘을 결정할 때 이외에 또 다른 사항들을 추가로 고려해야 합니다.

알고리즘이 얼마나 복잡한가?

즉, 데이터에서 행과 열의 개수가 선형 혹은 비선형 비례 관계로 연산 횟수에 영향을 미치는지 살펴봐야 합니다. 대부분의 머신 러닝 기법들은 이차(Quadratic) 혹은 삼차(Cubic) 복잡도를 갖는 알고리즘에 기반하므로 이들을 빅데이터에 적용하는 데에는 많은 제약이 따릅니다.


모델이 얼마나 많은 파라미터를(Parameters)를 갖는가?

이는 단순히 예측값들의 분산에 관한 문제(과적합)가 아닌 그 모두를 계산하는 데 걸리는 시간과 관련된 문제입니다.


최적화 과정이 병렬로 처리될 수 있는가?

다수의 노드들 혹은 CPU 코어들로 연산을 쉽게 분할할 수 있는지? 혹은 순차적인 단일 최적화 과정에 의존해야만 하는가?


해당 알고리즘은 한 번에 모든 데이터로부터 학습을 하는가? 아니면 단일 객체들(Examples) 혹은 작은 배치(Batches) 데이터를 사용할 수 있는가?

위와 같은 문제들은 다음과 같은 접근 방식을 통해 해결할 수 있습니다.

  • 스케일 업(Scale-up) : 소프트웨어 혹은 하드웨어 교체를 통해 단일 머신의 성능을 향상시키는 방법
  • 스케일 아웃(Scale-out) : 주로 스토리지 디스크와 그 외 CPU 같은 외부 자원들을 활용하는 다수의 머신들로 연산을 분산시키는 방법
  • 스케일 업 및 스케일 아웃, 최적의 스케일 업 기법과 스케일 아웃 기법을 함께 활용하는 방법


+ Recent posts