입력 하나·출력 하나가 문제 모양이 아닐 때
Functional API 의 강력한 기능 하나 — 서로 다른 데이터 타입을 합치고 여러 예측을 한 model 에서 동시에 내는 거. 실전 문제 중 상당수가 원래부터 다중 입력·다중 출력이야. support ticket 만 봐도 title, body, tags (서로 다른 feature space 세 개) 가 있고, 우선순위(priority) 랑 담당 부서(department) 를 한 번에 예측하고 싶어. 이걸 억지로 단일 입력·단일 출력에 욱여넣으면 model 세 개를 따로 학습하거나, 다 한 벡터로 flatten 해서 구조를 잃어버려.
코드 블록이 표준 모양이야: 입력마다 branch 하나, 각자 layer 로 처리하고 layers.concatenate 로 합친 뒤, 출력마다 head 하나 로 갈라. 입력·출력 전부에 name= 붙이는 게 포인트 — 그래야 데이터랑 loss 를 깨지기 쉬운 positional list 대신 dict 로 넘길 수 있어.
multi-task 는 공짜가 아니야
여러 head 가 trunk 를 공유하니까 각 출력의 gradient 가 같은 merged feature 를 통해 거꾸로 흘러 — 이 공유 표현이 핵심이야 (multi-task model 이 따로 만든 것보다 generalize 잘 되는 이유). 근데 동시에 head 끼리 경쟁해: 한 loss 가 수치적으로 더 크면 학습을 독차지해. 그래서 compile 때 loss_weights 가 있는 거 — head 마다 loss 를 scale 해서 하나가 나머지를 묻어버리지 않게. 동일 weight 로 시작하고, 출력별 loss 지켜보다가 하나가 정체될 때만 재조정해.