딥러닝에 관한 첫 포스팅입니다. 딥러닝에 사용하는 모델 중 가장 기본적인 피드 포워드 신경망으로 인공신경망의 기본 구조에 대해 정리하도록 하겠습니다.
퍼셉트론은 인공 신경망을 이루는 가장 기본 단위입니다. 노드라고도 부르는 이 퍼셉트론은 인간의 세포에서 뉴런과 비슷한 역할을 합니다. 인간의 뉴런은 외부로부터 자극을 받아서 해당 자극에 대해 반응을 할지(1), 혹은 반응하지 않을지(0)를 결정합니다. 반응을 하기로 결정했다면 다음 뉴런에 자극을 전달하고, 자극은 받은 신체 기관은 자극에 대한 적절한 반응을 보입니다. 만약에 처음 보는 자극이라면 학습이 필요하겠죠.
인공신경망의 퍼셉트론도 뉴런과 비슷한 알고리즘으로 움직입니다. 인공신경망 모델은 신호(이미지, 숫자, 영상 등)를 받아서 적절한 Target 값을 도출하는 학습하는 지도 학습 알고리즘입니다. 그리고 그 신호를 Target까지 전달하는 역할을 퍼셉트론이 수행합니다.
간단히 정리해보겠습니다.
퍼셉트론을 여러 신호를 입력받아서 하나의 신호를 출력하는 단위라고 설명했습니다. 다시 신체에 비유하자면, 이 신호를 최종 신체 기관에 전달할지 말지 결정하는 게이트가 필요합니다. 익숙하거나 무시할만한 자극이라면 굳이 신체 기관에 전달하지 않아도 되겠죠. 인공신경망에서 이 역할을 활성화 함수가 합니다.
퍼셉트론과 퍼셉트론의 중요한 기능 중 하나인 활성화 함수를 알았으니 이제, 인공신경망의 구조에 대해 정리해보겠습니다. 인공 신경망은 퍼셉트론을 깊게 쌓은 모델을 일컫습니다. 퍼셉트론을 하나만 활용하면 단층 퍼셉트론이라고 부르고 두개 이상을 활용하면 다층 퍼셉트론이라고 부릅니다. 이 다층 퍼셉트론부터를 인공 신경망이라고 부르며, 딥러닝 모델이라고도 부릅니다.
그럼 굳이 퍼셉트론을 다층으로 쌓는 이유가 있어야 하겠습니다. 단층 퍼셉트론으로는 입력받는 데이터의 특징을 추출하는데 명확한 한계가 발생합니다.
왼쪽 이미지를 보면 하나의 선으로는 위와 같은 특징의 데이터를 제대로 분할하지 못합니다. 제대로 분할하려면 적어도 두 개 이상의 선이 필요합니다. 이 하나의 선은 퍼셉트론 하나를 의미합니다. 선이 하나인 단층 퍼셉트론이 풀지 못하는 위와 같은 문제 유형을 배타적 논리합 구조라고 하며, 배타적 논리합 구조를 해결하기 위해 두 개 이상의 선을 가진 다층 퍼셉트론을 이용합니다.
위 이미지는 2개 이상의 퍼셉트론으로 만든 2층 신경망입니다. 보통 입력층(input)은 활성화 함수가 없기 때문에 층을 셀 때 포함하지 않습니다. 기본적으로 인공신경망은 위와 같이 입력층 - 은닉층 - 출력층으로 이루어져 있습니다. 각각의 원이 하나의 퍼셉트론이며, 한 층에 1개 이상의 퍼셉트론이 있습니다. 그럼 각 층별로 어떤 일을 하는지 살펴보겠습니다.
import pandas as pd
import tensorflow as tf
#데이터 로드
mnist = tf.keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
#이미지 정규화
X_train, X_test = X_train / 255.0, X_test / 255.0
#타겟값 확인
pd.unique(y_train)
#신경망 layer 구성
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape = (28, 28)),
tf.keras.layers.Dense(100, activation = 'relu'),
tf.keras.layers.Dense(10, activation = 'softmax')])
#신경망 요약
model.summary()
#모델 컴파일
#sparse_categorical_crossentropy : ordinal 형식의 다중분류 문제에 적합한 손실함수
model.compile(optimizer = 'adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
#모델 학습
model.fit(X_train, y_train, epochs=5)
# 모델 평가
model.evaluate(X_test, y_test, verbose=2)