본문 바로가기
회고 🤔/네부캠 AI Tech

[네부캠 AI Tech] 5주차 학습 정리 🤓

by judy@ 2023. 12. 8.

 

목차

     

    추후 내용을 약간 보충할 예정.


    학습 정리 & 배운점

    # 231127

    학습 정리 및 배운점 📚

     

    [ GNN 기반의 추천 시스템 ]
    - graph
      - 그래프란? 노드와 엣지로 구성된 자료구조. 개체 간 관계를 표현하기 적절함. 코로나의 전파, 유저-아이템 소비, social network에 주로 쓰임
      - Graph Convolution: 컨볼루션은 이미지와 같은 2D, 3D 유클리디안 공간에서 지역적 특성을 캡처하기 위한 연산자. 그래프 컨볼루션은 non-euclidian 공간에서 엣지로 연결된 local connectivity를 캡처함.
    - NGCF
      - neural graph collaborative filtering의 약어로, 그래프 기반의 협업 필터링 방법론
      - 기존 MF 방식들은 유저와 아이템 임베딩을 각각 구한 뒤, 내적하여 상호작용을 찾아내는데, 임베딩에는 상호작용 정보가 적용되지 않음.
    - lightGCN
      - NGCF에서 불필요한 연산을 다 빼버린 경량화된 모델

     

    [ RNN 기반의 추천 시스템 ]

    - RNN, LSTM, GRU 리뷰
    - GRU4Rec (session-based learning)

     

    - gcn은 유저, 아이템의 high-order connectivity를 캡처할 수 있어서, 개체 간 관계가 명확한 데이터에서 유용하게 사용될 수 있음. 다만, user가 item을 소비하는 bipartite graph에서는 3차 이상의 관계성은 오히려 노이즈가 될 수도 있어서 offline test가 아닌 online 환경에서도 유용할지 잘 모르겠다는 생각임.

    - 이 날, Dnn for YouTube Recommendation 논문에 대해서 피어세션 때 리뷰하기로 했는데, 내용이 너무 어려워서 지고 말았다. 논문의 절반만 설명하였는데, 그 내용을 전달하는 나도 잘 모르겠어서 살짜쿵 부끼럽고 자괴감이 들었다.... (수요일 보완 완!)

     

    # 231128

    학습 정리 및 배운점 📚

     

    [ checkout & reset ]
    - git checkout 은 head를 바꾸고, git reset 은 브랜치를 바꾸고
    - commit --amend
    - 커밋을 수정하는 것이 아니라 복제하여 만드는 것으로 이전 커밋으로 변경하고 싶으면 git reset hard를 사용하면 된다.
    - main과 exp의 base는 start인데, main을 exp로 rebase해. 라고 하면, parallel하게 있는 것에서 exp -> main으로 타임라인이 생겨버림.
    - exp의 마지막에 base다음의 main 작업을 합쳐 새로운 버전으로 만들고 뒤에 main을 이어서 하나의 타임라인으로 나타냄.
    - merge hell을 3-way branch merge 방법(rebase, revert, cherry-pick)들로 해소 가능. 이때 rebase는 exp 다음에 main을 이어 하나의 타임라인으로 나타내는 방법.
    - git rebase를 써보니, 중간 중간 skip할 건지, abort할 건지, continue 할 건지를 물어본다. 여러 번 충돌이 발생하는데, 할 때마다 의사 결정을 해야 함.
    - cherry-pick: 특정 버전만 가져오고 싶을 때 사용
    - git은 로컬 저장소에 여러 개의 원격 저장소를 연결할 수 있기 때문에 원격 저장소에 이름을 붙여줘야되는데, 일반적으로 origin을 사용한다.
    - git log --all --oneline --graph: 로그 예쁘게 보기
    - pull = fetch + merge 이다. fetch: 원격 -> 로컬 가져오는 것. merge: 가져온 것과 내 것을 합치는 것.
    - 충돌과 reject은 상관이 없다.

    [ CAR: Content-aware recommendation system ]
    - CF에서는 추천에서 사용가능한 데이터 중 유저, 아이템 ID와 상호작용 정보 정도만 활용 가능
    - 다른 피처를 더 풍부하게 활용해볼 수는 없을까? 라는 측면에서 CAR 분야 발전
    - CAR에서는 ID 사용하지 않을 수도 있기 때문에, ID가 없는 데이터나 추천 문제에서 더욱 유용함
    - ID, 유저나 아이템의 다양한 속성들 외에 맥락 정보(추천의 상황)도 활용할 수 있음
    - 그 중에서도 CTR 을 예측하는 분야가 있음
    - CTR은 추천 온라인 테스트에서도 많이 사용하는 지표로, 매출보다는 다른 요인이 더 적게 개입되므로 CTR을 예측하여 CTR 이 높은 아이템을 추천하는 방향으로 설계 가능
    - CTR 예측은 0~1 사이의 클릭 확률의 예측으로 기본적으로 선형적인 로지스틱 회귀 방식을 활용할 수 있음. 하지만, 로지스틱 회귀로는 변수 간 상호작용 반영이 불가능. global bias와 1차식의 weight를 학습함.
    - polynomial(?) 방식은 변수 간 카티산 곱으로 이루어진 이차항에서도 weight를 학습하여 변수 간 관계를 반영할 수 있음. 하지만 변수의 개수가 증가함에 따라 항의 개수가 $n^2 + n$ 으로 증가하는 문제가 있음

    [ FM (Factorization Machines) ]
    - SVM과 MF의 장점을 하나의 모델에 반영하고자 등장한 CTR 예측 모델
    - SVM은 예측 성능이 매우 좋은 모델
    - MF는 sparse한 데이터에서도 잘 동작하나, user-item matrix를 활용하기 때문에 cold-start 문제를 풀 수 없음. 또 특정한 데이터 상황이 아니면 활용하기 어려움
    - user와 item의 행렬이 아닌! user와 item을 sparse한 원핫 벡터로 표현하여 입력 데이터로 활용
    - CF의 입출력 (user, item) -> (interaction)
    - FM의 입출력 (user, item, context, properties, ...) -> (interaction)
    - 입력 변수에는 원핫 벡터 외에 아이템이나 유저의 특성 정보들을 마음껏 concat하여 추가할 수 있음
    - 출력은 CTR이 됨
    - u1의 i1,i3에 대한 CTR은 있지만 i5에 대한 CTR은 없다고 해보자.
    - i5은 다른 유저들(u2, u5, ..)에 의해 소비된 적 있고, 그 유저들은 다른 아이템들(i7, i1)을 소비한 적이 있으니 i5와 다른 아이템의 구분되는 특성이 있고 모델은 이를 학습할 수 있음
    - u1은 i1, i3을 소비한 적이 있고, i1,i3은 다른 유저들(u4, u2, u8)에 의해 소비된 적이 있다면 u1은 다른 유저간 구분되는 특성이 있을 거고 모델은 이를 학습할 수 있음
    - 모델은 user와 item의 구분되는 특성을 원핫벡터 외의 다른 특성들도 활용해서 학습하고, 새로운 조합인 u1,i5에 대해서도 결과를 예측할 수 있음
    - 모델은 아래와 같으며, 여기서 파라미터는 $w_0$, $w_{1,i}$, $v_i$, $v_j$임 
    $$FM = w_0 + \sum_{i=0}^{i=1}{w_{1,i}x_i} + \sum_{i=0}^{n}\sum_{j=i+1}^{n}{<v_iv_j>x_ix_j}$$

     

    [ FFM ]
    - FM에 field 를 넣어 발전시킨 모델

    - field-aware의 의도는, 하나를 설명하는 입력들을 필드라는 개념으로 묶어, 필드 내의 상호작용보다는 필드 간의 상호작용을 세부적으로 캡처하기 위함임
    - 범주형 변수의 원핫 요소를 특징, 변수를 필드로 두고 모델링하는 경우가 많음. 또는 특징 == 필드로 두는 경우도...

    - FM의 파라미터 수는 n,k라면, FFM은 n,f,k로, 필드의 개수에 따라 파라미터가 훨씬 많아짐.

     

    - git 특강을 10-5로 수강한 날. 이 날을 계기로 head, main, master, origin에 대해 좀 더 잘 알게되었고, detach에 어떻게 대처해야 하는지, 3way branch merge 방법 중 rebase는 두 개 이상의 병렬적인 작업 내역을 베이스-브랜치1-브랜치2의 타임라인으로 변경하는 거라는 것을 알게 됨. revert와 cherry-pick은 뭘까? 알아보자.

    - 이 날 FM과 FFM에 대해서 굉장히 혼란이 왔다 오바. 당일에는 강의 자료를 보고 그냥 통과해버렸는데, 코드를 보면서 점점 더 이해가 안가서 멘붕의 시-작. (하지만 승리하였다. to be continue...)

    # 231129

    학습 정리 및 배운점 📚

     

    [ DeepCTR ]
    - 지난 시간에 이어 CAR 설명, CAR의 대표적인 task는 CTR 예측.
    - Wide & Deep - MF + MLP
    - DeepFM - extended FM
    - Deep Interest Network (DIN) - user behavior features, local activation unit
    - Behavior Sequence Transformer (BST) - user behavior sequence, transformer

     

    - YouTube Recommendation에서는 시퀀스 정보를 미리 유출하는 것보다 avg가 낫다고 했는데, DeepCTR에서는 오히려 시퀀스 정보를 포함한 모델에서 성능이 더 좋다는 게 신기했다.

    - 피어세션 때 YouTube Recommendation 논문을 리뷰하였는데, 이번 주 내로 업데이트 해야지!

     

    # 231130

    학습 정리 및 배운점 📚

    - 강화학습 기반의 Bandit 추천에 대해서 학습했음. multi-armed bandit과 reward를 최대화하기 위한 기본적인 greedy, epsilon greedy, ucb와 조금 더 심화된 방법인 톰슨 샘플링 방법에 대해서 배움. 하지만, 와닿지 않는다. 다시 한 번 복습이 필요할 것으로 보임

    - FM, FFM, DeepFM의 차이가 잘 이해가 안 갔고, FM과 FFM이 헷갈려서 그림을 통해 팀원들과 다시 해석해보았다. 매우 유익한 시간;;

    FM vs. FFM

    - 헷갈렸던 주요 요인은 FM, FFM의 임베딩 파라미터를 pytorch에서 nn.Parameter 와 nn.Embedding으로 다르게 풀어내주셨으며, FFM에서 variable-field-k가 아닌 field 관점에서 field-variable-k로 선언하여 학습한 것 때문이었다. 이해가 탄탄하지 않다보니, 약간 비틀었을 때 혼돈에 빠져버렸는데, 이번 기회에 다시 제대로 이해하게 되어 매우 다행이라고 생각한다.

     

    # 231201

    학습 정리 및 배운점 📚

    - 오늘은 오프라인 미팅의 날!

    - level1 스텝에서는 거의 없었으나, 이번 6기부터는 조금 빠르게 미팅의 기회가 생겼다고 함. 처음에는 어색어색 부끄부끄했는데, 우리 조원들과는 이미 저번에 인사를 한 번 했어서 편안했다. 그리고, 랜덤 오프라인 피어세션의 기회 덕택에 Recsys 트랙의 다른 캠퍼들이 어떠한 생각을 가지고 프로젝트를 하고 싶어하는 건지 알 수 있게 되어 좋았다. 나는 다양한 모델을 서빙할 수 있는 서비스를 해보고 싶은데, 마음이 잘 맞아 가치있고 자랑스러운 최종 플젝을 하면 좋겠다!! (다들 좋아서 어떻게 해야 할지 오히려 고민...)

    - 처음으로 오프라인에서 다른 캠퍼들을 만나게 되었는데, 아침부터 나와서 활동하니 살짜쿵 힘들지만 리프레쉬가 되었다. 종종 모이게 되면 좋을 듯!

     


    5주차 총평 🤔

    ....오늘 새벽 감성으로 써야겠다....

    반응형