- 읽은 자료 4건
- 정본 반영 5개 파일
- 레이더 2건
오늘 함께 본 다른 변화는 다음과 같다.
- X는 후보가 Phoenix 채점 예산 2800개를 넘을 때 소스마다 같은 비율로 줄이는 필터를 기본 off로 추가했다.
- X는 retrieval 요청에 value model 가중치를 실어 보내는 경로를 만들었지만, 기본값이 비어 있어 지금은 보내지 않는다.
- Kuaishou는 10만 길이 유저 이력을 증류 선택기로 줄인 랭킹으로 앱 사용 시간 +0.613%를 보고했다.
1Instagram Feed가 예측의 기준선과 증분을 따로 가중한다 — Instagram
자료 Baseline and Incremental: User, Item, and Request Debiasing in Instagram Feed Ranking (arXiv 2610.27423) — Meta, 2026-10-20 v1, 논문. 저자 26명 전원의 이메일 도메인이 @meta.com이다(2명은 Meta 재직 중에 작업했다고 적었다).
배경 피드 랭커는 좋아요, 공유, 체류 시간 같은 행동별 예측에 가중치를 곱해 더한 value model(행동별 예측을 하나의 점수로 합치는 식)로 후보를 줄 세운다. 그런데 예측값에는 후보와 상관없는 몫이 섞여 있다. 좋아요를 자주 누르는 뷰어는 어떤 포스트를 봐도 좋아요 예측이 높고, 인기 포스트나 긴 영상도 구조적으로 예측이 높게 나온다. 이번 논문은 이 몫(기준선)을 지우지 않고 남긴 채, 기준선을 넘는 증분을 별도 가중치의 항으로 더하는 Instagram Feed의 프로덕션 설계를 공개한다.
새로 알게 된 것A. Feed 점수는 원래 예측 항과 증분 항을 신호마다 따로 가중해 더한다
Instagram Feed late-stage 랭킹(요청마다 수백 개 후보를 채점하는 마지막 단계)의 점수는 참여 예측의 가중합이다 확인 — HTML 판 §1.
- 대상 VM은 피드 대부분을 정렬하는 MainRank와 세션 맨 위를 채우는 TopRank다.
- 가중치는 몇 개의 north-star 지표에 맞춰 온라인 Bayesian optimization(실험 결과를 보며 가중치 조합을 차례로 고르는 최적화)으로 조정한다.
- 배포된 VM은 일부 항 묶음을 곱하기도 하지만, 논문은 그 구조를 다루지 않는다.
논문은 원래 예측 항을 그대로 두고, 기준선을 넘는 증분 Δ를 별도 가중치의 항으로 더한다 확인 — 같은 논문 §1.
- 원래 식과 바꾼 식은 다음과 같다(원문 MathML을 텍스트로 옮겼다).
s(c) = Σ_j w_j p_j(c) s(c) = Σ_j [ w_j^r p_j(c) + w_j^i Δ_j(c) ]기준선은 세 종류다 확인 — 같은 논문 §3.
- 뷰어 기준선은 그 뷰어의 과거 행동률이다. Feed의 like 예측은 뷰어 본인의 과거 like 비율과 순위 상관이 0.69다.
- 아이템 기준선은 아이템 인기도(popularity bias)이거나 포맷과 크기 같은 구조적 속성이다.
- 요청 기준선은 같은 요청에 들어온 후보들의 예측 통계다.
세 기준선 모두 연산자 하나로 표현되고, 배포된 형태는 셋이다 확인 — 같은 논문 §3.
- 일반형은
Δ = m(p,b)[σ(k·d(p,b)) − shift]이고, 확률이면d = logit(p) − logit(b)를 쓴다. - 배포된 형태는
p σ(logit p − logit b),m σ(ŷ − b),max(0, p − b)이며 모두 shift가 0이다. - 강등 항은
m=p를 쓰면 예측이 바닥일 때 벌점이 사라지므로, 상수 크기에 비교 방향을 뒤집은 형태를 쓴다고 적었다.
- 일반형은
"The baseline is not a defect but a second signal that needs its own weight (§3). A habitual liker's likes are real engagement, and a broadly loved post deserves reach. But one coefficient w_j cannot trade the two components off, and the right trade-off is unknown a priori and differs by signal." — arXiv 2610.27423 (HTML), 2026-10-20
새로 알게 된 것B. 포맷 편향만은 점수 항이 아니라 학습 라벨에서 뺀다
- 영상 길이 같은 포맷 편향은 VM 항 대신, 같은 포맷·크기 버킷 안에서 상위일 때만 positive로 치는 라벨로 처리한다 확인 — 같은 논문 §4.4.
- 버킷은 영상은 길이, 캐러셀은 카드 수, 사진은 OCR 단어 수로 나눈다. 버킷 안 체류 시간의 p75를 넘으면 positive다.
- 인기도 편향은 같은 신호의 아이템 통계 하나라 VM 항으로 충분하지만, 포맷 편향은 라벨 자체가 왜곡돼 있어 라벨에서 고친다고 이유를 쓴다.
- 영상 라벨과 영상 길이의 상관은 r≈−0.017로, 원래 log 체류 시간 예측의 +0.216보다 작아졌다 확인. 사진과 캐러셀 라벨은 감사하지 않았다고 적었다.
새로 알게 된 것C. 배포된 6개 항을 네 arm으로 쪼갠 실험에서 두 항을 함께 둔 쪽이 대체로 이겼다
- 항마다 네 arm(두 항 모두 끔, 원래 항만, 증분 항만, 둘 다)을 두고 arm당 트래픽 3%로 비교했다 확인 — 같은 논문 §6.
- 측정은 6개 실험이 모두 켜져 있던 같은 7일 구간이고, 각 실험은 12~17일 돌았다.
- 판정한 13쌍(항, 지표) 가운데 11쌍에서 두 항 arm이 점추정으로 두 단일 항 arm을 모두 앞섰다. 두 대비가 모두 유의한 것은 7쌍이다.
- 직접 대비 26개 가운데 17개가 유의하게 유리했고, 1개(impressions)가 유의하게 불리했다.
- 단일 항 arm을 다시 튜닝하지 않았다는 한계를 논문이 직접 쓴다 확인 — 같은 절.
"Neither single-term arm was re-tuned. This favours both over incremental, whose weight was set beside the raw term. The design thus tests whether either term is redundant at the deployed point, not whether a re-tuned single-term VM could match it." — arXiv 2610.27423 (HTML), 2026-10-20
- 배포된 6개 항과 출시 판정 지표는 다음과 같다 확인 — 같은 논문 §5 Table 4.
- 포맷 버킷 라벨은 feed 체류 시간 +0.447%, 아이템 축 체류 게이트(MainRank)는 impressions +0.665%로 출시됐다.
- see-more 요청 항은 비연결 포스트 관심 비율 +0.63%(feed 체류 시간 −0.118%), 외부 공유 뷰어 항은 sessions +0.030%로 출시됐다.
- 오프라인 진단(예측과 기준선의 상관)은 후보를 거르는 데만 쓰고 순위를 매기는 데는 쓰지 말라는 것이 결론이다 확인 — 같은 논문 §7. 실험한 항 하나는 같은 축 10개 가운데 오프라인 9위였다.
새로 알게 된 것D. 같은 연산자가 Reels와 Threads에도 출시됐고 Facebook은 실험 중이다
- 이 구조는 1년 가까이 Instagram Feed 프로덕션에서 돌았고, 6개 항은 논문 제출 시점에 모두 켜져 있다 확인 — 같은 논문 §5.
- Reels는 early-stage와 late-stage 양쪽에 세 축을 모두 출시했고, Threads는 late-stage에 출시했으며, Facebook은 진행 중인 실험에서 시험한다 확인 — 같은 논문 §8.
- Reels 출시 예로는 late-stage 뷰어 축 like 보정(sessions +0.083%, DAU +0.042%)과 콘텐츠 보정 skip 강등이 있다.
"Furthermore, Threads has launched debiased signals in late-stage ranking, and Facebook is testing debiased terms in ongoing experiments." — arXiv 2610.27423 (HTML), 2026-10-20
정본 반영 services/instagram.md ## 한 줄 요약을 다시 써서 Feed 점수식 문장을 넣었고, ## 랭킹 도입에 Feed VM 문장을 넣었다. 같은 절에 ### Feed value model — 원래 예측과 증분을 따로 가중한다를 새로 두고, ### 세 가지 결합 형태에 Feed가 덧셈형의 확장이라는 불릿, ### weight를 정하는 방법 도입에 2026 Bayesian optimization 문장, ## 열린 질문 1·2번에 하위 불릿, ### 논문 출처를 더했다. services/threads.md ## 랭킹 도입과 "가중치와 결합 방식 정보 0" 불릿에 출시 진술을, services/facebook.md ### 공개된 유일한 수식에 실험 중 진술을 더했다. topics/multi-task-ranking.md Meta 표에 Instagram Feed 행, ## 누가 이걸 쓰는가 Instagram 하위 불릿, 출처를 더했다.
의미 Instagram Feed 자체의 결합 형태가 처음 공개됐고, 덧셈형 가중합에 "기준선을 넘는 증분" 항을 더한 형태다 확인. 지금까지 Instagram 결합 형태는 Suggested Posts, Explore, 알림의 글뿐이었다. Threads 카드에 결합 방식 정보가 0이라는 기존 서술도 카드 밖 1차 자료로 일부 채워졌다 확인.
2후보가 넘치면 소스마다 같은 비율로 줄이는 필터가 생겼다 — X
자료 xai-org/x-algorithm@7f2ca2b — xAI 공개 저장소, 2026-10-21 00:52 UTC 커밋, 코드. 이 노트들이 붙인 번호로는 4세대+46이다. 4세대+N은 이 노트들이 4세대 공개(2026-08-13) 뒤의 X 커밋에 차례로 붙인 번호다. 크론 미러(프로덕션 설정 기본값을 매일 동기화해 공개하는 파일)의 sync 시각은 2026-10-20T16:00:34Z이고, 기존 미러 값은 하나도 바뀌지 않았다.
배경 X For You는 Thunder(인네트워크 최신 포스트 인덱스), Phoenix retrieval(X의 트랜스포머 기반 후보 검색), SimClusters 같은 여러 소스의 후보를 이어 붙인 뒤 Phoenix 랭커로 채점한다. 채점 요청은 후보를 최대 2800개까지만 보내므로, 이어 붙인 목록이 그보다 길면 뒤쪽 소스의 후보가 먼저 잘린다. 이번 커밋은 이 자르기를 소스별 비례 배분으로 바꾸는 필터와, retrieval 쪽에 가중치를 넘기는 경로를 모두 기본 off로 추가한다.
새로 알게 된 것A. 비례 배분 필터는 소스마다 같은 비율만큼 후보를 남기고, 기본 off다
- 새 필터는 후보를 served type(후보가 들어온 소스 경로)별로 묶고, 총수가 예산을 넘으면 묶음 크기에 비례해 남길 수를 정한다 확인 —
home-mixer/filters/fair_share_ranking_filter.rs.- 나눗셈 나머지는 큰 순서로 1개씩 더 준다(largest remainder). 묶음 안에서는 현재 순서의 앞 N개를 남긴다.
- 예산은
PhoenixScoresResultSize=2800이다 —params/param.rs:1189-1193. - 테스트는 인네트워크 440, SimClusters 220, Phoenix retrieval 440개(합 1100)를 예산 1000으로 줄이면 (400, 200, 400)이 남는다고 고정한다.
- 스위치
EnableFairShareRanking은 기본 false다 확인 —params/param.rs:1194-1199.- 켜도 캐시된 포스트 요청이거나 Phoenix 랭커 kill switch가 켜져 있으면 동작하지 않는다.
- 스코어링 전 필터 목록의 맨 끝,
FavHoldoutFilter바로 뒤에 들어갔다 —phoenix_candidate_pipeline.rs:437. 점수만 내는 파이프라인에도 들어갔다.
- 꺼져 있는 지금은 Phoenix 요청이 목록의 앞 2800개만 보낸다 확인 —
util/phoenix_request.rs:20, 192. 필터를 켜면 목록 뒤쪽 소스가 모두 잘리는 대신 소스마다 같은 비율이 잘린다 추정. 근거는 예산이 이 2800과 같고, 테스트 이름이 "drops_the_same_fraction_of_each_served_type"라는 점이다.
let product = count as u128 * budget_u;
let keep = (product / total) as usize;
remainders.sort_by(|left, right| right.0.cmp(&left.0).then(left.1.cmp(&right.1)));
새로 알게 된 것B. retrieval 요청에 value model 가중치를 실을 수 있게 됐지만, 지금은 보내지 않는다
- Phoenix retrieval 요청 proto에 이름별 가중치 맵 필드가 생겼고, home-mixer가 파라미터 값을 파싱해 채운다 확인 —
sources/phoenix_source.rs:137-138.- 필드는
RetrieveTopKCandidatesRequest.value_model_weights = 17이다 —recsys.proto:298. - 파라미터
RetrievalValueModelWeights는 JSON 객체 문자열이고 기본값은 빈 문자열이다 —params/param.rs:281-286. 비었거나 잘못되면 아무것도 보내지 않는다.
- 필드는
- retrieval 서버가 이 필드를 읽는 코드는 이 커밋에 없다 확인. two-tower(유저와 포스트를 따로 임베딩하는 retrieval 모델)가 2026-10-13 커밋(4세대+40)부터 헤드를 여럿 두므로, 요청마다 헤드 가중을 바꾸려는 준비로 본다 추정. 근거는 필드 이름이 랭커의 value model과 같다는 점이다.
새로 알게 된 것그 밖의 변경
- 캐러셀이 실제로 나간 응답에서 캐러셀 영상의 위치와 점수를 Kafka로 남기는 side effect(응답은 바꾸지 않고 로그만 남기는 단계)가 생겼다. 스위치는 기본 off다 확인 —
video_carousel_candidates_kafka_side_effect.rs.- 스위치는
EnableVideoCarouselCandidatesLogging=false이고(param.rs:1150-1155), 캐러셀 자체도 기본 off다.
- 스위치는
- 2026-10-20 커밋에서 생긴 토픽 새로움 측정이 뷰어가 쓰지 않는 언어의 포스트 비율도 잰다. 이력 토픽 스위치가 기본 false라 여전히 꺼져 있다 확인 —
serendipity_stats_side_effect.rs:19, 145-176.- 뷰어 언어는 참여 이력의 5% 이상(
MIN_USER_LANGUAGE_SHARE = 0.05)을 차지한 언어와 앱 언어다. 새 메트릭은CrossLanguageShare,CrossLanguageShareTop10등이다.
- 뷰어 언어는 참여 이력의 5% 이상(
- Phoenix 학습의 후보 패킹 옵션 이름이 바뀌어 H100 프리셋에서만 켜지고, 후보 영역 attention 커널이 SM100(GB200/GB300 GPU 세대)도 지원한다. 모델 구조와 손실은 그대로다 확인 —
configs/xrecsys.py:463-474. - VF(visibility-filtering, 포스트마다 노출 가능 여부를 판정하는 서비스)의 판정이 규칙 ID를 직접 들고 다니게 됐고, 계정 단위 판정 경로가 아직 쓰이지 않는 코드로 생겼다 확인 —
models/verdict.rs:37.- 인용 포스트의 작성자 관계 조회가 실패하면, 이제 유저 규칙과 포스트 규칙 양쪽이 그 값을 "모름"으로 읽는다 —
rules/engine.rs:427-440, 628. 기본값이 false라 보이는 결과는 같다고 본다 추정.
- 인용 포스트의 작성자 관계 조회가 실패하면, 이제 유저 규칙과 포스트 규칙 양쪽이 그 값을 "모름"으로 읽는다 —
- abuse-enforcement-service의 backfill 한도가 GrowthBook에서 저장된 설정 레코드로 옮겨졌고, 누가 설정하기 전까지 속도는 0이다 확인 —
service-lib/src/backfill.rs:112-117. 피드 랭킹과는 관계가 없다.
정본 반영 services/x.md ## 한 줄 요약의 기준 커밋을 7f2ca2b로, 스코어링 전 필터 수를 21개로 고쳤다. ## 재순위·다양성·필터 도입의 필터 수(26개, 21개)와 필터 절의 기준 커밋과 목록에 FairShareRankingFilter를 반영하고 설명 불릿을 더했다. 피드 지면 절 캐러셀 항목에 로깅 불릿과 기본 off 기준 커밋을, 후보 생성 절에 retrieval 가중치 불릿을, ### 다양성에 언어 측정 불릿을, ## 용어 표에 served type과 side effect 행을 더했다. ## 출처 커밋 표 두 곳과 변경 이력 요약표에 4세대+46 행을 추가했다. assets/x-pipeline.svg의 필터 수(스코어링 전 21, 선택 후 5)도 고쳤다.
의미 이번 커밋도 기본 동작을 바꾸지 않았다 확인. 근거는 기존 미러 값이 그대로이고 새 스위치 셋이 모두 off라는 점이다. 비례 배분 필터는 소스가 늘수록 앞 2800개 자르기가 뒤쪽 소스를 불리하게 만든다는 문제를 X가 인식했다는 신호로 본다 추정.
310만 길이 이력을 증류 선택기로 줄여 앱 사용 시간을 올렸다 — Kuaishou
자료 ECHO: Efficient Cascade with Homogeneous Operators for Distillation-Guided 100K-Sequence Modeling (arXiv 2610.28569) — Kuaishou Technology, 2026-10-20 v1, 논문.
배경 유저의 평생 행동 이력은 10만 건을 넘기도 하는데, 후보마다 이 이력 전체에 attention을 걸면 비용이 너무 크다. 기존 해법은 후보와 관련된 기록만 검색하거나(TWIN 계열), 이력을 잠재 벡터로 압축하는 것이었다. 이번 논문은 유저 단위로 원본 기록 일부를 남기는 선택기를 전체 이력 teacher로 증류해, 두 방식의 중간 지점을 프로덕션에 배포했다고 보고한다.
새로 알게 된 것A. 이미 긴 시퀀스 검색을 쓰는 프로덕션 위에서 앱 사용 시간이 더 올랐다
- Kuaishou 최대 단편 영상 지면의 7일 A/B(트래픽 5%)에서 총 앱 사용 시간 +0.613%, 유저당 앱 사용 시간 +0.640%를 기록했다 확인 — HTML 판 §4.6.
- 이 지면은 DAU 4억 이상, 하루 상호작용 로그 500억 건 이상이라고 적었다.
- 비교 대상인 기존 시스템이 이미 TWIN 계열 검색과 시퀀스 압축을 쓴다 확인 — 같은 절.
- L=100K에서 온라인 시퀀스 분기 FLOPs를 대표 end-to-end 모델 대비 약 160배 줄였다고 쓴다 확인 — 초록.
"Notably, the existing production system already incorporates advanced long-sequence modeling techniques, including TWIN-based behavior retrieval and sequence compression mechanisms similar to C-Former and SequenceO1." — arXiv 2610.28569 (HTML), 2026-10-20
정본 반영 추적 서비스가 아니어서 정본에는 반영하지 않았다. radar.md ## 이번 달 신규에 ECHO 항목을 추가했다.
의미 긴 시퀀스 랭킹의 경쟁이 "얼마나 길게"에서 "후보마다 무엇을 다시 꺼내 보나"로 옮겨 가고 있다 추정. 근거는 이 논문의 증분이 이미 긴 시퀀스 검색을 쓰는 베이스라인 위에서 나왔다는 점이다.
레이더
- ECHO (arXiv 2610.28569): Kuaishou의 10만 길이 이력 랭킹을
## 이번 달 신규에 추가했다. - SPAR (arXiv 2610.27898): Youku가 SID(아이템을 의미 토큰 열로 나타낸 ID) 디코딩 단계마다 접두어에 맞는 장기 이력을 불러오고 가지 쏠림을 줄여, 트래픽 10% A/B에서 시청 시간 +3.95%를 얻었다. 생성형 retrieval 스레드에 추가 근거로 붙였다(초록만 읽었다).
다음에 볼 것
- Instagram 논문의 Table 6(Reels 출시 목록)과 Feed 6개 항을 instagram.md의 Reels·피드백 신호 절에 나눠 반영할지 본다 — 오늘은 랭킹 절에만 반영했다.
- X retrieval 서버가 value_model_weights를 읽는 코드가 공개되는지 본다 — retrieval 헤드 가중의 요청별 조정은 추정이다.
- X 비례 배분 필터가 켜지는지 본다 — 켜지면 소스별 후보 점유율이 달라진다.
조회 현황
- X: xai-org/x-algorithm에 새 커밋 1건(7f2ca2b)이 있었다. 릴리스는 확인하지 않았다.
- Meta: engineering.fb.com RSS의 최신 글은 2026-10-19자로, 2026-10-21 배치에서 이미 확인했다. ai.meta.com/blog와 transparency.meta.com은 이번에 확인하지 않았다.
- Netflix: RSS의 최신 글은 2026-10-16자로, 이미 확인했다. research.netflix.com/publications는 확인하지 않았다.
- arXiv cs.IR: 30건을 파싱했다. 최신 제출은 2026-10-20이고, 통과한 것은 Instagram 논문(정본 반영), ECHO, SPAR 3건이다. 생성형 retrieval의 SID를 LLM 진화 탐색으로 설계한 논문은 공개 벤치마크뿐이라 탈락시켰다.
- WebSearch 교차 확인은 이번에 하지 않았다.