트랙의 개념을 한 블록에 모아
이 Transformer 인코더 블록은 이 트랙에서 배운 내용을 한꺼번에 사용해. Layer를 상속하고 Dropout 하위 레이어에 training 값을 전달하며 Functional 모델에 기본 레이어처럼 넣을 수 있어. 내부에는 multi-head self-attention, 2층 feed-forward network, LayerNormalization 두 개, Dropout 두 개가 있고 call()에서 연결해.
두 하위 블록을 잔차 연결로 감싸
첫 하위 블록은 입력에 self-attention을 적용하고 결과를 원래 입력에 더해 out1 = norm1(inputs + attn_output)을 만들어. 이 건너뛰기 연결로 기울기가 Attention을 넘어 흐를 수 있어. 두 번째 하위 블록은 feed-forward network를 통과한 값에 자신의 입력을 다시 더해. 두 LayerNormalization은 각 블록을 안정시키고 잔차 연결은 여러 블록을 깊게 쌓아도 학습할 수 있게 해.
이 예제는 덧셈 뒤에 정규화하는 post-norm 방식이야. 현대 변형은 정규화를 하위 레이어 앞에 두는 pre-norm으로 깊은 모델의 학습을 더 안정시키기도 해. 이 블록을 N번 쌓으면 Transformer 인코더가 돼. 소스를 직접 갖고 있으므로 RoPE, sparse attention, LoRA 어댑터, grouped-query attention 같은 연구 변형도 외부 라이브러리를 갈라내지 않고 클래스 안에서 수정할 수 있어.