본문 바로가기
AI

[ai-1team] 3. Application & Tips

by duckss 2020. 11. 21.

안녕하세요! 세 번째 주자입니다 :))

 

이번 주는 지난 시간까지 배웠던, linear regression, logistic regression, softmax 등의 이론을 실제 필드에서 적용할 때의 tip과 응용 방법(application)에 대한 내용인 Application & Tips에 대해 공부해보겠습니다.

 

Learning rate

 

데이터를 통해서 모델링을 만들어갈 때 모델링은 굉장히 중요한데요.

Learning rateGradient(기울기)를 통해서 최적의 학습 모델값을 찾을 수 있습니다.

 

다음과 같은 최소화 과정을 반복함으로써 cost의 최솟값을 구하는 것을 지난 시간에 배웠습니다.

 

Learning rate의 설정값에 따라 다양한 값이 나오게 되는데요.

그렇다면 Learning rate는 어떻게 설정해야 할까요?

 

위의 그림과 같이 Learning rate를 얼마나 잘 설정하느냐에 따라 Cost값이 점점 떨어지거나 오히려 Cost값이 올라가는 경우도 볼 수 있습니다.

 

 

Traing LogLoss값을 통해서도 확인해볼 수 있습니다. 위와 같이 Loss값이 점점 떨어지면 Good learning rate, 반대로 Loss값이 올라가면 Learning rate값을 잘못 설정했다고 볼 수 있습니다.

 

적절한 Learning rate값을 설정했다고 하더라도 학습 과정에서 learning rate를 적절히 조절하는 것이 중요한데요. 이를 Learning rate Decay라고 합니다.

 

 

파란색 선과 같이 학습이 안될 때 learning rate 값을 줄여서 해결할 수 있습니다.

 

마찬가지로 Log값을 통해서 확인해보면 Learning rate값을 줄여서 Loss값이 감소하는 것을 알 수 있습니다.

 

 

지금까지 모델을 만드는 데에 중요한 hypo parameterlearning rate에 대해서 살펴보았는데요. 이어서 data 자체를 어떻게 전처리를 하는가에 관한 data preprocessing에 관해 공부해보겠습니다.

 

 

 

Data preprocessing

 

위의 표를 보면 실제 데이터들은 밑의 빨간색 부분이 몰려있을 수 있습니다. 따라서 의미없는 데이터(파란색, Noisy Data)를 제외한 실제 데이터 부분(빨간색)만을 나타내려고 하는데요.

 

이것을 Standardization(표준화), Normalization(정규화)의 두 가지 기법으로 나타낼 수 있습니다.

 

 

Overfitting

 

학습이 반복될수록 모델은 점점 가설에 맞춰져 가면서 Accuracy가 올라가게 됩니다.

실제 모델을 만드는 과정에서 Validation, 즉 평가를 하게 되는데, Test 데이터에서는 잘 만들어지지만 새로운 데이터를 테스트하게 되면 오히려 정확도가 떨어지는 현상이 발생합니다.

이것을 Overfitting이라고 합니다.

밑의 그림과 같이 학습이 덜 된 상태를 underfit, 학습이 너무 많이 돼서, 학습 데이터에만 맞게 모델이 만들어지는 경우를 overfit이라고 합니다.

 

 

이러한 Overfitting을 해결하기 위한 방법으로는

첫 번째로 feature를 설정하는 방법이 있습니다. 그럼 feature를 어떻게 설정해야 할까요?

 

여기서는 3가지의 방법을 제시하고 있습니다.

 

1. 더 많은 데이터를 가져오는 방법

2. feature의 수를 줄이는 방법 차원을 줄임으로써 각각의 속성이 가진 의미를 분명히 함

3. feature의 수를 증가시키는 방법 hypothesis가 너무 단순할 때(의미가 없을 때) 사용함

 

 

두 번째, Regularization(정규화)입니다.

loss값에 λ와 같은 term을 줌으로써 정규화할 수 있습니다.

 

 

Linear regression을 예로 들어서 보겠습니다. 밑의 빨간색 부분과 같이 term을 줌으로써 모델을 정규화하는 효과를 줄 수 있습니다.

 

 

 

Tensorflow code

 

tensorflow code로 구현해보겠습니다.

코드에 대한 결과값입니다.

 

 

 

이제 실제 데이터를 어떻게 구성하는지에 대한 방법과 학습에 사용되는 여러 가지 사례에 대해서 알아봅시다. (Data & Learning)

 

Data sets

 

먼저 데이터 구성입니다. 모델을 만들 때 학습을 하면서 평가라는 과정을 거치게 되는데요.

위의 왼쪽 데이터를 보시면 학습 데이터와 평가 데이터가 다른 데이터라 제대로 된 평가가 불가능합니다. 따라서 오른쪽과 같은 데이터를 좋은 데이터라고 하는데요.

 

 

그러면 데이터를 잘 구성만 하면 되는 걸까요? 데이터 구성 후에 모델의 성능을 올리는 과정이 필요한데요. 동일의 데이터를 가지고 계속 반복적으로 테스트하여 99% 정확도를 가지는 모델을 만드는 것에 목적을 두고 있습니다.

 

 

이것을 Tensorflow로 구현한 코드입니다.

 

 

이제 어느 정도의 모델이 선택된 후에는 새로운 데이터를 테스트해봐야겠죠?

다음의 Tensorflow code를 통해 softmax를 통해 나온 값과 y값이 실제로 같은지 비교를 해봅니다.

 

 

 

마지막으로 Anomaly detection(이상 감지)입니다. 위의 그림과 같이 건강한 데이터만을 가지고 모델을 만든 후 이상 데이터를 넣었을 때 잘 감지할 수 있게 만드는 방법입니다.

 

 

Learning

 

다음으로 학습 방법(Learning)에 대해 알아봅시다.

 

먼저 Online일 때와 Batch(Offline)일 때 학습 방법의 차이입니다.

 

 

Fine Tuning/Feature Extraction 학습 방법입니다.

Fine Tuning은 기존의 Weight값을 미세하게 조절해서 새로운 데이터가 들어왔을 때 잘 구분할 수 있게 하는 방법이구요.

Feature Extraction은 기존의 모델은 건드리지 않고 새로운 task에 대해서만 학습을 시켜서 정확도를 높이는 방법입니다.

 

 

결국 이러한 LearningEfficient Models 즉 효율적인 모델을 만드는 것에 목적을 두고 있습니다.

여기서는 Efficient Model을 만드는 방법으로 1*1 convolutions를 제시합니다.

그림과 같이 각 channel별로 연산한 것을 1*1 convolution을 통해 차원을 줄임으로써 weightinference time을 줄일 수 있습니다.

 

이제부터는 코드로 공부해봅시다!

 

Fashion MNIST-Image Classification

 

먼저 의류에 많이 사용되는 Fashion MNIST-Image Classification입니다.

 

 

IMDB-Text Classification

 

실제 영화를 봤을 때 영화에 대한 평을 잘 분류하기 위한 모델인 IMDB(Internet Movie DataBase)의 코드입니다.

 

중간에 KeyError가 발생했는데... 해결을 못했습니다 ㅠㅠ

그렇지만 결과는 정상적으로 나왔습니다!

 

 

Deep Learning

 

이제 드디어 딥러닝입니다!

 

이번 시간에는 딥러닝이 나오기까지의 과정과 기본 개념에 대해서 공부해보겠습니다

 

뇌의 연결된 뉴런이라고 불리는 unit은 생각보다 동작 과정이 단순합니다.

어떤 input(x)이 있고 이것을 전해주는 길이(w)에 길이에 따라 신호의 양이 달라집니다. 이러한 신호들이 합쳐지고 통과가 되면서 어떤 값(bias)이(bias) 더해지면서 그다음으로 전달이 됩니다.

이 값이 어떤 값 이상이 되면 활성화가 되고 아니면 활성화가 되지 않는 구조입니다.

이러한 메커니즘을 수학적으로 나타낸 것이 밑의 그림과 같습니다.

 

이러한 것을 밑의 그림과 같이 연결한다면 여러 개의 출력을 동시에 낼 수 있는 형태의 어떤 기계가 될 수 있습니다.

 

 

 

여기서 문제가 발생합니다. ANDOR의 경우 입력값에 대한 출력이 linear한 구분이 가능했지만 XOR의 형태의 로직은 linear한 구분이 안됐던 것이죠. XOR의 경우 여러 개를 합치면(MLP : multilayer neural nets) 가능할 수는 있지만 각각의 weightbias를 학습을 시킬 수 없었습니다.

 

XOR의 경우 여러 개를 합치면(MLP : multilayer neural nets) 가능하지만 각각의 weightbias를 학습을 시킬 수 없었습니다.

 

여기서 Backpropagation이라는 알고리즘이 나옵니다. 에러를 구해서 반대로 Weightbias를 바꿔서 이 문제를 해결했습니다.

 

다른 방법으로써 input값을 부분 부분 잘라서 나중에 합치는 방법인 Convolutional Neural Network라는 알고리즘도 나옵니다.

 

하지만 여기서 Backpropagation의 문제점이 나옵니다. 최소 1010여 개 이상의 복잡한 layer에서는 작동을 하지 않았던 것이죠. error의 전달이 layer를 지날수록 약해진다는 문제점이었습니다.

이러한 문제점은 2006년에 해결됩니다. 많은 layer를 가진 neural networks는 사실 초깃값 설정만 잘해준다면 학습이 가능하다는 것이었습니다. 이때 우리가 현재 사용하고 있는 Deep learning이라는 용어가 rebranding됩니다.

 

 

이렇게 이번 주 포스팅을 마치도록 하겠습니다.

감사합니다!