- ๋ฆฌ๋ญ์ปค๋ binary classification task๋ฅผ ์ํํ๋ ๋ชจ๋ธ
- Binary classification์ ์ฃผ์ด์ง ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ ๊ฐ์ง ๋ฒ์ฃผ ์ค ํ๋๋ก ๋ถ๋ฅํ๋ ์์
- ๋ฆฌ๋ญ์ปค๋ ์ฃผ๋ก sigmoid ํจ์๋ฅผ ์ ์ฉํ ํ, BCE(Binary Cross-Entropy) ์์ค ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ต
- Sigmoid ํจ์๋ ์ ๋ ฅ ๊ฐ์ 0๊ณผ 1 ์ฌ์ด์ ํ๋ฅ ๊ฐ์ผ๋ก ๋ณํํด ์ฃผ๋ ํจ์
- BCE ์์ค ํจ์๋ ์์ธก๋ ํ๋ฅ ๊ฐ๊ณผ ์ค์ ๋ ์ด๋ธ ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ์ฌ ๋ชจ๋ธ์ ์ค์ฐจ๋ฅผ ์ธก์
- Threshold์ ๋ํ์ฌ ์ถ๋ ฅ๊ฐ ์์ฒด๋ก๋ 0.5๋ผ๋ ๊ฐ ์์ฒด์ ํน๋ณํ ์๋ฏธ๊ฐ ์๋ค๊ณ ๋ณด๊ธฐ ์ด๋ ต์ง๋ง, ํ์ต ๊ณผ์ ์์ ์ฌ์ฉ๋๋ sigmoid ํจ์์ BCE ์์ค ํจ์์ ํน์ฑ ์ 0.5๋ผ๋ ๊ฐ์ด ๋ ๋ฒ์ฃผ๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ ์ผ๋ก ํด์๋ ์ ์์
- Hard negative mining: ์ฒซ ๋จ๊ณ ๋ชจ๋ธ์์ ์์ฑ๋ ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ธํ๋. ์ด ๋ฐ์ดํฐ์ ์ ๋ชจ๋ธ์ด ๊ตฌ๋ถํ๊ธฐ ์ด๋ ค์ด ๋ถ์ ์ ์ธ ์ํ(hard negatives)์ ํฌํจํ๊ณ ์์ด, ๋ชจ๋ธ์ ์ฑ๋ฅ ํฅ์์ ๋์์ ์ค๋ค.
- Group-wise training: ๊ทธ๋ฃน ํฌ๊ธฐ๋ฅผ 16์ผ๋ก ์ค์ ํ๊ณ , ๊ทธ๋ฃน ๋ด์์ positive:negative ๋น์จ์ 1:15๋ก ์ ์งํ๋ฉฐ ํ์ต์ ์งํํฉ๋๋ค. ์ด๋ ๋ชจ๋ธ์ด ๋ ๋ค์ํ negative ์ํ์ ํ์ตํ ์ ์๋๋ก ๋๋๋ค. ๋ชฉ์ ํจ์์ ํ๊ฐ ์งํ๋ก๋ Group CCE(Categorical Cross-Entropy) ๋๋ LCE(List-wise Cross-Entropy)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ ๋ ฅ ์ํ์ค์ ์ต๋ ๊ธธ์ด๋ 512๋ก ์ค์ ๋๋ฉฐ, ํ์ต ์๋ ํฅ์์ ์ํด Mixed precision(FP16)์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ ์ฆ๊ฐ ๊ธฐ๋ฒ์ผ๋ก ์ง๋ฌธ๊ณผ ์ธ์ฉ๊ตฌ๋ฅผ ๋ฌด์์๋ก ์ฆ๊ฐํ๋ฉฐ, ๊ธฐ์ธ๊ธฐ ์ฒดํฌํฌ์ธํ (Gradient Checkpointing)์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ธ๋ค. ๋ฐ์ดํฐ ์ฆ๊ฐ ๊ธฐ๋ฒ์ ๋ ํ ์คํธํด๋ณผ ์ ์๋ค.
import argparse | |
import os | |
import pandas as pd | |
import vertexai | |
from google.cloud.aiplatform import pipeline_jobs | |
from google.cloud.aiplatform.models import Model # For type hinting deployed_model | |
from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel | |
from google.oauth2 import service_account # <--- [์์ ๋จ] ๋ชจ๋ ์ํฌํธ | |
# --- Configuration (can be overridden by argparse) --- |
# Frontend Design Guideline | |
This document summarizes key frontend design principles and rules, showcasing | |
recommended patterns. Follow these guidelines when writing frontend code. | |
# Readability | |
Improving the clarity and ease of understanding code. |
import pytorch_lightning as pl | |
import numpy as np | |
import torch | |
from torch.nn import MSELoss | |
from torch.optim import Adam | |
from torch.utils.data import DataLoader, Dataset | |
import torch.nn as nn | |
class SimpleDataset(Dataset): |
import cupy as cp | |
import numpy as np | |
from pylibraft.distance import pairwise_distance | |
from pylibraft.knn import brute_force_knn | |
def main(num_elements, dim): | |
# ๋ฐ์ดํฐ ์์ฑ ๋ฐ ์ ๊ทํ (CuPy ์ฌ์ฉ) | |
cp.random.seed(42) | |
data = cp.random.random((num_elements, dim)).astype(cp.float32) | |
norm_data = data / cp.linalg.norm(data, axis=1, keepdims=True) |
import argparse | |
import hnswlib | |
import numpy as np | |
def main(num_elements, dim): | |
# ๋ฐ์ดํฐ ์์ฑ ๋ฐ ์ ๊ทํ | |
np.random.seed(42) | |
data = np.random.random((num_elements, dim)).astype(np.float32) | |
norm_data = data / np.linalg.norm(data, axis=1)[:, None] |
2ํธ: โ๋ชจ๋ธ ํฌ๊ธฐโ์ โํ์ต ํ ํฐ ์โ์ ์ ์ ํ ๋น์จ์? | NeurIPS 2022 | ๊นํ๋ฏผ
Gopher๋งํผ ๊ณ์ฐ๋์ด ์๋ค๋ฉด 63B โ 1.4T์์ ํ์ตํ๋ ๊ฒ์ด ์ต์ ์ด๋ผ๊ณ ํ๋ค. ์ค์ ํ์ ์์๋ ๊ด์ 2๊ฐ ์กฐ๊ธ ๋ ํ์ค์ฑ์ด ์๋๋ฐ, pretrain์ ํ๊ธฐ ์ ์ ์ด๋ฏธ GPU๋ฅผ ์ฌ์ฉํ์ผ๋ฏ๋ก ๊ณ์ฐ๋์ด ๊ณ ์ ๋์ด ์๋ ์ํ. ์ต๊ณ ์ ์ ํ๋๋ฅผ ๋ด๊ธฐ ์ํด์ ๋ชจ๋ธ ํฌ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์กฐ์ ํด์ผ ํ๋์ง ๊ทธ๋ํ๋ฅผ ํตํด์ ๊ฒฐ๋ก ์ ๋ผ ์ ์์ ๊ฒ์ด๋ค. ์๋๋ ์นดํ์๋ nanoGPT์์ ๊ด์ 2๋ฅผ ์ข์ํ๋ค๊ณ ์ธ๊ธํ๋ค.
Figure 3 > Figure 2 ๋ ์ดํดํ๊ธฐ ํธํ๋ค.
๊ด์ 1๊ณผ ๊ด์ 2์์ ์ป์ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ธ ๋ ์ ํด์ํ๋ ๋ฐฉํฅ์ผ๋ก ์ ์ํ๋ ๊ฒ์ธ๋ฐ, ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ 400๊ฐ ๋ชจ์๋๋ฐ ์ต์ข ๋ก์ค๋ฅผ ์์ธกํ ์ ์๋ ๋ชจ๋ธ์ ๋ง๋ค๋ฉด ์ด๋จ๊น? ๋ผ๋ ์๊ฐ์ด๊ณ ์ ์ํธ๋ง๋ ๋ด๋ถ ์ธํฐ๋ทฐ๋ฅผ ํตํด์ ์ต์ด ํ์ต ์กฐ๊ธ ํ๋ฉด ์ต์ข ๋ก์ค๋ฅผ ์ ์ ์๋ค๋ ๋ด์ฉ ๋งํ์. ๋ก์ค ์์ธก ๋ชจ๋ธ์ ์ ์ด์ผ๊ธฐํ๋ฉด ๋ชจ๋ธ ํฌ๊ธฐ๋ ์ผ๋ง๋ ๋์ด์ผ ํ๊ณ ๋ฐ์ดํฐ์ ์ ์ผ๋ง๋ ํ์ํ์ง ์ ์์ธกํ ์ ์์ ๊ฒ์ด๋ค. GPU ์ค์ผ์ค๋ง์ด ์ฌ์์ง๋ค๋์ง, ์ด ์ฌ๋์๊ฒ ๋ช ๋๋ฅผ ๋น๋ ค์ฃผ๋ฉด ๋๋์ง ๋ฑ ์ ๋น๋ ค์ฃผ๋ ๊ฒ์ด ์ข์ ์ ์๋ค. ์ ์๋ค์ ๋ก์ค ์์ธก ๋ชจ๋ธ์ ์ ๋ ๊ฒ ์๊ธธ ์ ์์ง ์์๊น? ์ด์ผ๊ธฐํ๊ณ . L-BFGS ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ Huber ๋ก์ค๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ํ์ตํ๋ฉด ํ๋ผ๋ฏธํฐ๋ฅผ ์ฑ์ธ ์ ์๋ค๊ณ ํ๋ค.
- Actor model ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง Akka๋ ๋ช ๊ฐ์ง Component๋ก ๊ตฌ์ฑ
- Dispatcher: Actor System ๋ด์์ ์คํ๋๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ค์ผ์ค๋งํ๋ฉฐ ๊ฐ Actor์ ์ฒ๋ฆฌ๋๊ณผ ์๊ฐ ์ ์ ์จ์ ์กฐ์ ํ์ฌ ๊ฐ์์๊ฒ ๊ณต์ ํ ๋ฆฌ์์ค๋ฅผ ์ ๊ณต
- Mailbox: Dispatcher์์ ๋ค์ด์ค๋ ๋ฉ์์ง๋ฅผ ๋ด๋ ๋ฉ์์ง ํ๋ก Actor๋ง๋ค Mailbox๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋ค์ด์จ ๋ฉ์์ง์ ์์๋๋ก Actor์์ ์๋น
- Actor: ์์คํ ์ ๊ตฌ์ฑํ๋ ์ผ์ข ์ ํ์ ๊ฐ์ฒด๋ก ๋ฉ์์ง๋ฅผ ์ค์ง์ ์ผ๋ก ํ์๋ก ํ๋ ์๋น์ ๋ฐ ์ก/์์ ์
- ๊ณ์ธต๊ตฌ์กฐ
- Akka Actor ๊ณ์ธต ๊ตฌ์กฐ๋ ํธ๋ฆฌ ํํ๋ก ํํ ๊ฐ๋ฅ
- ์ธ์ด์ ํต๊ณ ์ ๋ณด๋ฅผ ๋ด๋ด ๋คํธ์ํฌ๋ก ์ธ์ฝ๋ฉ ํ๋ ๊ฒ
- ๋ฐ๋ผ์ ์ฌ์ ํ์ต ๋จ๊ณ์์ ์ธ์ด์ ํต๊ณ ์ง์์ ํ์ต์ํค๋ ๊ฒ
- next token prediction (or language modeling)
- ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฐ๋ณต์ํค๋ ๊ฒ
- ์ธ์ด์ ํต๊ณ ์ง์์ ์ฃผ์ ํ๋ ํ์์
- ์ฌ๋์ด ์์ฒญํ ๋ฅ๋ ฅ์ ๊ฐ์ง๋ ๊ฒ์ด pre training ๋๋ฌธ
๊ณ ๋ฑํ๊ต ๊ณผ์ ์์ ๋ฐฐ์ฐ๋ ํ๊ท ๊ฐ ์ ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
"ํจ์ f๊ฐ ๋ซํ๊ตฌ๊ฐ [a, b]์์ ์ฐ์์ด๊ณ ์ด๋ฆฐ๊ตฌ๊ฐ (a, b)์์ ๋ฏธ๋ถ๊ฐ๋ฅํ๋ฉด, f(b)-f(a)=f '(c)(b-a)๋ฅผ ๋ง์กฑํ๋ ์ค์ c๊ฐ ์ด๋ฆฐ๊ตฌ๊ฐ (a, b)์ ์กด์ฌํ๋ค."
ํ๊ท ๊ฐ ์ ๋ฆฌ๋ ์ฃผ์ด์ง ๊ตฌ๊ฐ์ ํ๊ท ๋ณํ์จ๊ณผ ์ ์ ์ ๊ธฐ์ธ๊ธฐ๊ฐ ๊ฐ์์ง๋ ์ด๋ค ์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ๋งํ๊ณ ์๋ค. ๋ฐ๋ฉด์, ๋ค์๊ณผ ๊ฐ์ ๋ช ์ ๋ ์ด๋จ๊น?
"ํจ์ f๊ฐ ๋ซํ๊ตฌ๊ฐ [a, b]์์ ์ฐ์์ด๊ณ ์ด๋ฆฐ๊ตฌ๊ฐ (a, b)์์ ๋ฏธ๋ถ๊ฐ๋ฅํ๋ฉด, ์ด๋ฆฐ๊ตฌ๊ฐ (a, b)์ ์ํ๋ ์์์ c์ ๋ํ์ฌ f(s)-f(t)=f '(c)(s-t), s<c<t๋ฅผ ๋ง์กฑํ๋ ์ค์ s, t๊ฐ ์ด๋ฆฐ๊ตฌ๊ฐ (a, b)์ ์กด์ฌํ๋ค."