오늘의 인기 글
최근 글
최근 댓글
Today
Total
04-28 00:01
관리 메뉴

우노

[추천시스템] Latent Factor Model 본문

Data/Recommender System

[추천시스템] Latent Factor Model

운호(Noah) 2020. 10. 29. 17:18
  • 별점 예측 부분에서 Collaborative filtering보다 동작을 잘하는게 Latent Factor Model이다.
  • 하지만 단점이 존재한다.
    • Collaborative filtering은 근거를 댈 수 있지만 Latent Factor Model은 근거를 댈 수 없다.

Latent Factor Model

  • Latent Factor Model은 사용자와 아이템을, 잠재적인 차원(Factor)들을 사용해 나타낼 수 있다고 보는 모델이다.
  • 여기서 차원은 축과 같은 의미로 사용될 수 있다.
    • 예를 들어, 위 그림처럼
    • x 축을 남성향, 여성향의 정도로 표현하고
    • y 축을 웃기고, 심각함의 정도로 표현할 수 있다면
    • 사용자와 아이템은 적절한 x, y축 값에 매핑 된다는 것이다.
      • 길동 = ( -3.1, -4.2 )
      • 테넷 = ( 1.3, 4.5 )
  • 위 예제에서는 사용자와 아이템을 두 가지 차원으로 표현했지만, 실제 Latent Factor Model에서는 사용자와 아이템을 모르는 차원에 표현한다.
    • 즉, 차원이 무엇을 의미하는지 모르며
    • 차원은 여러 개일 수 있다.
  • 따라서, Latent Factor Model은 사용자의 매핑지점과 아이템의 매핑지점이 가까울수록 유사하다고 판단하는 모델이다.

Matrix Factorization

  • Matrix Factorization은 Latent Factor Model을 구현하는 방법 중 하나이다.

  • 우선, 각 사용자와 아이템을 같은 차원의 벡터들의 집합(Matrix)으로 표현한다. ( Latent Factor Model )

    • 각 차원은 무엇을 의미하는지 모르며 차원(rank)의 크기는 우리가 정할 수 있다.
    • 위 그림에서는, 사용자와 아이템을 3차원 벡터들의 집합으로 표현했다.
    • 처음엔 Matrix를 랜덤 값으로 아무렇게나 채워놓는다.
    • 그럼, 모든 사용자와 모든 아이템에 대한 각각의 Matrix가 생기게 된다.
  • 이제 무엇을 해야할까?

    • 우리에겐 이미 존재하는 몇몇의 요소값(평점)이 있을 것이다.
    • "사용자 벡터와 아이템 벡터를 내적하면 요소값(평점)이 나올것이다."라고 가정한 뒤
      • (0.3, 0.4, 0.4) * (0.2, 0.3, 0.7) = 4.6
    • 사용자 벡터와 아이템 벡터의 내적값(예상평점)이 실제평점값과 유사해지도록 두 개의 Matrix를 학습 시키면 된다.
      • 예) 실제평점값이 5.0 이고 ( 아이템 벡터 ) * ( 사용자 벡터 ) = 4.8 라면
      • 0.2 를 오차로 두고 학습한다.

가설, 비용, 업데이트

  • 왼쪽 item matrix 를 p, 오른쪽 user matrix를 q라고 했을 때
    • p matrix에서 i 번째 벡터는 pi
    • q matrix에서 x 번째 벡터는 qx
  • 1) 처음엔 각 Matrix를 랜덤 값으로 아무렇게나 채워놓는다.
  • 2) 예측값을 도출하는 가설 함수는 벡터 내적을 의미하는 pi * qx로 사용한다.
  • 3) 예측값과 실제값의 차이를 의미하는 비용 함수는 MSE를 사용한다.
  • 4) 우리는 비용함수를 최소로 만드는 P Matrix와 Q Matrix를 찾는게 목표이다.

잘 학습 되었는지를 검증하려면?

  • 학습 데이터(Training Set)와 검증 데이터(Test Set)를 분리해야한다.

Overfitting

  • 실제로 학습해보면, 학습이 잘 되는가 싶다가 학습이 진행될수록

    • Traing error는 낮아지며

    • Test error는 어느정도부터 오히려 증가한다.

    • 즉, Overfitting이 발생한다.

Regularization (정규화)

  • Latent vector가 너무 Training Data에 매몰되지 않도록, Latent vector가 너무 큰 값을 갖는 (범위를 벗어나는) 경우 패널티를 줘야한다.

  • 즉, 실제값에 맞추려고 하다보면 vector 값이 너무 커질수 있다!

    • 예를 들어,
    • (1.0, -1.0) * (3.0, -1.0) = 4
    • (10.0, -6.0) * (1.0, 1.0) = 4
    • 위 벡터 내적과 아래 벡터 값은 동일한 값을 출력하지만
    • 아래 벡터 값이 너무 큰 값을 갖는 것을 볼 수 있다.
    • 즉, 같은 결과가 나오더라도 벡터의 절댓값들을 최소한 작게 가지고 있는게 좋다.
  • 따라서, 기존의 비용함수 뒤에 추가로 L2 norm을 붙여준다.

  • 위와 같이 cost 뒤에 Regularization을 붙이게 되면, cost가 벡터의 길이 자체를 줄이는 방향으로 움직이게 된다.

    • 원점 쪽으로 벡터 값들을 땡겨온다.
    • 원점으로부터 벡터 값이 너무 멀리가지 못하게 제약을 준다.
    • Regularization이 없을 경우에는, 벡터가 원점에서 멀어지는 방향으로 커질 가능성이 있다.

Global Baseline Estimate

  • Global Baseline Estimate란 데이터가 적을 경우, 기본값을 예측하는 방식이다.

    • 이미 높은 평점을 받은 드라마에는 나도 높은 평점을 주지 않을까?
    • 사용자가 깐깐한 편이라면, 평균보다 조금 낮게 평점을 주지 않을까?
    • 이 사용자는 기본적으로 이 정도의 평점을 줄 것이다.
  • Global Baseline Estimate를 사용해 문제를 해결해보자

    • 문제
      • 진원이는 "이태원 클라쓰"와 비슷한 드라마를 본 적이 없다.
      • 진원이가 "이태원 클라쓰"를 보고 매길 평점을 예측해보자.
    • 해결
      • 존재하는 모든 드라마의 평점 평균 : 3.7점
      • 진원이의 드라마 평점 평균 : 3.5 점 (평균보다 0.2 점 낮음)
        • User Vector
      • "이태원 클라쓰"의 평점 평균 : 4.2점 (평균보다 0.5점 높음)
        • Item Vector
      • 결과
        • 기본 평점 (Global baseline) : 3.7 - 0.2 + 0.5 = 4.0
  • Global Baseline Estimate는 Latent Factor model에도 적용이 가능하다.

  • 기존 Latent Factor Model의 가설함수가 H(i,x) = pi * px 였다면
  • Global Baseline Estimate를 적용한 Latent Factor model의 가설함수는 아래와 같다.
  • H(i,x) = μ + bi + bx + pi * px
    • μ : 전체 평점 평균
    • bi : 아이템 i의 bias
    • bx : 사용자 x의 bias
    • pi * px : 아이템과 사용자의 내적값
  • u는 전체 평점 평균으로 할당한 뒤
  • bi, bx, pi, px 는 학습해야하는 파라미터이기에 랜덤한 값으로 초기화한다.
  • 이후, cost를 구하는 과정에서 각각의 파라미터 값들이 너무 커지면 오버피팅에 일조할 수 있기 때문에, 각 파라미터에 Regularization을 같이 써줘야한다.
Comments