Vowpal Wabbit의 해싱트릭과 온라인 학습

Online Learning Perceptron in Python

파이썬으로 표준 라이브러리를 사용해서 위의 퍼셉트론 알고리즘을 구현했기 때문에 스크립트가 PyPy에서 실행되고 3-4배의 속도향상이 있다. 여기에 사용된 알고리즘은 Kaggle 포럼에서 처음 발견 된 tinrtgu의 온라인 로지스틱 회귀 스크립트에서 큰 영감을 얻었다고 한다.

다음 경진대회에서 Vowpal Wabbit을 통한 해시트릭을 사용하였고 코드가 공개되어 있다.

온라인 학습

퍼셉트론은 온라인 학습이 가능하다(한 번에 하나씩 샘플을 통해 학습). 메모리에 전체 데이터 세트가 필요하지 않으므로(out-of-core) 더 큰 데이터 세트에 유용하다. 여기에서는 Vowpal Wabbit에서 온라인 학습 코드를 가져왔다.

해싱 트릭

벡터화 해싱 트릭은 Vowpal Wabbit(John Langford)에서 시작되었다. 이 트릭은 퍼셉트론으로 들어오는 연결 수를 고정 된 크기로 설정한다. 고정 된 크기보다 낮은 숫자로 모든 원시 피처를 해싱한다. Vowpal Wabbit은 모든 데이터를 메모리로 읽어들이지 않고 모델을 훈련 시킬 수 있는 빠른 머신러닝 라이브러리다.

sample = "This movie sucks"
fixed_size = 1024

print(sample.split())

features = [(hash(f)%fixed_size,1) for f in sample.split()]

# list of tuples in form (feature_index,feature_value)
print(features)

['This', 'movie', 'sucks']
[(746, 1), (981, 1), (282, 1)]

프로그레시브 검증 손실

한 번에 하나씩 표본을 학습하면 점진적으로 train loss가 된다. 모델이 타겟을 보지않고 첫 샘플을 보고 예측을 한다.
그런 다음 예측을 대상 레이블과 비교하여 오류율을 계산 한다. 오류율이 낮으면 좋은 모델에 가깝다.

Multiple passes

Vowpal Wabbit을 사용하면 학습률이 떨어지는 데이터 집합을 여러 번 통과시킬 수 있다.

오류율이 낮아지면 데이터 세트를 여러 번 실행할 수도 있다. 트레이닝 데이터가 선형 적으로 분리 가능한 경우, 퍼셉트론은 트레이닝 세트에서 오차가 0으로 수렴된다.

# opts["D"] 여기에 있는 코드에서는 고정 값으로 다음의 값을 사용한다.
2 ** 25

33554432

  • 위 코드에서는 pandas, numpy, scipy같은 도구를 사용하지 않고 파이썬에 내장 된 기능만을 사용해 학습하도록 한다.
  • 원래 코드는 파이썬2로 되어 있지만, 파이썬3에서 돌아가도록 코드의 일부를 수정하였다.

  • 소스코드 출처 https://github.com/MLWave/online-learning-perceptron

강의에 등록된 질문이 없습니다. 궁금한 부분이 있으면 주저하지 말고 무엇이든 물어보세요.