Contents
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 참조
- 유저의 장르 선호와 영화의 장르 정보를 이용해서 사용자의 특정 영화에 대한 선호도를 예측하는 것은 선형 회귀 문제이다.
- 데이터가 행렬로 표현되어 있으므로 비용함수의 표현은 다음과 같다,
- 위 식은 한 명의 유저에 대한 것이므로 전체 유저에 대해 계산하면 식은 다음과 같다.
- 위 식에 따른 Gradient Descent는 아래와 같다.
- k = 0인 경우
- k > 0인 경우
- k = 0인 경우
- 데이터가 행렬로 표현되어 있으므로 비용함수의 표현은 다음과 같다,
Collaborative Filtering
https://www.coursera.org/learn/machine-learning/
- Content Based Recommendations이 사용자의 선호와 영화 정보가 있을 때 사용자의 영화 선호를 예측하는 것이었다면 Collaborative Filtering은 사용자의 선호를 바탕으로 영화의 장르를 예측하는 시스템.
- 사실 아는 변수와 알고자 하는 변수가 다를 뿐이기 때문에 계산식 자체는 비슷한데, 정규화 할 때 적용하는 부분만 다르다.
- 하나의 x에 대한 식
- 모든 x에 대한 식
- 하나의 x에 대한 식
- x가 주어졌을 때 θ를 알고자 할 때는 정규화 부분에 θ를 적용하고, 반대로 θ가 주어졌을 때 x를 알고자 할 때는 정규화 부분에 x를 적용한다.
Collaborative Filtering Algorithm
- x를 이용해서 θ를 구하는 방법이 있고, θ를 이용해서 x를 구하는 방법이 있다는 것은 이 둘을 하나로 합치면 x와 θ를 모두 구할 수 있다는 뜻이다.
- x와 θ를 작은 값으로 초기화 한 후 Content Based Recommendations와 Collaborative Filtering을 번갈아 돌리면 된다.
- 그런데 이 둘을 아예 하나의 식으로 합치는 것도 가능하다. 둘의 식이 비슷하기 때문에 그대로 합치면 된다.
Low Rank Matrix Factorization
https://www.coursera.org/learn/machine-learning/
- 유저별 영화 평점을 행렬로 표현하고 그것을 Y라고 한다면, 선형회귀에서 풀었던 것처럼 Y를 두 벡터 θ와 x의 곱으로 표현할 수 있다.
- 위 이미지 오른쪽 행렬 참조
- 이때 전체 행렬에서 x를 뽑아내서 X 벡터를 만들면 위 이미지의 왼쪽 아래의 모양과 같은 벡터가 되고,
- (xnm)T로 이루어진 벡터
- θ만 뽑아내서 Θ 벡터를 만들면, 위 이미지의 오른쪽 아래 모양과 같은 벡터가 된다.
- (θnu)T 로 이루어진 벡터
- X와 Θ로 Y를 표현하면 다음과 같다.
- 이렇게 정리된 정보를 이용하면 두 영화 사이의 유사도를 예측할 수 있는데, 두 영화에 대한 점수를 바탕으로 거리를 측정하면 된다.
- 추가 팁으로 전체 값에 대해 Mean Normalization –데이터 분포가 원점을 중심으로 하도록 이동– 을 하는데, 이는 평가 점수가 0인 것과 점수를 평가 안한 것을 구분하기 위함.
Photo OCR
- 사진에서 글자를 읽어내는 것에 대한 사례. 실제 OCR은 좀 더 복잡하고 일정 부분에 대해서만 설명한다.
Algorithm
https://www.coursera.org/learn/machine-learning/
- 사진에서 글자를 읽어 내는 것은 한번에 하는게 아니라 여러 단계를 거쳐 진행한다. 간단하게 그 프로세스를 정리하면 다음과 같다.
- Text Detection
- 사진에서 글자를 판별해 내는 단계
- Character Segmentation
- 판별된 글자를 Character 단위로 쪼개는 단계
- Character Classification
- 쪼갠 Character를 실제 인식하는 단계
- Text Detection
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를 해볼 수 있다.
- (사실 모든 영역이 마찬가지지)
- 각 단계별로 최종 정확도를 측정하여 각 파이프라인 별로 효율을 측정할 수 있으며, 이를 통해 비용대비 효율을 계산하여 불필요한 자원의 낭비를 피할 수 있다.
- 노력을 들여도 큰 개선이 이뤄지기 어려운 부분에는 헛수고 할 필요 없다.