케라스에서 이런 모델을 만드는 방법은 일반적으로 두 가지입니다. 직접 Model 클래스의 서브클래스를 만들거나, 더 적은 코드로 많은 일을 수행할 수 있는 함수형 API(functional API)를 사용할 수 있습니다. 7장에서 이 두 가지 방법에 대해 소개하겠습니다.
모델의 구조는 가설 공간(hypothesis space)을 정의합니다. 1장에서 머신 러닝을 ‘사전에 정의된 가능성 있는 공간(space of possibility) 안에서 피드백 신호의 도움을 받아 입력 데이터의 유용한 표현을 찾는 것’으로 설명했던 것을 기억하세요. 네트워크 구조를 선택하면 가능성 있는 공간(가설 공간)이 입력 데이터를 출력 데이터로 매핑하는 일련의 특정한 텐서 연산으로 제한됩니다. 그다음 우리가 찾을 것은 이런 텐서 연산에 관련된 가중치 텐서의 좋은 값입니다.
데이터에서 학습하려면 데이터에 대한 가정을 해야 합니다. 이런 가정이 학습할 수 있는 것을 정의합니다. 따라서 가설 공간의 구조, 즉 모델의 구조는 매우 중요합니다. 문제에 대한 가정, 즉 시작할 때 모델이 가지게 될 사전 지식을 인코딩합니다. 예를 들어 활성화 함수 없이 하나의 Dense 층을 가진 모델(순수한 아핀 변환)로 2개의 클래스를 분류하는 문제를 다룬다면, 두 클래스가 선형적으로 구분될 수 있다고 가정하는 것입니다.
잘 맞는 네트워크 구조를 선택하는 것은 과학보다는 예술에 가깝습니다. 믿을 만한 모범 사례와 원칙이 있지만 연습을 해야만 올바른 신경망 설계자가 될 수 있습니다. 이어지는 몇 개의 장에서 신경망 구축의 명확한 원리를 설명하고, 특정 문제에 적합한 구조와 그렇지 않은 구조에 대한 직관을 길러 보겠습니다. 다양한 종류의 문제에 어떤 모델 구조가 맞는지, 실제 이런 네트워크를 어떻게 만드는지, 학습을 위해 적절한 설정 값을 어떻게 고르는지, 원하는 결과를 얻을 때까지 모델을 어떻게 조정하는지 자세히 배워 보겠습니다.