핵심요약
심층신경망(Deep Neural Network)은 인공신경망(Aritificial Neural Network)과 동일한 구조와 동작 방식을 갖고 있다. 심층신경망은 단지 인공신경망에서 은닉층(Hidden Layer)의 깊이가 깊어진 형태를 말한다.
신경망의 발전계기
인공신경망의 기본 아이디어가 나온 것은 1950년대이고 이후에 발전을 거듭하지만 불과 2000년대 중반까지만 해도 사람들로 하여금 그다지 알려지고 활용되던 기술이 아니었다. 여기에는 몇 가지 이유가 있는데 하나는 당시에 GPU와 같은 수많은 가중치를 빠르게 계산할 수 있는 자원(Resource)이 충분치 않았고, 사람이 원하는 수준으로 성능을 올리기 위해서 필요했던 충분한 양의 데이터(Data)를 모으기에도 인프라가 부족했다. 또한 모델의 성능향상과 효율성의 측면에서 획기적인 도움을 주었던 역전파(Backpropagation) 및 최적화(Optimization)와 같은 효율적인 알고리즘(Algorithm)이 없었기 때문이었다.
딥러닝(Deep Learning)
반도체 기술의 발전으로 GPU 자원이 상용화되고, 정보화 사회를 거치며 충분한 데이터를 모을 수 있는 인프라가 마련되었으며 학자들이 수학적 기법을 이용하여 다양한 학습 알고리즘을 개발하면서 이러한 인공신경망의 문제점을 극복할 수 있었다. 그리고 마침내 오랫동안 부정적이었던 이미지를 가진 인공신경망(Artificial Neural Network)이라는 용어를 대체할 '깊이 학습한다'는 의미를 가진 딥러닝(Deep Learning)이라는 용어를 만들게 되었다.
문제정의
인공신경망 라이브러리 텐서플로우(Tensorfolw)의 케라스(Keras)를 이용하여 신경망 모델을 구성하여 실습을 진행한다. 숫자 데이터(MNIST)를 인공신경망에 학습시켜 임의의 숫자 데이터에 대해 얼마나 예측을 잘하는지 확인하는 방법으로 일반적인 기계학습의 학습(Leanring)-평가(Evaluation) 과정과 동일하다.
DATASET
MNIST(Modified National Institute Standard and Technology)-미국표준기술연구소에서 제공하는 손으로 쓴 숫자 데이터베이스이다. 해상도는 28*28 픽셀(pixel)이고 흑색(grayscale)로 한 픽셀당 0~255 사이의 값을 가진다.
1) 신경망 구성 및 기계학습에 필요한 라이브러리 추가
import numpy as np # 수치연산 라이브러리
import pandas as pd # 데이터분석 툴
import matplotlib.pyplot as plt # 그래프
import mnist # 데이터셋
import tensorflow
from tensorflow.python.client import device_lib
import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, BatchNormalization
from keras.losses import categorical_crossentropy # 교차엔트로피 # 손실함수
from keras.optimazers import SGD, Adagrad, Adam # (확률적) 경사하강, #2015+ 최적화 알고리즘
from keras.utils.multi_gpu_utils import multi_gpu_model
from keras.backend import tensorflow_backend as K
2) 데이터 불러오기 및 데이터 구조 확인
- flatten : 1차원 배열로 입력하기 위해 사용하는 인자
- normalize : 정규화
(X_train, y_train), (X_test, y_test) = mnist.load.mnist(flatten=True, normalize=True)
X_train.shape, X_test.shape
y_train.shape, y_test.shape
3) 정답값(Labeling)을 원-핫 인코딩(One-Hot Encoding) 방식으로 변환
Y_train = pd.get_dummies(y_train).value # one-hot encoding
Y_train
4) 인공신경망 모델을 구성
model = Sequential()
model.add(Dense(50, activation = 'relu', input_shape=(785,)))
model.add(BatchNormalization())
model.add(Dense(100, activation = 'relu'))
model.add(BatchNormalization())
model.add(Dense(10, activation = 'softmax', kernel_initializer = 'zeros'))
model.complie(loss=categorical_crossentropy, optimizer=Adam())
model.summary()
원-핫 인코딩(One-Hot Encoding)
데이터를 표현하는 방식 중 하나로 수많은 0과 하나의 1로 주어진 데이터를 표현하는 방식이다. 가령 0~9까지 숫자를 표현하는 정보라면 다음과 같이 나타낼 수 있다.
1 -> [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
신경망에서는 분류 문제에서 교차 엔트로피 오차(Cross Entropy Error)를 이용하여 손실을 구하기 때문에 정답값(Labeling)을 원-핫 인코딩으로 변환하는 작업이 필요하다.
5) 학습데이터를 이용한 인공신경망 모델 학습
훈련결과 = model.fit(X_train, Y_train, batch_size=128, epochs=50, validation_split=0.2)
- Batch_size : 한 번 학습할 때 사용하는 데이터 세트의 크기를 말한다(학습데이터의 크기가 60,000개인데 이를 한꺼번에 학습을 시킬 경우 비효율적인 자원활용으로 계산속도가 늦어진다.)
- Epochs : 전체 데이터 세트가 몇 번 반복 학습하는지를 나타낸다.
- Validation_split : 학습데이터 중 검증용으로 얼마나 할당할 것인지 설정한다.
약 3~4번까지 학습데이터의 손실과 검증데이터의 손실이 비슷하게 떨어지다가 그 후에는 검증과 학습데이터의 손실값이 어느 정도 차이를 보인다. 이는 약 3~4번 학습시켰을 때 학습데이터와 시험데이터 사이에 차이가 가장 적음을 알 수 있다.
6) 모델 평가
분류정확도 = lambda y, y_pred: np.mean(y==y.pred)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
y_train_pred = np.argmax(y_train_pred, axis=1)
y_test_pred = np.argmax(y_test_pred, axis=1)
훈련점수 = 분류정확도(y_train, y_train_pred)
시험점수 = 분류정확도(y_test, t_test_pred)
print(f'훈련점수:(훈련점수), 시험점수:(시험점수)')
훈련점수 : 0.99185, 시험점수 : 0.9715
학습 데이터 : 60,000개, 시험 데이터 : 10,000개2
즉 인공신경망 모델이 60,000개의 데이터를 학습했더니 학습데이터 60,000개 중에 약 59,611개를 정답으로 맞추었고, 시험데이터는 10,000개 중에 9,715개를 맞추었다는 의미이다.
함께 보면 좋은 글
[빅데이터분석기사] 합성곱신경망(Convolutional Neural Network)
[빅데이터분석기사] 순환신경망(Recurrent Neural Network)
[빅데이터분석기사] 연관규칙분석(Association Rule Analysis)
[빅데이터분석기사] 교차분석(Cross-tabulation Analysis)
[빅데이터분석기사] 분산분석(Analysis of Variance, ANOVA)
'빅데이터분석기사 > 개념' 카테고리의 다른 글
[빅데이터분석기사] 순환신경망(Recurrent Neural Network) (0) | 2022.06.16 |
---|---|
[빅데이터분석기사] 합성곱신경망(Convolutional Neural Network) (0) | 2022.06.15 |
[빅데이터분석기사] 인공신경망(Artificial Neural Network) (0) | 2022.06.09 |
[빅데이터분석기사] 군집분석(Clustering Analysis) (0) | 2022.06.08 |
[빅데이터분석기사] 서포트벡터머신(SVM) (0) | 2022.06.05 |