임베딩: 범주형 입력 데이터

범주형 데이터는 유한한 선택 집합에서 하나 이상의 개별 항목을 나타내는 입력 특성을 나타냅니다. 예를 들어 사용자가 시청한 영화 세트나 문서에 사용된 단어 모음, 직업이 될 수 있습니다.

범주형 데이터는 희소 텐서를 통해 가장 효율적으로 표현됩니다. 희소 텐서는 0이 아닌 요소가 거의 없는 텐서입니다. 예를 들어 영화 추천 모델을 빌드한다면 가능한 각 영화에 고유 ID를 할당한 다음 그림 3과 같이 시청한 영화의 희소 텐서로 각 사용자를 나타낼 수 있습니다.

영화 추천 문제에 관한 샘플 입력입니다.

그림 3. 영화 추천 문제에 관한 데이터

그림 3 행렬의 각 행은 사용자의 영화 시청 기록을 캡처한 예입니다. 각 사용자는 가능한 모든 영화의 일부만 시청하므로 희소 텐서로 표현됩니다. 마지막 행은 영화 아이콘 위에 표시된 어휘 색인을 사용하여 희소 텐서 [1, 3, 999999]에 해당합니다.

마찬가지로 단어, 문장, 문서를 희소 벡터로 나타낼 수 있으며 여기서 어휘의 각 단어는 추천 예시의 영화와 비슷한 역할을 합니다.

머신러닝 시스템에서 이러한 표현을 사용하려면 의미론적으로 유사한 항목(영화 또는 단어)이 벡터 공간에서 비슷한 거리에 있도록 각 희소 벡터를 숫자 벡터로 표현하는 방법이 필요합니다. 하지만 단어를 숫자 벡터로 어떻게 표현할 수 있을까요?

가장 간단한 방법은 어휘의 모든 단어에 대한 노드 또는 적어도 데이터에 표시되는 모든 단어에 대한 노드가 있는 거대한 입력 레이어를 정의하는 것입니다. 데이터에 500,000개의 고유한 단어가 표시되면 벡터를 길이 500,000인 단어를 표현하고 각 단어를 벡터의 슬롯에 할당할 수 있습니다.

'호스'에 색인 1247을 할당한 다음 네트워크에 '말'로 지정하면 1247번째 입력 노드에 1을, 나머지 노드에는 0을 복사할 수 있습니다. 이러한 종류의 표현은 원-핫 인코딩이라고 하며 이는 하나의 색인만 0이 아닌 값을 갖기 때문입니다.

더 일반적으로는 벡터에 더 큰 텍스트 청크의 단어 수가 포함될 수 있습니다. 이를 가리켜 '단어 집합'이라고 합니다. 단어 집합 벡터에서 500,000개 노드 중 일부에는 0이 아닌 값이 있습니다.

하지만 0이 아닌 값을 결정하더라도 단어당 노드 1개당 입력 벡터를 매우 희소하게 제공하므로 값이 0이 아닌 비교적 큰 벡터를 사용할 수 있습니다. 희소 표현에는 모델이 효과적으로 학습하기 어렵게 하는 몇 가지 문제가 있습니다.

네트워크 크기

입력 벡터가 거대하다는 것은 신경망의 엄청난 수의 가중치를 의미합니다. 어휘에 M 단어와 입력 위의 네트워크 첫 번째 레이어에 N개의 노드가 있으면 해당 레이어에 대해 학습할 MxN 가중치가 있습니다. 가중치가 많으면 추가적인 문제가 발생합니다.

  • 데이터의 양. 모델의 가중치가 많을수록 효과적으로 학습하는 데 더 많은 데이터가 필요합니다.

  • 계산량. 가중치가 많을수록 모델을 학습시키고 사용하는 데 더 많은 계산이 필요합니다. 따라서 하드웨어의 기능을 넘기 쉽습니다.

벡터 간의 의미 있는 관계 부족

RGB 채널의 픽셀 값을 이미지 분류기에 공급하면 'close' 값에 관해 이야기하는 것이 좋습니다. 적색 파란색은 의미론적으로 그리고 벡터 간 기하학적 거리 면에서 순수한 파란색에 가깝습니다. 하지만 "horse"에 대해 색인 1247에 1이 있는 벡터는 '텔레비전'에서 색인 238에 1을 갖는 벡터보다 '

솔루션: 임베딩

이러한 문제의 해결책은 큰 희소 벡터를 시맨틱 관계를 보존하는 저차원 공간으로 변환하는 임베딩을 사용하는 것입니다. 임베딩은 직관적이고 개념적이며 프로그래매틱 방식으로 이 모듈의 다음 섹션에서 살펴봅니다.