0. Basic LLM Concepts

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 μ§€μ›ν•˜κΈ°

Pretraining

Pretraining은 λŒ€κ·œλͺ¨ μ–Έμ–΄ λͺ¨λΈ(LLM)을 κ°œλ°œν•˜λŠ” 데 μžˆμ–΄ 기초적인 λ‹¨κ³„λ‘œ, λͺ¨λΈμ΄ λ°©λŒ€ν•œ μ–‘μ˜ λ‹€μ–‘ν•œ ν…μŠ€νŠΈ 데이터에 λ…ΈμΆœλ˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 이 λ‹¨κ³„μ—μ„œ LLM은 μ–Έμ–΄μ˜ κΈ°λ³Έ ꡬ쑰, νŒ¨ν„΄ 및 λ‰˜μ•™μŠ€λ₯Ό ν•™μŠ΅ν•©λ‹ˆλ‹€, μ—¬κΈ°μ—λŠ” 문법, μ–΄νœ˜, ꡬ문 및 λ§₯락적 관계가 ν¬ν•¨λ©λ‹ˆλ‹€. 이 λ°©λŒ€ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ λͺ¨λΈμ€ 언어와 일반 세계 지식에 λŒ€ν•œ 폭넓은 이해λ₯Ό μ–»κ²Œ λ©λ‹ˆλ‹€. 이 포괄적인 κΈ°λ°˜μ€ LLM이 μΌκ΄€λ˜κ³  λ§₯락적으둜 κ΄€λ ¨λœ ν…μŠ€νŠΈλ₯Ό 생성할 수 있게 ν•©λ‹ˆλ‹€. 이후 이 사전 ν›ˆλ ¨λœ λͺ¨λΈμ€ νŠΉμ • μž‘μ—…μ΄λ‚˜ 도메인에 맞게 λŠ₯λ ₯을 μ‘°μ •ν•˜κΈ° μœ„ν•΄ μ „λ¬Έ λ°μ΄ν„°μ…‹μ—μ„œ μΆ”κ°€ ν›ˆλ ¨μ„ λ°›λŠ” λ―Έμ„Έ μ‘°μ • 과정을 κ±°μΉ  수 있으며, μ΄λŠ” λͺ©ν‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œμ˜ μ„±λŠ₯κ³Ό 관련성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

Main LLM components

보톡 LLM은 ν›ˆλ ¨μ— μ‚¬μš©λœ κ΅¬μ„±μœΌλ‘œ νŠΉμ§•μ§€μ–΄μ§‘λ‹ˆλ‹€. LLM ν›ˆλ ¨ μ‹œ 일반적인 ꡬ성 μš”μ†ŒλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • Parameters: ParametersλŠ” μ‹ κ²½λ§μ˜ ν•™μŠ΅ κ°€λŠ₯ν•œ κ°€μ€‘μΉ˜μ™€ 편ν–₯μž…λ‹ˆλ‹€. μ΄λŠ” ν›ˆλ ¨ κ³Όμ •μ—μ„œ 손싀 ν•¨μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜κ³  λͺ¨λΈμ˜ μž‘μ—… μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‘°μ •λ˜λŠ” μˆ«μžμž…λ‹ˆλ‹€. LLM은 보톡 수백만 개의 λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Context Length: μ΄λŠ” LLM을 사전 ν›ˆλ ¨ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 각 λ¬Έμž₯의 μ΅œλŒ€ κΈΈμ΄μž…λ‹ˆλ‹€.
  • Embedding Dimension: 각 토큰 λ˜λŠ” 단어λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λ˜λŠ” λ²‘ν„°μ˜ ν¬κΈ°μž…λ‹ˆλ‹€. LLM은 보톡 μˆ˜μ‹­μ–΅ 개의 차원을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Hidden Dimension: μ‹ κ²½λ§μ˜ μˆ¨κ²¨μ§„ 측의 ν¬κΈ°μž…λ‹ˆλ‹€.
  • Number of Layers (Depth): λͺ¨λΈμ΄ κ°€μ§„ 측의 μˆ˜μž…λ‹ˆλ‹€. LLM은 보톡 μˆ˜μ‹­ 개의 측을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Number of Attention Heads: λ³€ν™˜κΈ° λͺ¨λΈμ—μ„œ 각 측에 μ‚¬μš©λ˜λŠ” κ°œλ³„ 주의 λ©”μ»€λ‹ˆμ¦˜μ˜ μˆ˜μž…λ‹ˆλ‹€. LLM은 보톡 μˆ˜μ‹­ 개의 ν—€λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • Dropout: Dropout은 ν›ˆλ ¨ 쀑 μ œκ±°λ˜λŠ” λ°μ΄ν„°μ˜ λΉ„μœ¨(ν™•λ₯ μ΄ 0으둜 변함)κ³Ό 같은 κ²ƒμœΌλ‘œ, 과적합을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. LLM은 보톡 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

In PyTorch, a tensorλŠ” 슀칼라, 벑터 및 ν–‰λ ¬κ³Ό 같은 κ°œλ…μ„ 잠재적으둜 더 높은 μ°¨μ›μœΌλ‘œ μΌλ°˜ν™”ν•˜λŠ” 닀차원 λ°°μ—΄λ‘œμ„œ κΈ°λ³Έ 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€. ν…μ„œλŠ” 특히 λ”₯ λŸ¬λ‹ 및 μ‹ κ²½λ§μ˜ λ§₯λ½μ—μ„œ PyTorchμ—μ„œ 데이터가 ν‘œν˜„λ˜κ³  μ‘°μž‘λ˜λŠ” μ£Όμš” λ°©λ²•μž…λ‹ˆλ‹€.

Mathematical Concept of Tensors

  • Scalars: μˆœμœ„ 0의 ν…μ„œλ‘œ, 단일 숫자(0차원)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예: 5
  • Vectors: μˆœμœ„ 1의 ν…μ„œλ‘œ, 숫자의 1차원 배열을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예: [5,1]
  • Matrices: μˆœμœ„ 2의 ν…μ„œλ‘œ, ν–‰κ³Ό 열이 μžˆλŠ” 2차원 배열을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예: [[1,3], [5,2]]
  • Higher-Rank Tensors: μˆœμœ„ 3 μ΄μƒμ˜ ν…μ„œλ‘œ, 더 높은 μ°¨μ›μ—μ„œ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€(예: 컬러 이미지λ₯Ό μœ„ν•œ 3D ν…μ„œ).

Tensors as Data Containers

계산적 κ΄€μ μ—μ„œ ν…μ„œλŠ” 닀차원 데이터λ₯Ό μœ„ν•œ μ»¨ν…Œμ΄λ„ˆ 역할을 ν•˜λ©°, 각 차원은 λ°μ΄ν„°μ˜ λ‹€μ–‘ν•œ νŠΉμ§•μ΄λ‚˜ 츑면을 λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν…μ„œκ°€ λ¨Έμ‹  λŸ¬λ‹ μž‘μ—…μ—μ„œ λ³΅μž‘ν•œ 데이터 μ„ΈνŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 맀우 μ ν•©ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.

PyTorch Tensors vs. NumPy Arrays

PyTorch ν…μ„œλŠ” 숫자 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‘°μž‘ν•˜λŠ” λŠ₯λ ₯μ—μ„œ NumPy λ°°μ—΄κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ, λ”₯ λŸ¬λ‹μ— μ€‘μš”ν•œ μΆ”κ°€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€:

  • Automatic Differentiation: PyTorch ν…μ„œλŠ” 기울기(autograd)의 μžλ™ 계산을 μ§€μ›ν•˜μ—¬ 신경망 ν›ˆλ ¨μ— ν•„μš”ν•œ 미뢄을 κ³„μ‚°ν•˜λŠ” 과정을 λ‹¨μˆœν™”ν•©λ‹ˆλ‹€.
  • GPU Acceleration: PyTorch의 ν…μ„œλŠ” GPU둜 μ΄λ™ν•˜κ³  GPUμ—μ„œ 계산할 수 μžˆμ–΄ λŒ€κ·œλͺ¨ 계산을 크게 κ°€μ†ν™”ν•©λ‹ˆλ‹€.

Creating Tensors in PyTorch

You can create tensors using the torch.tensor function:

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]]])

ν…μ„œ 데이터 μœ ν˜•

PyTorch ν…μ„œλŠ” μ •μˆ˜ 및 뢀동 μ†Œμˆ˜μ  μˆ«μžμ™€ 같은 λ‹€μ–‘ν•œ μœ ν˜•μ˜ 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν…μ„œμ˜ 데이터 μœ ν˜•μ€ .dtype 속성을 μ‚¬μš©ν•˜μ—¬ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

tensor1d = torch.tensor([1, 2, 3])
print(tensor1d.dtype)  # Output: torch.int64
  • Python μ •μˆ˜λ‘œ μƒμ„±λœ ν…μ„œλŠ” torch.int64 μœ ν˜•μž…λ‹ˆλ‹€.
  • Python 뢀동 μ†Œμˆ˜μ μœΌλ‘œ μƒμ„±λœ ν…μ„œλŠ” torch.float32 μœ ν˜•μž…λ‹ˆλ‹€.

ν…μ„œμ˜ 데이터 μœ ν˜•μ„ λ³€κ²½ν•˜λ €λ©΄ .to() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ„Έμš”:

float_tensor = tensor1d.to(torch.float32)
print(float_tensor.dtype)  # Output: torch.float32

Common Tensor Operations

PyTorchλŠ” ν…μ„œλ₯Ό μ‘°μž‘ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ μž‘μ—…μ„ μ œκ³΅ν•©λ‹ˆλ‹€:

  • Accessing Shape: .shapeλ₯Ό μ‚¬μš©ν•˜μ—¬ ν…μ„œμ˜ 차원을 κ°€μ Έμ˜΅λ‹ˆλ‹€.
print(tensor2d.shape)  # Output: torch.Size([2, 2])
  • Reshaping Tensors: .reshape() λ˜λŠ” .view()λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨μ–‘을 λ³€κ²½ν•©λ‹ˆλ‹€.
reshaped = tensor2d.reshape(4, 1)
  • Transposing Tensors: .Tλ₯Ό μ‚¬μš©ν•˜μ—¬ 2D ν…μ„œλ₯Ό μ „μΉ˜ν•©λ‹ˆλ‹€.
transposed = tensor2d.T
  • Matrix Multiplication: .matmul() λ˜λŠ” @ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
result = tensor2d @ tensor2d.T

Importance in Deep Learning

ν…μ„œλŠ” PyTorchμ—μ„œ 신경망을 κ΅¬μΆ•ν•˜κ³  ν›ˆλ ¨ν•˜λŠ” 데 ν•„μˆ˜μ μž…λ‹ˆλ‹€:

  • μž…λ ₯ 데이터, κ°€μ€‘μΉ˜ 및 편ν–₯을 μ €μž₯ν•©λ‹ˆλ‹€.
  • ν›ˆλ ¨ μ•Œκ³ λ¦¬μ¦˜μ—μ„œ μˆœμ „νŒŒ 및 μ—­μ „νŒŒμ— ν•„μš”ν•œ μž‘μ—…μ„ μš©μ΄ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  • autogradλ₯Ό 톡해 ν…μ„œλŠ” 기울기의 μžλ™ 계산을 κ°€λŠ₯ν•˜κ²Œ ν•˜μ—¬ μ΅œμ ν™” ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°„μ†Œν™”ν•©λ‹ˆλ‹€.

Automatic Differentiation

Automatic differentiation (AD)은 ν•¨μˆ˜μ˜ **λ„ν•¨μˆ˜(기울기)**λ₯Ό 효율적이고 μ •ν™•ν•˜κ²Œ ν‰κ°€ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 계산 κΈ°μˆ μž…λ‹ˆλ‹€. μ‹ κ²½λ§μ˜ λ§₯λ½μ—μ„œ ADλŠ” κ²½λŸ‰ ν•˜κ°•λ²•κ³Ό 같은 μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜μ— ν•„μš”ν•œ 기울기λ₯Ό 계산할 수 있게 ν•©λ‹ˆλ‹€. PyTorchλŠ” 이 과정을 λ‹¨μˆœν™”ν•˜λŠ” autogradλΌλŠ” μžλ™ λ―ΈλΆ„ 엔진을 μ œκ³΅ν•©λ‹ˆλ‹€.

Mathematical Explanation of Automatic Differentiation

1. The Chain Rule

μžλ™ λ―ΈλΆ„μ˜ 핡심은 λ―Έμ λΆ„ν•™μ˜ 연쇄 λ²•μΉ™μž…λ‹ˆλ‹€. 연쇄 법칙에 λ”°λ₯΄λ©΄, ν•¨μˆ˜μ˜ 쑰합이 μžˆμ„ λ•Œ, ν•©μ„± ν•¨μˆ˜μ˜ λ„ν•¨μˆ˜λŠ” κ΅¬μ„±λœ ν•¨μˆ˜μ˜ λ„ν•¨μˆ˜μ˜ κ³±μž…λ‹ˆλ‹€.

μˆ˜ν•™μ μœΌλ‘œ, y=f(u)이고 u=g(x)일 λ•Œ, yλ₯Ό x에 λŒ€ν•΄ λ―ΈλΆ„ν•œ 값은:

2. Computational Graph

ADμ—μ„œ 계산은 계산 κ·Έλž˜ν”„μ˜ λ…Έλ“œλ‘œ ν‘œν˜„λ˜λ©°, 각 λ…Έλ“œλŠ” μž‘μ—… λ˜λŠ” λ³€μˆ˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이 κ·Έλž˜ν”„λ₯Ό νƒμƒ‰ν•¨μœΌλ‘œμ¨ μš°λ¦¬λŠ” 기울기λ₯Ό 효율적으둜 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. Example

κ°„λ‹¨ν•œ ν•¨μˆ˜λ₯Ό κ³ λ €ν•΄ λ΄…μ‹œλ‹€:

μ—¬κΈ°μ„œ:

  • Οƒ(z)λŠ” μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜μž…λ‹ˆλ‹€.
  • y=1.0은 λͺ©ν‘œ λ ˆμ΄λΈ”μž…λ‹ˆλ‹€.
  • L은 μ†μ‹€μž…λ‹ˆλ‹€.

μš°λ¦¬λŠ” 손싀 L을 κ°€μ€‘μΉ˜ w와 편ν–₯ b에 λŒ€ν•΄ 기울기λ₯Ό κ³„μ‚°ν•˜κ³ μž ν•©λ‹ˆλ‹€.

4. Computing Gradients Manually

5. Numerical Calculation

Implementing Automatic Differentiation in PyTorch

이제 PyTorchκ°€ 이 과정을 μ–΄λ–»κ²Œ μžλ™ν™”ν•˜λŠ”μ§€ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

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])

더 큰 μ‹ κ²½λ§μ—μ„œμ˜ μ—­μ „νŒŒ

1. λ‹€μΈ΅ λ„€νŠΈμ›Œν¬λ‘œ ν™•μž₯ν•˜κΈ°

μ—¬λŸ¬ 측을 κ°€μ§„ 더 큰 μ‹ κ²½λ§μ—μ„œλŠ” λ§€κ°œλ³€μˆ˜μ™€ μ—°μ‚°μ˜ μˆ˜κ°€ 증가함에 따라 기울기λ₯Ό κ³„μ‚°ν•˜λŠ” 과정이 더 λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κΈ°λ³Έ μ›λ¦¬λŠ” λ™μΌν•˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€:

  • μˆœμ „νŒŒ: 각 측을 톡해 μž…λ ₯을 μ „λ‹¬ν•˜μ—¬ λ„€νŠΈμ›Œν¬μ˜ 좜λ ₯을 κ³„μ‚°ν•©λ‹ˆλ‹€.
  • 손싀 계산: λ„€νŠΈμ›Œν¬μ˜ 좜λ ₯κ³Ό λͺ©ν‘œ λ ˆμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ 손싀 ν•¨μˆ˜λ₯Ό ν‰κ°€ν•©λ‹ˆλ‹€.
  • μ—­μ „νŒŒ (Backpropagation): 좜λ ₯μΈ΅μ—μ„œ μž…λ ₯측으둜 체인 룰을 μž¬κ·€μ μœΌλ‘œ μ μš©ν•˜μ—¬ λ„€νŠΈμ›Œν¬μ˜ 각 λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ μ†μ‹€μ˜ 기울기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.

2. μ—­μ „νŒŒ μ•Œκ³ λ¦¬μ¦˜

  • 1단계: λ„€νŠΈμ›Œν¬ λ§€κ°œλ³€μˆ˜(κ°€μ€‘μΉ˜ 및 편ν–₯)λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  • 2단계: 각 ν›ˆλ ¨ μ˜ˆμ œμ— λŒ€ν•΄ μˆœμ „νŒŒλ₯Ό μˆ˜ν–‰ν•˜μ—¬ 좜λ ₯을 κ³„μ‚°ν•©λ‹ˆλ‹€.
  • 3단계: 손싀을 κ³„μ‚°ν•©λ‹ˆλ‹€.
  • 4단계: 체인 룰을 μ‚¬μš©ν•˜μ—¬ 각 λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ μ†μ‹€μ˜ 기울기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
  • 5단계: μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜(예: κ²½λŸ‰ ν•˜κ°•λ²•)을 μ‚¬μš©ν•˜μ—¬ λ§€κ°œλ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

3. μˆ˜ν•™μ  ν‘œν˜„

ν•˜λ‚˜μ˜ 은닉측을 κ°€μ§„ κ°„λ‹¨ν•œ 신경망을 κ³ λ €ν•΄ λ³΄μ‹­μ‹œμ˜€:

4. PyTorch κ΅¬ν˜„

PyTorchλŠ” 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}")

이 μ½”λ“œμ—μ„œ:

  • Forward Pass: λ„€νŠΈμ›Œν¬μ˜ 좜λ ₯을 κ³„μ‚°ν•©λ‹ˆλ‹€.
  • Backward Pass: loss.backward()λŠ” 손싀에 λŒ€ν•œ λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ˜ 기울기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
  • Parameter Update: optimizer.step()λŠ” κ³„μ‚°λœ 기울기λ₯Ό 기반으둜 λ§€κ°œλ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

5. Understanding Backward Pass

μ—­μ „νŒŒ λ™μ•ˆ:

  • PyTorchλŠ” 계산 κ·Έλž˜ν”„λ₯Ό μ—­μˆœμœΌλ‘œ νƒμƒ‰ν•©λ‹ˆλ‹€.
  • 각 연산에 λŒ€ν•΄ 체인 룰을 μ μš©ν•˜μ—¬ 기울기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
  • κΈ°μšΈκΈ°λŠ” 각 λ§€κ°œλ³€μˆ˜ ν…μ„œμ˜ .grad 속성에 λˆ„μ λ©λ‹ˆλ‹€.

6. Advantages of Automatic Differentiation

  • Efficiency: 쀑간 κ²°κ³Όλ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ 쀑볡 계산을 ν”Όν•©λ‹ˆλ‹€.
  • Accuracy: 기계 μ •λ°€λ„κΉŒμ§€ μ •ν™•ν•œ λ„ν•¨μˆ˜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • Ease of Use: λ„ν•¨μˆ˜μ˜ μˆ˜λ™ 계산을 μ œκ±°ν•©λ‹ˆλ‹€.

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 μ§€μ›ν•˜κΈ°