그림 4-1에서 이 신경망을 보여 줍니다. 다음 코드는 이 신경망의 케라스 구현으로 이전에 보았던 MNIST 예제와 비슷한 케라스 구현입니다.
코드 4-4 모델 정의하기
from tensorflow import keras
from tensorflow.keras import layers
= keras.Sequential([
layers.Dense(16, ="relu"),
layers.Dense(16, ="relu"),
layers.Dense(1, ="sigmoid")
])
Dense 층에 전달한 첫 번째 매개변수는 층의 유닛(unit) 개수이며, 층이 가진 표현 공간(representation space)의 차원입니다. 2장과 3장에서 relu 활성화 함수를 사용한 Dense 층은 다음과 같은 텐서 연산을 연결하여 구현한다는 것을 알았습니다.
output = relu(dot(W, input) + b)
16개의 유닛이 있다는 것은 가중치 행렬 W의 크기가 (input_dimension, 16)이라는 뜻입니다. 입력 데이터와 W를 점곱하면 입력 데이터가 16차원으로 표현된 공간으로 투영됩니다(그리고 편향 벡터 b를 더하고 relu 연산을 적용합니다). 표현 공간의 차원을 ‘모델이 내재된 표현을 학습할 때 가질 수 있는 자유도’로 이해할 수 있습니다. 유닛을 늘리면(표현 공간을 더 고차원으로 만들면) 모델이 더욱 복잡한 표현을 학습할 수 있지만 계산 비용이 커지고 원하지 않는 패턴을 학습할 수도 있습니다(훈련 데이터에서는 성능을 향상시키지만 테스트 데이터에서는 그렇지 않은 패턴입니다).