'모두의 딥러닝' 개정 2판으로 공부한 내용을 정리한 글입니다.
# 딥러닝 시작을 위한 준비 운동
# 1장
딥러닝은 머신러닝에 포함되고 머신러닝은 인공지능에 포함됩니다. 정리하면 인공지능>머신러닝>딥러닝의 포함관계를 가지며 이는 더욱 더 효과적인 알고리즘을 찾기 위한 과정이죠.
# 1.1 딥러닝 실행 준비 사항
딥러닝을 실행하기 위해서는 데이터, 컴퓨터, 프로그램 총 세 요소가 필요합니다.
1. 데이터
- 지도학습과 비지도학습
데이터에는 라벨이라는 이름표가 있는 것이 있고 없는 것이 있는데, 라벨이 있는 데이터를 이용해 그 라벨을 맞히는 것을 지도학습이라고 합니다. 그리고 라벨이 없는 데이터를 이용하는 것을 비지도학습(ex. GAN, 오토인코더)이라고 합니다.
2. 컴퓨터
- CPU vs. GPU
딥러닝을 실행하는 환경으로는 CPU와 GPU가 있습니다. 일반적인 사용자들이 사용하는 것은 일반 CPU 컴퓨터이지만 고속 그래픽 처리에 특화된 전용 프로세서인 GPU 컴퓨터에서 실행하면 데이터 용량이 큰 작업을 수행할 수 있습니다.
3. 프로그램
프로그래밍을 하면 됩니다.
그럼 이제 딥러닝 작업 환경을 조성해보겠습니다.
# 1.2 딥러닝 작업 환경 만들기
딥러닝 작업은 크게 두 환경에서 할 수 있습니다. 하나는 로컬, 다른 하나는 클라우드 노트북인 구글 코랩을 사용하는 것입니다. 구글 코랩(google colab)을 통해 파이썬 개발에 사용되는 주피터 노트북(Jupyter Notebook) 환경을 구글 클라우드에서 작업할 수 있습니다. 클라우드 환경은 임시로 서버를 빌려서 작업하는 것이기 때문에 원하는 버전의 패키지를 매번 설치해야 하고 작업 중인 데이터를 잃어버릴 수 있다는 점에서 단점이 있기 때문에 그 점은 유의하고 사용해야 합니다.
이제 딥러닝을 돌릴 코드, 즉 프로그램을 만들고 실행시켜야 합니다. 주로 파이썬 언어를 사용하기 때문에 파이썬을 설치해야 하는데요, 이때 파이썬만 설치하기 보다는 파이썬이 포함된 통합 패키지를 설치하는 것이 좋습니다. 대표적인 통합 패키지로는 아나콘다(Anaconda)가 있습니다. 아나콘다는 여러 패키지를 모아놓은 파이썬 가상환경이자 개발 플랫폼으로 pandas, scipy, jupyter, numpy 등 자주 사용되는 여러 패키지를 모아둔 것입니다.
가상환경은 프로젝트 별로 사용하는 파이썬 패키지의 버전이 다르기 때문에 이를 일일히 관리하기 어려워서, 이 버전 관리를 용이하게 해주는 폴더입니다. 아나콘다를 처음 사용해본 프로젝트에 대한 포스트를 링크해둘테니 참고하세요!
2021.08.06 - [프로젝트 기록/교내 프로젝트] - [python week 일지] #4. 새로운 것 공부 + 웹 컴포넌트 작성
pandas, scipy, jupyter, numpy, python은 아나콘다를 설치하는 것과 동시에 설치됩니다. 텐서플로, 케라스 패키지는 기본으로 포함되어 있지 않으므로 추가로 설치해줘야합니다.
아나콘다를 설치했다면 작업환경을 만들어줘야죠. 작업환경은 폴더라고 이해하면 됩니다.
Anaconda Prompt를 윈도우에 검색하여 실행합니다.
창이 열리면 아래와 같이 명령어를 입력해줍니다.
conda create -n modip python=3.7
버전 3.7의 파이썬을 사용하고 'modip'을 이름으로 하는 작업환경을 만들라는 의미입니다.
만든 작업 환경에 들어가려면 아래와 같이 입력합니다.
conda activate modip
'modip'이라는 이름을 가진 작업환경을 활성화한다는 의미입니다. 그러면 기존에 명령어 앞에 붙었던 (base)가 (modip)으로 바뀌게 됩니다.
그러면 독립된 작업환경인 modip으로 옮겨왔기 때문에 해당 작업에 필요한 소프트웨어를 설치하고 작업을 시작하면 됩니다.
우선 앞서 말했던 텐서플로와 케라스를 깔아줘야 합니다. 아까와 동일하게 Anaconda Prompt에 명령어를 입력합니다.
pip install tensorflow==2.0.0
pip install keras==2.3
그러면 텐서플로와 케라스가 modip에 설치됩니다.
제대로 설치가 되었는지 확인하고 싶다면 아래와 같이 명령어를 입력하면 됩니다.
python
import tensorflow as tf
print(tf.__version__)
# 2.0.0
import keras
# Using TensorFlow backend.
exit()
python 모드에 진입하여 명령어를 입력했을 때 각각 주석된 부분과 같이 출력되면 잘 설치된 것입니다. exit()로 python 모드를 빠져나오면 됩니다.
그럼 이제 모든 설치는 끝났습니다. 딥러닝을 실행해봅시다.
딥러닝을 만들고 실행하는 툴은 주로 주피터 노트북과 파이참입니다. 아까 아나콘다를 설치하면서 주피터 노트북이 함께 설치되었기 때문에 주피터 노트북을 이용합니다.
주피터 노트북은 대화형이라서 바로 입력한 코드의 출력 결과를 알 수 있고 웹 브라우저에서 구동되므로 가볍다 점에서 좋습니다. anaconda prompt나 anaconda navigator를 이용해서 주피터 노트북을 실행할 수 있습니다. prompt로 실행하고 싶다면 아래와 같이 명령어를 입력하면 됩니다.
pip install jupyter
jupyter notebook
prompt로 실행하면 prompt 창에 계속해서 아래 사진처럼 뜨기 때문에 anaconda prompt을 이용할 수 없기 때문에 주의해야 합니다. (ctrl+c를 누르면 빠져나올 수 있습니다.)
anaconda navigator를 통해서 주피터 노트북을 통해 실행하면 따로 가상환경을 설정해야 합니다. 그렇지 않으면 아까 만든 modip이라는 가상환경을 이용하지 못하고, 당연히 깔아두었던 패키지도 사용하지 못하게 됩니다.
위 설명의 이해를 돕기 위해 예를 가져와보겠습니다.
prompt를 이용해 가상환경 내에서 주피터 노트북을 실행하는 경우 아래와 같이 설치해둔 tensorflow와 keras 모델이 잘 돌아가는 것이 보입니다.
반면에 가상환경을 설정하지 않고 anaconda navigator를 이용하면 패키지가 설치되어 있지 않은 것을 알 수 있습니다.
사실 이 문제는 간단하게 해결 가능한데요, 바로 anaconda navigator의 home에서 작업환경을 설정해주는 것입니다.
applications on 뒤를 원하는 작업환경인 modip으로 변경해주면 됩니다.
위와 같이 고쳐주고 주피터 노트북을 실행하면 문제가 발생하지 않습니다.
참고로 둘 다 동시에 실행하는 것도 가능합니다. url의 localhost: 뒷 번호가 다르게 부여되기 때문에 상관 없습니다.
# 1.3 실습
코드는 이렇습니다.
# -*- coding: utf-8 -*-
# 코드 내부에 한글을 사용가능 하게 해주는 부분입니다.
# 딥러닝을 구동하는 데 필요한 케라스 함수를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 필요한 라이브러리를 불러옵니다.
import numpy as np
import tensorflow as tf
# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)
# 준비된 수술 환자 데이터를 불러들입니다.
Data_set = np.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=",")
# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장합니다.
X = Data_set[:,0:17]
Y = Data_set[:,17]
# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 딥러닝을 실행합니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=10)
위 코드를 실행하면 아래의 출력을 얻습니다.
loss와 accuracy가 뭘까요?
손실값인 loss는 예측에서 빗나간 정도를 의미합니다. 정확도인 accuracy는 예측이 성공할 확률을 의미합니다. accuracy가 0.8106이면 81.06%의 예측 성공률을 가진 것이고 쉽게 말하면 새로운 값을 넣을 시에 81%로 정답을 도출해 낸다는 것이죠. 이 예측 성공률을 높이는 과정을 최적화 과정이라고 합니다.
# 1.4 딥러닝 프로그램의 골격
코드는 데이터를 다루는 부분과 딥러닝을 실행하는 부분으로 구성됩니다.
우선 데이터를 다루는 부분에서는 데이터를 분석하고 입력합니다.
numpy 라이브러리를 불러오고 아래의 코드를 이용해 파일을 임시 저장소인 Data_set에 저장합니다.
import numpy as np
Data_set=np.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=",")
delimiter는 구분 문자로, 값을 구분하는 표식입니다.
ThoraricSurgery 파일을 엑셀로 열어보면 표로 나타나지만, 주피터 노트북에서 열면 라인과 쉼표(,)로 나타납니다.
이 데이터는 총 470행, 18열로 이루어져 있습니다. 470명의 환자에 대한 18개의 정보가 나열되어 있는 것이죠.
앞의 17개는 환자의 상태를, 마지막 18번째 정보는 환자의 생존 여부를 나타냅니다. 이런 데이터의 경우 1번째부터 17번째까지의 정보를 분석하여 18번째 정보를 예측해내야 합니다. 이때 1번째에서 17번째에 해당하는 데이터를 속성(attribute)이라고 하고 정답에 해당하는 18번째 데이터를 클래스(class)라고 합니다.
속성과 클래스를 따로 추출하여 각각의 데이터셋을 만드는 것이 딥러닝 가공의 첫 단계입니다. 아래의 코드로 데이터셋에 저장할 수 있습니다.
X = Data_set[:,0:17] # 속성 데이터셋
Y = Data_set[:,17] # 클래스 데이터셋
데이터는 정리가 되었으니 딥러닝을 실행하는 부분을 살펴보겠습니다.
모두의 딥러닝 교재에서는
딥러닝 프로젝트를 '여행'으로 비유하면 텐서플로는 목적지가지 빠르게 이동시켜주는 '비행기', 케라스는 비행기의 이륙 및 정확한 지점까지의 도착을 책임지는 '파일럿'으로 비유하고 있습니다.
텐서플로와 케라스 라이브러리를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
케라스 라이브러리의 함수인 Sequential()과 Dense()를 가져왔습니다.
딥러닝의 구조를 간략하게 살펴보면, 딥러닝은 여러 층이 쌓여서 예측이라는 결과를 도출해냅니다.
Sequential 함수는 딥러닝의 구조를 이렇게 한 층 한 층 올릴 수 있게 해줍니다. model.add() 함수로 필요한 층을 차례로 추가하면 됩니다. 아래의 코드로 두 개의 층을 쌓아올릴 수 있습니다.
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1,activation='sigmoid'))
위 코드에 포함된 Dense() 함수는 해당하는 층이 어떤 특성을 가질지에 대한 옵션을 결정하는 역할을 합니다.
이렇게 딥러닝의 구조와 층별 옵션을 정한 후에 compile() 함수를 이용해 이를 실행합니다.
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X,Y, epochs=30, batch_size=10)
compile() 함수와 앞서 쓴 코드에 다양한 키워드가 등장하는데 이는 딥러닝의 원리를 알면 알 수 있습니다. 간단히 설명해보겠습니다.
우선 'loss'는 한 번 신경망이 실행될 때마다 오차 값을 추적하는 함수입니다.
'optimizer'는 오차를 어떻게 줄여 나갈지 정하는 함수입니다.
'activation'은 다음 층으로 어떻게 값을 넘길지 결정하는 부분입니다. relu()와 sigmoid() 함수가 가장 많이 이용됩니다.
더욱 자세한 내용은 뒤에서 다룰 예정이니 넘어가겠습니다.
딥러닝 프로그램의 기본 구조까지 공부해보았으니 슬슬 이 딥러닝이 대체 어떻게 돌아가는 건지 궁금하실 듯합니다.
딥러닝이 어떤 원리로 작동되고, 딥러닝 내부에서 어떤 방식으로 결과를 얻어내는 것인지에 대해 알지 못하면 딥러닝의 구조를 알아도 사용할 수가 없겠죠?
다음에는 이에 대해 다루겠습니다.
# 2장: 딥러닝을 위한 기초 수학
위에서 딥러닝이 어떤 것인지 감을 좀 잡았죠? 그리고 이번에는 딥러닝의 원리를 알아보자고 했습니다. 그런데 왜 뜬금없이 기초 수학을 하냐고 생각하실 수도 있겠습니다. 그렇지만 전혀 뜬금없는 것이 아닙니다. 립러닝의 기초는 수학입니다. 수학의 모든 개념을 다루기에는 시간이 모자를 것 같아서 꼭 알아야하는 토픽과 간단한 소개만 하고 넘어가겠습니다.
1. 일차 함수, 기울기와 y 절편
y = ax+b (a !=0)인 일차함수 식에서 x가 주어지고 원하는 y값이 있을 때, 적절한 a와 b 값을 찾는 것을 딥러닝의 과정으로 볼 수 있습니다.
2. 이차 함수와 최솟값
y = ax^2 (a != 0)은 포물선을 그리는 그래프로, 포물선의 최저점이 최솟값이 됩니다. 딥러닝을 실행할 때 이 최솟값을 찾아내는 것이 중요합니다. 이때 최솟값은 '최소 제곱법'으로 구할 수 있습니다.
3. 미분, 순간 변화율과 기울기
최소 제곱법을 사용하기에 충분한 조건이 없을 때 미분을 이용합니다. 이차 함수의 최솟값은 미분을 통해 구할 수 있기 때문입니다.
4. 편미분
그냥 미분과 달리 편미분은 식에 여러 가지 변수가 있을 때, 딱 하나의 변수에 대해서만 미분하고 나머지는 상수로 취급하여 미분하는 것입니다.
5. 지수와 지수 함수
변수 x가 지수 자리에 있는 경우를 말합니다.
6. 시그모이드 함수
시그모이드 함수라는 이름이 생소할 수 있습니다. 시그모이드 함수는 분모에 있는 지수 함수의 밑이 자연 상수 e인 함수입니다. 식으로 표현하면 f(x) = 1/(1+e^(-x))입니다. 그래프로 표현하면 아래와 같습니다.
식을 보면, x가 커질 때에 f는 1에 가까워지고 반대로 x가 작아질 때에 f는 0에 가까워집니다. 때문에 이 함수는 0과 1 중 하나(참과 거짓)를 고를 때 잘 사용됩니다.
7. 로그와 로그 함수
지수의 역함수입니다.
이렇게 7가지 정도만 알아두고 딥러닝에 대해 본격적으로 공부해봅시다.
'Study > AI' 카테고리의 다른 글
[모두의 딥러닝](keras) #2-2. 선형 회귀(Linear regression) 코딩으로 구현하기 (4) | 2022.01.05 |
---|---|
[모두의 딥러닝] #2-1. 선형 회귀(Linear regression) 이론 - 평균 제곱 오차(MSE), 경사 하강법(Gradient descent algorithm) (4) | 2021.12.31 |
#2.2 인공지능 개요 | 인공지능 (0) | 2021.11.09 |
#2.1 강의 OT | 인공지능 (0) | 2021.11.09 |
#1. 인공지능 입문 | 창의융합노마드 (0) | 2021.11.09 |