더북(TheBook)

그림 4-1에서 이 신경망을 보여 줍니다. 다음 코드는 이 신경망의 케라스 구현으로 이전에 보았던 MNIST 예제와 비슷한 케라스 구현입니다.

코드 4-4 모델 정의하기

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Dense(16, activation="relu"),
    layers.Dense(16, activation="relu"),
    layers.Dense(1, activation="sigmoid")
])

Dense 층에 전달한 첫 번째 매개변수는 층의 유닛(unit) 개수이며, 층이 가진 표현 공간(representation space)의 차원입니다. 2장과 3장에서 relu 활성화 함수를 사용한 Dense 층은 다음과 같은 텐서 연산을 연결하여 구현한다는 것을 알았습니다.

output = relu(dot(W, input) + b)

16개의 유닛이 있다는 것은 가중치 행렬 W의 크기가 (input_dimension, 16)이라는 뜻입니다. 입력 데이터와 W를 점곱하면 입력 데이터가 16차원으로 표현된 공간으로 투영됩니다(그리고 편향 벡터 b를 더하고 relu 연산을 적용합니다). 표현 공간의 차원을 ‘모델이 내재된 표현을 학습할 때 가질 수 있는 자유도’로 이해할 수 있습니다. 유닛을 늘리면(표현 공간을 더 고차원으로 만들면) 모델이 더욱 복잡한 표현을 학습할 수 있지만 계산 비용이 커지고 원하지 않는 패턴을 학습할 수도 있습니다(훈련 데이터에서는 성능을 향상시키지만 테스트 데이터에서는 그렇지 않은 패턴입니다).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.