-
[ scikit-surprise ] SVD Regularization Terms 알아보기AI-ML 2024. 5. 18. 17:55728x90반응형
- 목차
키워드.
- - scikit-surprise
- - SVD
- - Lasso Regularization
함께 보면 좋은 글.
https://westlife0615.tistory.com/844
https://westlife0615.tistory.com/858
들어가며.
이번 글에서는 scikit-surprise 라이브러리의 SVD 모델이 사용하는 Regularization 에 대해서 알아보려고 합니다.
scikit-surprise 의 SVD 알고리즘은 Matrix Factorization 기법을 활용합니다.
scikit-surprise 의 SVD 알고리즘이 사용하는 Matrix Factorization 방식을 간단히 설명하자면 아래의 그림 설명과 유사합니다.
왼쪽은 Matrix 는 다른 2개의 Matrix A, Matrix B 의 분해할 수 있고,
Matrix A 와 Matrix B 의 Dot Product 로써 원본의 Matrix 를 복원할 수 있습니다.
아래의 표시한 분홍색, 초록색, 보라색 Cell 들은 서로 간의 관계를 표현합니다.
SVD 방식의 Matrix Factorization 은 학습을 반복하면서 원본 Matrix 의 Cell 이 2개의 Matrix 들로 분해될 수 있도록 학습을 반복합니다.
이 과정에서 MSE Loss 를 최적화하는 방식으로 학습이 진행되는데요.
이번 글에서는 MSE Loss 를 최적화하는 과정에서 사용되는 Regulalization 에 대해 알아봅니다.
SVD 관련 수학적 증명 살펴보기.
먼저 추천 시스템에서 사용되는 여러 표현들에 대해서 알아봅니다.
아래와 같은 user - item - rating 의 평점 데이터셋을 기준으로 설명하도록 하겠습니다.
$ r_{ui} $ 은 user u 가 item i 에 부여한 평점을 의미합니다.
$ \hat{r_{ui}} $ 는 user u 가 item i 에 부여할 예상 평점을 의미합니다.
추천 시스템에서 모든 사용자가 모든 아이템에 대해서 평점을 부여하거나 상호작용을 하지 않는다는 점이 중요합니다.
그래서 $ \hat{r_{ui}} $ 와 같은 예측값 이 중요하게 활용됩니다.
$ b_{u} $ 는 User 의 Bias Term 에 해당합니다.
이는 사용자마다 고유한 bias 가 있다는 가정입니다.
어떤 사용자는 평점을 후하게 주는 경향이 있고, 어떤 사용자는 그렇지 않을 수 있죠.
이러한 개개인의 bias 를 반영합니다.
만약 user 의 수가 1000 명이라면 $ b_{u} $ 는 length 가 1000 인 Vector 가 됩니다.
그리고 각 user 에 해당하는 Bias Value 가 존재합니다.
$ b_{i} $ 는 Item 의 Bias Term 입니다.
$ b_{u} $ 와 마찬가지로 item 별 bias 를 고려한 결과이며, item 의 수만큼의 length 를 가지는 Vector 표현됩니다.
$ P_{u} $ 는 User 의 Latent Matrix 를 의미합니다.
아래와 같이 User - Item Matrix 를 User Latent Matrix 와 Item Latent Matrix 로 행렬분해를 하였을 때에
User Latent Matrix 가 $ P_{u} $ 이 됩니다.
또한 $ P_{i} $ 는 Item Latent Matrix 에 해당합니다.
$ p_{u} $ 는 $ P_{u} $ 인 User Latent Matrix 에서 특정 사용자의 Latent Vector 에 해당합니다.
위 그림에서 분홍색 영역이 첫번째 user 의 Latent Vector, 초록색 영역이 세번째 user 의 Latent Vector,
보라색 영역이 5번째 user 의 Latent Vector 가 됩니다.
이처럼 $ q_{i} $ 는 $ Q_{i} $ 인 Item Latent Matrix 에서 특정 item 의 Latent Vector 가 됩니다.
위 그림에서 분홍색 영역이 첫번째 item 의 Latent Vector, 초록색 영역이 2번째 item 의 Latent Vector,
보라색 영역이 5번째 item 의 Latent Vector 가 됩니다.
참고로 User 를 P 로, Item 을 Q 로 표시하는 것은 그냥 하나의 컨벤션으로 이해하시면 좋을 것 같네요.
Regularization 이란 ?
Regularization 은 머신러닝, 딥러닝 분야에서 흔히 사용됩니다.
이는 이론적으로는 모델의 Overfit 을 방지하는 목적으로 사용됩니다.
그럼 SVD 에서 어떻게 과적합을 방지하는지 수학적으로 알아봅니다.
SVD 는 MSE Loss 를 Loss Function 으로써 사용합니다.
이는 수학적으로 아래와 같습니다.
$$ \hat{r_{ui}} = b_{u} + b_{i} + p^{T}_{u} \times q_{i} $$
위의 표현은 어떤 user 가 어떤 item 에 몇 점의 평점을 부여할지에 대한 예측값이구요.
이 과정에서 Bias 와 Latent Matrix 의 연산이 사용됩니다.
$$ Loss = \sum (r_{ui} - \hat{r_{ui}})^{2} + \lambda ( b^{2}_{u} + b^{2}_{i} + ||p||^{2}_{u} + ||q||^{2}_{i} )$$
( 참고로 $||p||^{2}_{u}$ 는 user 의 Latent Vector 의 제곱합을 의미합니다. )그리고 Loss Function 을 Bias 와 Latent Vector 를 기준으로 미분을 취합니다.
$$ \frac{\delta loss}{\delta b_{u}} = \sum 2 \times -(r_{ui} - \hat{r_{ui}})+ \lambda \times 2 \times b_{u} $$
$$ \frac{\delta loss}{\delta b_{i}} = \sum 2 \times -(r_{ui} - \hat{r_{ui}})+ \lambda \times 2 \times b_{i} $$
$$ \frac{\delta loss}{\delta p_{u}} = \sum 2 \times -(r_{ui} - \hat{r_{ui}}) \times q_{i} + \lambda \times 2 \times p_{u} $$
$$ \frac{\delta loss}{\delta q_{i}} = \sum 2 \times -(r_{ui} - \hat{r_{ui}}) \times p_{u} + \lambda \times 2 \times q_{i} $$
SVD 에서 사용되는 4개의 Parameter 인 User Bias, Item Bias, User Latent Vector, Item Latent Vector 는
Loss 에 대한 위와 같인 미분결과를 가집니다.
결과적으로 아래와 같은 구조로 Parameter 가 재조정되면서 학습이 수행되게 되는데요.모든 Parameter 는 Loss 가 클수록 재조정의 크기가 커지게 됩니다.
반면 Regularization Term 이 추가되었기 때문에 User Bias 와 Item Bias 는 Bias 값이 클수록 그 재조정의 폭이 줄어들게 됩니다.
그래서 Bias 가 변화하는 것에 대해 Penalty 가 부여되어, 과적합되는 것을 방지하게 됩니다.
또한 User Latent Vector 와 Item Latent Vector 마찬가지로 동작합니다.
하지만 $ \frac{\delta loss}{\delta p_{u}} $ 는 $ (r_{ui} - \hat{r_{ui}}) \times p_{u} $ 와 같이 Loss 와 Item Latent Vector 곱이 관여하기 때문에 User Latent Vector 와 Item Latent Vector 는 재조정 과정에서 서로에게 영향을 끼치게 되죠.
참고로 SVD 에서 사용된 Regularization 은 L2 Regularization 방식을 사용합니다.
마치며.
제가 이번 글을 작성하면서도 내용이 어려웠던거 같습니다.
혹시나 이해가 어려운 내용에 대해서 피드백주시면 답변드릴 수 있도록 하겠습니다.
감사합니다.
반응형'AI-ML' 카테고리의 다른 글
[scikit-surprise] SVD 모델 추론하기 (0) 2024.05.26 [PyTorch] squeeze, unsqueeze 알아보기 (0) 2024.05.21 [scikit-surprise] SVD 모델 생성하기 (0) 2024.05.18 [scikit-surprise] Dataset 이해하기 (0) 2024.05.14 [seaborn] Violin Plot 알아보기 (0) 2024.05.07