Today I Learned(23/08/29)

karpathy·2023년 8월 29일

TIL

목록 보기
6/10

Learn

  1. 데이터 분석가가 반드시 알아야할 것 마무리
  2. 관련 개념 정리(SGD와 행렬분해, 피어슨 유사도와 추천시스템, 시계열 분석, ARIMA)
  3. 코드잇 머신러닝
  4. 3분 딥러닝 RNN 실습

Details

  1. 행렬분해와 SGD : 추천 시스템에서 우리는 결국 유저와 추천대상(상품, 컨텐츠)간의 매트릭스(값은 추천점수 혹은 선호도)를 만들고 싶다. 하지만 실제 유저가 모든 상품과 컨텐츠를 소비하지 않기 때문에 이 행렬은 sparse(값이 일부 비어있는)하고 이 값을 근사하는 작업들이 추천시스템에서 핵심이다.

이를 위해 우리는 (유저 X 잠재요인) 행렬 P와 (잠재요인 X 컨텐츠) 행렬 Q로 분해하는 접근법을 쓴다.
이 행렬을 구할 수만 있다면 우리는 추후에 특정 유저가 상품에 대한 선호도를 뽑아낼 수 있다.

하지만 처음에 말했다시피 이 행렬은 값이 비어있는 경우가 많기 때문에 이 잠재요인 값들에 대한 행렬을 "근사"해야하는데 이 때 SGD를 사용한다. 초기값을 주고 거기서 그라디언트로 근사한다.

  1. 피어슨 유사도 : 추천 시스템은 공분산에서 각자의 표준편차를 곱한 값을 나누는 방식이다. 결국 상호간의 분산이 유사하면 할수록 비슷한 값을 가지고 있기 때문에 이를 활용해서 유사한 상품 추천을 해준다.

  2. 시계열 분석 : 시계열은 trend, seasonality, cycle, white noise를 가지고 있고 주기는 Seasonalty와 다르게 일정한 빈도로 일어나지 않는다. 또한 시계열은autoregressive한 특성을 가지고 있어서, 목적변수인 자신의 특성을 활용해서 회귀분석을 한다. 정상성을 가질 수 있도록, 주기성을 빼주는 작업을 차분이라고 한다.

  3. ARIMA
    AR모델과 MA모델을 합친 것으로, AR은 얻고자 하는 Xt값을 이전 시점의 X값을 활용하는 것을 말한다.
    MA 역시 이전 시점의 값을 활용하는 것은 맞지만, 이전 항에서의 error 텀을 반영하는 것을 말한다.
    ARIMA는 여기에 차분이라는 개념을 넣어서 non-stationary한 상황을 대응한다.

  4. DataLoader

  • 데이터셋이 많은 특성상, 파이토치에서 minibatch를 슬라이싱해주는 클래스
  1. RNN Code
def _init_state(self, batch_size = 1):
    weight = next(self.parameters()).data #첫 layer의 parameter들의 Device와 데이터 타입을 가져오기 위함
    return weight.new(self.n_layers, batch_size, self.hidden_dim).zero()
  1. 행렬분해와 SGD 관련 설명
    https://big-dream-world.tistory.com/69

  2. ARIMA
    https://otexts.com/fppkr/AR.html

  3. DataLoader 관련 설명
    https://sanghyu.tistory.com/90

  4. GRU 코드
    https://yjs-program.tistory.com/164
    https://deep-learning-study.tistory.com/691

profile
Lean, Learn, Lesson

0개의 댓글