저는 LLM(대규모 언어 모델)이 실제로 어떻게 작동하는지 API 수준이 아니라 행렬 곱셈(matrix multiplications) 단계까지 스스로 학습하고 있습니다. 순전파(forward pass) 과정을 정말로 이해하기 위해, 먼저 임베딩(embeddings)부터 손실(loss)에 이르기까지 전체 Transformer를 스프레드시트로 직접 구축했습니다. 그 후, 공유하기 쉽도록 순전파 과정을 웹 페이지로 만들었습니다.
이것은 모든 숫자가 화면에 들어올 수 있는 가장 작은 크기로 축소된 완전한 Transformer(단일 어텐션 헤드(single attention head), 단일 블록(single block))입니다. 6개의 단어 어휘(vocabulary)와 3차원 임베딩(3-dimensional embeddings)을 사용합니다. 이 모델은 네 개의 단어를 읽고 다음 단어를 예측하며, 단어 벡터(word vectors), Q/K/V, 어텐션 점수(attention scores), 인과적 마스크(causal mask), 소프트맥스(softmax), 피드포워드 네트워크(feed-forward network), 로짓(logits), 그리고 최종 확률(final probabilities)에 이르기까지 전체 과정을 위에서 아래로 보여줍니다.
제가 이해하는 데 가장 유용했던 부분은 가중치(weights)와 단어 벡터(word vectors)를 편집할 수 있으며, 그 이후의 모든 과정이 실시간으로 재계산된다는 점입니다. 또한 모든 가중치를 뒤섞는 'Randomize' 버튼도 있는데, 이를 누르면 예측 결과가 즉시 무의미한 값으로 변합니다. 이것이 이 프로젝트의 핵심적인 포인트입니다. 무작위(학습되지 않은) 가중치를 사용하면 예측은 의미가 없으며, 학습(training)이야말로 이 페이지에서 의도적으로 제외한 전체 이야기의 핵심입니다.
이것은 라이브러리나 빌드 단계가 없는 단일 독립형 HTML 파일입니다. 역전파(backward propagation, 가중치가 실제로 좋아지는 방식)는 제가 다음에 만들고 싶은 기능입니다.
링크: https://dgochin.github.io/transformer/
저는 ML(머신러닝) 연구자가 아니라 기초부터 배우고 있는 소프트웨어 엔지니어입니다. 따라서 틀린 부분이 있거나 더 잘 설명될 수 있는 부분이 있다면 진심으로 듣고 싶습니다. 이것은 Transformer를 가장 기본적인 방식으로 이해하려는 저의 시도였습니다.