카테고리 없음

Matrix factorization

cpnubplzhelp 2024. 9. 3. 14:21

 

 

 

행렬 분해  |  Machine Learning  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 행렬 분해 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 행렬 분해는 간단한 임베딩 모

developers.google.com

 

Matrix factorization

Matrix Factorization은 고차원 데이터를 분석하거나 처리하기 위해 사용되는 중요한 기법 중 하나이며, 주로 대형 행렬을 두 개 이상의 작은 행렬로 분해하여 데이터를 이해하거나 활용하는 데 도움을 준다.

 

추천시스템에서는 이를 활용해서 UserItem간의 Matrix를 작은 행렬로 나눈다.

 

Item이 영화인 경우

User가 m명일 경우 matrix를 m x d로 만든다.

Item이 n개일 경우 matrix를  n x d로 만든다.

두 행렬의 곱을 통해서 원본 matrix를 복원할 수 있다.

 

원본 행렬이 O(nm)였다면, 분해하여 만든 행렬은 O((n+m)d)가 된다.

이때 우리는 행렬이 작아지는것을 원하기 때문에 (d< n, m)이 성립되어야 할것이다.

 

Choosing the objective function

1. MSE

가장 처음으로 떠올릴 수 있는 목적함수는 관측된(Observed) 값에 MSE를 사용하는 것이다.

하지만, 관측된 값에 대해서만 학습을 진행하게 된다면, 모델의 일반화가 어려워 질 수도 있다.

 

2. 특이값 분해 Singular Value Decomposition

그럼 관측되지 않은 값에 0을 채워준후 정답값과 MSE를 사용하는 목적함수가 있을 것이다.

앞선 목적함수보다는 성능이 좋겠지만(quadratic problem을 해결한다.), 이 또한 문제가 발생한다.

 

유튜브 영상을 예로 들어보자, 수많은 유튜브 영상중 User가 본 영상은 극히 일부분일 것이다. 

이럴 경우 행렬의 대부분의 값이 0이 되기 때문에 결과적으로 성긴 행렬(sparse matrix)이 되어버릴 것이다.

 

많은 행렬 분해 문제에서, 특히 추천 시스템에서는 관측된 데이터가 매우 적고, 대부분의 데이터가 관측되지 않은 상태이기 때문에, 이를 모두 0으로 처리하면, 행렬의 대부분의 값이 0이 되기 때문에 결과적으로 sparse matrix가 되어버린다.

 

3. Weighted Matrix Factorization

Weighted Matrix Factorization

관측된 값에 대해서는 우리가 앞서 사용한 MSE를 사용하고, 관측되지 않은 값에 관해서는 w0의 가중치를 곱해주는 방식을 채택한다.

여기서 w0는 objective가 둘 중 하나에 의해 지배(dominant) 당하지 않도록 두 항에 가중치를 부여하는 hyperparameter 이다. 

 

Optimizer

최적화 함수로는 일반적으로 많이 사용하는 SGD를 사용할 수도 있고, 이 작업에 특화되어있는 Weighted Alternating Least Squares (WALS)를 사용할 수도 있다.