=============================================
학습내용
[Graph 7강] 그래프의 정점을 어떻게 벡터로 표현할까?
정점 표현 학습

이전까지는 그래프 라이브러리를 활용해서 그래프 자체를 입력값으로 넣어 학습시켰지만, 원래 벡터 형태를 가정하고 만든 모델들이 있으니까, 그래프 즉 그래프의 정점들을 벡터형태로 임베딩하면 벡터 형태의 데이터로 다른 여러 훌륭한 모델들을 사용할 수 있다.

그래프를 통해 주변의 관계, 군집 등을 표현한 것 처럼 벡터로 나타낸다면 이런 관게를 좌표상에 보존하는 것을 목표로 한다.

그래서 벡터간의 유사도를 나타내기 위해 내적을 사용한다. 이건 전에 했던 영화 추천 시스템과 비슷하다.
그럼 해야할 일은 정해졌다.
1) 그래프에서의 정점 유사도를 정의하고
2) 정의한 유사도를 보존하도록 정점 임베딩을 학습한다.
그래서 정점 유사도를 어떻게 정의할 것인지, 몇가지 접근법을 알아본다.
여기서 우리가 하고 있는건, 그래프를 입력으로 넣으면 벡터를 출력으로 내주는 learning model를 만들고 싶다는거다. 그래서 유사도 정의에 따라 각각 다르게 loss function을 정의하는 등의 행동을 할거다. 학습의 결과로 정점의 임베딩 자체를 얻는 변환식 방법들이다.
인접성 기반 접근법

말 그대로 그냥 바로 연결되어 있으면 유사하다고 하고, 아니면 아니다 라고 정의하는 것이다.


근데 이렇게 유사도를 정의하면 당연히 문제가 생긴다. 거리가 2~3 인 경우에도 사실은 어느정도 유사한 특징인데 그걸 싸그리 다 무시하고, 그러기 때문에 같은 군집에 있어도 유사도가 0이 된다.
그래서 이를 보완하는 다른 방법들을 생각해본다.
거리/경로/중첩 기반 접근법
http://snap.stanford.edu/proj/embeddings-www/ |


거리 k가 추가됐으니까 그냥 인접성 기반 접근법에서 나온 A에 k만 추가한 형식임을 알 수 있다. k승 곱해주는데 그 중간 경로로 가면 가능한 개수가 늘어나니까 곱해주는거 있잖아 그 그래프에서. 그거 말하는 거라는데. 까먹어서 그런지 이해가 안간다..


중첩도 중첩된 정도에 맞춰 loss function이 달라졌다.

친구 수백명 중의 1명이라면 별로 안중요한 관계일 수 있지만, 친구 2명중 1명 이라면 매우 중요한 관계일 확률이 높다. 이를 반영하기 위해 비율로 계산한 거다.
임의보행 기반 접근법
아 그냥 위에 방법들 다 필요 없고 웹서핑 했던 것처럼 임의의 확률로 그냥 다 걷게 하자. 가 임의보행 기반 접근법. 그래서 시작 정점 주변의 지역적 정보와 그래프 전역 정보를 모두 고려할 수 있다.



로그에 덧셈이니까 확률 곱으로 볼 수 있을듯.
그래서 이렇게 임의 보행 방법을 사용할 수 있는데, 여기에서도 방법에 따라 DeepWalk 와 Node2Vec이 구분된다.
DeepWalk는 위에서 한 기본적인 임의보행 방법이고, 즉 현재 정점의 이웃 중 하나를 균일한 확률로 선택하는 이동과정을 반복하는 거고
Node2Vec은 직전에 갔던 거리에 따라 차등적인 확률을 부여하는 방법을 쓴다.



위 그림이 Node2Vec으로 임베딩을 한 뒤에 K-means로 군집 분석을 수행한 건데, 부여하는 확률에 따라 다른 기능으로 작동하는 걸 볼 수 있다.

근데 위에서 눈치챘을수도 있지만 loss function이 v의 제곱인 시간복잡도를 가진다. 만약 사람 만명만 넣어도 게임 끝남.
그래서 몇 개의 정점 샘플만 뽑아서 비교하고, 근사식을 사용한다.

변환식 정점 표현 학습의 한계
지금까지 위에서 한건 변환식(Transductive) 방법. 이게 뭐냐면 학습의 결과로 정점의 임베디 자체를 내놓기 때문에 생기는 한계들이 있다.
1) 학습이 진행된 이후에 추가된 정점에 대해서는 임베딩을 얻을 수 없습니다 2) 모든 정점에 대한 임베딩을 미리 계산하여 저장해두어야 합니다 3) 정점이 속성(Attribute) 정보를 가진 경우에 이를 활용할 수 없습니다
그래서 출력으로 결과 임베딩이 아니라 모델(인코더) 자체를 내놓는 귀납식(Inductive) 방법이 있는데 대표적인게 그래프 신경망(Graph Neural Network)다.

실습
https://colab.research.google.com/drive/1F_bfebRlyKFZTw8acxNYodT1HX1M6MC9?usp=sharing

[Graph 8강] 그래프를 추천시스템에 어떻게 활용할까? (심화)

내용 기반 추천 시스템, 협업 필터링, 추천시스템의 평가.. 앞에서 했던것들
넷플릭스 챌린지라고 추천 예측하는거 했었는데, 이걸로 많은 사람들이 달려들어서 추천시스템이 많이 발전했고 여기서 만들어진게 아직도 쓰이고 있다.
잠재 인수 모형


잠재 인수 모형(Latent Factor Model) = JUV decomposition = SVD(와 유사)
사용자와 상품을 벡터로 표현한다. 이것 조차 학습시켜서 잠재 인수가 나온다.


이게 무슨 말이냐면 행을 유저로 놓고 열을 영화로 놓은 원래 참 데이터가 있을 텐데 이 행렬은 유저와 그 유저에 대한 잠재벡터, 영화와 그 영화에 대한 잠재벡터의 행렬 곱으로 나눠서 볼 수 있다. 결국 이 유저행렬, 영화행렬을 다 채우면, 자연스럽게 원래 있던 참 데이터의 예측값이 나올 수 있게 되는 것이다. 그리고 참 데이터와 이렇게 예측해서 만든 행렬이 있으니 학습이 가능해서 학습하는 것이다.

그래서 이게 기본 loss function 이다.


그래서 뭐 수가 너무 많으니까 그냥 경사하강법(GD) 대신 확률적 경사하강법(SGD) 쓰고.. 이전 그냥 일반 딥러닝이랑 비슷하다.
그래서 여기까지 고려해서 계산했었는데 목표 오차가 안나와서 더 파고들음.
고급 잠재 인수 모형
위에서 한 잠재 인수 모형에서 좀 더 할거 없나 찾아보는 모습이다.

기존엔 p와 q를 통해 평점 자체를 예측하려고 했다면, 지금은 사용자 편향과 상품 편향을 제외하고 그 차이만을 pq 내적을 통해 근사하려고 하는것.
전체 점수 평균과 사용자, 상품의 편향까지 세세하게 고려해서 순수 변수들만 예측하게 하게끔 하는 것.

(확률적) 경사하강법을 통해 손실 함수를 최소화하는 잠재 인수와 편향을 찾아냅니다



평점이 시간에 따라 달라지는 것도 고려한다.
근데 이렇게 해도 안되니까 결국 그냥 거의 300개 모델을 앙상블해서 이겼단다.
끝
실습
https://colab.research.google.com/drive/14A8kPOi0edefHg6HrF3DequiyqkYMD81?usp=sharing

=========================================
과제 / 퀴즈
https://colab.research.google.com/drive/10j2KFOYboKZEk4aFe8Y8remv7vQXgjT6?usp=sharing
행렬 곱셈에서 메소드 조심하자.
==========================================
피어세션
수업 복습하고 기업관련 얘기했음.
====================================
후기
놀고 싶은 마음이 커진다..
'과거의 것들 > AI Tech boostcamp' 카테고리의 다른 글
AITech 학습정리-[Day 27] 서비스 향 AI 모델 개발 & AI 시대의 커리어 빌딩 (0) | 2021.11.27 |
---|---|
AITech 학습정리-[Day 25] GNN 기초 & GNN 심화 (0) | 2021.11.27 |
AITech 학습정리-[Day 23] 군집 탐색 & 추천시스템 (기초) (0) | 2021.11.27 |
AITech 학습정리-[Day 22] 페이지랭크 & 전파 모델 (0) | 2021.11.27 |
AITech 학습정리-[DAY 21] 그래프 이론 기초 & 그래프 패턴 (0) | 2021.11.27 |