안녕 하 세요 ~ 이번 시간 엔 지난 Preliminaries 에 이어서 본격 적 으로 알고리즘 에 대해 알아보 려고 합니다 ! ​ 우선 크 게 이 논문 에서 제안 한 방법 은 Generalized Matrix Factorization ( GMF ) , Multi - Layer Perceptron ( MLP ) 를 합친 fusion of GMF and MLP 입니다 ! GMF 는 우리 가 아 는 MF 와 거의 동일 한 것 이 며 , MLP 는 딥 러닝 에 나오 는 멀티 퍼셉트론 이 맞 습니다 . 그럼 이 들 구조 를 하나 씩 뜯어보 도록 하 겠 습니다 ! ​ 1 . General Framework 하 지만 그 전 에 ! 이 두 모델 에 공통 적 으로 들어가 는 구조 와 용어 를 보 도록 하 겠 습니다 . ​ 1 - 1 . Framework 그림 1 . Neural collaborative flitering 구조 그림 1 에서 Input Layer ( Sparse ) 는 user 와 item 을 각각 one - hot - encoding 한 형태 입니다 . 즉 , 해당 하 는 번호 를 제외 하 고 는 전부 0 으로 처리 된 것 으로 논문 에서 는 각각 vuU 와 viI 로 쓰여져 있 습니다 . 위 의 embedding Layer 는 아래 의 Input Layer 를 Embedding 해 주 는 Layer 입니다 . 여기 서 Embedding 은 밀집 벡터 로 만들 어 주 는 과정 입니다 . 여기 서 밀집 벡터 란 무엇 일까요 ? ! 밀집 벡터 란 쉽 게 말 해 어떤 벡터 를 표현 할 때 차원 을 축소 시켜 표현 하 는 벡터 를 말 합니다 . 아래 예시 를 보 시 죠 ! 위 의 수식 을 보 시 면 U 라는 벡터 를 10 차원 에서 5 차원 으로 축소 시킨 것 을 볼 수 있 습니다 . 이렇게 줄어든 대신 Sparse 했 던 vector 가 값 이 채워진 것 을 볼 수 있 습니다 . 이 를 밀집 벡터 라고 합니다 . 그리고 논문 을 보 시 다 보 면 다음 과 같 은 용어 를 보 실 수 있 습니다 . 저기 서 P 에 해당 하 는 값 이 embedding 해 주 는 matrix 고 v 가 one - hot - encoding ( user ) 부분 이 라 생각 하 시 면 되 겠 습니다 ! ​ 그림 1 에서 Embedding Layer 위 의 layer 들 은 저희 가 딥 러닝 에서 하 던 MLP 부분 이랑 똑같이 hidden layer 와 Output Layer 부분 입니다 ! ​ 1 - 2 . Learning 그 다음 은 이 모델 을 학습 하 는 방법 에 대해 보 도록 하 겠 습니다 . 여기 서 y 값 , 즉 target data 값 은 0 또는 1 로 , implicit data 이 기 때문 에 1 ~ 5 점 과 같 은 점수 구조 ( explicit data ) 가 아닙니다 . 저자 는 여기 서 1 은 item i 가 user u 와 관련 있 을 때 , 0 은 관련 이 없 다는 것 으로 정의 했으며 예측 값 은 0 ~ 1 사이 로 하 여 1 에 가까울수록 item i 와 user u 의 관련 도 가 높 도록 설정 했 습니다 . 이렇게 정의 하 고 저자 는 likelihood functiond 을 다음 과 같이 나타냈 습니다 . 그림 2 . likelihood function ( 수식 입력 기 가 익숙 치 않 아 사진 으로 대체 했 습니다 ㅠㅠ ) 식 을 보 면 y 에 '-'( minus ) 가 붙 지 않 은 것 은 observe 된 데이터 고 '-' 가 붙 은 y 는 unobserved 데이터 를 의미 합니다 . 여기 서 우리 의 예측 값 은 얼마나 관련 있 는지 를 나타내 는 값 이 며 , unobserved data 는 user u 와 item i 간 에 관계 가 없 다는 것 을 의미 하 므로 1 에서 해당 값 을 뺀 값 으로 넣 어 주 게 되 는 것 입니다 . 그리고 아래 에서 negative log 화 로 식 을 합의 형태 로 바꾸 어 Likelihood function 을 완성 합니다 . ( 다른 Loss function 방법 에서 많이 보 는 방법 이 죠 ! ) 그림 3 . 완성 된 likelihood function ​ 2 . Generalized Matrix Factorization ( GMF ) 이제 모델 중 하나 인 GMF 에 대해 보 도록 하 겠 습니다 ! 위 에서 봤 던 embedding vector 를 다음 과 같이 표현 합니다 . 로 표현 할 것 입니다 . 그래서 아래 와 같 은 수식 을 만들 게 됩니다 . 여기 서 pu 는 user 의 embedding vector , ⊙ 는 element - wise product , qi 는 item 의 embedding vector 를 의미 합니다 . 즉 , user vector 의 원소 1 부터 n 까지 를 item vector 원소 1 부터 n 까지 서로 일치 하 는 번호 끼리 값 을 곱하 는 것 을 의미 합니다 ( 내적 이 되 겠 죠 ? !). 여기 서 user vector 와 item vector 를 latent vector 라고 부르 는 것 을 볼 수 있 습니다 . 여기 서 latent vector 는 영화 로 예시 를 들 면 user 1 = [ 0 . 2 , 0 . 4 , 0 . 1 , 0 . 3 ] 이 고 item 1 = [ 0 . 5 , 0 . 1 , 0 , 0 . 8 ] 이 라면 user 1 은 코미디 에 0 . 2 , 공포 에 0 . 4 , 액션 에 0 . 1 , 로맨스 에 0 . 3 의 흥미 가 있 다고 가중치 를 주 는 것 이 고 item 1 은 영화 요소 를 코미디 0 . 5 , 공포 0 . 1 , 액션 0 , 로맨스 0 . 8 을 가지 고 있 다고 말 할 수 있 습니다 . 물론 latent vector 라 이 값 이 실제로 해당 장르 를 의미 하 지 않 을 수 있 습니다 . 저건 사람 이 어떻게 정의 하 느냐 에 따라 달라져요 ! ​ 이후 다음 식 을 보 시 면 다음 과 같 은 형태 가 나오 죠 ! 여기 서 부턴 Deep learning 을 공부 하 셨 던 분 들 이 라면 친숙 한 표현 들 이 보일 것 입니다 . a 은 activation function 이 며 h 는 hidden layer 를 의미 하 죠 ! h 에 T 가 붙 은 것 은 수식 에서 벡터 곱 으로 표현 했 기 때문 입니다 . GMF 의 activation function 은 sigmoid 로 한다고 합니다 . ​ 3 . Multi - Layer Perceptron ( MLP ) 이 모델 은 우리 가 기존 의 deep learning 에서 의 MLP 와 똑같 습니다 ! 저자 는 앞 의 GMF 만 으론 user 와 item latent features 의 관계 를 나타내 는데 한계 가 있 다고 판단 하 여 MLP 를 추가 하 게 되 었 습니다 . 수식 은 아래 와 같 습니다 ! 여기 서 z 1 은 pu 와 qi 를 concat 하 는 것 으로 두 vector 를 하나 의 vector 로 표현 한 것 입니다 . ​ 는 hidden layer 를 의미 하 며 a 2 는 activation function 입니다 ! 이러 한 hidden layer 를 L - 1 개 만듭니다 . ​ 라는 output ( 예측 값 ) layer 를 생성 하 게 됩니다 . 여기 서 activation function 은 ReLU 를 쓰 며 , layer 가 고층 으로 갈수록 neuron 개수 는 더 적 어 진다고 가정 합니다 . ​ 4 . Fusion of GMF and MLP 자 . . 드디어 마지막 입니다 ! 앞 에서 만든 GMF 와 MLP 를 합칠 건데요 . 그림 을 먼저 보 도록 하 겠 습니다 . 그림 4 . Neural matrix factorization model 그림 을 보 면 GMF 와 MLP 가 위 에서 Concatenation 으로 합쳐 지 는 것 을 볼 수 있 습니다 . 그런데 여기 서 MF User Vector 와 MLP User Vector 같이 Embedding Vector 가 2 종류 로 나뉘 는 것 을 볼 수 있 습니다 . 이 는 저자 가 GMF 와 MLP 에서 최적 의 Embedding 개수 ( Latent vector 의 원소 개수 ) 가 각각 다를 것 이 므로 모델 별로 각각 Embedding 을 한다고 합니다 . 그리고 아래 의 수식 을 보 면 우리 가 아까 봤 던 것 들 을 짬뽕 ( ? ) 한 것 을 볼 수 있 습니다 . ​ 여기 서 phiGMF 는 GMF , phi 는 MLP 를 각각 만든 것 이 며 sigma 는 activation function 으로 sigmoid 를 의미 합니다 . 이렇게 해서 저자 가 제안 하 는 모델 을 완성 하 게 됩니다 ! ​ 5 . Pre - training 저자 는 objective funciton ( 위 에서 봤 던 likelihood function ) 이 non - convexity 하 여 가중치 값 을 미리 초기 화 하 기 위해 Pre - training 을 합니다 . 그래서 GMF 와 MLP 를 각각 학습 한 뒤 나온 가중치 를 이용 하 는 데 여기 서 a 를 1 로 놓 고 GMF 가중치 를 0 . 7 만큼 이용 한다고 하 면 MLP 는 0 . 3 를 이용 하 여 Fusion 모델 에서 의 가중치 값 을 초기 화 하 게 됩니다 . ​ 여기 까지 Neural Collaborative Filtering 의 알고리즘 이 었 습니다 ! 코드 는 아래 사이트 에 나와 있 어서 참고 하 시 면 될 것 같 습니다 ! ​ https : / / github . com / hexiangnan / neural _ collaborative _ filtering hexiangnan / neural _ collaborative _ filteringNeural Collaborative Filtering . Contribute to hexiangnan / neural _ collaborative _ filtering development by creating an account on GitHub . github . com ​ 긴 글 읽 어 주 셔서 감사 합니다 . 이해 안 되 시 거나 잘못 된 부분 있 으면 말씀 해 주 세요 ! !!​ PS : 네이버 스마트 에디터 에서 수식 입력 창 을 이용 하 지 않 고 Latex 로 입력 하 니 인식 이 되 질 않 네요 ㅠㅠ 혹시 에디터 편집 창 에서 곧바로 수식 쓸 수 있 는 방법 아 시 는 분 알려 주 시 면 감사 하 겠 습니다 !