※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.

 

Assigment1 - Q1에서는 KNN 을 통한 image classification과 cross-vallidation을 다루고 있다.

 

● Data, Setup

먼저 CIFAR10 데이터를 읽어오고, train data와 test data로 나누는 코드가 작성되어 있다.

데이터 일부 출력
data shape

load한 데이터셋 자체는 50000/10000 개로 나뉘지만 그 중 5000/500개씩 추출하여 사용한다.

또한 32x32x3 크기의 이미를  모두 vector 로 변경한다.

 

 

● KNN

train

먼저 train을 진행한다. KNN에서 train은 단순히 데이터를 기억하는 것이다.

 

(1) distances_two_loops

가장 먼저 distance를 2개의 loop를 이용해서 계산하는 함수를 구현하면 된다.

X_test는 500개, 비교할 train 데이터는 5000개이므로,  dists.shape = (500, 5000)이다.

 

distance_two_loops

L2 distance를 구하는 코드로, 2중 for문을 이용하여 직관적이다. 따라서 별도의 설명은 생략하겠다.

 

Inline Question1

dists 출력, Inline Question1

dist를 직관적으로 출력한 그림과 이어지는 Inline Question1이다.

밝을 수록 dist가 먼 것인데, 가로나 세로로 생긴 흰 선이 왜 생긴 것인지에 대한 질문이다.

 

Answer)

row : 대부분의 train image와 다른 test image가 존재하기 때문.

column : 대부분의 test image와 다른 train image가 존재하기 때문.

 

처음엔 위와 같이 직관적으로 설명했었는데, 결과적으로 저 내용이 이상치를 의미한다고 정리할 수 있겠다. 

 

2) predict_lables

다음으로 dists를 보고 predict를 진행하는 predict_labels함수를 작성하면 된다. 

predict_labels

np.argsort를 이용하고 그 결과로 indexing하는 방식으로 구현하였다. 

 

Inline Question 2

 

 

(3) distance with one loop

compute_distances_one_loop

각 test 데이터에 대해서 broadcasting을 이용해서 L2 distance를 계산한다. broadcasting만 적용하면 돼서, 크게 어렵진 않다.

 

 

(4) distance by fully vectorized code

compute_distances_no_loops

for 문을 사용하지 않고 dists를 계산하는 코드이다. 

 

앞서 for문을 이용한 방식과 달리 직관적이지 않다.

HINT에 나와있는대로, 한번의 multiplication과 2개의 broadcasting을 이용하였다. 

 

먼저 dists가 계산되는 것을 수식으로 정리하는 것이 도움이 되었다.

dists의 i행 j열은 다음가 같이 일반화할 수 있다. 

위 수식을 이해하고 코드를 보면 어렵지 않게 이해할 수 있다.

i행의 모든 원소에는 $ x^{(i)}$ 의 크기를 더해주고 j열의 모든 원소에는 $ x_{train}^{(j)}$ 의 크기를 더해주는 것이 broadcasting으로 구현되어 있고, 마지막으로 $ x^{(i)}$와 $ x\_train^{(j)}$의 내적은 X와 Xtrain.T의 곱으로 계산하여 더해주면 된다. 

 

 

(5) cross validation

다음으로 cross validation을 구현하는 문제가 있었는데, 단순 구현 문제이므로 생략하겠다.

앞으로도 과제의 경우 수행하는데 어려움이 있었던 부분만 정리할 계획이다. 

 

Inline Quest 3

'Computer Vision > cs231n' 카테고리의 다른 글

[Lec 4] Backpropagation and Neural Network  (0) 2021.12.30
[Assignment1 - Q3] Softmax  (0) 2021.12.30
[Assignment1 - Q2] SVM  (0) 2021.12.30
[Lec 3] Loss Functions and Optimization  (0) 2021.12.30
[Lec2] KNN, Linear Classifier  (0) 2021.12.29

※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.

 

lec1에서 image classification 기술에 대한 전반적인 설명을 진행하였고, lec2에서도 이에 대한 내용을 다루지만, 해당 내용은 생략하고 KNN과 Linear Classifier에 대해서만 다루었다.

 

<KNN>

K - Nearest Neighbor 알고리즘은 새로운 대이터가 주어졌을 때, 해당 데이터와 가장 유사한(L1 또는 L2 distance가 가까운) train data의 label로 예측하는 알고리즘이다. 

 

여기서 K는 가장 유사한 데이터를 몇 개 확인할지 결정하는 파라미터이다. 예를 들어, K = 3인 경우 가장 유사한 train data 3개를 찾고 과반수인 label로 예측한다.

 

● L1, L2 distance

앞서 가장 유사한 train 데이터의 label을 확인하는 방식으로 동작한다고 했는데, 여기서 유사성이란 L1 또는 L2 distance를 의미한다.

L1 distance

먼저 L1 distance를 이미지에 적용하면 위와 같이 계산할 수 있다. pixel별 차의 절대값의 합을 계산하면 된다.

 

L2 distance

L2 distance도 크게 어렵지 않다. 각 픽셀 별로 차의 제곱의 합을 계산하면 된다.

 

● Train

KNN 모델을 train하는 것은 매우 간단하다. 단순히 train 데이터를 모두 저장하면 된다.

 

● Prediction

prediction 또한 간단하다. 저장된 모든 train 데이터와 비교하여 가장 유사한 k개의 train 데이터를 찾으면 된다.

KNN의 단점

다만 위와 같은 동작때문에 KNN은 매우 비효율적인 알고리즘이다.

 

일반적으로 train이 오래 걸리는 것은 크게 문제가 안되지만, 새로운 데이터에 대해서는 빠르게 예측이 가능해야 한다. 그러나 KNN은 그 반대로, prediction 시간이 train data의 수에 따라 결정된다. 

 

● 시각화

KNN 시각화

KNN 알고리즘을 시각화한 자료이다.

각각의 포인트가 train 데이터이고, 포인트의 색이 label이다. 

색으로 칠해진 영역은 해당 영역에 데이터가 있다고 가정하면, 어떤 label로 분류되는지 나타낸다고 이해하면 된다.

(흰색은 동점인 경우라고 한다.)

 

● Hyperparemeter

KNN에서 Hyperparameters는 다음과 같다.

 K 값과 어떤 타입의 distance(L1 or L2)를 사용할지 결정해줘야 한다.

 

train/validation/test data set

Hyperparemeters의 경우 전체 데이터를 train, validation, test로 나눠서 결정한다.

이는 KNN 뿐만 아니라 모든 머신러닝, AI 모델에 대해 적용이 가능하다.

train데이터를 통해 학습하고, validation set에 대해 좋은 성능을 보이는 hyperparameter를 결정하면 된다.

test set은 최종 모델의 성능을 파악하는데 사용된다. 

 

Cross Validation

위와 같은 cross validation 기법도 있다. 

 

● Performace

결론적으로, KNN은 이미지 데이터에 대해서 사용되지 않는다.

KNN의 단점

그 이유는 다음과 같다.

1. very slow (test data의 수에 의해 결정)

2. pixel간의 distance 는 많은 정보를 포함하지 않음.

 

1번 이유의 경우 앞서 설명했고, 2번의 경우 슬라이드의 그림을 통해 이해할 수 있다.

original 이미지 우측 3개의 이미지가 모두 같은 distance를 갖는다. 

 

※ 일종의 noize가 끼었음에도 불구하고 하나로 인식하니까 좋은게 아니냐는 질문이 있었다.

-> answer : 위 그림은 하나의 예시로, 실제 전혀 다른 형상이더라도 distance가 같을 수 있다.

 

 

<Linear Classification>

동작

하나의 Weight(행렬)을 통해 prediction을 수행하는 방법이다.

즉, input과 Weight의 선형식으로 prediction을 수행한다.

Linear Classifier

하나의 이미지에 대해서 Linear Classification을 진행하는 예시이다. 

32x32x3 크기의 이미지가 주어지면 3072(32*32*7) 크기의 vector로 만들어서 W와 곱한다.

Weight의 크기는 (input data의 크기 x class의 수)이다.

 

Wx의 결과는 10x1 벡터가 되고, 값이 가장 큰 class를 선택하면 된다.

Linear Classifiaction 예시

위 예시를 확인하며 더 쉽게 이해할 수 있다.

 

● 의미

학습된 Weight 출력 결과

위 이미지는 CIFAR-10 데이터에 대해 학습시킨 Weight를 출력해본 결과이다. 

 

각 label과 유사한 흐릿한 이미지를 확인할 수 있는데, 이것이 Linear Classifer의 동작을 직관적으로 잘 나타낸다.

 

잘 train 된다면 각 Weight는 일종의 템플릿으로, 해당 label의 데이터들과 일반적으로 유사한 vector가 된다고 이해할 수 있겠다.

여기서 유사한 vector가 된다는 의미는 내적값이 크다는 것을 의미한다.

예를 들어, car class의 데이터가 주어지면 car에대한 template vector와 가장 유사하기 때문에 그 내적값이 가장 클 것이고, 해당 class로 선택이 될 것이다.

 

Linear Classifer의 classfication boundary

Linear Classifier는 그 이름대로, Linear한 boundary로 데이터를 classifiaction한다.

 

따라서 XOR과 같은 문제를 해결할 수 없는 한계가 잇다.

 

 

Linear Classifier의 loss function이나 optimization(train)에 대해서는 다음 장에서 다룬다.

'Computer Vision > cs231n' 카테고리의 다른 글

[Lec 4] Backpropagation and Neural Network  (0) 2021.12.30
[Assignment1 - Q3] Softmax  (0) 2021.12.30
[Assignment1 - Q2] SVM  (0) 2021.12.30
[Lec 3] Loss Functions and Optimization  (0) 2021.12.30
[Assignment 1 - Q1] KNN  (0) 2021.12.29


※ 본 내용은 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개의 데이터셋으로 나누고, 각 데이터셋에 대해 서로 다른 컴퓨터가 누적합을 계산하고 다시 그 결과들을 합치는 식으로 병렬화를 할 수 있다.

+ Recent posts