2.5 첫 번째 예제 다시 살펴 보기

2.4 신경망의 엔진: 그래디언트 기반 최적화 | 목차 | 3 신경망 시작하기

 

이 장 끝부분에 다다랐습니다. 이제 신경망의 이면에 어떤 원리가 있는지 기초적인 내용을 이해했을 것입니다. 첫 번째 예제로 다시 돌아가서 이전 절에서 배웠던 내용을 이용하여 코드를 자세하게 리뷰합시다.

먼저 입력 데이터입니다.

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

입력 이미지의 데이터 타입은 float32로, 훈련 데이터는 (60000, 784) 크기, 테스트 데이터는 (10000, 784) 크기의 넘파이 배열로 저장됩니다.

우리가 사용할 신경망입니다.

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

이 네트워크는 2개의 Dense 층이 연결되어 있고 각 층은 가중치 텐서를 포함하여 입력 데이터에 대한 몇 개의 간단한 텐서 연산을 적용합니다. 층의 속성인 가중치 텐서는 네트워크가 정보를 저장하는 곳입니다.

이제 네트워크를 컴파일하는 단계입니다.

network.compile(optimizer='rmsprop',
                loss='categorical_crossentropy',
                metrics=['accuracy'])

categorical_crossentropy는 손실 함수입니다. 가중치 텐서를 학습하기 위한 피드백 신호로 사용되며 훈련하는 동안 최소화됩니다. 미니 배치 확률적 경사 하강법을 통해 손실이 감소됩니다. 경사 하강법을 적용하는 구체적인 방식은 첫 번째 매개변수로 전달된 rmsprop 옵티마이저에 의해 결정됩니다.

마지막으로 훈련 반복입니다.

network.fit(train_images, train_labels, epochs=5, batch_size=128)

fit 메서드를 호출했을 때 다음과 같은 일이 일어납니다. 네트워크가 128개 샘플씩 미니 배치로 훈련 데이터를 다섯 번 반복합니다(전체 훈련 데이터에 수행되는 각 반복을 에포크(epoch)라고 합니다). 각 반복마다 네트워크가 배치에서 손실에 대한 가중치의 그래디언트를 계산하고 그에 맞추어 가중치를 업데이트합니다. 다섯 번의 에포크 동안 네트워크는 2,345번의 그래디언트 업데이트를 수행할 것입니다(에포크마다 46934). 아마 네트워크의 손실이 충분하게 낮아져서 높은 정확도로 손글씨 숫자를 구분할 수 있을 것입니다.

여기까지 읽었다면 이미 신경망에 대해 많이 알았을 것입니다.

2.6 요약

  • 학습Learning은 훈련 데이터 샘플과 그에 상응하는 타깃이 주어졌을 때 손실 함수를 최소화하는 모델 파라미터의 조합을 찾는 것을 의미합니다.
  • 데이터 샘플과 타깃의 배치를 랜덤하게 뽑고 이 배치에서 손실에 대한 파라미터의 그래디언트를 계산함으로써 학습이 진행됩니다. 네트워크의 파라미터는 그래디언트의 반대 방향으로 조금씩(학습률에 의해 정의된 크기만큼) 움직입니다.
  • 전체 학습 과정은 신경망이 미분 가능한 텐서 연산으로 연결되어 있기 때문에 가능합니다. 현재 파라미터와 배치 데이터를 그래디언트 값에 매핑해 주는 그래디언트 함수를 구성하기 위해 미분의 연쇄 법칙을 사용합니다.
  • 이어지는 장에서 자주 보게 될 두 가지 핵심 개념은 손실옵티마이저입니다. 이 두 가지는 네트워크에 데이터를 주입하기 전에 정의되어야 합니다.
  • 손실은 훈련하는 동안 최소화해야 할 양이므로 해결하려는 문제의 성공을 측정하는 데 사용합니다.
  • 옵티마이저는 손실에 대한 그래디언트가 파라미터를 업데이트하는 정확한 방식을 정의합니다. 예를 들어 RMSProp 옵티마이저, 모멘텀을 사용한 SGD 등입니다.

 


 

34 역주 훈련 샘플이 6만 개이므로 128개씩 배치로 나누면 469개의 배치가 만들어지며 마지막 배치의 샘플 개수는 96개가 됩니다.

 

2.4 신경망의 엔진: 그래디언트 기반 최적화 | 목차 | 3 신경망 시작하기

 

이 글은 도서출판 길벗에서 출간한  “케라스 창시자에게 배우는 딥러닝“의 1장~3장입니다. 이 책의 저작권은 (주)도서출판 길벗에 있으므로 무단 복제 및 무단 전제를 금합니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.