강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

두희 이님의 프로필 이미지
두희 이

작성한 질문수

<밑바닥부터 만들면서 배우는 LLM> 완독 챌린지

(유튜브) 어텐션과 선형 층을 트랜스포머 블록에 연결하기

CH3의 맨 처음에 등장하는 '임베딩 입력 시퀀스' 텐서 값은 임의의 숫자인가요?

해결된 질문

작성

·

18

0

지난 주에 질문을 했었는데, 제가 인프런 시스템에 익숙하지 않다보니 엉뚱한 게시판에다 질문을 한 것 같아요.

이 Q&A 게시판은 강사님께 질문 드리는 것 맞는지요? 맞는다면 아래 내용을 질문 드리고 싶습니다.


제 3장("어텐션 메커니즘 구현하기")의 거의 맨 앞 부분에 다음과 같은 문구와 코드가 등장합니다.


다음처럼 3차원 벡터로 임베딩한 입력 시퀀스가 있다고 가정.

import torch

inputs = torch.tensor(

  [[0.43, 0.15, 0.89], # Your     (x^1)

   [0.55, 0.87, 0.66], # journey  (x^2)

   [0.57, 0.85, 0.64], # starts   (x^3)

   [0.22, 0.58, 0.33], # with     (x^4)

   [0.77, 0.25, 0.10], # one      (x^5)

   [0.05, 0.80, 0.55]] # step     (x^6)

)


이 값들은 토크나이저에서 그냥 임의로 마구잡이로 부여하는 실수 값인가요?

아니면 각 토큰 별로 이미 유사도나 거리 개념까지 다 계산 되어서 나온 실수 값인가요?

아!! 단순하게 이 교재에서 이해를 돕기 위해 3차원 값으로 예를 든 저 실수들만을 말하는 게 아니고요

실제로 LLM에서 입력 시퀀스의 각 토큰에 부여된 텐서 값들을 말하는 겁니다.

만약 아무런 연관성이 없이 그냥 임의로 토크나이저에서 만들어진 실수 값일 뿐이라면,

단순히 한 입력 원소와 다른 모든 입력 원소의 점곱 등의 연산을 통해 산출된 문맥 벡터가 무슨 의미가 있는 것인 지 이해가 잘 되지 않아서요.

즉, 그냥 아무런 연관성 없는 임의의 값들끼리 접곱했는데 의미를 가진 문맥 벡터가 나온다는 게 언뜻 이해가 되질 않습니다.

아니면,

처음에는 토크나이저에서 아무런 연관성 없이 그냥 임의로 실수 값들을 각 토큰에 부여했다 하더라도,

"훈련 가능한 가중치를 가진 멀티 헤드 어텐션" 알고리즘을 수행하게 되면 어텐션 가중치가 갱신 되면서

이런 모든 의구심이 해소 되는 것인가요?

답변 1

1

박해선님의 프로필 이미지
박해선
지식공유자

안녕하세요. 박해선입니다. 트랜스포머를 포함해 모든 신경망 모델은 훈련 전에 랜덤하게 가중치를 초기화하고 훈련을 통해 목표에 최적인 값을 찾아갑니다. 본문에 나온 벡터는 문장에 나온 그대로 설명을 위해 '가정'한 것입니다. 즉 예를 들어 설명하기 위함입니다. 실제 숫자를 사용하지 않는다면 수학 식을 사용해서 설명해야 하는데 그게 더 이해하기 어렵거든요. 감사합니다!

두희 이님의 프로필 이미지
두희 이

작성한 질문수

질문하기