개발자식

[Coursera] Recommendation Systems with TensorFlow on GCP_5_TIL 본문

AI/Recommendation System

[Coursera] Recommendation Systems with TensorFlow on GCP_5_TIL

밍츠 2022. 8. 23. 22:49

ALS

- SGD가 두 개의 행렬(User Latent, Item Latent)을 동시에 최적화하는 방법이라면, ALS는 두 행렬 중 하나를 고정시키고 다른 하나의 행렬을 순차적으로 반복하면서 최적화하는 방법이다.

- 기존의 최적화 문제가 convex 형태(볼록 형태)로 바뀌기에 수렴된 행렬을 찾을 수 있다.

 

ALS Algorithm 

1. 초기 아이템, 사용자 행렬을 초기화

2. 아이템 행렬을 고정하고 사용자 행렬을 최적화

3. 사용자 행렬을 고정하고 아이템 행렬을 최적화

4. 위의 2,3, 과정을 반복

-> 2,3번의 과정을 반복하면 아이템 행렬의 값이 달라져서 사용자 행렬의 최적화된 값도 달라지면서 두 행렬 모두 수렴의 근접한 값을 찾아준다.


The ALS Algorithm

 

WALS를 사용하기 위해 TensorFlow 모델을 어떻게 생성할까?

- WALS Estimator를 사용하여 입력을 올바르게 구성한다.

 

 

- WALS의 W는 가중치로, 원하는 특정 항목에 가중치를 추가할 수 있다.

-> 수익성 있는 아이템이 더 많이 추천 될 것이다.

 

위 공식은 최소자승법에 대한 의사 코드이다.

행렬 분해로 U와 V를 반복적으로 배운다. 함께 곱해지면 근사치에 가깝게 재구성되기를 바라지만 원래 사용자 항목 상호작용 메트릭스가 되진 않는다.

최소자승법

: 측정값을 기초로 해서 적당한 제곱 합을 만들고 그것을 최소로 하는 값을 구하여 측정 결과를 처리하는 방법이다.

 

-> 최소 제곱을 교대로 사용하면 가까워질 수 있다.

의사 코드 설명

1. U, V 인자 행렬 초기화 (ex 사용자, 영화)

+ 목표 : 이 두 임베딩을 동시에 계산

2. 첫 번째 루프

  • 행 요인 U에 대해 풀고 있다. 사용자가 되는 모든 행을 반복한다. 방정식은 최소 제곱 법칙으로 정규화 상수 람다와 함께 L-곡선 정규화가 추가되었다.
  • ui가 계수와 유사하고, x 대신 열 인수인 v, y 대신 복사 행렬 r의 ithro를 사용
  • 가중치 계수를 찾기 위해 모멘트 행렬을 곱한다.

3. 두 번째 루프

  • 첫 번째에서 해결한 행 요소를 사용하는 모든 열 요소에 대해 반복한다

 

 

 

Preparing  Input Data form ALS

 

ALS는 한 번에 전체 행을 공급하지만 어느 단계에 있는지 알기 때문에 두 가지 모두를 공급한다.

- 어떤 단계에 있든 항상 올바른 데이터를 갖도록 한다.

- 우리는 matrix를 여러 번 통과하여 일이 고르게 진행되어 모든 행과 열을 처리하게 된다.

- 배치 크기가 데이터를 명확하게 나누지 않도록 하는 것이 중요할 수 있다.

-> rollover offset이 배치에서 다른 그룹화를 유발하도록 길이를 설정하여 동일한 배치가 계속 반복되지 않는다.

 

- V를 고정하고 U를 계산하고, U를 고정하고 V를 계산한다.

-> 수렴이 V를 고정할 때까지 교대로 반복한다.

 

- 동시에 행과 열의 배치를 읽는다.

- 교체로 인해 레이블이 필요하지 않는다.

> 레이블은 현재 해결되지 않는 기능에서 가져온다.

 

 

- visitorId -> userId, contentId -> itemId, session_duration ->rating 으로 매핑한다.

 

이전의 모든 항목을 필터링할 수 있기 때문에, 사용자에게 이미 평가된 항목을 추천해야 할까?

-> 영화, 옷 같은 경우 사용자가 이미 보고 구매했지만 레스토랑의 경우 다시 가고 싶을 수 있다.

-> 전송하는 대신 데이터를 분배할 수 있다.

- clientID는 영숫자 문자열로 문자열을 사용자 인덱스를 나타내는 정수로 매핑해야 한다.

- productID는 문자열은 아니지만 실제 행렬 인덱스를 나타내지 않은 긴 정수로 해당 제품 항목 인덱스를 나타내는 정수로 매핑해야 한다.

-sentiment는 명시적 피드백의 예를 참고하거나, 서수 매핑을 진행한다.

Comments