사용자가 좋아하는 음식을 입력하면 비슷한 음식을 추천해 주는 음식 추천 애플리케이션을 개발하고 있다고 가정해 보겠습니다. 이 앱은 사용자가 좋아할 만한 음식을 정확히 추천하기 위해, 음식 간의 유사성을 예측할 수 있는 머신러닝(ML) 모델을 필요로 합니다. 예를 들어, “팬케이크를 좋아하신다면 크레페를 추천합니다”처럼 말이죠.
모델을 학습시키기 위해 수프, 핫도그, 샐러드, 피자, 샌드위치 등 인기 있는 5,000개의 음식 항목으로 구성된 데이터 세트를 선별합니다.

데이터 세트에 있는 각 음식 항목을
원-핫 인코딩
으로 표현한 meal
특성을 만듭니다.
인코딩이란 모델 학습을 위해 데이터의
초기 수치적 표현을 선택하는 과정을 의미합니다.
![그림 2. 상단: 수프의 원-핫 인코딩 시각화.
벡터 [1, 0, 0, 0, …, 0]이 여섯 개의 상자 위에 표시되어 있으며,
각 상자는 왼쪽에서 오른쪽으로
벡터의 숫자와 일치하도록 정렬되어 있습니다. 상자에는 다음과 같은 이미지가
왼쪽에서 오른쪽 순으로 들어 있습니다: 수프, 핫도그, 샐러드, 피자, [비어 있음],
샌드위치. 중간: 핫도그의 원-핫 인코딩 시각화.
벡터 [0, 1, 0, 0, …, 0]이 여섯 개의 상자 위에 표시되어 있으며, 각 상자는
벡터의 숫자들과 왼쪽에서 오른쪽으로 정렬되어 있습니다. 상자의 이미지 배열은 위 수프 시각화와 동일합니다. 하단: 샌드위치의 원-핫 인코딩 시각화. 벡터 [0, 0, 0, 0, …, 1]이 여섯 개의 상자 위에 표시되어 있으며, 각 상자는
벡터의 숫자들과 왼쪽에서 오른쪽으로 정렬되어 있습니다. 상자는 왼쪽에서
오른쪽으로 수프와 핫도그 시각화에서 사용된 이미지들과 동일한 이미지를 가지고
있습니다.](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/food_images_one_hot_encodings.png?hl=ko)
희소 데이터 표현의 일반적인 문제
이러한 원-핫 인코딩을 검토해 보면, 데이터 표현 방식에 다소 문제가 있다는 것을 알 수 있습니다.
- 가중치 수. 입력 벡터가 클수록 신경망에 필요한 가중치의 수도 많아집니다. 원-핫 인코딩에 M개의 항목이 있고, 입력 후 첫 번째 레이어에 N개의 노드가 있다면, 그 레이어에 M×N개의 가중치를 학습해야 합니다.
- 데이터 포인트 수. 모델의 가중치가 많을수록 효과적인 학습을 위해 더 많은 데이터가 필요합니다.
- 계산량. 가중치가 많을수록 모델을 학습하고 사용하는 데 더 많은 계산이 필요합니다. 따라서 하드웨어가 이를 지원하지 못할 가능성이 높습니다.
- 메모리양. 모델에 가중치가 많을수록, 모델을 학습하고 처리하는 가속기에 더 많은 메모리가 필요합니다. 이를 효율적으로 확장하는 것은 매우 어렵습니다.
- 기기 내 머신러닝(ODML) 지원의 어려움. 로컬 디바이스에서 ML 모델을 처리하지 않고 실행하려면 모델을 작게 만드는 데 집중해야 하며 가중치의 수를 줄이는 것이 중요합니다.
이 모듈에서는 이러한 문제를 해결할 수 있는 희소 데이터의 저차원 표현인 임베딩을 만드는 방법을 학습합니다.