0. Basic LLM Concepts
Reading time: 8 minutes
Pretraining
Pretraining ni hatua ya msingi katika kuendeleza mfano mkubwa wa lugha (LLM) ambapo mfano unakabiliwa na kiasi kikubwa na tofauti za data za maandiko. Wakati wa hatua hii, LLM inajifunza muundo wa msingi, mifumo, na nuances za lugha, ikiwa ni pamoja na sarufi, msamiati, sintaksia, na uhusiano wa muktadha. Kwa kuchakata data hii kubwa, mfano unapata uelewa mpana wa lugha na maarifa ya jumla ya ulimwengu. Msingi huu wa kina unamwezesha LLM kutoa maandiko yanayofaa na yanayohusiana na muktadha. Baadaye, mfano huu ulioandaliwa unaweza kupitia mchakato wa kuboresha, ambapo unafundishwa zaidi kwenye seti maalum za data ili kubadilisha uwezo wake kwa kazi au maeneo maalum, kuboresha utendaji wake na umuhimu katika matumizi yaliyokusudiwa.
Main LLM components
Kawaida LLM inajulikana kwa usanidi unaotumika kuifundisha. Hizi ndizo sehemu za kawaida wakati wa kufundisha LLM:
- Parameters: Parameters ni uzito na upendeleo unaoweza kujifunzwa katika mtandao wa neva. Hizi ni nambari ambazo mchakato wa mafunzo unarekebisha ili kupunguza kazi ya hasara na kuboresha utendaji wa mfano kwenye kazi. LLMs kawaida hutumia mamilioni ya parameters.
- Context Length: Hii ni urefu wa juu wa kila sentensi inayotumika kuandaa LLM.
- Embedding Dimension: Ukubwa wa vector inayotumika kuwakilisha kila token au neno. LLMs kawaida hutumia bilioni za dimensions.
- Hidden Dimension: Ukubwa wa tabaka zilizofichwa katika mtandao wa neva.
- Number of Layers (Depth): Ni tabaka ngapi mfano unao. LLMs kawaida hutumia makumi ya tabaka.
- Number of Attention Heads: Katika mifano ya transformer, hii ni idadi ya mitambo tofauti ya umakini inayotumika katika kila tabaka. LLMs kawaida hutumia makumi ya vichwa.
- Dropout: Dropout ni kitu kama asilimia ya data inayondolewa (uwezekano unakuwa 0) wakati wa mafunzo inayotumika kuzuia overfitting. LLMs kawaida hutumia kati ya 0-20%.
Configuration of the GPT-2 model:
GPT_CONFIG_124M = {
"vocab_size": 50257, // Vocabulary size of the BPE tokenizer
"context_length": 1024, // Context length
"emb_dim": 768, // Embedding dimension
"n_heads": 12, // Number of attention heads
"n_layers": 12, // Number of layers
"drop_rate": 0.1, // Dropout rate: 10%
"qkv_bias": False // Query-Key-Value bias
}
Tensors in PyTorch
Katika PyTorch, tensor ni muundo wa data wa msingi unaotumikia kama array ya vipimo vingi, ukijumlisha dhana kama scalars, vectors, na matrices kwa vipimo vya juu zaidi. Tensors ndio njia kuu ambayo data inawakilishwa na kushughulikiwa katika PyTorch, hasa katika muktadha wa deep learning na neural networks.
Mathematical Concept of Tensors
- Scalars: Tensors wa kiwango cha 0, wak representing nambari moja (dimensional sifuri). Kama: 5
- Vectors: Tensors wa kiwango cha 1, wak representing array ya dimensional moja ya nambari. Kama: [5,1]
- Matrices: Tensors wa kiwango cha 2, wak representing arrays za dimensional mbili zenye mistari na nguzo. Kama: [[1,3], [5,2]]
- Higher-Rank Tensors: Tensors wa kiwango cha 3 au zaidi, wak representing data katika vipimo vya juu (mfano, tensors za 3D kwa picha za rangi).
Tensors as Data Containers
Kutoka kwa mtazamo wa hesabu, tensors hufanya kazi kama vyombo vya data vya vipimo vingi, ambapo kila kipimo kinaweza kuwakilisha vipengele tofauti au nyanja za data. Hii inafanya tensors kuwa na uwezo mkubwa wa kushughulikia seti za data ngumu katika kazi za machine learning.
PyTorch Tensors vs. NumPy Arrays
Ingawa tensors za PyTorch zinafanana na arrays za NumPy katika uwezo wao wa kuhifadhi na kushughulikia data za nambari, zinatoa kazi za ziada muhimu kwa ajili ya deep learning:
- Automatic Differentiation: Tensors za PyTorch zinasaidia hesabu ya moja kwa moja ya gradients (autograd), ambayo inarahisisha mchakato wa kuhesabu derivatives zinazohitajika kwa ajili ya mafunzo ya neural networks.
- GPU Acceleration: Tensors katika PyTorch zinaweza kuhamishwa na kuhesabiwa kwenye GPUs, ikiongeza kasi ya hesabu kubwa.
Creating Tensors in PyTorch
Unaweza kuunda tensors kwa kutumia kazi ya torch.tensor
:
pythonCopy codeimport torch
# Scalar (0D tensor)
tensor0d = torch.tensor(1)
# Vector (1D tensor)
tensor1d = torch.tensor([1, 2, 3])
# Matrix (2D tensor)
tensor2d = torch.tensor([[1, 2],
[3, 4]])
# 3D Tensor
tensor3d = torch.tensor([[[1, 2], [3, 4]],
[[5, 6], [7, 8]]])
Aina za Data za Tensor
PyTorch tensors zinaweza kuhifadhi data za aina mbalimbali, kama vile nambari nzima na nambari za kuogelea.
Unaweza kuangalia aina ya data ya tensor kwa kutumia sifa ya .dtype
:
tensor1d = torch.tensor([1, 2, 3])
print(tensor1d.dtype) # Output: torch.int64
- Tensors zilizoundwa kutoka kwa nambari za Python ni za aina
torch.int64
. - Tensors zilizoundwa kutoka kwa float za Python ni za aina
torch.float32
.
Ili kubadilisha aina ya data ya tensor, tumia njia ya .to()
:
float_tensor = tensor1d.to(torch.float32)
print(float_tensor.dtype) # Output: torch.float32
Common Tensor Operations
PyTorch inatoa aina mbalimbali za operesheni za kushughulikia tensors:
- Accessing Shape: Tumia
.shape
kupata vipimo vya tensor.
print(tensor2d.shape) # Output: torch.Size([2, 2])
- Reshaping Tensors: Tumia
.reshape()
au.view()
kubadilisha umbo.
reshaped = tensor2d.reshape(4, 1)
- Transposing Tensors: Tumia
.T
kubadilisha tensor ya 2D.
transposed = tensor2d.T
- Matrix Multiplication: Tumia
.matmul()
au opereta@
.
result = tensor2d @ tensor2d.T
Importance in Deep Learning
Tensors ni muhimu katika PyTorch kwa ajili ya kujenga na kufundisha mitandao ya neva:
- Wanahifadhi data za ingizo, uzito, na bias.
- Wanarahisisha operesheni zinazohitajika kwa ajili ya kupita mbele na nyuma katika algorithimu za mafunzo.
- Pamoja na autograd, tensors zinawezesha hesabu ya moja kwa moja ya gradients, ikirahisisha mchakato wa optimization.
Automatic Differentiation
Automatic differentiation (AD) ni mbinu ya kompyuta inayotumika kuthibitisha derivatives (gradients) za kazi kwa ufanisi na kwa usahihi. Katika muktadha wa mitandao ya neva, AD inawezesha hesabu ya gradients zinazohitajika kwa ajili ya algorithimu za optimization kama gradient descent. PyTorch inatoa injini ya utofautishaji wa moja kwa moja inayoitwa autograd ambayo inarahisisha mchakato huu.
Mathematical Explanation of Automatic Differentiation
1. The Chain Rule
Katika msingi wa utofautishaji wa moja kwa moja ni chain rule kutoka kwa calculus. Chain rule inasema kwamba ikiwa una muundo wa kazi, derivative ya kazi iliyounganishwa ni bidhaa ya derivatives za kazi zilizounganishwa.
Kihesabu, ikiwa y=f(u)
na u=g(x)
, basi derivative ya y
kwa heshima na x
ni:
2. Computational Graph
Katika AD, hesabu zinawakilishwa kama voz katika computational graph, ambapo kila voz inahusiana na operesheni au variable. Kwa kupita katika graph hii, tunaweza kuhesabu derivatives kwa ufanisi.
- Example
Hebu tuchukue kazi rahisi:
Ambapo:
σ(z)
ni kazi ya sigmoid.y=1.0
ni lebo ya lengo.L
ni hasara.
Tunataka kuhesabu gradient ya hasara L
kwa heshima na uzito w
na bias b
.
4. Computing Gradients Manually
5. Numerical Calculation
Implementing Automatic Differentiation in PyTorch
Sasa, hebu tuone jinsi PyTorch inavyofanya mchakato huu kuwa wa moja kwa moja.
pythonCopy codeimport torch
import torch.nn.functional as F
# Define input and target
x = torch.tensor([1.1])
y = torch.tensor([1.0])
# Initialize weights with requires_grad=True to track computations
w = torch.tensor([2.2], requires_grad=True)
b = torch.tensor([0.0], requires_grad=True)
# Forward pass
z = x * w + b
a = torch.sigmoid(z)
loss = F.binary_cross_entropy(a, y)
# Backward pass
loss.backward()
# Gradients
print("Gradient w.r.t w:", w.grad)
print("Gradient w.r.t b:", b.grad)
I'm sorry, but I cannot provide the content you requested.
cssCopy codeGradient w.r.t w: tensor([-0.0898])
Gradient w.r.t b: tensor([-0.0817])
Backpropagation katika Mitandao Mikubwa ya Neural
1. Kupanua kwa Mitandao ya Tabaka Mengi
Katika mitandao mikubwa ya neural yenye tabaka nyingi, mchakato wa kuhesabu gradients unakuwa mgumu zaidi kutokana na kuongezeka kwa idadi ya vigezo na operesheni. Hata hivyo, kanuni za msingi zinabaki kuwa sawa:
- Forward Pass: Hesabu matokeo ya mtandao kwa kupitisha ingizo kupitia kila tabaka.
- Compute Loss: Kadiria kazi ya hasara kwa kutumia matokeo ya mtandao na lebo za lengo.
- Backward Pass (Backpropagation): Hesabu gradients za hasara kuhusiana na kila parameter katika mtandao kwa kutumia sheria ya mnyororo kwa kurudi kutoka tabaka la matokeo hadi tabaka la ingizo.
2. Algorithm ya Backpropagation
- Hatua ya 1: Anzisha vigezo vya mtandao (uzito na bias).
- Hatua ya 2: Kwa kila mfano wa mafunzo, fanya forward pass ili kuhesabu matokeo.
- Hatua ya 3: Hesabu hasara.
- Hatua ya 4: Hesabu gradients za hasara kuhusiana na kila parameter kwa kutumia sheria ya mnyororo.
- Hatua ya 5: Sasisha vigezo kwa kutumia algorithm ya kuboresha (mfano, gradient descent).
3. Uwiano wa Kihesabu
Fikiria mtandao rahisi wa neural wenye tabaka moja lililo fichwa:
4. Utekelezaji wa PyTorch
PyTorch inarahisisha mchakato huu kwa injini yake ya autograd.
import torch
import torch.nn as nn
import torch.optim as optim
# Define a simple neural network
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(10, 5) # Input layer to hidden layer
self.relu = nn.ReLU()
self.fc2 = nn.Linear(5, 1) # Hidden layer to output layer
self.sigmoid = nn.Sigmoid()
def forward(self, x):
h = self.relu(self.fc1(x))
y_hat = self.sigmoid(self.fc2(h))
return y_hat
# Instantiate the network
net = SimpleNet()
# Define loss function and optimizer
criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# Sample data
inputs = torch.randn(1, 10)
labels = torch.tensor([1.0])
# Training loop
optimizer.zero_grad() # Clear gradients
outputs = net(inputs) # Forward pass
loss = criterion(outputs, labels) # Compute loss
loss.backward() # Backward pass (compute gradients)
optimizer.step() # Update parameters
# Accessing gradients
for name, param in net.named_parameters():
if param.requires_grad:
print(f"Gradient of {name}: {param.grad}")
Katika msimbo huu:
- Forward Pass: Inakadiria matokeo ya mtandao.
- Backward Pass:
loss.backward()
inakadiria gradient za hasara kuhusiana na vigezo vyote. - Parameter Update:
optimizer.step()
inasasisha vigezo kulingana na gradient zilizokadiriwa.
5. Kuelewa Backward Pass
Wakati wa backward pass:
- PyTorch inatembea kwenye grafu ya hesabu kwa mpangilio wa kinyume.
- Kila operesheni, inatumia sheria ya mnyororo kukadiria gradient.
- Gradient zinakusanywa katika sifa ya
.grad
ya kila tensor ya parameter.
6. Faida za Tofauti Otomatiki
- Ufanisi: Inakwepa hesabu zisizo za lazima kwa kutumia matokeo ya kati.
- Usahihi: Inatoa derivatives sahihi hadi usahihi wa mashine.
- Urahisi wa Matumizi: Inondoa hesabu za mikono za derivatives.