딥러닝 바로 써먹기 Day 1


데이터 분석과 이미지처리에 딥러닝 바로 써먹기라는 수업을 듣고 수업 내용을 요약한 것이다.

이 수업은 딥러닝 모델을 만드는데 Keras를 사용하여 딥러닝 모델을 만들었다.

PytorchKeras 모두 중요하다고 말씀해주셨다.

0. 이 수업의 목표

  • ‘Keras’ 이해하기
  • 딥러닝 모델이 어떻게 만들어지는지 알아보기
  • 문제를 어떻게 정의하는지에 따라 어떻게 모델이 달라지는지 알아보기

1. 문제정의를 먼저 해야한다.

인공지능으로 모든 것을 할 수 있을 것 같지만, 사실 그렇지 않다.

인공지능으로 문제를 풀 수 있게끔 문제를 정의해 주어야 한다.

아래의 예시를 들어 살펴보자.

picture1

이 문제의 정답은 무엇인가?

답은 바로 4번이다.

그렇다면 어떻게 이 문제를 풀었는가? 만약 인공지능이 이 문제를 풀게 된다면 어떻게 문제를 풀 수 있을까?

인공지능은 스스로 이 문제를 풀기 위해서 각 동물마다 특징을 스스로 찾는 과정을 거친다.

그 때 특징을 피쳐(Feature) 라고 한다. 각각 동물 하나하나를 데이터(Data) 이라고 한다.

그리고 이렇게 인공지능이 스스로 답을 찾는 과정을 비지도학습(Unsupervised learning) 이라고 한다.

다음 그림을 보자.

image

여기서는 위에 나와있는 그림과 다르게 동물 옆에 각각 ‘mammal’ , ‘reptile’등 명시를 해 주었다.

여기서 ‘mammal’, ‘reptile’ 것들을 라벨(Label) 이라고 한다.

여기서는 동물(Data) 하나하나와 이름(Label)이 짝지어 있다.

이 둘을 합쳐 샘플(Sample) 이라고 한다.

이 문제에서 정답을 찾을 때에는 라벨을 보고 판단한다.

이렇게 인공지능이 답을 찾는 과정을 지도학습(Supervised learning) 이라고 한다.

또 하나의 예시를 보자.

image

다음의 그림은 이름(Label) 대신 정답에 대한 상, 벌점이 동물(Data) 옆에 써있다. 상점을 많이 받는 방식으로 action을 취한다.

인공지능이 시뮬레이션을 돌리면서 상, 벌점에 대한 방법으로 정답을 찾는 과정을 강화학습(Reinforcement learning) 이라고 한다.

2. 정리하기

  • 지도학습에서 Sample = Data + Label
  • 비지도학습에서 Sample = Data
  • Sample을 많이 모아놓은 것은 DataSet
  • 데이터 샘플마다 라벨을 만드는 과정을 Anotation 이라고 한다.

crowdworks라는 홈페이지가 있다.

Supervised learning하기 위한 데이터셋을 모으는 작업을 모아놓은 사이트이다.

이 사이트에서 데이터셋을 취득하며 데이터셋에 대한 감을 익히는 것도 중요하다고 말씀하셨다.

시간 날 때 한번 들어가 보자.

3. 딥러닝 모델 설계 및 사용하기

본격적으로 딥러닝 모델을 설계하기 위해서는 다음과 같은 과정을 거쳐야 한다.

  1. 데이터셋(DataSet) 준비하기
  2. 모델 구성하기
  3. 모델 엮기
  4. 모델 학습시키기
  5. 모델 사용하기

이 강좌에서는 모델을 레고에 비유하여 쉽게 설명을 해주었다.

image

이렇게 귀여운 레고를 모델 이라고 하자.

모델을 사용하고 싶을 때는

from keras.models import Sequential
model = Sequential()  #모델을 담기위한 바구니라고 생각하자.

모델이 어떻게 이루어져 있는지 살펴보자.

image

모델은 크게 3등분으로 나눌 수 있는데, 머리 부분에 해당하는 네트워크, 몸통 부분에 해당하는 목표 함수, 다리 부분에 해당하는 최적화기 로 나눌 수 있다.

네트워크는 Architecture와 Weight로 이루어져 있다. 쌍둥이가 살아온 환경이 다르면 다르게 행동하듯이, Architecture가 같아도 Weight가 다르면 그 네트워크는 달라진다.

목표 함수는 손실 함수 또는 비용 함수라고 부르는데 손실을 줄이려고 하는 목표를 가진다. 손실이란 내가 예측했던 값과 실제 정답 값에 존재하는 오차를 손실이라고 한다.

최적화기는 네트워크를 갱신하는 역할을 한다. 즉 네트워크가 잘 데이터가 들어왔을 때 정답을 잘 예측할 수 있도록 도와주는 역할을 한다.

하나의 비유로 우리가 공부할 때 도와주는 선생님, 친구들, 부모님 등등(?)이 해당된다.

image

이렇게 구성되어 있는 레고를 하나로 합치는 과정이 있는데 이를 컴파일(Compile) 이라고 한다.

컴파일을 마치면 네트워크는 학습할 준비가 되었다는 뜻이다.

네트워크가 학습이 되는 과정은 피팅(Fitting) 이라고 한다.

4. 레이어 개념잡기

모델이 어떻게 구성되어 있는지 레고를 통해 개념을 잡았으니, 실제로 모델은 어떻게 만드는지 한번 알아보자.

Tips
  • 문제 정의를 통해 Input과 Output을 확실히 정하자.
  • 그 안에 layer를 어떻게 구성하든지 상관없다!
  • 그렇다고 많은 layer를 쓴다고 학습이 잘 되는 것은 아니다.
  • 한 층(Layer)에서 Input이 N개, Output이 M개일 경우 Weight값은 N*M이다.
  • 은닉층을 구성할 때, activation function은 ReLU로 구성한다.
  • 출력층에서 activation function은 sigmoid로 구성한다.

그림으로 알아보면 다음과 같습니다.

image

코드로 모델을 작성하면

from keras.layers import Dense

model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
짜집기 한거라, 그림과 코드의 모델이 다릅니다. ^^

모델을 완성하였다면, 피팅하는 과정을 거칩니다. 즉, 데이터로 학습을 시키는 과정입니다.

한 번에 학습시킬 때 size를 정해주기 위해서 batch_size, 데이터를 얼마나 순회할 지 정해주기 위해서 epochs 를 설정합니다.

history = model.fit(x_train, y_train, epochs=1500, batch_size=64)

모델을 평가하기 위해, DataSet중에서 train할 때 사용했던 Data들이 아닌 새로운 Data로 평가를 합니다.

scores = model.evaluate(x_test, y_test)
print("%s: %.2f%%" %(model.metrics_names[1], scores[1]*100))

5. 요약 과 참고문헌

처음 Keras를 접하고 내가 이해하는 개념들에 대해 정리를 한번 해보았다. 처음 쓰는 글이라 나름 정성스럽게 작성해 보았다. 레고라는 비유를 들어 알기 쉽게 딥러닝 모델을 접해봤다.

  • 문제를 정의하고, 어떻게 Layer를 구성할 것인가가 중요하다.
  • 네트워크, 목표 함수, 최적화기로 네트워크를 Fitting 한 다음, 실제로 test를 할 때는 네트워크 만을 가지고 test를 한다. 즉, 머리가 중요하다.
References

댓글남기기