※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

 

<Photo OCR problem>

 

photo OCR problem 예시

위 그림과 같이 사진에서 글씨를 추출해내는 기술을 photo OCR 이라고 한다.

 

위와 같은 문제를 해결하기 위해서는

photo OCR의 순서

input image -> text detection -> charater segmentation -> charater recognization

 

위와 같은 순서대로 진행되어야 한다.

이와 같은 구조를 machine learning pipeline이라고 한다.

 

- Sliding windows

text detection(사진에서 글씨로 쓰여진 부분을 찾아내는 것)에 대해 알아보기 앞서, 보행자 인식이 어떻게 이뤄지는 지에 대해 살펴보자.

 

보행자를 직사각형으로 인식하는 경우, 멀리 있는 사람과 가까이 있는 사람에 따라 그 크기는 달라질 수 있지만 가로와 세로의 비율은 어느 정도 일정할 것이다. 

sliding window 예시

따라서 위와 같은 비율로 왼쪽상단부터 우측 하단까지 window를 이동시키면서 이미지를 훑게되면 각 window의 위치별로 logistic regression 등의 방법을 통해 인식이 가능할 것이다.

window의 크기를 늘려가며 이미지를 scan하면, 보행자를 인식해낼 수 있다.

 

sliding 하며 얻는 이미지의 예시

 

text detection에서의 차이는 글씨의 경우 문장의 길이 등에 따라 가로 세로의 비율이 고정되어 있지 않다는 것이다.

따라서 우선 보행자를 탐색하듯 글씨 부분을 인식한 후, "expasion"을 통해 전체 문장을 인식한다.

 

Text Detection 예시

하단 좌측의 그림이 sliding window를 거쳐 글씨파트를 인식한 결과이고(밝을 수록 1에 가까움),

하든 우측의 그림이 expansion을 거친 후의 결과이다.

글씨파트를 인식한 결과에서 글씨로 인식된 부분을 조금 확장하고, 서로 이어진 부분을 하나의 문장으로 인식하는 것이 expansion이다.

이때, 세로의 비율이 가로의 비율보다 큰 경우는 문장으로 인식하지 않는다.(글씨를 가로로만 쓴다고 가정)

 

그렇게 글씨부를 추출하고 나면,

charater segmentation이나 character classification은 NN 등의 모델을 통해 수행하면 된다.

 

charater segmentation 예시

※charater segmentation은 글자를 구분하고 있는 이미지를 학습시키는 방식으로 수행할 수 있다.

 

 

- Artificial Data synthesis

bias가 낮은 모델에게 많은 데이터를 학습시키는 것은 성능이 좋은 모델을 만드는 좋은 방법 중 하나이다.

(learning curve 참고)

 

많은 데이터를 얻기 위해 artificial data를 생성하는 것도 하나의 좋은 방법이 될 수 있다.

 

artificial data를 얻는 것에는 대략 두 가지 방법이 있다.

(1) 직접 데이터 생성

(2) 기존의 데이터를 이용하기

 

(1)번의 방법을 photo OCR 중, text recognization에 적용하면 다음과 같다.

Synthetic data 예시

좌측의 그림은 실제 데이터이고, 우측의 그림은 제공되는 여러 폰트로 생성된 글씨를 임의의 배경에 합성한 예시이다.

이렇게 생성된 데이터를 학습에 사용하는 것은 도움이 될 것이다.

 

(2)번의 방법은 다음과 같다.

by distortion

기존의 이미지를 약간 변형하여, 조금 더 다양한 형태의 데이터를 만든 예시이다. 

만약 음성 처러에 관한 문제라면, 기존 데이터에 노이즈를 입힌 새로운 데이터들을 만드는 식으로 적용할 수 있을 것이다.

이 역시 다양한 데이터를 모델이 학습할 수 있도록 도와줄 것이다.

(*text 인식에서 이미지에 랜덤한 노이즈를 주는 것은 크게 도움이 되지 않는다고 한다)

 

 

데이터를 늘려 모델을 개선하는 것에 대해 정리하면 다음과 같다.

1. learning curve 등의 방법을 통해 모델이 low bias(high variance)한 모델인지 확인한다.

-> high bias의 경우 데이터의 수를 늘리는 것이 도움되지 않을 것이다.

 

2. 데이터의 수를 늘리는 것에 걸리는 시간을 고려해본다.

- 임의의 데이터 만들기

- 데이터를 직접 얻기

- Crowd source 로부터 얻기

 

데이터를 더 얻는 것은 어떻게 보면 단순한 문제이지만, 성능을 높이기위한 가장 효율적인 방법이 될 수 있다.

 

- Ceiling Analysis

이번 course의 다른 강의에서도 많이 다뤘듯이, 머신러닝 시스템을 구축할 때 성능을 개선하기 위해 어떤 작업을 수행해야할 지 결정하는 것은 중요하다.

단순히 직감 등에 의존하지 말고, 근거를 가지고 다음 작업을 정하는 것은 매우 중요하다.

 

그렇다면 machine learning pipeline 구조에서는 어떤 작업에 집중해야 할까?

Ceiling Analysis를 적용하여 판단하는 것이 이 결정에 도움이 될 것이다.

 

Ceiling Anlysis, Accuracy는 전체 process를 거친 후의 값을 의미

앞서 photo OCR 을 해결하기 위한 구조에서는 3개의 머신러닝 모델이 필요했다. 

만약 처음으로 구축한 모델에서 정확도가 72%가 나왔다고 해보자.(최종 OCR 결과의 정확도)

 

3개의 모델을 모두 개선하면 좋겠지만, 우선 순위를 정하자면 어떤 모델에 집중하는 것이 좋을지에 대해 판단하려면 Ceiling Analysis를 적용하면 된다.

 

가장 처음 적용하는 모델부터 임의로 100% 정확도의 결과를 만든 후 전체 모델의 성능 개선에 얼마나 도움이 되는지 살펴보는 방법이 Ceiling Analysis이다.

 

임의로 100% 정확도를 만든 다는 것은 수동으로 데이터를 처리하거나, 모델이 성공적으로 인지한 데이터만 사용하면 된다.

ex) Charater Segmentation 부분을 100%로 만들기 위해 직접 데이터를 구분하여 100% 구분된 데이터만 다음 단계로 제공

 

Ceiling Analysis를 적용하여 위 표와 같이

Text Detection을 정확하게 만들었을 때 전체 결과에서 17%의 향상,

segmentation에서 1%의 향상,

recognizatiioin에서 10%의 향상

의 결과가 나왔다고 해보자.

 

Text Detection 모델의 성능을 향상 시키는 것이 전체 시스템의 성능을 증가시키기 위한 가장 효율적인 방법이라는 것을 알 수 있다.

반대로 charater segmentation의 성능 개선에 많은 시간을 쓰는 것은 잘못된 선택일 것이다.


※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<Large Scale Machine Learning>

실제 머신러닝 모델을 구현하다보면 상당히 큰 수의 데이터셋을 다룰 일이 생길 것이다.

ex) m = 300,000,000

 

이번 장에서는 그러한 경우 발생하는 문제와 극복하는 방법을 다루었다.

 

우선 해당 문제를 다루기 전에 항상 주의해야될 점이 있다.

 

(1) 적은 수의 데이터셋으로도 충분한 성능의 모델을 구축할 수 있는지.

-> 매우 많은 데이터셋이 아니더라도 충분한 모델을 구축할 수 있다면, 굳이 많은 데이터셋을 사용할 필요가 없다.

 

(2) 많은 데이터가 도움이 될지, bias 문제는 아닌지

-> 앞서 bias 문제의 경우 데이터의 수를 늘리는 것이 모델의 성능에 큰 도움이 되지 않는다는 것을 다뤘다. 따라서 

learning curve 등을 이용하여 bias 문제인지 여부를 검사해봐야 한다.

 

- Stochastic Gradient descent

Linear Regression의 Batchc Gradient Descent 알고리즘

Linear Regression의 cost function과 gradient descent 알고리즘은 위와 같다. 

파라미터를 업데이트시키는 한 iteration마다 i=1~m까지, 모든 데이터에 대해 sum 연산을 수행한다.

*모든 데이터를 대상으로 하기 때문에 batch gradient descent라고 한다.

* gradient descent를 적용하는 모든 알고리즘에 적용이 가능하다.(예시가 linear regression일 뿐)

 

이때 m이 매우 큰 300,000,000 정도인 데이터 셋이라면 위 연산은 매우 expensive한 연산이 된다.

 

이러한 문제를 해결하기 위해 사용하는 알고리즘이 Stochastic Gradient Descent 이다.

Batch vs Stochastic graident descent

Batch Gradient 에서는 한 iteration마다 모든 데이터에 대해 연산을 수행한 후 업데이트를 했다면,

Stochastic gradient descent에서는 한 iteration마다 하나의 데이터에 대해서만 업데이트를 수행한다.

 

즉, iteration 한 번마다 파라미터를 업데이트하는 수식이 다음과 같다.

$ \theta_j :=\theta_j-\alpha(h_\theta(x)-y^{(i)})x^{(i)}_j $, (for all j =0 ~ n)

 

위 수식을 적용하기 전, 데이터를 무작위하게 셔플해야 한다. 이 후 순서대로 하나의 데이터에 대해 업데이트를 진행하는 것이다.

 

전체 데이터에 대해 업데이트하는 과정을 일반적으로 1~10회 정도 수행한다.

 

Batch에서는 매 업데이트마다 300,000,000개의 데이터에 대해 연산을 수행해야 했다면, 

Stochastic Gradient Descent에서는 전체 데이터를 훑는 과정을 대략 1~10회 정도만 수행하는 것이다.

 

Stochastic Gradient Descent 시각화

Stochastic Gradient Descent가 진행되면서 파라미터가 global optimum에 근접해가는 과정은 위 그림과 같다.

다음과 같은 특징을 갖는다.

 

- $ J(\theta)$가 항상 감소하는 것은 아니다.

- global opima 에 근접해가지만, 완벽하게 수렴하지는 않고 그 주변에서 진동한다. 

($ \alpha $ 의 크기가 작을수록 더욱 근접하여 진동한다.)

 

- Mini-Batch Gradient Descent

m이 큰 데이터에 대해 적용할 또 다른 Gradient Descent 알고리즘 중 하나는 Mini-batch gradient descent 알고리즘이다.

Mini-Batch Gradient Descent

 Min-batch gradient Descent 알고리즘은 위와 같다.

Stochastic 방식과 비슷하지만, 매 업데이트에서 b개의 example에 대해서 연산을 수행한 후 업데이트한다.

마치 batch와 stochastic 방식의 중간 형태처럼 연산을 수행한다.

 

그러나 stochstic 방식과 같은 특징을 갖는다. (J 증가 가능, global optima 수렴 x)

 

또한, Mini-batch의 경우 b개의 데이터에 대해 병렬 처리가 가능한 경우에 Stochastic 방식보다 효율적이라고 할 수 있다. 

 

- Stochastic Gradinet Descent Convergence

Batch Gradient Descent에서는 매 iteration마다 $ J(\theta)$의 증가여부를 보면서 debugging을 할 수 있었지만, 

앞서 얘기했듯이 Stochastic Gradient Descent 알고리즘에서는 $ J(\theta)$가 증가할 수 있다.

그렇다면 어떻게 알고리즘의 동작을 확인해야할까?

 

Stochastic Gradient Descent 방식의 debbuging

1000개(예시) 정도의 데이터마다 각 데이터에 대한 cost를 평균으로 계산하여, plot해보는 방식으로 debugging을 수행한다.

 

plotting의 결과로 예상할 수 있는 내용과 그에 따른 해석은 다음과 같다.

 

- ①번 그래프

알고리즘이 정상적으로 작동하는 경우, 파라미터가 점점 최적화되고 cost의 평균은 낮아질 것이다. 

(cost의 평균은 전체 평균이 아닌, 마지막 1000개의 데이터에 대한 cost의 평균이다.)

빨간석으로 덮어진 그래프가 $ \alpha$가 작은 경우이고 그렇지 않은 그래프가 큰 경우로 볼 수 있다.

$\alpha$가 작으면 초기 단계에서는 업데이트가 천천히 되어 더 큰 cost를 보이지만, 앞서 말했듯 global optima에 더욱 근접하기 때문에 iteration이 반복할 수록 상대적으로 cost가 작아진다.

 

- ②번 그래프

평균을 내는 기준을 마지막 1000개로 그린 그래프와 그 위에 5000개를 기준(부드러운 형태, 빨간색)으로 했을 때의 그래프이다.

평균을 내는 기준의 수를 늘릴 수록 더욱 부드러운 그래프가 나온다.

 

- ③번 그래프

②번 그래프와 유사한 경우이다. 평균을 내는 기준을 2-3개 정도로 작게한다면, 수렴해가는 여부를 판단하기 어려울 것이다. 수를 늘리면 밑의 파란 라인처럼 수렴하는게 보일 수 있다.

만약 그렇게 했을 때도 빨간 그래프처럼 점점 작아지지 않는다면 알고리즘의 동작에 문제가 있는 것이다.

$ \alpha$를 조정하거나 아예 모델의 feature를 수정해야 될 수도 있다.

 

- ④번 그래프

오히려 계속하여 증가하는 경우, 더 작은 \$alpha\를 사용해야 한다. 

 

- non-constant alpha?

 

$\alpha$가 작을 수록 global optima에 근접한다면, 다음과 같이 iteration이 늘어날 수록 작아지는 값을 사용하면 더욱 global optima에 가까운 파라미터를 구할 수 있을 것이다.

실제로 위 방법을 사용하기도 하고, 효과가 있는 방법이다.

특히, 결국 알파가 0에 가까워지고 global optima와 근접한 한 값에 수렴할 것이다.

 

그러나 위 식 중 const1과 const2 또한 학습을 위해 조정해야할 새로운 파라미터가 되고, 이는 모델을 까다롭게 만들기 때문에 사용하지 않는 경우도 많다고 한다. 기존 constant 방법도 유효하다.

 

- Online Learning

Online Learning은 실시간으로 들어오는 데이터를 반영하여 모델을 업데이트하는 방식이다. 

Stochastic Gradient Descent 알고리즘에서 한 데이터에 대해 업데이트를 수행했던 것처럼, 들어오는 새로운 데이터에 대해 업데이트를 수행한다. 

Online Learing

주로 대규모 웹 사이트에서 사용하는 기법이다. 

 

 

- Map-Reduce

대규모 데이터에 대한 연산을 처리하는 또 다른 방법으로는 Map-Reduce가 있다.

Batch Gradient descent, Map-Reduce 적용

Batch Gradient Descent 알고리즘을 큰 데이터에 적용할 때 부담이 된 점은 편미분값으로 모든 데이터에 대해 연산을 수행하고 합해야되는 것이다. 

 

그러나 합해야되는 각 값, $(h_\theta(x^{(i)})-y^{(i)})x^{(i)}_j $은 서로 영향을 미치지 않는다. 

따라서 병렬로 계산을 수행하고, 합치면 그만큼 빠르게 알고리즘이 동작할 것이다.

 

위 슬라이드와 같이 400개의 데이터에 대해 sum을 구해야한다면, 4개의 컴퓨터가 각각 100개씩 합을 구하고 최종적으로 다시 그 결과를 합하면 400개의 데이터에 대해 연산을 수행한 결과를 4배 더 빠르게 계산할 수 있게 되는 것이다.

(물론 실제로는 network로 인한 지연이 존재한다,

꼭 network를 이용하는 것이 아니더라도, 멀티 코어를 이용할 수도 있다.)

 

이처럼 큰 데이터셋에 대해 Map-Reduce를 적용하여 연산을 수행하면 알고리즘이 보다 빠르게 동작할 수 있다.

연산이 병렬화될 수 있는 경우라면 Map-Reduce를 적용할 수 있다.

Logistic Regression의 cost function

위 식을 보면 Logistic Regression에 대해서도 적용이 가능하다는 것을 알 수 있다.

 

※ Neural Network의 Forward Propagation과 Backwork Propagation에 대해서도 적용이 가능하다.

Backpropagation

각 데이터별로 forward progation을 수행하고, 다시 backword propagation을 수행하는 과정을 i=1~m까지 적용하고, 누적 합을 계산하는 과정이 최종 편미분값을 얻는 과정이다.

m을 4개의 데이터셋으로 나누고, 각 데이터셋에 대해 서로 다른 컴퓨터가 누적합을 계산하고 다시 그 결과들을 합치는 식으로 병렬화를 할 수 있다.

 

※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<Recommender System>

Recommender System은 사용자의 기존 선호도를 바탕으로 다른 상품(ex) 영화, 물건 등)에 대한 선호도를 예측하는 모델을 만들고, 추천해주는 시스템이다.

 

수업에서 다루는 이유는 다음과 같다.

 

- 학문의 영역에서는 몰라도, 현업에서 가장 자주 사용되는 머신러닝 시스템이다.

- 자동으로 좋은 feature를 선택하는 알고리즘을 다뤄볼 수 잇다.(Collaborative Filtering)

 

- 개념

데이터 예시

행은 영화, 열은 사용자이고 i행 j열은 i행 영화에대해 유저-j 가 평가한 점수를 나타낸다. 

추천 시스템을 구축하기 위해 유저의 선호도를 학습하는 것은, 

기본적으로 각각의 user에 대해 linear regression의 파라미터를 찾는 과정과 동일하다고 볼 수 있다.

 

표의 우측에 검은 색으로 나타낸 feature  x1과 x2는 각각 그 영화의 장르를 수치화한 것이다.

*이렇게 feature가 주어진 상태로 학습하는 것을 content-based recommendation system이라고 한다.

 

해당 feature와 각각의 user들의 영화에 대한 평가들을 바탕으로 각 user별 파라미터를 찾을 수 있다.

 

예를 들어, 로맨스 장르의 비율이 높은 영화들을 선호하는 Alice(j = 1)의 경우, 파라미터는 다음과 같이 학습될 것이다.

$ \theta^{(1)} = \begin{bmatrix}0
\\ 5
\\ 0

\end{bmatrix}$

따라서 ?로 표시된 1행 3열의 영화의 경우, 4.95의 값을 예상할 수 있다.

*$ \theta^{(j)}$ 는 user-j에 대한 파라미터를 의미한다.

 

- Optimization Algorithm

파라미터의 최적화 역시 linear regression과 큰 차이가 없다.

 

우선 user-j에 대한 optimization objective는 다음과 같다.

Optimization Objective for user - j

 

linear regression 에서의 least squre function과 매우 유사하다.

m으로 나누는 것이 빠진 것을 제외하면 사실 동일하다.(상수를 없앤 것이므로 최적화에 영향을 주지 않는다)

(*$ i:r(i,j)=1$은 user의 평가가 있는 element에 대해서 합한다는 것을 의미한다. '?'로 표시된 데이터 제외.)

 

이를 모든 user에 대해 적용한 최종 optimization objective는 다음과 같다.

 

Optimization Objective

j=1~$ n_u$를 추가한 것, 즉 모든 user에 대해 연산하는 것만 추가되었다.

gradient descent를 적용하기 위한 편미분 값 또한 확인할 수 있다.(마찬가지로 linear regression과 거의 동일)

 

- Collaborative Filtering

앞서 content based recommendation system을 살펴보았는데, 

실제로는 각 영화(또는 상품 등)에 대해 그렇게 feature를 만드는 것이 쉽지 않을 수 있다. 

 

이번에는 반대로 $ \theta$가 먼저 주어진 상황을 가정해보자.

parameter가 주어지는 경우

영화-i에 대한 user-j의 평가는 $ {\theta^{(j)}}^Tx(i)$ 로 계산할 수 있었는데, 

이번엔 반대로 $\theta$가 주어졌으므로 실제 $ y_{ij}$와 $ {\theta^{(j)}}^Tx(i)$의 차를 줄이도록 $ x^{(i)}$를 학습할 수 있을 것이다.

Optimization Algorithm - non-conent based

즉, 위와 같이 optimization algorithm을 정의하면 각 영화들에 대한 feature, $ x^{(i)}$를 학습할 수 있을 것이다.

이러한 경우, 각 feature는 어떠한 의미를 갖기보단 알고리즘이 자동으로 학습(선택)한 feature가 될 것이다.

 

이렇듯 feature가 주어지면 parameter를 학습할 수 있고, parameter가 주어졌을 때 feature를 학습할 수 있다는 점을 이용하여 두 과정을 교차적으로 반복 수행하면 둘 모두를 학습시킬 수 있는 것이 Collaborative Filtering의 아이디이이다.

실제로는 두 과정을 교차적으로 반복 수행하진 않고, 하나의 optimization objective를 정의한다.

 

Collaborative Filtering의 Optimization Objective

기존의 두 cost function 중 ①과 ②는 사실 같은 식이다. j와 i는 column을 기준으로 전체를 탐색할지, row를 기준으로 탐색할지에 대한 표시의 차이이다.

따라서 두 파라미터($ \theta$와 $ x$)를 모두 최적화하기 위한 cost function은 ③과 같이 정의할 수 있다. 

 

※ $ x_0$ 를 추가하지 않는 것을 확인할 수 있다. 이는 intercept와 같은 역할을 하는 feature가 필요하다면 알고리즘 상 알아서 선택하면 되기 때문이다.(알고리즘이 자동으로 feature를 선택하는 특징 때문.)

 

Collaborative Filtering 정리

최종적으로 알고리즘에 대해 정리하면 위와 같다. 

과정 1에서 initialize할 때, 0으로 초기화하지 않는데 이는 NN에서와 유사한 이유이다.(symmetric breaking)

(0으로 초기화한다면 gradient를 업데이트할 때 변하지 않는다는 것을 식에서 확인 가능)

 

※ feature를 알아서 선택한다면, feature의 수를 어떻게 설정해야 되는지에 대한 질문이 생겼는데, 이에 대한 질문과 답변이 해당 강좌의 토론 포럼에 존재하였다.

결론적으로 feature의 수를 tuning해야는데, 이때 bias와 variance 문제를 고려하여 조정하면 된다.

(ex) learning curve 출력해보기)

 

- vectorization

vectorization

$ X$와 $ \Theta$를 위와 같이 정의하면 $ X\Theta^T$의 연산을 통해 Y를 계산할 수 있다.

 

- 관련 영화 추천

그렇다면 movie - i와 유사한 영화를 어떻게 추천해야 할까?

해당 영화와 feature가 가장 유사한 영화

즉,

\left \| x^{(i)} -  x^{j}\right  \|

위 식, 거리가 가장 작은 영화부터 추천하면 된다.

 

- Mean Normalization

score등은 이미 scare이 유사하게 되어있기 때문에 scaling은 필요없지만,

mean normalization은 유용할 수 있다.

위 데이터의 eve와 같이 어느 영화도 평가한 적이 없는 user가 있다면 cost function을 최적화함에 따라

해당 유저의 $ \theta$는 모두 0으로 초기화 될 것이고, 모든 예상 점수는 0점이 될 것이다.

(*가장 앞과 두번째 sum 계산엔 포함되지 않고, 마지막 sum에만 파라미터의 제곱이 들어가므로 0으로 하는 것이 최적화)

 

그러나 초기 예측값으로 무조건 0이 되는 것보다는 평균 값이 되는 것이 더 합리적이다.

Mean Normalization 적용

따라서 위와 같이 Mean Normalization을 적용한 데이터를 통해 학습을 수행하면 초기 예측값이 0으로 나오는 것이 문제가 되지 않을 것이다.

(※ 평균은 row-wise, column-wise 어느 것을 사용해도 문제가 되지는 않는다. 정보가 없는 유저에 대한 첫 예측값인 0이 평균이 되도록 하는 것이 적용하는 이유이다.)


※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<Anomaly Detection>

Anomaly Detection은 비정상적인 데이터를 검출해내는 unsupervised learning 알고리즘이다.

(이후에 살펴보겠지만, training에 y가 사용되지 않는다.)

 

Anomaly Detection 예시

예를 들어 위와 같이 데이터(un-labeled)가 주어졌을 때, 우측하단의 anomaly로 표현된 데이터는 일반적인 데이터의 분포와 일치하지 않는 것을 확인할 수 있는데, 이를 anomlay detection으로 검출할 수 있다. 

 

트레이닝 데이터로 feature에 대한 가우시안 분포를 찾고, p($ X_{test}$)가 임의의 값 $ \varepsilon $보다 작으면 anomaly로 판단시키는 방식이다.

 

- 사기 검출

- 불량 검사

등에 이용된다.

 

- Algorithm

앞서 말했듯, training 데이터로 가우시안 분포의 파라미터인 $ \mu$와 $ \sigma$를 학습한다.(각각의 feature에 대해.)

 

※ 가우시안 분포

-> pdf가 다음과 같은 분포를 따름.

$p = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} $

가우시안 분포

 

이 후 최종의사 결정은 $ p(x) $의 값과 임의로 정한 $ \varepsilon $의 값을 비교하여 결정한다.

어떠한 데이터 $ x$에 대해 $ p(x)$는 다음과 같이 계산한다.

 

$ \prod_{j=1}^{n}{p(x;\mu_j,\sigma_j^2)} $,

 

즉, 각 feature에 대해 train을 통해 학습한 가우시안 분포의 파리미터와, 그를 바탕으로 계산한 pdf 값들의 곱을 계산한다.

 

알고리즘을 정리하면 다음과 같다.

Anomaly Detection 적용

*step2에서 $ \sigma$의 학습 시 m으로 나누는데, 통계학에서는 m-1으로 나누기도 한다. 

약간의 차이가 있지만 주로 m이 큰 머신러닝에서는 문제가 되지 않고, m으로 나누는게 일반적이라고 한다. 

 

- 성능 평가

기본적으로 모델의 학습에는 y set이 사용되지 않는 unsupervised learning이지만,

알고리즘을 테스트하는 것에는 y set을 사용한다.

 

성능평가를 위한 데이터 분류

다른 supervised learning과 같이 cross validation set과 test set을 추가로 이용한다. 두 데이터 셋에는 y label이 포함된다.

 

실제 데이터를 가정한 예시는 다음과 같다.

분류 예시

10000개의 정상 데이터와 20개의 비정상 데이터가 있다고 할 경우 ①로 표시된 것과 같이 분류하면 된다.

 

training 데이터에는 normal data만 사용된다.

-> 일반적인 분포를 찾고, 그에 벗어나는 것을 찾는 것이 목적이므로 normal 데이터만 학습시키는 것이다.

(anomalous한 데이터가 조금은 포함되어도 괜찮다.)

 

②와 같이 사용하는 경우도 있지만 권장하지 않는다.

 

Cross Validation set을 이용하여 $ \varepsilon $의 값을 조정해갈 수 있고,

최종적으로 test set을 통해 모델의 성능을 평가해볼 수 있다.

 

anomaly detection의 결과는 skewed된 데이터가 나오기 때문에 accuracay가 아니라,

precision, Recall을 이용한 F1 score를 통해 판단해야 한다.

 

- Anomaly Detection vs Supervised Learning

F1 score를 적용하는 것을 보고 supervised learning을 통해한 작업과 유사한 작업을 한다는 것을 알 수 있을 것이다.

그렇다면 두 알고리즘 중 어떤 알고리즘을 선택해야할까?

 

결과적으로 정리하면 y = 1(anomaly)의 데이터가 많이 없다면 anomaly detection을 적용하는 것이 좋고,

데이터가 충분하여 y=1인 경우에 대한 데이터도 꽤 있다면 supervised learning을 적용하는 것이 좋다.

 

*강의에서는 anomaly 데이터의 수가 0~20개인 경우 보통 anomaly detection을 적용한다고 한다.

 

y=1에 대한 데이터가 충분하지 않아도 y=0에 대한 데이터만 있다면 anomaly detection을 위한 일반적인 데이터의 분포를 학습할 수 있지만, supervised learning에서는 y=0과 y=1을 구분하기 위한 충분한 특징을 학습할 수 없기 때문이다. 

 

 

- feature 선택, 처리

알고리즘을 보면 알 수 있듯이, feature로 주어지는 데이터가 정규분포를 따를 수록 좋은 성능을 보일 것이다.

 

(1) 변환

로그 변환 예시

따라서 위 그림의 밑 예시 처럼 가우시안 분포를 따르지 않는 변수가 있다면, 해당 변수를 변환하여 새로운 변수로 매핑하는 방법을 취한다. 에를 들어, log를 취하거나 루트를 취하는 등의 방식이 있다.

 

(2) 조합하여 생성

상관관계가 있는 두 변수를 조합하여 새로운 변수로 생성해야 되는 경우도 있다.

 

data center 데이터 예시

data center의 컴퓨터들에 대해 위와 같은 feature가 주어진다고 하자. 

직관적으로도 알 수 있듯이, CPU의 load와 network traffic 는 비례한다.

 

위 feature를 이용하여 detection을 수행하면, CPU load 적당히 높은 것은 크게 문제가 되지 않을 것이다.(detect 되지 않음)

그러나 이때 network traffic이 거의 없었다면 CPU 의 load가 높은 경우는 detect되었어야 하는 경우이다.(ex)무한 loop에 걸림)

 

각각의 변수를 따로 보게되면 anomly지만 detection에 실패하게 되는 것이다.

 

위 그림의 $ x_5$와 같이 두 변수를 조합하여 새로운 변수를 만드는 것을 통해 해결할 수 있다.

 

즉, 상관관계가 있는 변수간에는 조합을 통해 새로운 변수를 생성해주는 것이 좋다. 

 

- Multivarivate Gaussian Distribution

 

Multivariate Gaussian Distribution의 필요성

위와 같이 비례관계인 두 개의 feature가 있다면 각각의 feature의 분포를 이용하면 빨간색 원으로 표시한 데이터는 일반적인 분포와 다름에도 불구하고 anomly로 검출되지 않을 것이다.

 

좌측의 그래프에 타원으로 표시된 영역을 train해야 하지만, 등고선으로 표시된 영역대로 p를 학습하게 된다.

*이전의 data center의 CPU load와 traffic간을 조합하여 해결하는 것과 같은 문제이다.

두 개의 방법이 모두 이용 가능하다.->선택에 대해서는 마지막에 다룸

 

이러한 문제를 Multivariate Gaussian 분포를 이용하면 해결할 수 있다.

Multivariate Gaussain Distribution을 살펴보면 다음과 같다.

Multivariate Gaussioan 분포

pdf는 위와 같이 계산하고, parameter로는 $ \mu$와 $ \sum $가 필요하다.

각각 n차원의 벡터와 nXn크기의 행렬이다.

(각 feature의 평균을 계산한 벡터와 covariance matrix)

 

parameter training
예시 - 1
예시 - 2
예시 - 3
예시 - 4

$ \sum $ parameter의 변화에 따라 분포가 어떻게 나타나는지 알아볼 수 있다.

앞서 설명했던 문제는 예시 - 3과 같은 분포를 통해 해결할 수 있을 것이다.

 

 

일반적인 모델과 동치

참고로, 축에 평행한 features로 이뤄진 model의 경우, 어떠한 모델을 사용해도 실제로는 동일한 결과가 나온다.

(mulivariate model에서도 대각 행렬만 나옴, 나머지 = 0)

*증명 생략

 

- Original model vs Multivariate Gaussian Model

상관관계가 있는 변수의 경우,

(1) features의 조합으로 생성한 feature를 이용한, original 모델을 사용하는 방법

(2) multivariate 모델을 사용하는 방법

두 가지 방법이 있었는데, 두 방법 중에는 어떤 방법을 어떨 때 선택해야 할까.

 

두 방법의 장단점

방법(1) -

장 : 새로운 변수를 생성하는 방법은 m이 클 때 계산적인 측면에서 저렴하다. 

단 : 그러나, feature를 어떻게 조합할지 직접 고려해야 한다.

 

방법(2) - 

장 : 자동으로 feature간의 상관관계를 고려한다.

단 : m이 클 경우 계산이 expensive하다.(수식에 역행렬 계산이 있음), 또한 m>n인 경우 아예 계산이 불가능하다.

(또 다른 singular한 경우. ex) linear한 관계인 변수가 있다면 적용불가, 하나 삭제하면 적용할 수 있음)

     

 

+ Recent posts