데이터 흐름이 갈라지면 넘어갈 때야
Sequential은 모델 구조가 직선인 동안 가장 알맞은 도구야. 구조가 복잡해지면 사용법이 어려워지는 것이 아니라 목록으로는 표현 자체가 불가능해져. 따라서 ‘Sequential로 충분한가?’보다 ‘데이터 흐름이 갈라지는가?’를 물어봐. 다음 가운데 하나라도 필요하면 다른 API를 쓸 때야.
- 여러 입력 — 텍스트와 영상, 메타데이터와 시계열을 한 모델에서 합치는 경우
- 여러 출력 — 하나의 백본에서 분류와 회귀 헤드를 함께 학습하는 다중 과제 모델
- 건너뛰기 연결 — ResNet처럼 레이어 입력을 뒤쪽 출력에 다시 더하는 구조
- 레이어 공유 — Siamese나 쌍둥이 인코더처럼 같은 가중치를 두 입력에 적용하는 구조
- 비선형 연결 — 하나의 끊기지 않은 사슬이 아닌 모든 구조
표현력과 작성 비용을 맞바꾸는 사다리
Keras의 세 가지 모델 작성법은 Sequential → Functional → Subclassing 순서로 표현력이 넓어져. Functional API는 모델을 레이어 그래프로 표현하므로 분기, 병합, 가중치 공유를 자연스럽게 처리해. 정적인 그래프로도 부족해 순전파에 if가 필요하거나 입력 모양이 동적이고 학습 단계까지 직접 정의해야 한다면 Model을 상속하고 call()을 작성해.
한 단계 올라갈 때마다 더 많은 표현력을 얻는 대신 작성할 코드도 늘어. 쓰지 않을 유연성을 위해 복잡한 API를 고를 필요도 없고, 단순한 API에 머물러 모델을 제한해서도 안 돼. 데이터 흐름을 표현할 수 있는 가장 단순한 도구를 고르면 돼. 직선 구조에서 Sequential을 쓰는 건 낮은 선택이 아니라 정확한 선택이야.