Machine Learning/ 적용 사례

Recommender Systems

https://www.coursera.org/learn/machine-learning/

  • 사용자 정보를 Matrix로 구성하여 사용자의 선호에 맞는 컨텐츠나 유사한 컨텐츠를 추천하는 추천 시스템.
  • 이하 시스템에 대한 내용은 다음의 조건을 따른다.
    • 사용자는 각각의 영화에 대해 1-5개의 별점을 줄 수 있음.
    • 별점을 매기지 않았다면 ?로 표시
    • 유저 수는 nu로 표기, 영화 수는 nm으로 표기
    • 유저 j가 영화 i에 대해 평점을 주었다면 r(i, j) = 1이라고 표기
      • r 행렬은 별점을 주었는지 안 주었는지만 판별
    • 유저 j가 영화 i에 부여한 별점은 y(i, j) 로 표기

Content Based Recommendations

https://www.coursera.org/learn/machine-learning/

  • 사용자의 장르별 선호 정보를 이용해서 사용자의 특정 영화에 대한 선호를 예측하는 시스템.
    • 장르별 선호는 어떻게 아느냐면 이 아래의 Collaboartive Filtering 참조
  • 유저의 장르 선호와 영화의 장르 정보를 이용해서 사용자의 특정 영화에 대한 선호도를 예측하는 것은 선형 회귀 문제이다.
    • 데이터가 행렬로 표현되어 있으므로 비용함수의 표현은 다음과 같다,
      • min_{\theta^j} = \frac{1}{2} \sum_{i:r(i,j)=1} ( (\theta^{(j)})^T x^{(i)} - y^{(i,j)} )^2 + \frac{\lambda}{2} \sum_{k=1}^{n} (\theta_k^{(j)})^2
    • 위 식은 한 명의 유저에 대한 것이므로 전체 유저에 대해 계산하면 식은 다음과 같다.
      • min_{(\theta^1 ... \theta^{n_u})} = \frac{1}{2} \sum_{j=1}^{n_u} \sum_{i:r(i,j)=1} ( (\theta^{(j)})^T x^{(i)} - y^{(i,j)} )^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n} (\theta_k^{(j)})^2
    • 위 식에 따른 Gradient Descent는 아래와 같다.
      • k = 0인 경우
        • \theta_k^{(j)} := \theta_k^{(j)} - \alpha \sum_{i:r(i,j)=1} ((\theta^{(j)})^T x^{(i)} - y^{(i,j)}) x_k^{(i)}
      • k > 0인 경우
        • \theta_k^{(j)} := \theta_k^{(j)} - \alpha ( \sum_{i:r(i,j)=1} ((\theta^{(j)})^T x^{(i)} - y^{(i,j)}) x_k^{(i)} + \lambda \theta_k^{(j)} )

Collaborative Filtering

https://www.coursera.org/learn/machine-learning/

  • Content Based Recommendations이 사용자의 선호와 영화 정보가 있을 때 사용자의 영화 선호를 예측하는 것이었다면 Collaborative Filtering은 사용자의 선호를 바탕으로 영화의 장르를 예측하는 시스템.
  • 사실 아는 변수와 알고자 하는 변수가 다를 뿐이기 때문에 계산식 자체는 비슷한데, 정규화 할 때 적용하는 부분만 다르다.
    • 하나의 x에 대한 식
      • min_{x^j} = \frac{1}{2} \sum_{i:r(i,j)=1} ( (\theta^{(j)})^T x^{(i)} - y^{(i,j)} )^2 + \frac{\lambda}{2} \sum_{k=1}^{n} (x_k^{(j)})^2
    • 모든 x에 대한 식
      • min_{(x^1 ... x^{n_u})} = \frac{1}{2} \sum_{j=1}^{n_u} \sum_{i:r(i,j)=1} ( (\theta^{(j)})^T x^{(i)} - y^{(i,j)} )^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n} (x_k^{(j)})^2
  • x가 주어졌을 때 θ를 알고자 할 때는 정규화 부분에 θ를 적용하고, 반대로 θ가 주어졌을 때 x를 알고자 할 때는 정규화 부분에 x를 적용한다.

Collaborative Filtering Algorithm

  • x를 이용해서 θ를 구하는 방법이 있고, θ를 이용해서 x를 구하는 방법이 있다는 것은 이 둘을 하나로 합치면 x와 θ를 모두 구할 수 있다는 뜻이다.
    • x와 θ를 작은 값으로 초기화 한 후 Content Based Recommendations와 Collaborative Filtering을 번갈아 돌리면 된다.
  • 그런데 이 둘을 아예 하나의 식으로 합치는 것도 가능하다. 둘의 식이 비슷하기 때문에 그대로 합치면 된다.
    • min_{(x^1 ... x^{n_u}, \theta^1 ... \theta^{n_u})} = \frac{1}{2} \sum_{j=1}^{n_u} \sum_{i:r(i,j)=1} ( (\theta^{(j)})^T x^{(i)} - y^{(i,j)} )^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n} (x_k^{(j)})^2 + \frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n} (\theta_k^{(j)})^2

Low Rank Matrix Factorization

https://www.coursera.org/learn/machine-learning/

  • 유저별 영화 평점을 행렬로 표현하고 그것을 Y라고 한다면, 선형회귀에서 풀었던 것처럼 Y를 두 벡터 θ와 x의 곱으로 표현할 수 있다.
    • 위 이미지 오른쪽 행렬 참조
  • 이때 전체 행렬에서 x를 뽑아내서 X 벡터를 만들면 위 이미지의 왼쪽 아래의 모양과 같은 벡터가 되고,
    • (xnm)T로 이루어진 벡터
  • θ만 뽑아내서 Θ 벡터를 만들면, 위 이미지의 오른쪽 아래 모양과 같은 벡터가 된다.
    • nu)T 로 이루어진 벡터
  • X와 Θ로 Y를 표현하면 다음과 같다.
    • Y = X \Theta^T
  • 이렇게 정리된 정보를 이용하면 두 영화 사이의 유사도를 예측할 수 있는데, 두 영화에 대한 점수를 바탕으로 거리를 측정하면 된다.
    • minimize ||x^i - x^j ||
  • 추가 팁으로 전체 값에 대해 Mean Normalization –데이터 분포가 원점을 중심으로 하도록 이동– 을 하는데, 이는 평가 점수가 0인 것과 점수를 평가 안한 것을 구분하기 위함.

Photo OCR

  • 사진에서 글자를 읽어내는 것에 대한 사례. 실제 OCR은 좀 더 복잡하고 일정 부분에 대해서만 설명한다.

Algorithm

https://www.coursera.org/learn/machine-learning/

  • 사진에서 글자를 읽어 내는 것은 한번에 하는게 아니라 여러 단계를 거쳐 진행한다. 간단하게 그 프로세스를 정리하면 다음과 같다.
    • Text Detection
      • 사진에서 글자를 판별해 내는 단계
    • Character Segmentation
      • 판별된 글자를 Character 단위로 쪼개는 단계
    • Character Classification
      • 쪼갠 Character를 실제 인식하는 단계

https://www.coursera.org/learn/machine-learning/

  • Character를 인식할 때는 Sliding Window라는 단계를 거친다.
    • 문자 뿐만 아니라 사진에서 사람을 알아내는 것도 같은 방법을 거친다.
  • Character의 일반적인 width, height의 비율을 이용해서 적당한 크기의 박스를 만들고 그 박스를 1px, 2px 정도로 쭉 움직이면서 –이래서 Sliding Window라고 한다– 해당 박스 안에 글자라 들어오는지 아닌지를 판별한다.
    • 적당한 크기로 쭉 돌고, 사이즈를 키워서 다시 돌고, 다시 사이즈를 조절해서 돌고 하는 식으로 이미지에서 글자를 검출해 낸다.

https://www.coursera.org/learn/machine-learning/

  • 글자를 검출해 낸 후에는 다시 1차원 박스를 이용해 글자 사이의 여백을 찾아 개별 글자를 분류해 낸다.
    • 1차원 Sliding Window

https://www.coursera.org/learn/machine-learning/

  • 개별 단위까지 분류된 글자는 최종적으로 Classification을 통해 글자로 인식한다.

Aritificial data synthesis

https://www.coursera.org/learn/machine-learning/

  • Classification을 잘 하려면 수많은 데이터로 학습이 필요하다. 많은 데이터를 수집하는 것도 가능하긴 하지만, 비용이 많이 들기 때문에, 수집한 데이터에 변형이나 노이즈를 가해 학습용 데이터를 만들어 내는 것도 가능하다.
    • 이미지라면 포토샵 작업을 해도 되고, 사운드라면 노이즈를 심어도 된다.
  • 이러한 작업을 Aritificial data synthesis라고 한다.

Ceiling analysis

https://www.coursera.org/learn/machine-learning/

  • 각 파이프라인에 대해 Ceiling Analysis를 해볼 수 있다.
    • (사실 모든 영역이 마찬가지지)
  • 각 단계별로 최종 정확도를 측정하여 각 파이프라인 별로 효율을 측정할 수 있으며, 이를 통해 비용대비 효율을 계산하여 불필요한 자원의 낭비를 피할 수 있다.
    • 노력을 들여도 큰 개선이 이뤄지기 어려운 부분에는 헛수고 할 필요 없다.
[ssba]

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.