■ discriminator.add(LeakyReLU(0.2))
첫 번째 층의 활성화 함수는 LeakyReLU를 사용하겠습니다. LeakyReLU 함수 모양을 보면 음수의 값은 특정한 기울기를 보입니다. 여기에서는 그 기울기 값을 (0.2)로 설정합니다.
■ discriminator.add(Dense(units=256))
이 신경망의 두 번째 층은 256개의 노드(units=256)로 구성되어 있습니다.
■ discriminator.add(LeakyReLU(0.2))
두 번째 층의 활성화 함수는 LeakyReLU를 사용하겠습니다. LeakyReLU 함수 모양을 보면 음수의 값은 특정한 기울기를 보입니다. 여기에서는 그 기울기 값을 (0.2)로 설정합니다.
■ discriminator.add(Dense(units=1, activation='sigmoid'))
최종 출력되는 값은 1개(units=1)입니다. 판별자가 하는 것은 데이터의 진위 여부를 판단하는 것입니다. 데이터가, 생성자가 만든 것인지 진짜 손글씨인지 구분합니다. 따라서 진짜면 1을, 가짜면 0이라는 숫자를 보여줍니다. 이때 활성화 함수는 시그모이드(activation='sigmoid')입니다.
■ discriminator.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5))
오차 값(loss)은 이항 교차 엔트로피(binary_crossentropy)를 사용합니다. 진짜인지 가짜인지 같이 두 개 중 하나로 구분하는 신경망이기 때문입니다. GAN을 만들려면 이전보다는 조금 더 정교하게 옵티마이저를 사용해야 합니다. 따라서 옵티마이저는 Adam으로, 학습 속도(학습률)를 0.0002로, 베타 최적화 값을 0.5로 설정하였습니다.
TIP
이항 교차 엔트로피에 대한 설명은 6.2절을 참고하세요.