엔씨소프트 Data Center 가 게임 유저 행동 로그를 유저 단위 임베딩 벡터로 만들 때 LSTM 기반 Seq2Seq-Autoencoder 에서 Transformer-Autoencoder 로 옮긴 과정을 다룬다. 학습 시간이 GPU 사용 시 epoch 당 40분에서 10분으로 줄었고, 부정사용자 탐지 downstream task 에서도 기존 모델보다 나은 결과를 냈다.
핵심 포인트- 출발점은 여러 프로젝트가 공통으로 쓰는 유저 행동 로그를 잘 함축한 임베딩으로 미리 만들어두자는 아이디어다.
- 첫 시도인 LSTM Seq2Seq-Autoencoder 는 세 가지 문제를 냈다. GPU 병렬 처리가 잘 안 돼 학습과 추론이 느리고, 고정 길이 context vector 라 정보 손실이 있고, 시퀀스가 길어 Long-Term Dependency 문제가 생겼다.
- BERT 를 먼저 검토했지만 MLM 과 NSP 학습 자체는 잘돼도 downstream task 성능이 기대에 못 미쳤다. 사전 크기 대비 모델이 커 과적합됐고, 반복 행동이 많은 게임 로그에는 NSP 가 맞지 않는다고 봤다.
- 최종 선택은 기본 Transformer Encoder-Decoder 에 Autoencoder 구조를 얹는 것이다. 입력과 출력이 같으므로 attention score 가 대각선 계단 형태로 나오는지로 학습 상태를 볼 수 있다.
- 학습 시간은 CPU 만 쓸 때 epoch 당 40분에서 GPU 1개 사용 시 10분으로 약 75퍼센트 줄었다. 같은 조건에서 LSTM 모델은 23퍼센트 감소에 그쳤다.
상세 정리- 로그는 시간 순으로 쌓이는 sequential data 라 ARIMA 같은 시계열 기법이나 RNN, LSTM 계열이 후보였지만, 데이터양이 커서 딥러닝 쪽에 집중했다.
- 처음에는 전체 로그가 아니라 유저의 지역 이동 로그만 써서 임베딩했고, 다른 프로젝트에 적용했을 때 기대한 성능이 나왔다.
- 다만 사전 크기를 조절해 속도를 개선해도, 다른 종류 로그까지 합치면 사전이 커져 학습 시간이 기하급수적으로 늘 것으로 봤다.
- 정보 손실 문제는 구체적이다. 비슷한 행동을 한 유저끼리는 코사인 유사도가 가깝게 나왔지만, 반복 행동을 하는 작업장 캐릭터와 전혀 다른 행동을 하는 일반 유저의 벡터가 가깝게 나오는 경우가 생겼다.
- 유저 한 명의 하루 로그는 수천에서 수만 건이라 시퀀스가 길 수밖에 없고, 도메인 지식으로 걸러내도 한계가 있었다.
- Transformer 입력은 Action Code, Context Code, Zone Code 세 피처를 밑줄로 이어 붙인 형태다. 게임머니 증가 같은 행동, NPC 상점 판매 같은 세부 카테고리, 지역 정보가 한 토큰에 담긴다.
- 지역 이동만 쓰면 모델 크기 대비 사전이 작아, 다른 피처도 함께 넣는 편이 학습에 낫다고 판단했다.
- 속도 차이의 근거로 Attention is all you need 의 계산 복잡도 표를 든다. n 이 d 보다 작으면 self-attention 의 레이어당 복잡도가 더 낮고, 순차 연산 최소 횟수도 RNN 만 시퀀스 길이에 비례한다.
- 저자는 구현 시 Tensorflow 보다 Pytorch 를 권한다. NLP 모델 라이브러리 상당수가 Pytorch 로 구현돼 있어서다. 멀티 GPU 텐서 분산 처리도 권한다.
- 비지도 학습이라 평가가 어려워 두 가지 정성 기준을 뒀다. 입력을 넣었을 때 출력이 입력을 얼마나 잘 복원하는지, 그리고 encoder 와 decoder 간 attention score 모양이다.
- 자기 자신을 많이 참조해야 하므로 attention score 가 대각선 계단 형태로 나와야 하는데, 실제로 그 모양이 나왔고 decoder layer 를 더 거칠수록 선명해졌다.
- 복원 성능은 test data 의 90퍼센트 이상에서 입력과 출력이 동일하게 나왔다.
- downstream task 는 불법 프로그램 사용자나 작업장 같은 부정사용자 탐지다. 이들은 게임머니를 한 아이디로 몰거나 특정 지역에서 같은 행동을 반복하는 패턴이 있어 로그에 차이가 드러난다.
- 추출한 임베딩 벡터를 이진 분류 딥러닝 모델의 입력으로 넣어 LSTM Autoencoder 기반과 confusion matrix 를 비교했고, 학습 데이터와 downstream 모델 구조를 동일하게 맞춘 조건에서 Transformer 쪽이 더 나았다.
- 남은 과제로 게임 업데이트로 새 지역이나 로그가 생기면 OOV 처리보다 재학습이 필요하다는 점, 로그 선별 방식 개선, 피처 수와 모델 성능의 trade-off, GPU 분산 병렬 처리를 꼽는다.
왜 읽나대량의 행동 로그를 임베딩해 여러 모델의 공통 입력으로 쓰려는 데이터 사이언티스트에게 LSTM 에서 Transformer 로 옮길 때의 근거와 비지도 학습 평가 방법을 보여주는 사례.