Study for Data Science

CS224W - ML with Graphs 요약(1)

|

1. 왜 그래프인가?

  • 그래프는 관계와 상호작용이 있는 엔티티를 묘사하고 분석하기 위한 일반적인 언어이다.
  • 예시
    • 이벤트 그래프
    • 컴퓨터 네트워크
    • 질병 확산 경로
    • 지식 그래프
    • 소셜 네트워크
  • 다양한 도메인에서 많은 관계적 구조를 그래프로 표현 할 수 있고, 이를 통해 더 좋은 성능을 낼 수 있다.

2. 그래프란 무엇인가?

  • 그래프 \(G\) 는 노드들의 집합 \(V\) 와 노드 사이의 엣지들의 집합인 \(E\) 로 정의된다.
  • 그래프의 종류
    • undirected/directed graph
    • weighted graph
    • heterogeneous graph
    • multiplex graph
    • bipartite graph
    • etc
  • 그래프를 행렬로 표현하는 가장 간단한 방법 중 하나는 adjacency matrix로 표현하는 것이다.
  • 그래프(또는 노드)를 표현하는 다양한 방법이 있고, 이를 앞으로 살펴볼 예정이다.
    • 노드간의 관계 구조를 활용 할 수 있다.
    • 노드의 특성을 표현할 수 있는 다양한 정보도 활용 할 수 있다.

3. 그래프에서 머신러닝

  • 그래프에서의 머신러닝은 지도/비지도와 같이 전통적인 머신러닝의 분류로 구분하기 어렵다.
  • 노드 분류(node classification) : 노드 특성 분류하기
    • 예시 - SNS에서 봇 계정 분류하기
    • 그래프에서 노드들은 i.i.d(independent and identically distrubuted)를 만족하지 않는다.
    • 그래프에서는 노드를 독립적인 데이터 포인트로 다루지 않고, 노드 간의 관계를 이용해 모델링 할 수 있다.
  • 관계 예측(relation prediction) : 두 노드 간의 잃어버린 관계 예측
    • link prediction, graph completion, relational inference 등으로도 불림
    • 그래프에서 일부 엣지를 제외하고 학습한 다음 제외한 엣지를 예측하도록 학습한다.
    • 이 과정은 그래프 데이터 종류의 매우 의존적이다.
  • 군집화와 커뮤니티 감지
  • 그래프 분류, 회귀, 군집화

참고 자료

강의 - Leature 1
책 - Chapter 1

Deep Neural Network(3)

|

DNN의 문제점

최근의 DNN은 상당히 좋은 성능을 보이지만 초창기에는 몇몇 문제점이 있었다.
DNN 구조를 구성할 때 layer를 많이 쌓으면서 다음과 같다.

  • Vanishing gradient
  • Exploding gradient
  • 학습 속도가 느리다.
  • 많은 매개변수를 가지게 되면서 Overfitting을 하게 된다.

이런 문제점을 해결하기 위해 다음과 같은 다양한 방법에 대해 소개하려고 한다.

  • 가중치 초기화
  • 활성 함수 변경
  • 배치 정규화
  • 최적화 알고리즘 변경

Vanishing & Exploding Gradient problem

  • DNN의 학습 단계에서 경사 하강법으로 back-propagation을 통해 하위층으로 진행될 때, 아래와 같은 문제로 학습이 제대로 되지않는다.
    • 그레디언트가 점점 작아지면 가중치가 변경되지 않아 학습이 진행되지 않는 경우가 많이 발생한다.(Vanishing Gradient)
    • 반대로 그레디언트가 점점 커져 여러 개의 층이 비정상적으로 큰 가중치로 갱신되어 발산하게 된다.(Exploding Gradient)
  • 세이비어 글로럿과 요슈아 벤지오의 논문 “Understanding the Difficulty of Training Deep Feedforward Neural Networks”(2010)에서 다음과 같은 문제점을 제시한다.

문제 원인

  • 각 layer를 통과하면서 입력값의 분산보다 출력값이 분산이 커짐
  • 활성 함수로 시그모이드 함수를 사용하면서 입력의 분산이 커질 수록 0,1에 가까워 짐
  • 평균이 0.5라는 점과 함수가 항상 양수를 출력하기 때문에 문제 발생(편향 이동)

해결 방안

  • 가중치 초기화 방법 변경
    • 세이비어 초기화
      • 평균이 0이고 표준편차가 \(\sigma = \sqrt { \frac { 2 }{ { n }_{ input }+{ n }_{ output } } }\) 인 정규분포에서 무작위로 초기화
    • he 초기와
    • 그 외 활성 함수에 따라 다양한 초기화 방법이 있다.
  • 활성 함수 변경
    • 하이퍼볼릭 탄젠트 : \(\tanh { (x)\quad =\quad \frac { 2 }{ 1+{ e }^{ -2x } } -1 }\)
      • 장점 : 편향 이동이 발생하지 않는다.
      • 단점 : 시그모이드와 마찬가지로 𝑥 의 절대값이 커지면 그레디언트가 0에 수렴.
    • ReLU(rectified linear units) : \(ReLU(x)\quad =\quad max(0,x)\)
      • 장점 : 계산이 간단하며 그레디언트가 유지된다.
      • 단점 : 𝑥 <0일 때, 그레디언트가 0이 되어 가중치를 변화하지 못하고 0만 출력하게 된다. (dying \(ReLU\))
    • LeakyReLU : \(LeakyReLU(𝑥)=max(0.01x,x)\)
      • 장점 : dying \(ReLU\) 해결(\(x < 0\) 일 때, 그레디언트가 0이 아님.)
      • 단점 : 0에서 미분 불가
      • 참고) 기타 \(LeakyReLU $4의 변종도 있음,\) RReLU \((randomized leaky ReLU)/\) PReLU $$(parametric leaky ReLU)
    • ELU : \({ ELU }_{ \alpha }\begin{cases} x,\quad x\quad >\quad 0 \\ \alpha ({ e }^{ x }\quad -\quad 1),\quad x\quad \le \quad 0 \end{cases}\)
      • 장점 : \(𝑥=0\)일 때, 그레디언트가 급격하게 변하지 않음 (미분은 불가능)
      • 단점 : 계산속도가 상대적으로 느림
  • [ \(ELU > LeakyReLU > ReLU > tanh > sigmoid\)] 순으로 사용하는 것을 권장한다.

배치 정규화

  • 적절한 활성 함수와 초기화 방법을 사용하더라도 내부 공변량 변화에 따라서 그레디언트 소실과 폭주가 발생 할 수 있다.
  • 내부 공변량 변화 : 훈련하는 동안 이전 층의 파라미터가 변함에 따라 각 층에 들어오는 입력의 분포가 변화되는 문제 (학습 데이터과 테스트 데이터가 다른 경우는 공변량 변화라고 한다.)
  • 각 층에서 활성함수를 적용하지 전에 아래 과정을 추가 한다.
    1. 입력 데이터의 평균과 분산을 계산한다. (입력데이터 중 미니배치에서 산출)
    2. 계산된 평균과 분산을 이용하여 평균을 0으로 정규화 한다.
    3. 스케일링과 이동을 담당하는 매개변수를 추가 한다.
      • 위 과정을 수식으로 표현하면 아래와 같다.
      1. \[{ \mu }_{ B } = \frac { 1 }{ { m }_{ B } } \sum _{ i=1 }^{ { m }_{ B } }{ { x }^{ (i) } } ,\quad { \sigma }_{ B }^{ 2 } = \frac { 1 }{ { m }_{ B } } (\sum _{ i=1 }^{ { m }_{ B } }{ { ({ x }^{ (i) }-{ \mu }_{ B }) }^{ 2 } }\]
      2. \[{ \hat { x } }^{ (i) } = \frac { { x }^{ (i) }-{ \mu }_{ B } }{ \sqrt { { \sigma }_{ B }^{ 2 }\quad +\quad \varepsilon } }\]
      3. \[{ Z }^{ (i) } = \gamma { \hat { x } }^{ (i) } + \beta\]
        • \({ \mu }_{ B }\)는 미니배치 \(B\)에 대한 평균 이다.
        • \({ \sigma }_{ B }\)는 미니배치 \(B\)에 대한 표준편차이다.
        • \({ m }_{ B }\)는 미니배치 \(B\)의 샘플 수이다.
        • \({ \hat { x } }^{ (i) }\)는 평균이 0이고 정규화된 입력이다.
        • \(\gamma\)는 층의 스케일 매개변수이다.
        • \(\beta\)는 층의 이동 (bias) 매개변수이다.
        • \(\varepsilon\)는 분모가 0이 되는 것을 막기 위한 smoothing term이다.
        • \({ Z }^{ (i) }\)은 BN 연산의 출력이다.
  • 배치 정규화가 적용되어진 layer 마다 \(\gamma\)(스케일)), \(\beta\)(이동), \(\mu\)(평균), \(\sigma\)(표준편차)가 추가적으로 학습되게 된다.
  • 테스트 과정에서는 훈련 과정에서 구해진 이동 평균(moving average)을 이용하여 정규화 한다.
  • 이동 평균은 지수 감소(expoonential decay)를 사용해 계산된다.
  • 모멘텀(momentum)이라는 하이퍼 파라미터(hyperparameter)를 적용하여 아래와 같이 계산한다.
    • \[\hat { v } \leftarrow \hat { v } \times momentum + v \times (1 - momentum)\]
    • momentum은 0.9와 같이 1에 가깝게 초기화하며, 미니배치가 작을 경우 더 1에 가깝게 조정한다.
  • 배치 정규화의 장단점
    • 장점
      • 매개변수가 안정되어 더 큰 학습률(learning rate)을 사용 할 수 있다.(학습 속도 향상)
      • 미니배치를 어떻게 설정하는가에 따라 모델이 일반화되어 drop out, l2 regularization에 대한 의존도가 떨어진다.
    • 단점
      • 학습 매개변수가 늘어나 모델의 복잡도가 올라감.
      • 학습 시간과 예측 시간이 오래 걸린다.
  • 빠른 예측을 원한다면, 활성 함수와 초기화 방법을 먼저 튜닝하여 모델을 평가할 것을 권장한다.

그레디언트 클리핑

  • 그레디언트 클리핑은 그레디언트 폭주를 막는 가장 쉬운 방법 중 하나로 역전파될 때 그레디언트가 일정 임계치를 넘지 못하게 막는 것이다.
  • 일반적으로 배치 정규화를 선호한다.

학습 속도 향상

  • DNN은 layer 수가 할수록 학습 속도가 느려 지는데, 앞서 설명된 내용을 포함하여 아래와 같은 방법으로 속도를 향상 시킬 수 있다.
    • 좋은 가중치 초기화 전략 적용
    • 좋은 활성 함수 적용
    • 배치 정규화 적용
    • 미리 학습된 신경망의 일부 재사용
    • 고속 최적화 알고리즘(optimizer) 사용
  • 지금부터 gradient descent 외에 더 빠른 최적화 알고리즘에 대해 알아보자.

Gradient descent 업그레이드

  • 모멘텀 최적화(momentum optimizer)
    • gradient descent는 gradient가 작으면 매우 느려 진다.
    • gradient를 속도가 아니라 가속도로 사용한다.
    • 알고리즘
      1. \[m \leftarrow \beta m + \eta { \nabla }_{ \theta }J(\theta )\]
      2. \(\theta \leftarrow \theta - m\)
        • \(\theta\)는 가중치이다.
        • \(m\)은 모멘텀 벡터이다.
        • \(\beta\)는 모멘텀이다.(0~1사시의 하이퍼 파라미터로 0.9을 일반적으로 사용)
        • \(\beta m\)을 통해 일종의 마찰을 표현하고 있다.
        • gradient descent는 \(\theta \leftarrow \theta - \eta { \nabla }_{ \theta }J(\theta )\)로 가중치를 갱신하다는 곳을 상기하자.
    • 스케일이 매우 다른 입력을 받게 되더라도 빠르게 동작하며, local optima를 건너뛰도록 도움을 준다.
  • 네스테로프 모멘텀 최적화(Nesterov momentum optimizer)
    • 1983년, 유리 네스테로프가 제안했다.
    • \(\theta\)가 \(\theta - \beta m\)의 gradient를 계산하는 것이 기본 모멘텀 최적화와 다른 점이다.
    • 알고리즘
      1. \[m \leftarrow \beta m + \eta { \nabla }_{ \theta }J(\theta - \beta m)\]
      2. \[\theta \leftarrow \theta - m\]
    • 기본 모멘텀 최적화 보다 거의 항상 빠름.
  • AdaGard(Adaptive Subgradient Methods for Online Learning and Stochastic Optimization)
    • 가장 가파른 차원을 따라 그레디언트 벡터의 스케일을 감소시켜 문제를 해결한다.
    • 알고리즘
      1. \[s \leftarrow s + { \nabla }_{ \theta }J(\theta )\otimes { \nabla }_{ \theta }J(\theta )\]
      2. \(\theta \leftarrow \theta - \eta { \nabla }_{ \theta }J(\theta )\oslash \sqrt { s+\varepsilon }\)
        • \(\otimes\)는 원소 별 곱셈을 나타낸다. (element-wise product)
        • \(\oslash\)는 원소 별 나눗셈을 나타내며, \(\)𝜀는 smoothing term이다.
        • 벡터 \(s\)의 원소 \({ s }_{ i }\)마다 \({ s }_{ i } \leftarrow { s }_{ i } + { (\frac { \partial }{ \partial { \theta }_{ i } } J(\theta )) }^{ 2 }\)를 계산한다.
        • 각 매개변수 \({ \theta }_{ i }\)에 대해 \({ \theta }_{ i }\leftarrow { \theta }_{ i }-\eta \frac { \partial }{ \partial { \theta }_{ i } } J(\theta )\div \sqrt { { s }_{ i }+\varepsilon }\)를 계산한 것과 동일하다.
    • 그레디언트가 클수록 \({ s }_{ i }\)도 커지고, \(\sqrt { s+\varepsilon }\)는 작아져서, 가파른 차원에서 학습이 느려 지고 완만한 차원에서 빨리 진행 된다.
    • 학습률이 빠르게 감소하여 전역 최적점에 도달하기 전에 멈출 수 있으므로 DNN에서는 권장하지 않는다. (선형회귀 같은 간단한 작업에는 효과적일 수 있다.)
  • RMSProp
    • AdaGrad가 너무 빠르게 느려 져서 최적점에 도달하기전에 멈추는 문제를 해결하였다.
    • 가장 최근 반복에서 비롯된 그레디언트를 누적하여 해결하였다.
    • 알고리즘
      1. \[s \leftarrow \beta s+(1 - \beta){ \nabla }_{ \theta }J(\theta )\otimes { \nabla }_{ \theta }J(\theta )\]
      2. \(\theta \leftarrow \theta - \eta { \nabla }_{ \theta }J(\theta )\oslash \sqrt { s+\varepsilon }\)
        • \(\beta\)는 감쇠율로 일반적으로 0.9로 설정한다.
    • \(/bata\)라는 하이퍼 파라미터가 추가 되었지만 대부분의 경우 따로 튜닝 할 필요가 없다.
    • 일반적으로 AdaGrad뿐만 아니라 모멘텀 최적화, 네스테로프 최적화보다 성능이 좋다.
  • Adam 최적화(adaptive moment estimation optimizer)
    • 모멘텀 최적화와 RMSProp의 아이디어를 결합하였다.
    • 알고리즘
      1. \[m \leftarrow { \beta }_{ 1 }m + (1-{ \beta }_{ 1 })\eta { \nabla }_{ \theta }J(\theta )\]
      2. \[s \leftarrow { \beta }_{ 2 }s + (1-{ \beta }_{ 2 }){ \nabla }_{ \theta }J(\theta )\otimes { \nabla }_{ \theta }J(\theta )\]
      3. \[\hat { m } \leftarrow \frac { m }{ 1 - { \beta }_{ 1 }^{ T } }\]
      4. \[\hat { s } \leftarrow \frac { s }{ 1-{ \beta }_{ 2 }^{ T } }\]
      5. \(\theta \leftarrow \theta -\eta \hat { m } \oslash \sqrt { s+\varepsilon }\)
        • \(T\)는 반복 횟수이다.
        • 1단계에 우변 2번째 항에 \((1 - { \beta }_{ 1 })\)이 추가 되었다.
        • \(m\)과 \(s\)는 0으로 초기화되기 때문에 0으로 편향되는 것을 막기 위해 3,4번을 적용하여 증폭 시킨다.
    • 모멘텀 감쇠율 \({ \beta }_{ 1 }\)=0.9, 스케일 감쇠율 \({ \beta }_{ 2 }\)=0.999, 학습률 𝜂=0.001을 일반적으로 사용한다. (적응적 학습률 알고리즘이기 때문에 𝜂는 튜닝할 필요가 적다.)
  • optimizer의 변화를 아래와 같이 이해 할 수 있다.

learning rate 스케줄링

  • 적절한 학습률을 가지는 것이 모델 성능은 물론 학습 속도에서도 중요하다.
  • 학습률이 너무 크면 발산할 수 있으며, 너무 작게 잡으면 최적화 되는데 시간이 매우 오래 걸린다.
  • 리소스가 한정적이라면 차선책으로 완전히 수렴하기 전에 멈추는 방법도 있다.
  • 더 좋은 방법은 학습 중간에 학습률을 변경하는 것이다.
  • 학습률 스케줄링
    • 미리 정의된 고정 학습률
      • 몇 epoch 이후에 학습률을 얼마도 변경 할지 미리 지정해 놓는 방법
      • 적절한 학습률과 적당한 시점을 찾기 위해 튜닝 필요
    • 성능 기반 스케줄링
      • 매 step 마다 검증 오차를 측정하고 오차가 줄어들지 않으면 학습률을 감소시킨다.
    • 지수 기반 스케줄링
      • 매 step \(t\) 의 함수 \(\eta (t) = { \eta }_{ 0 }{ 10 }^{ -t/r }\)을 학습률로 사용한다.
      • 학습률이 매 \(r\)번째 step마다 1/10으로 줄어든다.
      • 하이퍼 파라미터 \({ \eta }_{ 0 }\)과 \(r\)을 튜닝 해야한다.
    • 거듭제곱 기반 스케줄링
      • 매 step \(t\)의 함수 \(\eta (t) = { \eta }_{ 0 }{ 1 + t/r }^{ -c }\)을 학습률로 사용한다.
      • 하이퍼 파라미터 \(c\)는 보통 1로 지정한다.
      • 지수 기반 스케줄링과 비슷하지만 학습률이 더 느리게 감소한다.

Overfitting 방지

  • 아래와 같이 DNN에서 모델을 regularization하여 overfitting을 방지하는 방법을 살펴보자.
    • 조기 종료(early stopping)
    • 드룹아웃(dropout)
    • \({ l }_{ 1 }\)과 \({ l }_{ 2 }\) regularization
    • max-norm regularization

early stopping

  • 학습 과정 중 검증 데이터의 성능이 떨어지기 시작할 때 훈련을 중단하는 것을 의미한다.
  • 매 배치마다 최고 성능의 모델을 스냅샷으로 저장하고, 일정 step 이상 모델이 변화가 없으면 학습을 중단하고 해당 스냅샷을 적용한다.
  • 다른 머신러닝 알고리즘에서도 적용 가능하다.

dropout

  • 2012년, 제프리 힌튼에 의해 제안되었다.
  • 매 훈련 스텝에서 각 뉴런이 확률 p에 의해 드롭아웃 된다.
  • 하이퍼 파라미터 p를 dropout rate이라고 한다. (일반적으로 0.5로 초기화)
  • 이렇게 학습하게 되면, 매 step마다 다른 신경망 구조를 가지게 되어 일반화 된다.
  • 매번 각각 다른 신경망을 평균으로 하는 앙상블로 이해할 수 있다.
  • 테스트하는 과정에서 한 뉴런이 평균적으로 두 배 많은 입력 뉴런과 연결되므로 훈련이 끝난 뒤에는 가중치에 보존확률(1-p)를 곱해야 한다.
  • 모델이 과대적합 되었으면 p를 키워야 한다.
  • 모델이 과소적합 되었으면 p를 낮춰야 한다.

\({ l }_{ 1 }\)과 \({ l }_{ 2 }\) regularization

  • 손실 함수(\(L\))에 적절한 규제항을 추가하여 일반화 할 수 있다.
  • \(W = \left[ { w }_{ 1 } { w }_{ 2 } ... { w }_{ n } \right]\)라고 할때,
  • \({ l }_{ 1 }\) regularization

[{ L }{ new } := { L }{ old } + \frac { \lambda }{ 2 } ({ w }{ 1 }^{ 2 } + { w }{ 2 }^{ 2 } + { w }_{ n }^{ 2 })]

  • \({ l }_{ 2 }\) regularization
[{ L }{ new } := { L }{ old } + \lambda (\left { w }_{ 1 } \right + \left { w }_{ 2 } \right + … + \left { w }_{ n } \right )]
  • \({ l }_{ 1 } + { l }_{ 2 }\) regularization
[{ L }{ new } := { L }{ old } + \frac { \lambda }{ 2 } ({ w }{ 1 }^{ 2 } + { w }{ 2 }^{ 2 } + { w }_{ n }^{ 2 }) + \lambda (\left { w }_{ 1 } \right + \left { w }_{ 2 } \right + … + \left { w }_{ n } \right )]

max-norm regularization

  • 가중치 \(W\)의 크기( \({ l }_{ 1 }\) norm )를 특정 임계치보다 작게 제한하는 방법이다.
  • 알고리즘
    • 매 훈련 step에서 \({ \left\| w \right\| }_{ 2 }\) 를 계산한다.
    • \(W\leftarrow W\frac { r }{ { \left\| w \right\| }_{ 2 } }\)으로 가중치를 제한한다.

참고 자료

  • Hands-on machine learning with Scikit-learn & Tensorflow - 오렐리앙 제롱

Youtube 추천 시스템 리뷰

|

1. 소개

  • 유튜브 추천에 3가지 핵심 고려 사항
    • scale
      • 대부분의 추천 알고리즘은 많은 양의 컨텐츠을 감당할 수 없었다.
      • 고도의 분산 알고리즘과 효과적인 서비스 시스템이 필수적이다.
    • freshness
      • 신규 컨텐츠 와 잘 구성된 컨텐츠 사이의 균형을 이해 해야한다.
      • exploitation / exploration trade-off를 고려해야 한다.
      • 참고 : https://conceptually.org/concepts/explore-or-exploit
    • noise
      • 사용자 행위 기록은 관찰할 수 없는 희소성(sparsity)와 다양성(variety) 때문에 예측하기 어렵다.
      • 사용자 만족을 얻기 거의 어렵고 대신 오염된 피드백을 모델링 하게 된다.
      • 메타 메타데이터는 잘 구조화 되어 있지 않다.
      • 추천 알고리즘은 학습 데이터의 개별적 특성에 견고해야 한다.
    • 구현
      • Tensorflow로 구현됨
      • 학습 데이터
      • 약 10억개의 파라미터
      • 약 수천억개의 샘플

2. 시스템 개요

  • 후보 생성 모델과 랭킹 모델이 분리
    • 후보 모델은 사용자의 행위 기록과 큰 모음에서 후보 비디오 집합 생성
    • 랭킹 모델은 후보 집합에 순위를 부여
  • 후보 모델은 협업 필터링을 통해서만 개인화를 제공하며, recall을 중요시 해야 한다.
  • 컨텐츠 내용 뿐만 아니라 사용자의 이용내역과 맥락을 감안해야 한다.
  • 분석 방향성
    • offline에서는 precision/recall/ranking loss등을 최적화하며,
    • A/B 테스트에서는 시청 시간/클릭률을 개선 했다.
  • 사용자 사이의 유사도는 비디오 시청 아이디, 검색어 토큰, 인구 통계와 같이 거친 feature으로 표현된다.

3. 후보 생성

  • ranking loss를 이용한 Matrix factorisation이 일반적이다.
  • 인공신경망을 사용하여 MF를 대체하였으며, 과거 사용자의 비디오 내역을 사용하였다.

3.1 분류를 통한 추천

  • 문제 정의
    • 다량의 컨텐츠에 대한 엄청나게 많은 클래스가 존재
    • 사용자 \(U\), 맥락 \(C\) 가 주어진 때, 특정 시간 \(t\) 에 비디오 \({W}_{t}\)를 볼 확룔을 구함
      • \[P({ w }_{ t }=i|U,C)\quad =\quad \frac { { e }^{ { v }_{ i }u } }{ \sum _{ j\in V }^{ }{ { e }^{ { v }_{ j }u } } }\]
      • \({ v }_{ j }\) : 각각 후보 영상 임베딩
      • \(u\) : 사용자 & 맥락 임베딩
      • 명시적인 사용자가 누른 ‘좋아요’ 같은 정보는 사용하지 않고, 암시적인 ‘비디오를 끝까지 시청 했는가’와 같은 데이터를 사용함
    • 다량의 클래스 분류 문제에 대한 효율적인 구현
      • in offline
        • negative class를 샘플링 (i.e., skip-gram negative sampling)
        • loss function으로는 각 class (비디오)마다 (binary) cross-entropy를 사용
        • 대략 수천개정도의 negative sample 이용
        • 기존 방식보다 100배 이상 빨라짐
        • hierarchical softmax는 정확성이 떨어져 사용하지 않음
      • in 실 서비스
        • 사용자에게 추천을 N개의 비디오를 제공
        • 이전에 진행된 [24]처럼 hashing을 활용
        • 최종적으로는 (위의 식처럼) dot-product space에서 가장 가까운 컨텐츠 (nearest neighbour)를 찾는 과정.
        • A/B test 결과 nearest neighbour 알고리즘간에 추천성능 차이는 없음

3.2 후보 생성 모델 구조

  • 사용자의 시청 내역을 embedding vector로 변환
    • 여러 영상들의 embedding vector에 대한 평균을 계산하여 input으로 활용(watch vector)
    • FC + ReLU 사용, layer 추가시 ReLU 추가

3.3 타입이 다른 데이터

  • 연속형, 범주형 변수를 임베딩하여 활용.(matrix factorization의 일반화)
  • 지리 정보, 성별을 활용
  • 영상의 나이 고려
    • freshness를 반영하기 위함.
    • 영상의 나이를 고려해주면(빨강) 사용자의 실제 컨텐츠 소비 패턴(초록)과 유사 해진다.
    • 학습 단계에서는 값을 넣어주고 실제 서비스 단계에서는 모두 0으로 처리 했다.(비디오 인기도 분포가 불안정한기 때문에)

3.4 label과 context 선택

  • 추천은 surrogate problem을 수반하고 있다.
    • 높은 정확도가 효과적인 영화 추천을 만든다는 가정이 전형적인 예이다. (exploitation » exploration)
    • exploitation & exploration trade off를 고려 해야 한다.
    • 해결 방안
      • 다른 소스를 활용 : 유튜브 추천에 지속적으로 영향을 받기 때문에
      • 사용자별 감상 횟수를 제한 : 하나의 컨텐츠를 많이 보는 사람들의 영향을 감소시키기 위해
      • 추천 결과나 검색 결과를 즉시 활용하지 않음
        • 검색 키워드는 일부러 순서를 날린 bag-of-tokens을 이용
        • 그렇지않으면 방금 검색한 내용이 계속 메인 페이지에 노출됨
    • 비 대칭적인 유튜브 영상 패턴
      • 비대칭적인 co-occurrence (or co-watch)
      • 즉, 전 영상에 따라 다음에 어떤 영상을 볼지 영향이 크다.
      • 에피소드의 경우 일반적으로 순서가 정해져 있다.
      • 대부분의 카테고리에서 가장 유명한 영상에서 마이너한 영상으로 가는 경향이 있다.
      • 대부분의 협업 필터링 모델은 임의적으로 기간의 라벨과 맥락, 사용자 기록에서 임의적
      • 대조적으로 비대칭적 feature을 고려하여, 과거의 데이터만 사용해야함 (5-b)

3.5 feature과 depth에 대한 실험

  • MAP(Mean Average Precision) 측정
  • baseline : 감상 내역만 이용
  • 파랑색: 감상내역 + 검색
  • 빨강색: 감상내역 + 검색 + 영상의 나이
  • 초록색: 전부 다
  • layer 기준
    • 깊이 0 : 256 노드 softmax
    • 깊이 1 : 256 노드 ReLU
    • 깊이 2 : 512 노드 ReLU → 256 ReLU
    • 깊이 3 : 1024 노드 ReLU → 512 ReLU → 256 ReLU
    • 깊이 4 : 2048 노드 ReLU → 1024 노드 ReLU → 512 ReLU → 256 ReLU
  • 실험은 영상 100만개, 검색어 100만개를 256차원의 embedding으로 변환. bag_size는 최근 50개 영상/검색
  • depth 깊어질수록 성능 좋아짐

4. 랭킹

  • 더 많은 특징 활용
  • A/B 테스트를 통해 지속적으로 업데이트
  • 평가 지표는 추천 횟수 대비 평균 시청 시간

4.1 feature representaion

feature engineering

  • 사용자 행위에 일시적인 순서와 영상에 대한 인상과 이런 행동이 어떻게 점수를 매길 수 있는지를 고민함
    • 사용자는 이 채널에서 얼마나 많은 영상을 봤는가?
    • 사용자는 이 주제를 언제 마지막에 봤는가?
    • 위 항목은 서로 다른 항목에 대해 잘 일반화 되어 있어 효과적
  • 후보 생성 모델에서 정보를 전달 받는게 중요함
    • 후보를 지명 했던 정보원은?
    • 지명에 대한 영향이 정도는?
  • 추천에 대한 인상도 고려 해야함
    • 추천 되었지만 지속적으로 시청하지 않는다면 순위를 낮추어야 한다.

범주형 feature 임베딩

  • 후보 생성과 유사하게 spare한 범주형 특징을 dense한 표현으로 임베딩
  • 각 ID 공간은 훈련 전에 만들어진 look-up 테이블이다.
  • 상위 Top-N만 남기고 다 0으로 초기화
  • 모델에 입력 전에 평균을 적용
  • 인상 받은 영상, 사용자가 마지막으로 본 비디오 ID, 추천되어진 비디오 ID 등 사용 가능
  • 임베딩 공유는 일반화, 학습 속도 향상과 메모리 요구량 감소를 위해 중요

연속형 feature 정규화

  • 딥러닝은 입력 데이터의 pre-processing에 매우 민감
  • 값들을 누적 분포를 통해 [0, 1] 범위로 scaling
  • 값들의 비선형성 학습을 쉽게 하기 위해 제곱, 제곱근을 다 feed

4.2 Modelling expected watch time

  • 시청 시간을 예측 하기 위해 weighted logistic regression을 적용
    • weighted logistic regression - 감상한 영상을 감상 시간으로 가중치 적용
    • 가중치 공산은 부정적 인상 대비 총 시청 시간을 기준으로 함
    • 긍정적인 인상이 적다고 가정하면, 학습된 확률은 대략 \(E[T](1+P)\)
      • \(P\) : 클릭률
      • \(E[T]\) : 예상되는 시청 시간

4.3 hidden layer에 대한 실험

  • 더 넓고 깊은 신경망이 더 잘 작동
  • 실 서비스의 응답시간을 고려하여 네트워크 구성 필요

5. 결론

  • deep learning을 이용하여 Matrix factorization 개선
  • 전체 시스템을 디자인하는건 거의 과학이 아니라 예술임.
  • “영상의 나이”는 feature로써 잘 활용되어 짐
  • 랭킹은 전통적인 ML 문제이지만 deep learning은 다양한 형태의 데이터를 잘 표현하는 representation을 학습 가능
  • 특히 사용자의 과거 행동 패턴을 잘 설명하는 feature가 중요
  • 시청 시간에 대한 weighted logistic regression을 적용한 것이 click-through rate을 적용한 것보다 좋은 성능을 보임

[24] J. Weston, A. Makadia, and H. Yee. Label partitioning for sublinear ranking. In S. Dasgupta and D. Mcallester, editors, Proceedings of the 30th International Conference on Machine Learning (ICML-13), volume 28, pages 181–189. JMLR Workshop and Conference Proceedings, May 2013.

애자일 데이터 사이언스 선언문

|

애자일은 단순히 방법이나 절차로써 정의되는 것이 아니라 가치관 혹은 철학이기 때문에 전체 프로젝트 구성원이 이에 대한 이해 또는 합의가 필수적이다. 그런 관점에서 좀 더 효율적인 데이터 분석 방법론을 설계하기 위해 러셀 저니(Russell Jurney)의 A manifesto for Agile data science을 번역하여 제공한다. 변역 과정 중 일부 의역이 있음을 밝힌다. 또한, **‘애자일 소프트웨어 개발과 애자일 데이터 사이언스는 다르다’라는 저자의 의견을 기억하자.


서론

저는 뭐라고 부르기 전부터 분석 어플리케이션의 반복적이고 진화적인 개발인 애자일 데이터 사이언스를 10년 동안 하고 있습니다. 고독한 풀 스택 개발자로 일하면서 필자가 구축한 분석 소프트웨어를 반복적으로 발전시키는 것은 당연했습니다. 내가 팀에 합류 했을 때, 당연히 그럴 것을 기대했지만 그렇지 않았습니다. 저는 웹 개발자로서 애자일 방법론에 노출되어 있었기 때문에 데이터 사이언티스트로서 일을 시작했을 때 데이터 사이언스가 애자일스럽지(?) 못하다 는 것을 알고 놀랐습니다.

그 직장에 도착한 지 몇 주 안에, 복잡한 예측 시스템을 명시하고 넘겨주어야 했는데 다음 작업자는 배포 전 빌드까지 6개월이나 필요했습니다. 이것은 소프트웨어를 만드는 방법에 대해 알고 있는 모든 것을 위반했지만, 시스템의 규모와 빅데이터 툴의 상태가 이런 상황을 만들었습니다. 그 프로젝트는 거의 실패했고 막판에 회생했습니다. 저는 많은 잠을 포기해야 했고, 몇몇 중요한 교훈을 얻었습니다. 저는 절대 이것을 반복하길 원치 않았습니다. 그래서 여러 성공을 거두며 데이터 사이언스에 애자일을 도입하려고 노력했습니다.

애자일 소프트웨어 개발을 데이터 사이언스에 적용하려고 시작하면서 패턴이 나타나는 것을 보았습니다. 적용의 어려움은 구현의 세부사항에서가 아니라, 소프트웨어 이외에 데이터로 작업할 때 애자일 기회에 대한 사고 방식에 있었습니다. 여러 회사에 걸친 경험을 통해 생각을 정리하면서 저는 애자일 데이터 사이언스 선언문을 개발했습니다. 이 선언문은 해야되는 것보다 생각하는 방법에 초점이 맞춰져있습니다. Kanban 또는 scrum의 구체적인 내용은 팀이 데이터 탐색으로 부터 도출된 기회에 반응하며 다이나믹하게 생각하기 때문에 데이터 사이언스에 효과가 있다.

John Akred은 애자일 데이터 사이언스의 구현에 흥미로운 연구를 수행해 왔지만, 어떻게 작업을 추적하는지에 대해서는 전혀 알려지지 않았습니다. 핵심은 당신이 적극적이고 역동적인 방식으로 데이터 과학에 접근하는 것입니다.


애자일 데이터 사이언스 선언문

반복하고 반복하고 반복하라.

통찰력은 한번에 나오는 것이 아니라 25번의 연속적인 쿼리로부터 나온다. 데이터 테이블들을 파싱하고, 형식화하고, 정렬하고, 집계하고, 요약해야 한다. 의미있는 도표는 일반적으로 첫번째 시도가 아니라 3번에서 4번은 거쳐야 얻어진다. 정확한 예측 모델을 설계하는 것은 많은 특성 공학(feature engineering)과 하이퍼파라미터 튜닝(hyperparameter tuning)으로 부터 얻어 질수 있다. 데이터 사이언스에서 반복은 추출, 시각화, 통찰력의 제품화를 하는데 본질적인 요소이다. 우리는 설계할 때, 우리는 반복한다.

중간 결과를 공유하라.

반복은 분석 어플리케이션 제작에서 필수적인 행동이며, 이는 종종 스프린트 끝에 완전 하지 않을 것을 남기게 한다. 우리가 스프린트 끝에 완전하지 않은 혹은 중간 결과를 전달하지 않는다면 아무것도 전달하지 못할 것이다. 그리고 이것은 애자일이 아니다. 나는 이와 같이 누구도 원하지 않는 완벽한 것에 끊임없이 시간을 낭비되는 것을 죽음의 고리(death loop)라고 부른다. 좋은 시스템은 스스로 문서화 한다. 애자일 데이터 사이언스에서 우리는 우리가 작업한 불완전한 자신을 문서화하고 공유한다. 소스 컨트롤러에 모든 작업을 커밋한다. 우리는 이 작업을 팀원가 공유하고, 가능하다면 최종 사용자도 같이 한다. 이 원칙이 모두에게 설득력 있게 다가오지 않을 것이다. 많은 데이터 사이언티스트는 다년간의 격렬한 연구 끝에 얻어낸 학위 논문을 배경으로 하는 자신만의 지론을 갖고 있기 때문이다.

작업이 아니라 실험을 하라.

소프트웨어 공학에서 제품 관리자는 스프린트 중에 개발자에게 표를 넘겨줄 것이다. 개발자는 넘겨받은 표를 SQL GROUP BY로 데이터베이스에 저장하고, 그것을 표시할 웹페이지를 만든다. 이걸로 할 일이 끝난 것인가? 아니다. 그런 식으로 저장된 표는 가치있는 것 같지 않다. 데이터 사이언스는 과학 부분과 공학 부분이 있다는 점에서 소프트웨어 공학과 다르다.

맞닥뜨린 모든 과제에서 우리는 통찰력을 얻기 위해 반복해야 하며 이런 반복은 실험으로써 가장 잘 요약될 수 있다. 데이터 사이언스 팀을 관리 한다는 것은 작업을 나눠주는 것보다 여러 가지 동시 실험을 감독하는 것을 의미한다. 좋은 자산(테이블, 표, 보고, 예측)은 탐색적 데이터 분석의 결과물로 나타나므로 작업보다 실험 측면에서 더 많이 고려해야 한다.

데이터에 귀를 기울어라.

‘무엇이 가능한가’는 ‘무엇을 의도 했는가’만큼 중요하다. ‘무엇이 쉽고 무엇이 어려운것’은 ‘무엇을 원하는가’를 아는 것 만큼 중요하다. 소프트웨어 어플리케이션 개발에서 고객, 개발자, 비지니스 세가지 관점을 고려 해야한다. 분석 어플리케이션 개발에서 또하나의 관점은 데이터이다. 모든 기능에 대해 데이터가 ‘무엇을 말하고 이는지’를 이해하지 못하면 제품 소유자는 훌륭한 일을 할 수 없다. 제품 회의에는 항상 데이터에 관한 의견이 포함되어 있어야 한다. 즉, 제품은 우리가 많은 노력을 쏟는 탐색적 데이터 분석을 통한 시각화에 기반을 두고 있어야 한다는 것을 의미한다.

데이터 가치 피라미드를 따라라.

데이터 가치 피라미드는 Maslow의 수요 체계도에 따라 5개의 계층으로 구성되어 있다. 이 피라미드는 원본 데이터가 표, 차트, 보고, 예측을 이어지면서 데이터의 가치가 증가 하는 것을 표현한다. 이 일련의 과정은 새로운 행동을 가능하게 하거나 기존 데이터를 개선하기 위한 것이다.

  • Records : 데이터가 수집된 위치에서 어플리케이션에 나타낼 수 있는 위치로 데이터를 흐르게 하는 과정이다.
  • Charts : 정제와 분석이 시작되는 단계이다.
  • Reports : 데이터에 대한 몰입적 탐구를 가능하게 할 수 있다. 여기에서 실제로 데이터를 추론하고 이해 할 수 있다.
  • Predictions : 더 많은 가치가 창출되는 곳이다. 피쳐 엔지니어링(feature engineering)을 통해 더 좋은 예측을 만들어 낼 수 있다.
  • Actions : 인공지능 열풍이 일어나는 단계이다. 귀하의 통찰력이 새로운 행동을 가능하게 하지거나 기존의 행동을 개선 시키지 않는다면 그다지 중요하지 않다.

데이터 가치 피라미드는 우리의 작업을 구조화 한다. 이 피라미드는 꼭 따라야 할 규칙은 아니지만, 명심하고 있어야 한다. 어떤 때는 단계를 건너뛰기도 하고, 또 어떤 때는 이전 단계로 돌아가야 할 것이다. 만약 당신이 어떤 데이터를 곧바로 예측 모델에 집어넣어 버린다면, 낮은 계층에서 데이터를 투명하고 접근할 수 있게 만들어두지 않는다면, 기술적인 문 제가 발생 할 것이다. 이런 점을 명심하고, 가능하다면 생길 수 있는 문제를 미리 예방하자.

핵심 경로를 찾아라.

성공 확률을 극대화하려면 대부분의 시간을 성공의 핵심 요소인 어플리케이션 측면에 집중해야 한다. 하지만 그런 부분은 어디일까? 그것은 실험을 통해 발견됨에 틀림없다. 분석 제품 개발은 움직이는 목표를 찾고 추구 하는 것이다.

예를 들어, ‘어떤 예측을 해야한다.’하는 목표가 정해졌다면, 우선 구현하는 데 있어 중요 경로를 찾아 내야하며 가치가 있다고 판단되면 개선해야 한다. 데이터는 작업이 진행됨에 따라 점진적으로 정제된다. 분석 제품은 종종 광범위한 ETL(추출, 변화, 로드), 프로세스, 통계, 정보 접근, 머신러닝, 인공 지능 및 그래픽 분석의 기술을 사용한다. 이런 단계의 상호 작용은 종속적인 복잡한 웹을 형성할 수 있다. 팀 리더는 이러한 의존 요소를 항상 기억하고 있어야 한다. 팀원이 중요한 경로를 발견해 그 경로를 따라갈 수 있도록 이끄는 것도 리더가 해야할 일이다. 제품 관리자는 top-down 형식으로 이런 과정을 이끄는 것은 불가능한 일이다. 그보다는 제품 과학자가 bottom-up 형식으로 발견해야 한다.

메타를 얻어라.

만약에 일반적인 어플리케이션을 개발할 때랑 비슷한 일정으로 좋은 제품을 전달하기가 쉽지 않다면 어떻게 하면 좋을까? 전달하지 않는다면 그것은 애자일이라고 부를 수 없다. 애자일 데이터 사이언스에서 이 문제를 해결하기 위해 “메타를 얻는다”. 추구하는 최종 상태 또는 제품과 반대로 분석 프로세스를 문서화 하는데 초점을 둔다. 이렇게 하면 데이터 가치 피라미드를 반복적으로 올라가 killer product의 중요 경로를 찾을 때 민첩하게 되고 중간 결과를 전달 할 수 있다. 이런 제품은 어떻게 얻을 수 있을까? 우리는 탐색적 데이터 분석을 문서화하면서 만든다.

결론

이 7가지 원리는 애자일 데이터 사이언스 방법론을 가능하게 해준다. 이것들은 탐색적 데이터 분석 프로세스를 구조화 및 문서화하여 분석 어플리케이션으로 변화하는 역할을 한다.

데이터 분석 프로젝트 관리 방법론

|

프로젝트 관리 방법론의 필요성

제한된 자원을 활용하여 기획부터 프로젝트 종료까지 원할한 진행을 바탕으로 최종적인 결과를 도출하기 위해 고한한 방법론이다.

데이터 분석에서 프로젝트 관리


| 데이터 분석 프로젝트 관리한다는 것은 과학과 공학을 모두 적용해야 한다는 점에서 소프트웨어 공학과 다르다.

소프트 웨어 개발 방법론과 달리 데이터 분석 프로젝트는 과학적 측면과 공학적 측면 모두 고려 해야한다는 점에 리스크 관리에 더욱 어려움이 많다.

예를 들어, 데이터 분석가가 (앞 과정을 생략하고) 가설을 설정하고 특정 데이터 셋을 전처리하여 분석을 진행 했다고 하자. 검증되어야 할 가설이 기각되었다면 다음은 어떻게 해야 하는가? 대부분의 데이터 분석가라면 가설을 다시 수립하거나 데이터 셋을 재가공 할수 있을 것이다. 그리고 이 과정을 반복하며 실험 할 것이다. 또한, 이 작업의 반복은 특정 시간 안에 끝난다고 확신 할 수 없을 것이다.

애자일 데이터 사이언스


아래 내용은 구체적인 방법론에 대한 서술로써 하나의 정답이 아니며, 상황에 따라 지속적으로 수정되어 질 수 있다.

계층적 프로세스 모델

  • 작업 진행 과정이 단계(Phase) -> 업무(Task) -> 스탭(Step)의 계층으로 구성됨
  1. 단계(Phase)
    • 프로세스 그룹을 통하여 완성된 단계별 산출물 생성
    • 기준선(Baseline)으로 설정되어 관리되어야 하며, 버전관리(Configuration Management)등을 통해 통제
  2. 업무(Task)
    • 단계를 구성하는 단위 활동, 품질 검토의 항목
  3. 스탭(Step)
    • WBS(Work Breakdown Structure)의 워크패키지(Work Package)에 해당
    • 입력자료(Input), 처리 및 도구(Process & Tool), 출력자료(Output)으로 구성된 단위 프로세스(Unit Process)

– 업데이트 예정 ## 전체 흐름도