7.1. Fine-Tuning for Classification
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
What is
Fine-tuning์ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ์์ ์ผ๋ฐ ์ธ์ด ํจํด์ ํ์ตํ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ ๊ฐ์ ธ์์ ํน์ ์์ ์ ์ํํ๊ฑฐ๋ ๋๋ฉ์ธ ํน์ ์ธ์ด๋ฅผ ์ดํดํ๋๋ก ์กฐ์ ํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ ๋ชจ๋ธ์ ํ๋ จ์ ๋ ์๊ณ ์์ ํน์ ๋ฐ์ดํฐ ์ธํธ์์ ๊ณ์ ์งํํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ์ ๋์์ค์ ๋ ์ ๋ง๋๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ฉด์ ์ด๋ฏธ ์ต๋ํ ํญ๋์ ์ง์์ ํ์ฉํ ์ ์๊ฒ ํฉ๋๋ค. Fine-tuning์ ์๋ก์ด ๋ชจ๋ธ์ ์ฒ์๋ถํฐ ํ๋ จํ ํ์ ์์ด ์ ๋ฌธํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ ์ ํํ๊ณ ๊ด๋ จ์ฑ ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ํฉ๋๋ค.
Tip
LLM์ โ์ดํดํ๋โ ํ ์คํธ๋ก ์ฌ์ ํ๋ จํ๋ ๊ฒ์ด ์๋นํ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํน์ ์์ ์ ์ํํ๋๋ก ์คํ ์์ค ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ fine-tuneํ๋ ๊ฒ์ด ๋ ์ฝ๊ณ ์ ๋ ดํฉ๋๋ค.
Tip
์ด ์น์ ์ ๋ชฉํ๋ ์ด๋ฏธ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ fine-tuneํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ฏ๋ก, LLM์ด ์๋ก์ด ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋์ ์ฃผ์ด์ง ํ ์คํธ๊ฐ ์ฃผ์ด์ง ๊ฐ ์นดํ ๊ณ ๋ฆฌ์ ๋ถ๋ฅ๋ ํ๋ฅ ์ ์ ํํ๋๋ก ํฉ๋๋ค (์: ํ ์คํธ๊ฐ ์คํธ์ธ์ง ์๋์ง).
Preparing the data set
Data set size
๋ฌผ๋ก , ๋ชจ๋ธ์ fine-tuneํ๊ธฐ ์ํด์๋ LLM์ ์ ๋ฌธํํ๋ ๋ฐ ์ฌ์ฉํ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค. https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb์์ ์ ์๋ ์์ ์์, GPT2๋ https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฉ์ผ์ด ์คํธ์ธ์ง ์๋์ง๋ฅผ ๊ฐ์งํ๋๋ก fine-tune๋ฉ๋๋ค.
์ด ๋ฐ์ดํฐ ์ธํธ๋ โ์คํธ์ด ์๋โ์ ์์ ๊ฐ โ์คํธโ๋ณด๋ค ํจ์ฌ ๋ ๋ง๊ธฐ ๋๋ฌธ์, ์ฑ ์์๋ โ์คํธโ์ ์์ ์๋งํผ๋ง โ์คํธ์ด ์๋โ์ ์์ ๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ์ ์ํฉ๋๋ค (๋ฐ๋ผ์ ํ๋ จ ๋ฐ์ดํฐ์์ ๋ชจ๋ ์ถ๊ฐ ์์ ๋ฅผ ์ ๊ฑฐํฉ๋๋ค). ์ด ๊ฒฝ์ฐ, ๊ฐ 747๊ฐ์ ์์ ๊ฐ ์์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์, **70%**์ ๋ฐ์ดํฐ ์ธํธ๋ ํ๋ จ์, **10%**๋ ๊ฒ์ฆ์, **20%**๋ ํ ์คํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฒ์ฆ ์ธํธ๋ ํ๋ จ ๋จ๊ณ์์ ๋ชจ๋ธ์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ fine-tuneํ๊ณ ๋ชจ๋ธ ์ํคํ ์ฒ์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋ณด์ง ๋ชปํ ๋ฐ์ดํฐ์์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ๊ณผ์ ํฉ์ ๋ฐฉ์งํ๋ ๋ฐ ํจ๊ณผ์ ์ผ๋ก ๋์์ ์ค๋๋ค. ์ด๋ ์ต์ข ํ๊ฐ์ ํธํฅ์ ์ฃผ์ง ์๊ณ ๋ฐ๋ณต์ ์ธ ๊ฐ์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ด๋ ์ด ๋ฐ์ดํฐ ์ธํธ์ ํฌํจ๋ ๋ฐ์ดํฐ๊ฐ ์ง์ ์ ์ผ๋ก ํ๋ จ์ ์ฌ์ฉ๋์ง ์์ง๋ง, ์ต์์ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฏ๋ก, ์ด ์ธํธ๋ ํ ์คํธ ์ธํธ์ฒ๋ผ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
- ๋ฐ๋ฉด, ํ ์คํธ ์ธํธ๋ ๋ชจ๋ธ์ด ์์ ํ ํ๋ จ๋๊ณ ๋ชจ๋ ์กฐ์ ์ด ์๋ฃ๋ ํ์๋ง ์ฌ์ฉ๋ฉ๋๋ค; ์ด๋ ๋ชจ๋ธ์ด ์๋ก์ด ๋ณด์ง ๋ชปํ ๋ฐ์ดํฐ์ ์ผ๋ฐํํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ํ ํธํฅ ์๋ ํ๊ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ ์คํธ ์ธํธ์ ๋ํ ์ด ์ต์ข ํ๊ฐ๋ ๋ชจ๋ธ์ด ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ด๋ป๊ฒ ์ํ๋ ๊ฒ์ผ๋ก ์์๋๋์ง๋ฅผ ํ์ค์ ์ผ๋ก ๋ํ๋ ๋๋ค.
Entries length
ํ๋ จ ์์ ๊ฐ ๋์ผํ ๊ธธ์ด์ ํญ๋ชฉ(์ด ๊ฒฝ์ฐ ์ด๋ฉ์ผ ํ
์คํธ)์ ๊ธฐ๋ํ๋ฏ๋ก, ๊ฐ์ฅ ํฐ ํญ๋ชฉ๊ณผ ๋์ผํ ํฌ๊ธฐ๋ก ๋ชจ๋ ํญ๋ชฉ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์์ผ๋ฉฐ, <|endoftext|>์ ID๋ฅผ ํจ๋ฉ์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
Initialize the model
์คํ ์์ค ์ฌ์ ํ๋ จ๋ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ์ด๊ธฐํํ์ฌ ํ๋ จํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ์์ ์ ์ํํ์ผ๋ฉฐ https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb์ ์ง์นจ์ ๋ฐ๋ฅด๋ฉด ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
Classification head
์ด ํน์ ์์ (ํ ์คํธ๊ฐ ์คํธ์ธ์ง ์๋์ง ์์ธก)์์๋ GPT2์ ์ ์ฒด ์ดํ์ ๋ฐ๋ผ fine-tuneํ๋ ๊ฒ์ ๊ด์ฌ์ด ์์ผ๋ฉฐ, ์ ๋ชจ๋ธ์ด ์ด๋ฉ์ผ์ด ์คํธ(1)์ธ์ง ์๋์ง(0)๋ง ๋งํ๋๋ก ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์คํธ ์ฌ๋ถ์ ํ๋ฅ ๋ง ์ ๊ณตํ๋ ์ต์ข ๋ ์ด์ด๋ฅผ ์์ ํ ๊ฒ์ ๋๋ค (์ฆ, 2๊ฐ์ ๋จ์ด๋ก ๊ตฌ์ฑ๋ ์ดํ์ฒ๋ผ).
# This code modified the final layer with a Linear one with 2 outs
num_classes = 2
model.out_head = torch.nn.Linear(
in_features=BASE_CONFIG["emb_dim"],
out_features=num_classes
)
์กฐ์ ํ ๋งค๊ฐ๋ณ์
๋น ๋ฅด๊ฒ ๋ฏธ์ธ ์กฐ์ ํ๊ธฐ ์ํด์๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ๋ณด๋ค ์ผ๋ถ ์ต์ข ๋งค๊ฐ๋ณ์๋ง ์กฐ์ ํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค. ์ด๋ ํ์ ๊ณ์ธต์ด ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ณธ ์ธ์ด ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ํฌ์ฐฉํ๋ค๋ ๊ฒ์ด ์๋ ค์ ธ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์, ๋ง์ง๋ง ๊ณ์ธต๋ง ๋ฏธ์ธ ์กฐ์ ํ๋ ๊ฒ์ผ๋ก ๋ณดํต ์ถฉ๋ถํ๊ณ ๋ ๋น ๋ฆ ๋๋ค.
# This code makes all the parameters of the model unrtainable
for param in model.parameters():
param.requires_grad = False
# Allow to fine tune the last layer in the transformer block
for param in model.trf_blocks[-1].parameters():
param.requires_grad = True
# Allow to fine tune the final layer norm
for param in model.final_norm.parameters():
param.requires_grad = True
Entries to use for training
์ด์ ์น์ ์์๋ LLM์ด ์ ๋ ฅ ๋ฌธ์ฅ์ ๊ฑฐ์ ๋ชจ๋ ์์ธก๋ ํ ํฐ์ด ํฌํจ๋์ด ์์์๋ ๋ถ๊ตฌํ๊ณ (์ค์ ๋ก ์์ธก๋ ๊ฒ์ ๋์ ์๋ 1๊ฐ๋ฟ์) ๊ฐ ์์ธก๋ ํ ํฐ์ ์์ค์ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ํ๋ จ๋์์ต๋๋ค. ์ด๋ ๋ชจ๋ธ์ด ์ธ์ด๋ฅผ ๋ ์ ์ดํดํ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค.
์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ๋ชจ๋ธ์ด ์คํธ์ธ์ง ์๋์ง๋ฅผ ์์ธกํ ์ ์๋ ๊ฒ๋ง ์ค์ํ๋ฏ๋ก, ๋ง์ง๋ง์ผ๋ก ์์ธก๋ ํ ํฐ๋ง ๊ณ ๋ คํฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ ํ๋ จ ์์ค ํจ์๋ฅผ ์์ ํ์ฌ ํด๋น ํ ํฐ๋ง ๊ณ ๋ คํ๋๋ก ํด์ผ ํฉ๋๋ค.
์ด๋ https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb์์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋ฉ๋๋ค:
def calc_accuracy_loader(data_loader, model, device, num_batches=None):
model.eval()
correct_predictions, num_examples = 0, 0
if num_batches is None:
num_batches = len(data_loader)
else:
num_batches = min(num_batches, len(data_loader))
for i, (input_batch, target_batch) in enumerate(data_loader):
if i < num_batches:
input_batch, target_batch = input_batch.to(device), target_batch.to(device)
with torch.no_grad():
logits = model(input_batch)[:, -1, :] # Logits of last output token
predicted_labels = torch.argmax(logits, dim=-1)
num_examples += predicted_labels.shape[0]
correct_predictions += (predicted_labels == target_batch).sum().item()
else:
break
return correct_predictions / num_examples
def calc_loss_batch(input_batch, target_batch, model, device):
input_batch, target_batch = input_batch.to(device), target_batch.to(device)
logits = model(input_batch)[:, -1, :] # Logits of last output token
loss = torch.nn.functional.cross_entropy(logits, target_batch)
return loss
๊ฐ ๋ฐฐ์น์ ๋ํด ์ฐ๋ฆฌ๋ ์์ธก๋ ๋ง์ง๋ง ํ ํฐ์ ๋ก์ง์๋ง ๊ด์ฌ์ด ์์์ ์ฃผ๋ชฉํ์ธ์.
์์ ํ GPT2 ๋ฏธ์ธ ์กฐ์ ๋ถ๋ฅ ์ฝ๋
์คํธ ๋ถ๋ฅ๊ธฐ๋ก GPT2๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ๋ ๋ชจ๋ ์ฝ๋๋ https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ฌธํ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


