이 개념은 샵투스쿨의 “트랜스포머 모델로 GPT만들기” 학습 중 수강생분들이 더 자세히 알고 싶어하시는 용어들을 설명한 것입니다.
예를 들어, 텍스트 시퀀스를 예측하는 언어모델을 가정해봅시다. 이 모델은 문장의 각 단어에 대한 다음 단어를 예측하는 작업을 수행합니다.
문장 “I love to”가 주어졌을 때, 모델은 “I love to” 다음에 올 단어를 예측해야 합니다. 이때, 토큰 “I”, “love”, “to”는 시퀀스의 마지막 차원에 위치합니다.
마지막 차원에서의 연산을 통해 각 단어에 대한 예측을 수행할 수 있습니다. 예를 들어, 로짓 텐서는 다음과 같을 수 있습니다:
“`
logits = [[-1.2, 0.8, 2.5, -0.5],
[1.0, -0.3, 0.5, 1.2],
[0.5, 2.3, -0.7, 1.8]]
“`
각 행은 문장의 위치(토큰)에 해당하고, 열은 각 토큰에 대한 예측 값을 나타냅니다. 마지막 차원에서의 연산을 수행하면, 각 행(토큰 위치)에서 가장 큰 예측 값을 얻을 수 있습니다.
`torch.argmax` 함수를 사용하여 마지막 차원에서 최댓값을 가지는 인덱스를 찾으면 다음과 같이 될 수 있습니다:
“`
next_token = torch.argmax(logits, dim=-1)
“`
위 예에서 `next_token`은 각 행(토큰 위치)에서 가장 큰 예측 값을 가진 인덱스를 가지고 있게 됩니다. 이를 통해 “I love to” 다음에 오는 토큰을 예측할 수 있습니다.
따라서, 마지막 차원에서의 연산을 수행하여 각 위치(토큰)에서 예측 값을 얻을 수 있습니다.
텐서의 마지막 차원에 “I”, “love”, “to”라는 단어가 위치하는 이유는 텍스트를 표현하기 위한 일반적인 방식 중 하나인 원-핫 인코딩(one-hot encoding)을 사용하기 때문입니다.
원-핫 인코딩은 단어를 벡터로 표현하는 방법 중 하나로, 각 단어를 고유한 인덱스로 매핑한 후, 해당 단어의 인덱스에 해당하는 위치만 1로 표시하고 나머지 위치는 0으로 표시하는 벡터로 표현합니다.
예를 들어, “I”, “love”, “to”라는 단어를 인덱스로 매핑하면, “I”는 인덱스 0, “love”는 인덱스 1, “to”는 인덱스 2가 됩니다. 그리고 각 단어를 원-핫 인코딩하여 표현하면 다음과 같습니다:
“I” => [1, 0, 0]
“love” => [0, 1, 0]
“to” => [0, 0, 1]
이렇게 각 단어를 원-핫 인코딩하여 표현하면, 각 단어는 텐서의 마지막 차원에 위치하게 됩니다. 마지막 차원의 크기는 전체 단어 집합의 크기와 동일하며, 각 위치(인덱스)는 해당 단어를 나타냄을 의미합니다.
이러한 표현 방식을 사용하면 모델이 단어를 구분하고 예측하기 쉽습니다. 모델은 마지막 차원에서 각 위치에 해당하는 값들을 활용하여 예측을 수행하거나 다른 연산을 수행할 수 있습니다.
소프트맥스 함수는 주어진 로짓 값들을 확률 분포로 변환하기 위해 마지막 차원을 이용합니다. 이때 마지막 차원에는 각 단어에 대한 확률 정보가 들어 있기 때문에, 소프트맥스 함수는 해당 차원의 값을 정규화하여 각 단어에 대한 확률을 계산합니다.
일반적으로, 로짓 값은 각 단어가 선택될 가능성을 나타내는 수치로 해석될 수 있습니다. 마지막 차원은 각 단어에 대한 확률 정보가 위치한 차원이기 때문에, 소프트맥스 함수는 해당 차원의 값을 정규화하여 각 단어에 대한 확률을 계산합니다.
앞선 차원들은 문장의 길이나 다른 문맥 정보와 관련된 정보를 포함할 수 있습니다. 예를 들어, 입력 문장의 단어 순서나 구조 등과 관련된 정보는 앞선 차원에서 표현될 수 있습니다. 그러나 토큰 예측을 위한 로짓 값은 마지막 차원에서 확률 분포로 변환되기 때문에, 소프트맥스 함수는 주로 마지막 차원을 이용하여 확률 분포를 계산합니다.