[어떻게 기계학습이 Facebook News | 커리어리

[어떻게 기계학습이 Facebook News Feed 순위 알고리즘을 더 좋게 만들까? 📮] 기계학습의 신석기시대 즈음 그러니까 2010년 경, Facebook은 News Feed 순위를 정하는 데 EdgeRank라는 규칙 기반 시스템을 적용하고 있다고 언급했습니다. 게시물 순위가 게시자에 대한 친밀함, 즉 기존에 반응했던 이력과 게시물의 유형(사진, 동영상 등), 최신성 이렇게 3가지 요소로 결정된다는 내용입니다. 2013년 Facebook은 EdgeRank를 기계학습으로 대체했고 여기에 피쳐 약 10만여 개를 사용하고 있다고 밝혔습니다. 여전히 알고리즘 상세는 알 수 없지만 지난 1월 26일 엔지니어링 블로그를 통해 대략의 얼개를 소개했습니다. 가상의 사용자 K가 Facebook을 접속한 순간부터 News Feed 순위가 결정되어 노출될 때까지 몇 millesecond 시간을 따라가며 전체 흐름을 이해해봅시다. 1. K가 아침에 일어나니 Facebook 알림이 와있네요. 썸녀가 단 댓글일까요? 이건 못 참죠. 😔 졸린 눈을 비비며 Facebook 앱을 켭니다. 접속 수단이 아이폰이 됐든, 웹 브라우저가 됐든 Front-end인 Web / PHP Layer가 Feeds Aggregator에 질의를 던집니다. 잠깐, Aggregator에 대해 설명드릴게요. 이건 두 축의 워크플로를 가지고 있습니다. 한 축은 서비스를 위한 데이터베이스, 즉 Back-end 인프라입니다. 좋아요를 누른다든가 등등 사용자가 취한 모든 행동들이 흘러들어와 DB에 저장되고 앱은 현재 상태를 지속적으로 동기화시킵니다. 다른 한 축은 기계학습을 위한 것입니다. 노출된 게시물에 속하는 각종 피쳐와 응답 레이블이 수집, 결합되어 훈련 데이터셋을 구성합니다. 모델을 학습하고 다시 Aggregator에 배포합니다. 2. 자, 그럼 질의 요청받은 Aggregator 입장으로 돌아가 보죠. 이제 노출시킬 게시물 후보들을 정해야 합니다. 인벤토리를 뒤져서 K가 어젯밤 앱을 떠난 이후 밤새 작성된 K의 친구들 게시물을 수집합니다. 그리고 어제 K가 접속했을 때 존재했지만 끝까지 스크롤하지 않아 노출이 안된 게시물, 밤새 새롭게 댓글이 달린 게시물 또한 수집 대상입니다. 3. 각 게시물 후보에 해당하는 피쳐들이 존재합니다. K와 게시자 간의 관계, 게시물의 유형, 게시물의 임베딩 된 표현 정보 등 말입니다. 이 피쳐들로 K가 좋아요를 누를지, 공유할지 또는 댓글을 달지, 다양한 사용자 행동을 예측합니다. 즉, Multi-task 신경망 추론을 통해 각 행동의 발생 확률을 구합니다. 4. 좋아요를 누르고 공유하고 댓글을 달고... 이 다양한 예측값을 이용하여 순위를 결정할 단일 점수를 계산해야 합니다. 특정 게시물에 사용자가 부여할 진정한 가치 말입니다. 이걸 어떻게 계산할 수 있을까요? Facebook은 다양한 사용자 집단에게 Survey를 수행합니다. 각 행동들이 콘텐츠의 가치를 얼마나 대표하는지 조사하는 거죠. 여기서 개인화가 발생합니다. 수줍은 심성의 K가 댓글보다는 좋아요를 누르며 반응하는 집단의 사용자라면, 좋아요 예측값에 가중치를 높게 부여해서 단일 점수가 최종 계산될 것입니다. 5. 순위 결정 작업은 두 단계로 이뤄집니다. 먼저 경량 모델로 Recall를 높게 유지하며 후보 약 500개를 추려냅니다. 그다음에는 좀 더 강력한 신경망 모델로 최종 순위를 결정합니다. 마지막으로 후처리 과정을 적용합니다. 예를 들면 동영상이 연달아 News Feed에 나오지 않게, Diversity를 높일 목적으로 순위를 미세 조정합니다. 6. 몇 millesecond 안에 위 과정이 실행되어 K의 아침 News Feed가 생성됩니다. K는 찬찬히 스크롤하다가 썸녀가 새벽에 올린 공개 연애 시작 글에 좋아요를 살포시 누릅니다. 그래요, 난 아닌 건가요. 😔 이 행동은 Aggregator을 위한 워크플로를 통해 수집되고 모델링 프로세스에 재편입됩니다. 네, 이상입니다. 기계학습 자체보다는 Sub-optimal이 될 수 있는 좋아요 예측에 천착하지 않고 Survey를 통해 고객 가치를 계량해내는 UX적 접근, 그리고 전 세계 수십억 명에게 실시간으로 서빙하는 엔지니어링의 완성도가 저는 좀 더 놀랍게 느껴졌습니다.

News Feed ranking, powered by machine learning - Facebook Engineering

Facebook Engineering

2021년 3월 1일 오전 6:22

댓글 6

함께 보면 더 좋은

OpenAI는 그 거대한 뉴럴 네트워크 모델을 어떻게 합리적인 시간 안에 학습시킬 수 있었을까요? 해답은 다양한 딥러닝 병렬 처리 기법들의 조합입니다. - 데이터 병렬 처리 - 서로 다른 GPU에서 배치의 서로 다른 하위 집합을 실행합니다. - 파이프라인 병렬 처리 - 서로 다른 GPU에서 모델의 서로 다른 레이어를 실행합니다. - 텐서 병렬 처리 - 여러 개의 GPU에 분할되는 행렬 곱셈처럼 단일 작업에 대한 수리적 연산을 나눕니다. - 전문가 혼합(MoE) - 각 레이어의 일부만 사용하여 각 샘플을 처리합니다. 초거대 모델에 대한 업계 관심에 높아지고 있고 산업 한가운데에 있는 저 또한 그러한 열기를 느끼고 있는데요. 때마침 지난 6월 9일 OpenAI는 병렬 처리 기법들에 대해 간결하지만, 종합적으로 다룬 글을 자사 블로그에 게재했습니다. 개론으로 삼을만한 아주 좋은 글이기에 직접 번역해봤습니다.

OpenAI는 뉴럴 네트워크 대형 모델을 어떻게 학습시키는가

Velog

추천 프로필

현직자에게 업계 주요 소식을 받아보세요.

현직자들의 '진짜 인사이트'가 담긴 업계 주요 소식을 받아보세요.

커리어리 | 일잘러들의 커리어 SNS