간단 지식/Deep Learning

02. what is Deep Learning?

납작한돌맹이 2020. 10. 23. 01:45
반응형

다시 한번 인공지능 기술의 포함관계와 머신러닝의 분류에 대해 복기하고 딥러닝으로 넘어가자.


deep learning은 뉴런과 비슷한 인공신경망 방식으로 정보를 처리하는 기술이다. 딥 러닝이라는 단어의 어원은 neural network로, 인간의 신경을 모방한다는 점을 따왔다. 뉴럴 네트워크는 일종의 머신러닝 알고리즘으로, 사람의 두뇌가 작동하는 것을 모방하여 기계가 학습할 수 있게 해주는 기술이다. 그리고 이와 유사한 알고리즘에는 결정트리, 랜덤포레스트, KNN, SVM 등이 있다.

그렇다면 tensorflow는 무엇일까? 바로 라이브러리이다. 이와 유사한 라이브러리에는 PyTorch, Caffe2, Theano 등이 있다. 그리고 텐서플로우에서 사용하는 알고리즘이 뉴럴 네트워크이고 이를 통해 해결하려는 것은 지도학습 유형의 문제들인 것이다.

 

지도학습(supervised learning)은 회귀와 분류로 구분된다. 이런 지도학습을 위해 필요한 것은 4단계로 구분된다.

1. 과거의 데이터에서 원인/결과 관계를 찾아낸다.

2. 모델의 구조를 생성한다.

3. 데이터로 모델을 학습시킨다.

4. 모델을 사용하여 문제를 해결한다.

 

단계는 알겠는데, 어떻게 해야 모델을 만들고 학습시킬 수 있는지 의문이 든다. 정말 감사하게도 우리의 구글은 colaboratory라는 도구를 제공해준다. 이 도구에 대해 짧게 설명하자면 data science에서 자주 활용되는 주피터 노트북을 갖고 있지 않아도 실습을 할 수 있게 해주는 도구이다. 구글 드라이브에 들어가면 쉽게 사용할 수 있다. 

아래는 가장 기본적인 모델 생성 코드 예시이다. 언어는 파이썬이다.

 

  • 1단계, '과거의 데이터에서 원인/결과 관계를 찾아낸다'

첫째로, 라이브러리를 사용할 것임을 import로 알려야한다. 여기서 라이브러리 pandas는 표를 다루는 라이브러리로, 가장 간단한 데이터셋은 테이블 형식으로 나타내는 게 쉽기 때문에 사용한다.

import tensorflow as tf
import pandas as pd

둘째로, 데이터를 가져온다. 데이터는 많은 학부생들이 사용하듯 csv파일로 준비해서 읽어온다. 파일경로에는 csv파일이 저장돼있는 http경로를 넣어주면 된다. 구글 colaboratory는 한 블록마다 실행해서 올바른 수행을 했는지 확인할 수 있다. 그리고 데이터셋의 크기가 크면 앞에서부터 5개의 column만 가져와서 확인할 수 있는데 그게 바로 head() 이다.

파일경로 = ' '
데이터셋 = pd.read_csv(파일경로)
데이터셋.head()

 

셋째로, 표의 attribute 중에서 독립변수와 종속변수가 무엇인지 구분해준다. 각각 ' ' 안에는 독립변수 혹은 종속변수가 될 attribute명을 적어준다. 올바르게 수행되었는지 확인하기 위해 print문으로 출력해본다. 결과는 해당 변수에 대해서 (행의 개수, 열의 개수)로 순서쌍이 나올 것이다.

독립 = 데이터셋[[' ']]
종속 = 데이터셋[[' ']]
print(독립.shape, 종속.shape)

 

  • 2단계, '모델의 구조를 생성한다'

shape = [1] 의 의미는 가져온 표에서 독립변수가 하나라는 의미이고, Dense(1)는 해당 독립변수에 따른 종속변수가 하나라는 의미이다. model.compile을 함으로써 모델이 생성 완료된다. 여기서 loss는 손실을 의미하며 학습의 진척도를 알려준다. loss는 2단계를 실행한다고 알 수 있는 게 아니라 3단계에서 확인할 수 있다.

X = tf.keras.layers.Input(shape=[1])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

 

  • 3단계, '데이터로 모델을 학습시킨다.'

모델을 fit 하겠다는 것은 학습시킨다는 것과 동일한 의미이다. epochs는 전체 데이터를 몇 번 반복 학습할 것인지를, verbose는 같은 의미이지만 epochs와는 달리 출력을 끄고 학습을 시키겠다는 것이다. (1)은 10번 모델을 반복 학습시키고 그에 따른 결과를 출력할 것이다. 반면에 (2)는 verbose가 0이니 결과는 출력되지 않고 1000번 모델을 반복 학습시킬 것이다. 

model.fit(독립, 종속, epochs=10)  ----------------(1)
model.fit(독립, 종속, epochs=1000, verbose=0) ----(2)

(1)의 결과는 다음과 같다.

여기서 loss에 주목해보자. loss는 손실, 즉 실제 결과와 모델을 통한 예측의 비교 값이다. 컴퓨터가 자동으로 계산해주지만 loss를 구하는 공식은 다음과 같다.

loss의 값이 0에 가까울수록 완성된 모델이다. 그러면 위 모델을 계속 학습시켜보자.

2000번 실행하고 20번 실행한 뒤 loss는 0에 수렴한다. 모델 생성이 되었다는 의미다.

 

  • 4단계, '모델을 사용하여 문제를 해결한다'

모델을 한번 이용해보자. 독립변수가 15라면 모델을 통해 학습된 컴퓨터가 그에 따른 합당한 종속변수의 값을 출력해줄 것이다. 이 모델에서 독립변수와 종속변수는 2배 관계를 갖기 때문에 예측 결과는 30에 가깝다.

print(model.predict([[15]]))

쉬운 듯 어려운 듯 알쏭달쏭 재밌는 실습이다. 더 많은 데이터를 가지고 복잡한 모델을 구성할 수 있다면 세상 모든 것들을 쉽게 예측할 수 있을 것이다. 

 

 

(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )

반응형