한 권으로 끝내는 실전 LLM 파인튜닝 - 강다솔 지음/위키북스 |
스터디 3일 차다. 지난 시간에 셀프 어텐션까지 마쳤고 오늘은 이를 더 발전시켜서 '멀티헤드 어텐션'부터 시작한다.
02. GPT
멀티헤드 어텐션과 피드포워드
멀티헤드 어텐션은 말 그대로 여러 개의 어텐션 메커니즘을 병렬로 사용하는 것이라고 한다. 여기서 병렬 처리란 하나의 데이터를 여러 관점에서 동시에 처리하는 것을 말한다. 코드는 아래와 같다.
class MultiHeadAttention(nn.Module):
def __init__(self, num_heads, head_size):
super().__init__()
self.heads = nn.ModuleList([Head(head_size) for _ in range(num_heads)])
def forward(self,inputs):
return torch.cat([head(inputs) for head in self.heads], dim=-1)
__init__ 메서드에서 head_size만큼 Head 인스턴스를 생성하고, forward 메서드에서 실제 연산을 수행한다. 반환되는 텐서는 [batch_size, sequence_length, num_heads * head_size] 형태로 원래 입력보다 더 높은 차원의 데이터를 포함한다. 다음으로 모델의 표현력을 더 높여주는 FeedFoward 클래스를 작성한다. 해당 클래스에는 nn.Sequential을 이용해서 입력 차원 확장 -> ReLU 함수로 비선형 도입 -> 다시 원래 차원으로 축소하는 피드포워드 네트워크 로직이 들어간다.
추가로 각 레이어 입력을 레이어 출력에 더해주는 '잔차 연결', RNN 같은 동적 네트워크 학습의 안정화 및 가속화에 도움을 주는 '레이어 정규화(LayerNorm)에 대해 공부했다.
Blocks 만들기
GPT 같은 복잡한 신경망 모델은 설계와 구현에 있어 중요한 구조적 단위인 블록(Block)을 사용한다. 블록 구조는 위의 그림과 같이 모듈화, 재사용성, 확장성 향상 목적으로 모델 내 다양한 계층과 구성 요소를 하나로 묶은 것을 말한다.
토크나이저 만들기
토크나이저는 텍스트의 의미를 잘 보전하면서도 데이터를 효율적으로 처리할 수 있어야 한다. 이 챕터에서는 사용자 정의 토크나이저를 만들고 학습시키고 저장하고 다시 불러와 테스트하는 과정을 진행했다. 코드는 생략하고 실행 결과만 첨부한다.
완벽한 문장은 아니지만 '세계적인', '싱가포르 에너지 반도 요건', '2차전지', '주담대' 등등.. 제대로 된 단어도 꽤 보인다. 신기하구먼. 3일 차 스터디는 여기까지. 4일 차부터는 드디어 파인튜닝을 시작한다.
'개발 > AI' 카테고리의 다른 글
[Day6] LLM 스터디 1기 - GPU 병렬화 기법 (0) | 2025.01.16 |
---|---|
[Day5] LLM 스터디 1기 - GPT, Gemma, Llama3 모델 특징 비교 (1) | 2025.01.15 |
[Day4] LLM 스터디 1기 - 파인튜닝 개념 (1) | 2025.01.11 |
[Day2] LLM 스터디 1기 - 언어 모델 구조 및 셀프 어텐션 메커니즘 이해 (3) | 2025.01.05 |
[Day1] LLM 스터디 1기 - NLP 이해와 런팟 설치 (2) | 2024.12.30 |