특성 해싱(feature hashing)은 해싱 트릭(hashing trick)이라고도 알려져 있으며, 고차원의 희소 범주형 특성을 컴팩트한 고정 크기 벡터 표현으로 변환하는 머신 러닝 기법입니다. 각 특성 이름(또는 토큰)에 해시 함수를 적용하여 출력 벡터에서의 인덱스를 결정하고, 선택적으로 두 번째 해시 함수를 적용하여 기여도의 부호를 결정합니다. 이 방법은 별도의 특성 사전을 유지할 필요가 없어 메모리와 계산 오버헤드를 줄이지만, 해시 충돌이 발생하여 모델 성능을 약간 저하시킬 수 있는 비용이 있습니다.
이 기법은 온라인 광고, 텍스트 분류, 추천 시스템과 같은 대규모 학습 작업에서 특히 유용하며, 고유 특성 수가 수백만 또는 수십억 개에 달할 수 있습니다. 특성을 예를 들어 10,000에서 100만 차원의 공간으로 매핑함으로써, 특성 해싱은 선형 모델이나 신경망을 사용한 효율적인 학습을 가능하게 하며, 정확도 손실은 종종 무시할 수 있는 수준입니다.
역사와 기원
특성 해싱의 개념은 2000년대 초반에 자연어 처리와 커널 방법에서 독립적으로 발전한 데 뿌리를 두고 있습니다. 가장 초기의 발표된 사용 사례 중 하나는 2007년 John Langford와 동료들이 스팸 탐지를 위한 대규모 학습에 적용한 것입니다. 이 기법은 2009년 Kilian Weinberger와 동료들이 발표한 논문 "Feature Hashing for Large Scale Multitask Learning"에서 공식화되고 여러 작업에서 효과를 입증하면서 더 널리 인정받게 되었습니다.
그 이전에는 2007년 Ali Rahimi와 Benjamin Recht의 무작위 특성 작업과 같은 커널 근사를 위한 해싱 맥락에서 유사한 아이디어가 나타났습니다. 특성 해싱은 Langford가 Yahoo! Research에서 개발한 Vowpal Wabbit 학습 시스템에서 사용된 "해싱 트릭"과도 밀접한 관련이 있습니다.
작동 방식
특성 해싱은 두 가지 주요 단계로 작동합니다. 첫째, 각 특성 이름(예: 단어 또는 범주형 값)은 일반적으로 32비트 또는 64비트 해시인 해시 함수를 통과하여 정수를 생성합니다. 그 정수는 원하는 출력 차원으로 모듈로 축소되어 특성 값(존재 여부에 따라 종종 1)이 누적되는 인덱스를 제공합니다. 충돌로 인한 편향을 줄이기 위해 두 번째 해시 함수가 기여도의 부호(+1 또는 -1)를 결정하여 충돌이 평균적으로 상쇄되는 경향이 있게 합니다.
예를 들어, 텍스트 분류에서 문서의 각 단어는 크기가 100,000인 벡터의 인덱스로 해시됩니다. 그 벡터는 선형 분류기나 신경망의 입력으로 사용됩니다. 해시 함수는 결정적이므로 동일한 특성은 항상 동일한 인덱스로 매핑되어 학습과 추론 전반에 걸쳐 일관성을 보장합니다.
주요 장점은 특성 사전을 저장할 필요가 없다는 점이며, 이는 특성 공간이 메모리에 맞지 않을 정도로 클 때 중요합니다. 그러나 서로 다른 특성이 동일한 인덱스로 매핑되는 충돌이 발생하여 간섭을 일으킬 수 있습니다. 출력 차원이 특성 수에 비해 충분히 크면 영향은 일반적으로 작습니다.
머신 러닝에서의 응용
특성 해싱은 특히 온라인 학습과 분산 컴퓨팅 맥락에서 대규모 머신 러닝 시스템에 널리 사용됩니다. 이는 광고에서 클릭률 예측에 사용되는 Vowpal Wabbit 라이브러리의 핵심 구성 요소입니다. 또한 자연어 처리에서 단어 가방 표현에 사용되어 각 문서를 해시된 벡터로 변환하고, 대규모 텍스트 말뭉치에서 분류기 학습을 효율적으로 가능하게 합니다.
추천 시스템에서 특성 해싱은 사용자 및 항목 ID와 맥락적 특성을 컴팩트한 표현으로 인코딩하여 명시적 조회 테이블 없이 수백만 명의 사용자와 항목을 처리할 수 있게 합니다. 또한 XGBoost 및 LightGBM과 같은 그래디언트 부스팅 머신의 특성 엔지니어링에 사용되어 범주형 특성을 해싱하여 메모리 사용을 줄입니다.
최근에는 딥 러닝의 임베딩 레이어에 특성 해싱이 적용되어, 특히 희귀하거나 보이지 않는 범주에 대해 학습된 임베딩의 고정 크기 대안으로 사용됩니다. 이 접근 방식은 때때로 "해싱 임베딩"이라고 불리며, 새 특성이 자주 나타나는 온라인 학습 시나리오에서 유용할 수 있습니다.
장점과 한계
특성 해싱의 주요 장점은 메모리 효율성입니다. 사전이 필요 없으므로 해시 출력 차원이 고정되어 있는 한 무제한의 특성을 가진 데이터로 모델을 학습할 수 있습니다. 이는 특성이 즉석에서 발견될 수 있는 스트리밍 또는 분산 환경에서 특히 유용합니다.
또 다른 장점은 단순성입니다. 구현이 간단하고 복잡한 전처리가 필요하지 않습니다. 또한 각 특성을 독립적으로 해시할 수 있어 병렬화가 용이합니다.
그러나 특성 해싱에는 한계가 있습니다. 해시 충돌은 특히 출력 차원이 너무 작을 때 모델 정확도를 저하시킬 수 있습니다. 이 기법은 해시된 인덱스를 원래 특성 이름으로 다시 매핑할 수 없어 해석 가능성도 잃게 되며, 별도의 매핑을 저장하면 목적이 무의미해집니다. 또한 해시 함수와 출력 차원의 선택에는 튜닝이 필요하며, 충돌률과 메모리 사용 간의 절충이 있습니다.
대안 방법과의 비교
특성 해싱은 원-핫 인코딩, 레이블 인코딩, 학습된 임베딩과 같은 다른 차원 축소 기법과 자주 비교됩니다. 원-핫 인코딩은 간단하지만 사전이 필요하고 고차원 특성에 대해 매우 메모리 집약적일 수 있습니다. 레이블 인코딩은 정수 ID를 할당하지만 임의의 순서를 부과하여 범주형 데이터에 오해를 줄 수 있습니다. 신경망에서 사용되는 것과 같은 학습된 임베딩은 의미적 관계를 포착할 수 있지만 학습과 고정 어휘가 필요합니다.
특성 해싱은 이러한 접근 방식 사이에 있습니다. 원-핫 인코딩보다 메모리 효율적이고, 레이블 인코딩의 순서 문제를 피하며, 학습이나 어휘가 필요하지 않습니다. 그러나 임베딩이 할 수 있는 특성 간 관계를 포착하지는 못합니다.
실제로 특성 해싱은 다른 방법이 규모로 인해 실행 불가능할 때 기준선 또는 대체 수단으로 자주 사용됩니다. 또한 데이터 증강이나 모델 가지치기와 같은 다른 기법과 결합되어 프로덕션 시스템의 효율성을 개선합니다.
최근 발전과 연구
특성 해싱에 대한 연구는 특히 딥 러닝과 대규모 시스템 맥락에서 계속되고 있습니다. 연구들은 해시 충돌이 모델 성능에 미치는 영향을 분석하여 출력 차원 선택에 대한 지침을 제공했습니다. 일부 작업은 데이터 분포에 적응하여 충돌을 줄일 수 있는 학습된 해시 함수를 제안했습니다.
대규모 언어 모델 시대에는 이러한 모델이 일반적으로 토큰화와 학습된 임베딩을 사용하기 때문에 특성 해싱의 중요성은 덜합니다. 그러나 표 형식 데이터의 범주형 특성을 처리하고 머신 러닝 파이프라인에서 효율적인 특성 엔지니어링을 위한 관련성은 여전히 유지됩니다.
최근 작업은 연합 학습 및 개인 정보 보호 환경에서 특성 해싱의 사용도 탐구했으며, 여기서 해시는 특성 난독화의 한 형태로 작용할 수 있습니다. 또한 AWS Trainium 및 Google Cloud TPU와 같은 하드웨어 가속기는 특성 해싱이 제공하는 메모리 사용 감소의 이점을 얻을 수 있습니다.
전반적으로 특성 해싱은 성숙한 기법으로, 대규모 및 자원 제약 환경에서 새로운 응용을 계속 찾고 있습니다.