수학과의 좌충우돌 프로그래밍

[딥러닝]05. 신경망의 구조 본문

인공지능/케라스창시자에게 배우는 딥러닝

[딥러닝]05. 신경망의 구조

ssung.k 2019. 3. 18. 00:52

신경망의 구조

1. 네트워크를 구성하는 층

층은 신경망의 가장 핵심적인 요소라고 할 수 있다. 하나 이상의 텐서를 입력으로 받아 마찬가지로 하나 이상의 텐서를 출력하는 데이터 처리 모듈이라고 볼 수 있다. 층에 따라서 상태를 가질수도 있고 아닐 수도 있는데 대부분의 경우 상태를 가지고 이 상태를 가중치 라고 한다.

입력되는 텐서에 따라서 다른 층을 선택하여야 한다.

  • (samples, features) 크기의 2D 텐서로 저장된 간단한 벡터 데이터는 완전 연결층(fully connected layer) 이나 밀집 층(dense layer)라고 불리는 밀집 연결 층(densely connected layer)에 의해 처리된다. 케라스에서는 이를 Dense 클래스로 구현한다.
  • (samples, timesteps, features) 크기의 3D 텐서로 저장된 시퀀스 데이터는 보통 LSTM 같은 순환 층(recurrent layer) 에 의해 처리된다.
  • 4D 텐서로 저장되어 있는 이미지 데이터는 일반적으로 2D 합성곱 층에 의해 처리된다. 케라스에서는 이를 Conv2D 클래스로 구현한다.

각 층들은 서로 연결될 수 있는데 이 때는 층 호환성 을 고려해야한다. 층 호환성이란 층의 입력과 출력에 따라 연결 가능 유무가 결정된다. 예를 통해서 알아보자.

from keras import layers, models

model = models.Sequential()
model.add(layers.Dense(32, input_shape=(784,)))
model.add(layers.Dense(10))

Dense 의 첫번째 파라미터는 출력 텐서의 크기 , input_shape 은 입력 텐서의 크기를 결정한다. 두 번째 layer 처럼 input_shape 를 기재하지 않은 경우에는 앞선 층의 출력 크기를 입력 크기로 자동으로 설정한다.

2. 층으로 이루어진 모델

딥러닝에서 모델은 층으로 만들어진 비순환 유향 그래프이다. 비순환 유향 그래프란 엣지에 방향이 있고, 자기 자신으로 돌아오지 않는 그래프를 의미한다. 위의 예제와 같이, 가장 간단한 경우는 하나의 입력과 하나의 출력으로 층을 순서대로 쌓는 것이다. 이 외에도 모델은 다양한 형태로 존재 가능하다. 중간에 두 개로 나뉘어 뻗어나갈 수 도 있고, 출력 이 여러 개 일수 도 있다. 상황에 따라 어떤 모델을 사용해야 할지는 정확히 정해진 바가 없다. 신뢰할만 한만 기존의 사례를 본보기 삼을 뿐 언제든 더 좋은 모델이 나올 수 있다.

3. 학습에 영향을 주는 손실함수와 옵티마이저

  • 손실 함수 : 훈련하는 동안 최소화될 값으로 주어진 문제에 대한 성공지표가 된다.
  • 옵티마이저 : 손실 함수를 기반으로 네트워크가 어떻게 업데이트 될지 결정한다.

문제에 따라 올바른 손실함수를 선택하는 것이 중요하다. 신경망은 단순히 손실함수를 최소화 하기 위해 진행하므로 그 과정에서 원하지 않는 부수적인 효과가 발생할 수 있다. 정형화된 문제에 대해서는 손실함수에 대한 지침이 있다.

  • 이진 분류 : binary crossentropy
  • 다중 분류 : categorical crossentropy
  • 회귀 문제 : CTC(Connection Temporal Classification)


Comments