본문 바로가기

데이터/Machine Learning

[머신러닝] 온라인 러닝이란

개념

  • 온라인 머신러닝은 머신러닝의 종류로써, 데이터가 순차적으로 도착하는 머신러닝을 의미
  • 배치 방식의 기존 머신러닝과 대조적으로, 온라인 러닝은 그들 스스로를 점진적으로 업데이트하며, 한번에 하나의 데이터 포인트를 업데이트 합니다.
  • 온라인 학습은 학습이 끝나 배포된 모델에 대하여, 미니배치라 부르는 작은 묶음 단위의 데이터를 주입하여 모델을 학습시키는 방법입니다.
  • 미니 배치의 크기가 작아 학습 단계가 빠르고, 비용이 적게 들기에 모델은 데이터가 도착하는 대로 즉시 학습을 할 수 있습니다.
  • 점진적으로 학습이 일어나기 때문에 점진적 학습(Incremental learning)이라고도 하며, 오프라인으로도 시행되기도 하므로(외부 메모리 학습), 온라인 학습이라는 용어보다 점진적 학습이 정확한 명칭입니다.
  • 온라인 학습은 연속적으로 데이터를 받고 빠른 변화에 스스로 적응해야 하거나, 자원이 매우 한정된 환경에 적합합니다.
  • 온라인 학습 모델은 새로운 데이터 샘플을 학습하면, 학습이 끝난 데이터는 더 이상 필요하지 않기 때문에 보관하지 않아도 되므로 저장공간을 많이 아낄 수 있습니다.

 

예시

배송 서비스 회사를 운영한다고 가정할 때,

  • 사용자는 웹 사이트에 접속하여 물건을 A 장소에서 B 장소로 배송을 요청함. 사용자들이 반복적으로 접속하여 물건을 발송할 위치와 수신할 위치를 입력하고, 웹사이트는 출발지와 도착지 정보를 바탕으로 적정한 가격을 제안합니다.
  • 사용자가 제안 가격을 보고 배송 서비스를 이용한다면 y=1 positive 예제가 되며, 이용하지 않는 다면 y=0 negative 예제가 됩니다.
  • 따라서, 학습 알고리즘이 사용자에게 최적화 된 배송 가격을 제공하려고 한다고 가정합니다.
  • 구체적으로, 사용자의 속성을 파악하는 피처를 생각해봅니다.
  • 주요 피처는 지역별 인구, 배송할 물건의 출발지와 도착지 등입니다.
  • 웹 사이트는 주요 피처를 바탕으로 배달을 요청하는 사용자에게 배달 가격을 제시할 수 있습니다. 사용자들이 제시된 가격에 배달 서비스를 이용할 가능성을 추정할 수 있다면, 적정한 이윤을 얻으면서 웹사이트 이용 가능성을 높일 수 있습니다.
  • 만약 y=1 positive 예제에 해당하는 가격을 추정할 수 있다면, 신규 사용자에게 적절한 가격을 제시할 수 있다. y의 확률을 모델링하기 위해 로지스틱 회귀 또는 인공 신경망 알고리즘을 사용합니다.
  • 사용자들이 지속적으로 접속하는 웹사이트에서, 온라인 학습 알고리즘은 다음과 같은 일을 반복합니다.
  • 여기서 피처 x는 사용자가 지정한 출발지, 목적지, 그리고 웹사이트가 제시하는 가격입니다.
  • y는 사용자가 배달 서비스를 이용하기로 선택했는지의 여부를 나타냅니다.(선택 시 y=1, 선택하지 않으면 y=0)
  • 온라인 러닝 알고리즘은 접속한 사용자에 대해 (x, y)의 쌍을 바탕으로 파라미터 $\theta$값을 업데이트합니다.
  • 로지스틱 회귀 분석에서 이용하는 경사 하강 업데이트 규칙을 사용합니다.

 

기존 fit/predict 패러다임과 비교

  • 기존
    • fit : 각 요소들을 업데이트합니다.
    • predict : 요소를 인풋하면 결과를 출력해줍니다.
  • production system에서는 그 반대로, 시스템에서는 prediction을 먼저 생산합니다
  • 새로운 데이터는 정기적으로 들어오고, 각 데이터 포인트로부터 예측이 수행됩니다. 그 데이터들은 레이블링 되고, system을 retrain할 수 있는 학습 데이터가 생성된다.

 

온라인 러닝의 학습 과정

  • 확률적 경사 하강 알고리즘을 제외한 다른 알고리즘들은 루프에(x, y) 대신에 $(x^{(i)}, y^{(i)})$를 사용합니다.
  • 온라인 러닝 알고리즘은 고정된 학습 셋이라는 개념이 없고, 지속적으로 유입되는 사용자로부터 학습 예제 하나를 획득합니다.
  • 획득한 좋은 학습 예제를 학습한 후 폐기하며, 한 번 사용했던 예제를 다시 사용하지 않습니다. 그것이 온라인 러닝 알고리즘이 한번에 하나 예제만 사용하고 고정된 학습셋을 사용하지 않는 이유입니다
  • 사용자들이 지속적으로 유입되는 웹사이트는 충분히 새로운 데이터를 확보할 수 있기 때문에 과거의 데이터를 두 번 활용할 필요가 없습니다. 데이터는 충분하고 거의 무제한에 가깝기 때문입니다.
  • 반대로 사용자가 지속적으로 유입되지만 데이터가 충분하지 않다면, 모든 데이터를 고정된 학습 셋에 저장한 다음 알고리즘을 학습하는 것이 좋습니다.
  • 온라인 러닝 알고리즘은 연속적인 스트림이 발생하는 환경에서 매우 효과적

 

온라인 러닝의 특성

  • 새로운 데이터로부터 학습하기에 이전의 학습 데이터에 접근할 필요가 없습니다.
  • Trade off를 발생시킵니다.
  • 새로운 라벨 데이터를 즉시 업데이트하지만, 기존 배치단위 학습보다 정확도가 떨어집니다,
  • 정기적으로 재학습하는 배치 모델 대신, 이용 가능한 새로운 데이터가 쌓일 때마다 학습하고 싶을 때 사용합니다.
  • 온라인 세팅에선 train, test data로 나눌 필요가 없습니다. 피쳐 x값이 도달했을 때, 예측이 한번 수행되고, 나중에 실제 y값이 밝혀지면 모델이 x, y쌍으로 업데이트 될 때 총 2번에 걸쳐 데이터가 관찰됩니다.
  • 사용자 선호도의 변화의 적응할 수 있습니다.
    • 경제 상황이 변함에 따라 가격을 변경할 수 있습니다.
    • 새로운 유형의 사용자들이 지속적으로 증가하거나, 사용자들의 관심사가 바뀌었을 때 적응할 수 있습니다.
    • 온라인 러닝 알고리즘은 사용자 선호도의 변화에 따라 자동적으로 파라미터 $\theta$값을 천천히 조정할 수 있기 때문입니다.

 

온라인 학습의 문제점

  • 안좋은 데이터가 주입되었을 때, 시스템의 성능이 점진적으로 감소하게 됩니다.
  • 예를 들어, 실시간 추천 알고리즘에서 누군가가 자신이 만든 콘텐츠나 제품을 상위에 노출시키고자, 자신의 의도를 담은 데이터를 다량 생성할 수 있다. 이 경우, 모델은 이 데이터를 학습하여, 실제 알고리즘에서 노출시키고자 대상이 아닌, 누군가가 의도적으로 생성한 데이터를 노출 시킬 수 있습니다.
  • 때문에, 온라인 학습에서는 시스템을 지속적으로 모니터링하고, 성능 감소가 감지되면 즉시 학습을 중지시켜 성능 감소가 이루어지기 전 상태로 되돌려야 합니다.
  • 또는 이상 탐지 머신러닝 알고리즘을 데이터 수집 앞에 넣어, 비정상 데이터가 온라인 학습 모델에 들어가지 않게 막을 수도 있습니다.

 

온라인 러닝 적용 사례

  • 사용자들에게 검색 결과를 제공하는 방법을 학습합니다. (CTR 문제)
    • 사용자가 스마트폰을 검색하여 100개의 상품 중 10개의 상품만 검색 결과로 보여주는 문제가 있습니다.
    • 사용자 검색 키워드와 스마트폰의 속성을 비교합니다.
    • 피처 벡터 x는 스마트폰의 속성을 정의하고, 알고리즘은 사용자 검색 키워드가 스마트폰의 속성과 얼마나 유사한 지를 파악한다.
    • 주요 피처 x는 사용자 검색 키워드가 스마트폰의 이름과 일치하는 지, 스마트폰 설명과 몇개나 일치하는지 등을 파악한다.
    • 스마트 폰의 속성을 나타내는 피처 x와 사용자 검색 키워드가 얼마나 유사한 지를 파악한다. 그리고, 사용자가 표시한 검색 결과에서 특정 스마트폰에 대한 URL 링크를 클릭할 확률을 추정합니다.
    • 웹사이트는 사용자가 구매할 가능성이 높은 스마트폰을 보여주고 싶기 때문입니다.
    • 사용자가 클릭하면 y=1, 클릭하지 않으면 y=0로 예제를 구축합니다.
    • 알고리즘은 사용자가 특정 스마트폰의 링크를 클릭할 때 확률을 학습합니다.
    • 피처 x는 스마트폰의 속성과 사용자의 검색 키워드가 얼마나 일치하는 지를 파악하고, 클릭할 확률에 따라 검색 결과를 표시합니다.
    • 이러한 문제를 예측 클릭률(CTR, Click-Through Rate)라고 합니다.
    • 예측 CTR은 알고리즘이 사용자가 웹사이트가 제공하는 특정 링크를 클릭할 확률을 학습하는 것을 의미합니다.
    • 특정 스마트폰에 대한 예상 클릭률을 추정할 수 있다면, 웹사이트는 사용자가 클릭할 가능성이 가장 높은 스마트폰 10대를 표시할 수 있습니다.
    • 10 개의 x, y 쌍을 제공한다. 새로운 사용자가 검색할 때마다 학습 예제 (x, y)쌍을 얻은 다음 온라인 러닝 알고리즘은 10개의 스마트 폰을 표시하고 10번의 경사 하강법을 사용하여 파라미터를 업데이트합니다.
  • 협업 필터링 시스템이 있는 경우 사용자에게 추천할 수 있는 다양한 제품의 클릭률을 예측하기 위해 로지스틱 회귀 분류기에 추가 피처를 제공하는 협업 필터링 시스템을 상상할 수 있습니다.
  • 대규모 데이터 셋을 저장해놓고 학습 시킬 수 있지만, 그럴 필요 없이 온라인 러닝 알고리즘이 웹 사이트에서 지속적으로 생성되는 데이터를 연속적으로 학습할 수도 있습니다.

 

구현 라이브러리

from river import compose
from river import linear_model
from river import metrics
from river import preprocessing

model = compose.Pipeline(
		preprocessing.StandardScaler(),
		linear_model.LogisticRegression()
		)

metric = metrics.Accuracy()

for x, y in dataset:
    y_pred = model.predict_one(x)      # make a prediction
    metric = metric.update(y, y_pred)  # update the metric
    model = model.learn_one(x, y)      # make the model learn

>>> metric
Accuracy: 89.20%

 

자세히 공부하고 싶다면 아래 링크에 방문하시면 온라인 러닝 관련 글을 볼 수 있습니다.

https://github.com/online-ml/awesome-online-machine-learning#courses-and-books

참고 :

https://gooopy.tistory.com/123

https://brunch.co.kr/@linecard/563

https://maxhalford.github.io/blog/predict-fit-switcheroo/

https://www.youtube.com/watch?v=dnCzy_XKGbA