일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MSSQL
- JS
- ssh
- logstash
- s3
- 유니티
- error
- Windows
- JavaScript
- 구글
- 엘라스틱서치
- ChatGPT
- 영어
- Python
- Kibana
- API
- Linux
- docker
- AWS
- MySQL
- Es
- unity
- Ai
- sample
- 설정
- nodejs
- mariadb
- elasticsearch
- build
- Today
- Total
가끔 보자, 하늘.
LLM 작동방식 및 용어 알아보기 본문
LLM 관련해서 흥미있게 보고 있는데, NLP 개발자가 아니라 LLM 관련 용어들이 꽤 생소하여 관련 글을 보면서 이해가 안되는 부분이 꽤 있더군요.
그래서 ChatGPT를 중심으로 LLM에서 주로 사용되는 용어들을 가능한 쉽게 정리해 봤습니다. 일부는 ChatGPT에게, 일부는 구글링하면서 정리했습니다. 혹시 잘못된 부분이 있다면 댓글 부탁드립니다.
LLM의 최근 역사
2017년 구글에서 발표한 Transformer 모델은 순차 데이터를 학습할 수 있는 신경망으로 LLM이 대두하는 계기가 되었습니다.
2018년 말 구글에서 발표한 BERT(Pre-traning of Deep Bidirectional Encoder Representations from Transformers)는 NLP 벤치마크에서 신기록을 세우게 됩니다.
2020년에는 OpenAI와 존스홉킨스 대학의 연구진이 GPT-3를 발표했습니다. 1,750억 개(175B ) 모델이 발표된 이후부터 LLM 분야는 대중들에게도 본격적으로 알려지게 됩니다.
2021년 github copilot 발표, 2022년 ChatGPT 발표 후 이제 누구나 LLM을 접하고 활용하는 시대에 접어들었습니다.
LLM의 작동 방식
대부분의 현대 LLM은 Transformer 아키텍처를 기반으로 작동합니다. 대규모 코퍼스(corpus, 말뭉치)를 사용하여 단어(이하 토큰, token, 우리가 이해하는 단어보다 좀 더 세분화된 기준, 학습 과정을 통해 결정됨.)의 임베딩 벡터를 학습, 이를 모아 문서 전체를 표현하는 벡터를 생성합니다. 이렇게 생성된 벡터는 문서 간 유사도 측정이나 문서 분류 등 다양한 자연어 처리 작업에 사용됩니다. (겨우 세 줄인데 벌써 어질어질 하네요. -_-a)
예를 들어 GPT-3.5 모델은 학습된 파라미터를 사용하여 입력된 질문에 대한 답변을 생성합니다. 좀 더 상세히 정리하면 다음과 같습니다. 어떤 입력(예를들어 사용자의 질문과 같은 요청 문장)을 기존에 학습한 token 단위로 분리해 질문 정보를 정리합니다. 그리고 기존 학습한 문장 구조와 문법 규칙을 바탕으로 답변의 시작 token이 결정됩니다. 이후 다음 token의 확률 분포를 예측하기 위해, 입력으로 받은 이전 토큰의 임베딩 벡터를 여러 개의 어텐션 헤드(Multi-head attention)에 입력으로 넣어주고 각각의 어텐션 헤드에서 다음 토큰의 중요도를 계산, 이를 결합하여 다음 토큰의 확률 분포를 얻은 다음, 가장 확률이 높은 토큰을 선택하여 다음 입력으로 사용하고, 이를 계속 반복하여 답변을 생성합니다.
(* 만약 위 내용을 모두 이해했거나 더 깊이 알고 싶지 않다면 이까지만 읽으시면 됩니다. )
LLM 관련 개념 및 용어 정리
Token
- 자연어 처리를 위해 문장 및 단어를 조각낸 최소 단위.
- 영어의 경우 1 token은 통상적으로 4개의 알파벳으로 계산되지만 이는 학습 과정에 따라 다른 길이로 결정될 수 있음.
Transformer 아키텍쳐
- RNN (Recurrent Neural Network)이나 CNN (Convolutional Neural Network)과는 달리, self-attention mechanism을 기반으로 하여 입력 시퀀스의 모든 위치에 대해 독립적으로 처리 가능.
- 이를 통해 문장 내 토큰 간의 의존성을 높은 수준으로 모델링할 수 있음.
- 크게 두 가지의 요소로 구성.
- Encoder : 입력 시퀀스를 입력받아, 각 토큰의 임베딩 벡터를 생성, self-attention과 feedforward network를 통해 정보를 압축
- Decoder : Encoder에서 생성된 입력 시퀀스의 정보를 바탕으로 다음 토큰을 생성하는 과정을 수행.
- Transformer는 self-attention mechanism을 사용해 입력 시퀀스 내의 각 토큰을 모델링 함. 이를 통해 토큰 간의 관계를 직접적으로 모델링하며, 입력 시퀀스의 길이에 민감하지 않을 수 있음.
- 또한, Multi-Head Attention을 사용해 여러 개의 self-attention을 병렬로 수행함으로써 모델의 표현력을 향상시키고 학습 속도를 높임.
- 또한, Positional Encoding을 사용하여 입력 시퀀스 내 토큰의 위치 정보를 반영. 이를 통해 토큰의 상대적인 위치 정보를 모델링하여, 입력 시퀀스 내에서 각 토큰의 역할을 파악하는데 도움을 줌.
Transformer의 self-attention mechanism이란?
입력 시퀀스 내 토큰 간의 관계를 모델링하기 위해 사용됨. 이를 통해 문장 내에서 각 토큰이 문맥 내 어떤 역할을 하는지 파악 가능. 다음과 같은 과정으로 진행됨.
- 입력 시퀀스 내 각 토큰의 임베딩 벡터를 생성
- 각 토큰의 임베딩 벡터를 이용하여 Query, Key, Value 벡터를 생성
- Query 벡터는 현재 토큰과 모든 토큰 간의 유사도를 계산
- Key 벡터는 모든 토큰과의 유사도를 계산
- Value 벡터는 입력 문장의 모든 토큰 벡터를 가중합하여 계산. 이때 가중치는 Query 벡터와 Key 벡터의 내적 결과인 Attention Score로 결정. Attention Score는 Query와 Key 벡터간의 유사도를 나타내며, 이 값을 기반으로 각 토큰 벡터의 중요도를 계산하여 가중합을 수행. 이 결과, 입력 문장에 대한 컨텍스트를 나타내는 Value 벡터 생성.
- 계산된 유사도 행렬에 softmax 함수를 적용하여, 모든 단어와의 유사도 값을 0과 1 사이의 확률 값으로 정규화
- 정규화된 유사도 값과 Value 벡터를 가중합하여, 현재 토큰의 출력 벡터를 생성.
Multi-Head Attention
- Transformer에서 사용되는 self-attention 메커니즘의 한 종류로 하나의 self-attention 메커니즘 대신에 여러개의 self-attention 메커니즘을 사용하는 방법
- 입력 시퀀스의 각 위치에서 각 토큰은 Query, Key, Value로 변환되며, 이들은 각각 선형 변환을 통해 다른 벡터 공간으로 매핑됨. 그런 다음, 각 Query 벡터는 모든 Key 벡터와의 유사도를 계산하고 이를 스케일링. 이렇게 계산된 유사도 값을 Softmax 함수를 사용하여 정규화 후 각 위치의 입력에 대한 출력값의 가중치가 결정, 이 가중치를 Value 벡터와 곱해져 각 위치의 출력값이 생성됨.
- Multi-Head Attention에서는 이러한 과정을 여러 개의 Head로 나누어 병렬로 수행. 각 Head는 서로 다른 Query, Key, Value 매핑을 사용하여 서로 다른 관점에서 입력을 볼 수 있음.
- 예를 들어, "The cat sat on the mat"이라는 문장이 있을 때, Multi-Head Attention은 "cat"이라는 단어가 "The"와 "mat"보다 "sat"과 더 관련이 있다는 것을 학습할 수 있슴.
- 이를 통해 여러 측면에서 입력 시퀀스 내 단어 간의 관계 모델링이 가능, 다양한 측면을 파악하고 더욱 정교한 예측을 수행할 수 있음.
Softmax 함수
- softmax 함수는 출력값이 모두 0보다 크고 합이 1이 되도록 만들어줌으로써 모델의 예측값을 확률로 해석할 수 있도록 정규화 함. (Softmax 함수와 활성화 함수는 다른데 왜 인지 모르겠지만 딥 러닝에서는 Softmax 활성화 함수를 Softmax 함수로 부르기도 함. 왜?? 원래 softmax 함수는 활성화 함수가 아니라 출력층에서 사용되는 함수)
- 활성화 함수 : 입력값을 받아 출력값을 계산하는 함수로 주로 은닉층에서 적용
- 출력층 : 신경망은 입력/은닉/출력층으로 구성. 출력층은 은닉층에서 처리된 결과를 실제 출력값으로 변환하는 역할.이때 활성화 함수를 적용함.
- 공식
가중치(weight)
- self-attention weight
- Transformer 모델은 여러 개의 층(layer)으로 이루어져 있으며, 각 층은 여러 개의 뉴런으로 구성되며, 이 뉴런들은 서로 다른 가중치를 가짐.
- 초기에는 무작위로 설정되며, 학습 과정을 거쳐 최적의 값을 가지고 됨. 머신 러닝 모델에서는 보통 손실 함수를 최소화하기 위해 경사하강법(gradient descent) 등의 최적화 알고리즘을 사용.
- 가중치는 각 뉴런이 입력값을 어떻게 처리할지를 결정하는 요소로, 입력값과 가중치를 곱한 값에 활성화 함수를 적용하여 다음 층으로 전달되는 값을 결정함.
- Transformer 모델에서 가중치 계산은 일반적으로 내적(dot product)를 이용한 어텐션(attention) 계산 방식을 사용.
- 계산식 (Q : 쿼리벡터, K: 키벡터, V: Value벡터, d_k : 키 벡터의 차원수)
- Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V
토큰 벡터(=단어 벡터, 토큰 임베딩 벡터)
- 토큰의 대규모 코퍼스를 통해 결정된 벡터값.
- Transformer 모델에서는 사전 학습된 임베딩 모델에 각 단어의 벡터값이 이미 결정되어 있으며, 만약 학습되지 않은 단어가 입력되면 이를 다루지 못할 수 있음.
- GPT-3.5 모델에서는 token을 one-hot 벡터로 표현. 이를 입력하여 Transformer 아키텍처를 사용하여 백터를 생성.
- one-hot 벡터란 단어 집합에서 token이 존재하는 위치에 1을 표시, 그 외 나머지는 모두 0으로 표시하여 벡터로 변환하는 방식. 문장마다 특정 단어의 위치가 달라진다고 하나의 단어 혹은 token 이 여러 개의 벡터 값을 가진다는 의미가 아닌, 모든 문서에서 공유되는 하나의 벡터값을 가지고 있는 것.
- GPT-3.5 모델의 각 단어 벡터는 2048차원임
7B 모델? 13B 모델?
- 매개 변수를 말함. GPT-3 175B 모델이란 1,750억개의 매개 변수를 가진 모델이라는 의미.
- 매개 변수(Parameters)란 모델 내부에서 각 계산의 결과물을 결정하는 가중치(weight)와 편향(bias) 등과 같은 값들을 말함.
- 모델 데이터에는 모델 구조와 가중치 등으로 구성됨. 모델 구조는 레이어의 개수, 각 레이어의 차원 크기, 헤드 수, 트랜스포머 블록 수 등의 데이터가 포함됨.
- 모델 용량은 저장된 가중치와 편향의 크기에 따라 결정됨. 7B 모델의 경우 약 70억개의 매개 변수가 있으며 이 매개 변수의 크기는 모두 32bit 부동 소수점 형식으로 저장됨. 따라서 7B 모델의 용량은 대략 30GB 정도.
뭔가 빠진 기분... -0- 생각나면 추가 정리해둘께요.
'개발 이야기 > DB, 데이터분석, AI' 카테고리의 다른 글
mssql transaction log 파일 강제 삭제 (0) | 2023.07.27 |
---|---|
AWS Glue, Athen, Quicksight 첫 사용기 (31) | 2023.07.03 |
MSSQL DB의 계정이 db_owner로 지정되어 삭제되지 않을 경우 (0) | 2022.12.09 |
MySQL DB 바이너리 로그 삭제 처리 (0) | 2022.10.17 |
AWS SCT 사용법 정리 (31) | 2022.09.27 |