티스토리 뷰

반응형

Facebook이 제안한 PIM 관련해 Embedding table에 대한 설명이 필요해서 이 글을 작성하게 되었습니다. PIM 글 내에서 다루려 했는데 내용이 길어질 것 같아 여기에 정리합니다.

Embedding table이란?

Embedding table는 Categorical data를 Numerical data로 변환하며 이를 통해 Sparse matrix가 Dense matrix로 바뀌어 연산의 효율성을 높일 수 있습니다. 위 문장만 보면 한글로 써있지만 무슨 말인지 해석인 안될 수 있을텐데 이제 차근차근 설명하겠습니다.

Categorical data vs. Numerical data

Categorical data는 수치로 표현할 수 없는, Matrix로 표현할 때 각 속성을 하나의 고유한 Category 형태로 Column으로 부여해야 하는 Data를 말합니다. 예를 들어 영화라는 Data를 Matrix로 표현한다면 각 영화명 '어벤져스', '베트맨', '슈퍼맨' 등을 각 Column으로 표현하고 각 이용자가 영화를 봤는지 안 봤는지를 해당 Column에 대한 1 혹은 0으로 나타냅니다(One-hot encoding 방식). 이와 반대로 Numerical data는 다양한 속성을 하나의 Column에서 수치값의 차이로 표현 가능합니다. 예를 들어, 나이의 경우 동일한 Column내에서 각 사용자 별로 몇 살인지를 수치로 다르게 해서 표현할 수 있죠. 이러한 Data의 특성 차이 때문에 Categorical data는 Sparse matrix, Numerical data는 Dense matrix의 형태를 갖습니다.

Numerical과 Categorical data 비교 (source: English Tenses)

 

Sparse matrix에서 Sparse는 '0'아닌 값이 Matrix 내에서 매우 드물게 존재한다는 의미입니다. 0은 의미가 없기 때문에 0 아닌 값의 존재가 Deep learning 연산에서 중요한데 이 중요한 값이 별로 없으니 연산이 비효율적이죠. 비효율적이란 말은, DRAM으로부터 커다란 Matrix를 불러왔는데 실제 연산할 값은 얼마 안되는 것을 의미합니다. 위의 Netfix 예를 든다면, 약 7만개의 영상(영화, 드라마 포함)이 있다고 하는데 실제 사용자가 본 동영상의 수는 많아봤자 수백개에 불과하겠죠. 따라서 7만개의 Entry 중 수백개만 의미 있는 Sparse data가 됩니다. 이에 반해 Numerical data는 거의 모든 사용자가 해당 속성을 보유하고 있기 때문에 '0'으로 표시된 의미 없는 정보가 거의 없죠. 나이를 예로 든다면 모든 사용자가 나이가 표시될 테니까요.

Embedding table을 통한 Numerical data로의 전환

따라서 연산 효율성을 높이기 위해, 우리의 AI 엔지니어들은 Embedding table를 활용해 Sparse matrix인 Categorical data를 Dense matrix인 Numerical data로 전환합니다. Embedding table은 원래 언어관련 Deep learning 모델에서 나왔습니다. 단어 또한 앞에서 말한 영화와 마찬가지로 수치화할 수 없는 Categorical data에 해당합니다. Embedding table은 단어의 의미를 파악해서 의미 구조가 유지될 수 있도록 n차원의 공간으로 categorical data를 numerical data로 변환합니다. 따라서 각 단어는 n차원 공간에서의 좌표(위치)를 나타내는 vector로 표현되죠. 의미 구조가 유지된다는 예로 'king' - 'man' + 'woman' = 'Queen'를 듭니다.

Word embedding의 시각적 표현 (source: vhrehfdl.github.io)

아래 그림의 예를 보고 설명한다면, 각 단어(the, cat, sat, mat, on)를 표현하기 위해 오른쪽의 One-hot encoding에서는 각 단어를 Column으로 놓고 해당 여부를 1로 표현합니다. 실제로는 Category의 수가 수만~수백만이기 때문에 Matrix size가 매우 커지겠죠. 반대로 왼쪽의 Embedding table 형태에서는 각 단어를 4차원의 한 점으로 표현합니다. 따라서 Matrix size가 작아지죠. 실제 Embedding table의 vector size는 수십에서 수백차원으로 줄어듭니다. 따라서 Categorical data의 수만~수백만 차원에서 Embedding table의 수십~수백 차원으로 줄어드는 엄청난 효율 개선이 이뤄지죠.

Embedding table(좌)과 Categorical data(One-hot encoding, 우)의 비교 (source: tensorflow.org)

다시 Deep learning으로 돌아가면, 추천 관련해서 가장 부담이 되는 부분은 Embedding table의 보관과 Look-up 및 관련 연산입니다. 다른 Deep learning에 비하면 DNN 형태의 연산은 Layer 수도 적고 Size도 적어서 덜 부담스럽습니다. 아무리 Embedding table의 형태로 Dense format이 되었다고는 하지만 수많은 Category를 표현하는 Matrix의 형태이기 때문에 하나의 Embedding table이 수 GB까지 갑니다(Facebook paper 참고). 또한 다양한 고객 경험, 정보를 반영해야하기 때문에 여러개의 Embedding table을 가지고 있어야 해서 총 합계로는 수십 GB가 있어야 하므로 DRAM에 부담이 가겠죠. 이러한 이유에서 Facebook이 시스템 성능(효율성) 향상을 위해 DRAM PIM 개념을 제안하게 되었습니다. 관련 이야기는 다음 글(PIM(processing in memory)란? - 2)에서 이어가겠습니다.

반응형
댓글
글 보관함