[케라스 창시자에게 배우는 딥러닝] 신경망 시작하기01
앞선 내용을 생각해보면 신경망 훈련에 관련되어 있는 요소는 크게 4가지가 있다.
- 네트워크 또는 모델을 구성하는 layer
- 입력 데이터와 그에 상응하는 타깃
- 학습에 사용할 피드백 신호를 정의하는 손실 함수
- 학습 진행 방식을 결정하는 옵티마이저
확실하게 기억해두자
1.1 층: 딥러닝의 구성 단위
층 layer은 하나 이상의 텐서를 입력으로 받아 하나 이상의 텐서를 출력하는 데이터 처리 모듈이다. 일부 층은 상태를 가지지 않지만 대부분의 경우 가중치라는 층의 상태를 가진다. 가중치는 SGD에 의해 학습되는 하나 이상의 텐서이며 여기에 네트워크가 학습한 정보가 있다.
층마다 적절한 텐서 포맷과 데이터 처리 방식이 다르다.
[ 2D 텐서가 저장된 간단한 벡터 데이터 ]
(samples, features) 크기의 2D 텐서가 저장된 간단한 벡터 데이터는 완전 연결 층 fully connected layer이나 밀집 층 dense layer라고도 불리는 밀집 연결 층 densely connected layer에 의해 처리된다.
[ 3D 텐서가 저장된 간단한 벡터 데이터 ]
(samples, timesteps, features) 크기의 3D 텐서가 저장된 시퀀스 데이터는 LSTM 같은 순환 층 recurrent layer에 의해 처리된다.
[ 4D 텐서가 저장된 간단한 벡터 데이터 ]
4D 텐서로 저장된 이미지 데이터는 일반적으로 2D 합성곱 층 convolution layer에 의해 처리된다.
케라스에서는 호환 가능한 층들을 엮어 데이터 변환 파이프라인을 구성함으로써 딥러닝 모델을 만든다. 층 호환성 layer compatibility은 각 층이 특정 크기의 입력 텐서만 받고 특정 크기의 출력 텐서를 반환한다.
from keras import layers
layer=layer.Dense(32,input=(784,))
위 코드를 해석해보면
첫번째 차원이 784인 2D 텐서만 입력으로 받는 층이며,
이 층은 첫번째 차원 크기가 32로 변환된 텐서를 출력할 것이다.
따라서 32차원의 벡터를 입력으로 받는 하위 층이 연결되어야 한다고 예상할 수 있다.
from keras import layers
from keras import models
model=models.Sequential()
model.add(layers.Dense(32,input=(784,)))
model.add(layers.Dense(10))
1.2 모델: 층의 네트워크
1.3 손실 함수와 옵티마이저: 학습 과정을 조절하는 열쇠
네트워크 구조를 정의한 후 다음 2가지를 선택해야 한다.
- 손실 함수: 훈련하는 동안 최소화될 값이며 주어진 테스크에 대한 성공 지표이다.
- 옵티마이저: 손실 함수를 기반으로 네트워크가 어떻게 업데이트될지 결정하며 특정 종류의 확률적 경사 하강법SGD를 구현한다.
여러 개의 출력을 내는 신경망은 출력당 하나씩 손실 함수를 가질 수 있어서 여러 개의 손실 함수도 가질 수 있다. SGD은 스칼라 손실 값을 기준으로 한다. 그러므로 손실이 여러 개인 네트워크에서는 모든 손실이 평균 값인 하나의 스칼라 양으로 합쳐진다.