기본 개념:
ALS는 행렬 분해를 위한 반복적인 최적화 방법입니다. SVD와 비슷하지만, 결측치(missing values)가 많은 추천 시스템에 더 적합해요.
실제 예시로 설명하겠습니다:
영화1 영화2 영화3 영화4
사용자1 5 ? 3 4
사용자2 ? 2 5 ?
사용자3 4 1 ? 3
(여기서 ?는 평가하지 않은 영화입니다)
ALS의 목표:
사용자 행렬(U): 아이템 행렬(V):
[0.8 0.3] [0.7 0.2]
[0.5 0.9] [0.4 0.8]
[0.2 0.6] [0.9 0.3]
[0.5 0.6]
작동 과정:
b) U 고정, V 업데이트:
실제 계산 예시:
사용자1의 잠재 요인 업데이트:
1. 현재 평가한 영화들의 V 행:
영화1: [0.7 0.2]
영화3: [0.9 0.3]
영화4: [0.5 0.6]
실제 평점: [5, 3, 4]
최소제곱법으로 풀기:
장점:
1. 결측치 처리가 자연스러움
2. 병렬 처리 가능
3. 새로운 사용자/아이템 추가가 쉬움
단점:
1. 하이퍼파라미터(잠재 요인 수 등) 설정 필요
2. 수렴까지 여러 번 반복 필요
실제 적용:
이해하기 쉽게 비유하면:
실제 평점 데이터:
어벤져스 타이타닉 매트릭스
Alice 5 ? 3
Bob ? 2 5
Carol 4 1 ?
사용자 잠재 요인 업데이트 시:
Alice: [평점: 5, 3] → [잠재요인: 0.8, 0.3]
Bob: [평점: 2, 5] → [잠재요인: 0.5, 0.9]
Carol: [평점: 4, 1] → [잠재요인: 0.2, 0.6]
예: U 고정 시 V 최적화
min Σ(실제 평점 - UV^T)²
새로운 영화 '인셉션' 추가 시:
1. 기존 U는 그대로 유지
2. 인셉션의 V 값만 계산
3. 전체 재계산 불필요
실제 사례:
SGD와 비교했을 때 ALS의 장점:
SGD:
- 하이퍼파라미터 조정이 어려움
- 수렴 속도가 불안정할 수 있음
ALS:
- 파라미터 조정이 비교적 쉬움
- 안정적인 수렴
- 병렬화가 자연스러움
이러한 이유로 대규모 추천 시스템에서 ALS는 여전히 중요한 방법으로 사용되고 있습니다.
SGD와 비교했을 때의 ALS의 convex 특성을 설명해드릴게요.
min Σ(Rij - Ui·Vj^T)²
이 문제는 U와 V에 대해 동시에 볼 때는 non-convex예요.
a) U 고정하고 V에 대해 최적화:
min Σ(Rij - (고정된 Ui)·Vj^T)²
b) V 고정하고 U에 대해 최적화:
min Σ(Rij - Ui·(고정된 Vj^T))²
각각의 단계는 convex 문제가 됩니다!
예시로 보면:
R = [5 ? 3]
[? 2 5]
[4 1 ?]
1) U를 고정했다고 하면:
U = [[0.8 0.3],
[0.5 0.9],
[0.2 0.6]]
2) V를 찾는 문제는 각 영화별로:
영화1: [0.8] [v11] [5]
[0.5] × [v12] ≈ [4]
[0.2]
이건 단순한 최소제곱법 문제로 변환되어 명확한 해를 구할 수 있어요.
SGD의 경우:
그래서:
1. ALS는 각 단계가 convex → 안정적인 수렴
2. SGD는 전체가 non-convex → 수렴이 불안정할 수 있음
하지만! ALS도 전체적으로는 여전히 non-convex예요. 단지 각 단계별로 convex한 것뿐입니다.