※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.
<Recommender System>
Recommender System은 사용자의 기존 선호도를 바탕으로 다른 상품(ex) 영화, 물건 등)에 대한 선호도를 예측하는 모델을 만들고, 추천해주는 시스템이다.
수업에서 다루는 이유는 다음과 같다.
- 학문의 영역에서는 몰라도, 현업에서 가장 자주 사용되는 머신러닝 시스템이다.
- 자동으로 좋은 feature를 선택하는 알고리즘을 다뤄볼 수 잇다.(Collaborative Filtering)
- 개념
행은 영화, 열은 사용자이고 i행 j열은 i행 영화에대해 유저-j 가 평가한 점수를 나타낸다.
추천 시스템을 구축하기 위해 유저의 선호도를 학습하는 것은,
기본적으로 각각의 user에 대해 linear regression의 파라미터를 찾는 과정과 동일하다고 볼 수 있다.
표의 우측에 검은 색으로 나타낸 feature x1과 x2는 각각 그 영화의 장르를 수치화한 것이다.
*이렇게 feature가 주어진 상태로 학습하는 것을 content-based recommendation system이라고 한다.
해당 feature와 각각의 user들의 영화에 대한 평가들을 바탕으로 각 user별 파라미터를 찾을 수 있다.
예를 들어, 로맨스 장르의 비율이 높은 영화들을 선호하는 Alice(j = 1)의 경우, 파라미터는 다음과 같이 학습될 것이다.
$ \theta^{(1)} = \begin{bmatrix}0
\\ 5
\\ 0
\end{bmatrix}$
따라서 ?로 표시된 1행 3열의 영화의 경우, 4.95의 값을 예상할 수 있다.
*$ \theta^{(j)}$ 는 user-j에 대한 파라미터를 의미한다.
- Optimization Algorithm
파라미터의 최적화 역시 linear regression과 큰 차이가 없다.
우선 user-j에 대한 optimization objective는 다음과 같다.
linear regression 에서의 least squre function과 매우 유사하다.
m으로 나누는 것이 빠진 것을 제외하면 사실 동일하다.(상수를 없앤 것이므로 최적화에 영향을 주지 않는다)
(*$ i:r(i,j)=1$은 user의 평가가 있는 element에 대해서 합한다는 것을 의미한다. '?'로 표시된 데이터 제외.)
이를 모든 user에 대해 적용한 최종 optimization objective는 다음과 같다.
j=1~$ n_u$를 추가한 것, 즉 모든 user에 대해 연산하는 것만 추가되었다.
gradient descent를 적용하기 위한 편미분 값 또한 확인할 수 있다.(마찬가지로 linear regression과 거의 동일)
- Collaborative Filtering
앞서 content based recommendation system을 살펴보았는데,
실제로는 각 영화(또는 상품 등)에 대해 그렇게 feature를 만드는 것이 쉽지 않을 수 있다.
이번에는 반대로 $ \theta$가 먼저 주어진 상황을 가정해보자.
영화-i에 대한 user-j의 평가는 $ {\theta^{(j)}}^Tx(i)$ 로 계산할 수 있었는데,
이번엔 반대로 $\theta$가 주어졌으므로 실제 $ y_{ij}$와 $ {\theta^{(j)}}^Tx(i)$의 차를 줄이도록 $ x^{(i)}$를 학습할 수 있을 것이다.
즉, 위와 같이 optimization algorithm을 정의하면 각 영화들에 대한 feature, $ x^{(i)}$를 학습할 수 있을 것이다.
이러한 경우, 각 feature는 어떠한 의미를 갖기보단 알고리즘이 자동으로 학습(선택)한 feature가 될 것이다.
이렇듯 feature가 주어지면 parameter를 학습할 수 있고, parameter가 주어졌을 때 feature를 학습할 수 있다는 점을 이용하여 두 과정을 교차적으로 반복 수행하면 둘 모두를 학습시킬 수 있는 것이 Collaborative Filtering의 아이디이이다.
실제로는 두 과정을 교차적으로 반복 수행하진 않고, 하나의 optimization objective를 정의한다.
기존의 두 cost function 중 ①과 ②는 사실 같은 식이다. j와 i는 column을 기준으로 전체를 탐색할지, row를 기준으로 탐색할지에 대한 표시의 차이이다.
따라서 두 파라미터($ \theta$와 $ x$)를 모두 최적화하기 위한 cost function은 ③과 같이 정의할 수 있다.
※ $ x_0$ 를 추가하지 않는 것을 확인할 수 있다. 이는 intercept와 같은 역할을 하는 feature가 필요하다면 알고리즘 상 알아서 선택하면 되기 때문이다.(알고리즘이 자동으로 feature를 선택하는 특징 때문.)
최종적으로 알고리즘에 대해 정리하면 위와 같다.
과정 1에서 initialize할 때, 0으로 초기화하지 않는데 이는 NN에서와 유사한 이유이다.(symmetric breaking)
(0으로 초기화한다면 gradient를 업데이트할 때 변하지 않는다는 것을 식에서 확인 가능)
※ feature를 알아서 선택한다면, feature의 수를 어떻게 설정해야 되는지에 대한 질문이 생겼는데, 이에 대한 질문과 답변이 해당 강좌의 토론 포럼에 존재하였다.
결론적으로 feature의 수를 tuning해야는데, 이때 bias와 variance 문제를 고려하여 조정하면 된다.
(ex) learning curve 출력해보기)
- vectorization
$ X$와 $ \Theta$를 위와 같이 정의하면 $ X\Theta^T$의 연산을 통해 Y를 계산할 수 있다.
- 관련 영화 추천
그렇다면 movie - i와 유사한 영화를 어떻게 추천해야 할까?
해당 영화와 feature가 가장 유사한 영화
즉,
\left \| x^{(i)} - x^{j}\right \|
위 식, 거리가 가장 작은 영화부터 추천하면 된다.
- Mean Normalization
score등은 이미 scare이 유사하게 되어있기 때문에 scaling은 필요없지만,
mean normalization은 유용할 수 있다.
위 데이터의 eve와 같이 어느 영화도 평가한 적이 없는 user가 있다면 cost function을 최적화함에 따라
해당 유저의 $ \theta$는 모두 0으로 초기화 될 것이고, 모든 예상 점수는 0점이 될 것이다.
(*가장 앞과 두번째 sum 계산엔 포함되지 않고, 마지막 sum에만 파라미터의 제곱이 들어가므로 0으로 하는 것이 최적화)
그러나 초기 예측값으로 무조건 0이 되는 것보다는 평균 값이 되는 것이 더 합리적이다.
따라서 위와 같이 Mean Normalization을 적용한 데이터를 통해 학습을 수행하면 초기 예측값이 0으로 나오는 것이 문제가 되지 않을 것이다.
(※ 평균은 row-wise, column-wise 어느 것을 사용해도 문제가 되지는 않는다. 정보가 없는 유저에 대한 첫 예측값인 0이 평균이 되도록 하는 것이 적용하는 이유이다.)
'머신러닝 > Machine Learning(Ng)' 카테고리의 다른 글
[11주차] Application Example - Photo OCR, machine learning pipeline (0) | 2021.08.26 |
---|---|
[10주차] Large Scale Machine Learning (0) | 2021.08.26 |
[9주차 - 1] Anomaly Detection (0) | 2021.08.23 |
[8주차 - 2] Dimensionality Reduction, PCA (0) | 2021.08.22 |
[8주차 - 1] Clustering, K-means algorithm (0) | 2021.08.21 |