1. 손실함수(Loss Function)
1) 손실함수
손실함수는 딥러닝 모델을 학습시키는 과정에서 사용하는 기준으로, 모델의 예측값과 실제값 사이의 차이를 측정합니다.
이 차이, 즉 '손실'을 통해 모델의 성능을 평가하고, 모델의 파라미터를 최적화하기 위한 기준으로 활용됩니다.
손실함수의 값이 낮을수록 모델의 예측이 실제값과 더 잘 일치한다는 것을 의미하며, 모델 학습의 목표는 이 손실함수의 값을 최소화하는 것입니다.
파이토치는 다양한 종류의 손실함수를 제공하며, 이는 주로 사용되는 문제의 유형(예: 회귀, 분류 등)에 따라 선택됩니다.
아래는 손실함수의 예시입니다.
- 평균 제곱 오차 손실(Mean Squared Error Loss, MSE):
회귀 문제에 주로 사용되며, 예측값과 실제값의 차이를 제곱하여 평균한 값입니다.
torch.nn.MSELoss() - 교차 엔트로피 손실(Cross-Entropy Loss):
분류 문제에 주로 사용되며, 모델이 실제 클래스를 정확히 예측하는 데 얼마나 잘하는지를 측정합니다.
torch.nn.CrossEntropyLoss() - 이진 교차 엔트로피 손실(Binary Cross-Entropy Loss):
이진 분류 문제에 사용되며, 두 클래스에 대한 예측 확률을 사용하여 손실을 계산합니다.
torch.nn.BCELoss()
2) 사용방법
손실함수를 사용하는 방법은 간단합니다.
먼저 손실함수의 인스턴스를 생성하고, 모델의 예측값과 실제값을 손실함수에 전달하여 손실값을 계산합니다.
그 후, 이 손실값을 사용하여 모델의 파라미터를 업데이트하는 과정(예: 역전파)을 수행합니다.
- 손실함수 인스턴스 생성
- 모델의 예측값과 실제값을 손실함수에 전달
- 손실함수가 반환한 손실값을 이용해 역전파 계산
3) 손실함수의 종류
2. 옵티마이저(Optimizer)
1) 옵티마이저
딥러닝 모델을 훈련시키는 과정에서, 우리의 목표는 손실 함수(loss function)의 값을 최소화하고 가장 정확한 예측을 할 수 있는 모델 파라미터를 찾는 것입니다.
이 목표를 달성하기 위해 사용하는 도구가 바로 '옵티마이저(optimizer)'입니다.
옵티마이저는 모델이 학습 데이터로부터 얼마나 잘 학습하고 있는지를 평가하는 손실 함수의 값을 최소화하기 위해 모델 파라미터를 조정하는 방법을 정의합니다.
이 과정에서 사용하는 가장 기본적인 알고리즘은 '경사 하강법(Gradient Descent)'입니다.
경사 하강법은 손실 함수의 기울기(gradient)를 계산하여, 이 기울기가 감소하는 방향으로 모델 파라미터를 조금씩 업데이트합니다.
하지만 실제로는 경사 하강법의 여러 변형이 존재합니다.
이들 각각은 다른 수학적 기법을 적용해, 학습과정의 속도를 개선하거나, 더 나은 수렴을 달성하도록 설계되었습니다.
대표적인 옵티마이저로는 SGD(Stochastic Gradient Descent), Adam, RMSprop 등이 있습니다.
옵티마이저의 선택은 모델의 성능에 큰 영향을 미칠 수 있으며, 사용되는 데이터셋이나 모델의 구조에 따라 최적의 옵티마이저가 달라질 수 있습니다.
따라서 다양한 옵티마이저를 실험해보고, 문제에 가장 적합한 옵션을 찾는 것이 중요합니다.
2) 옵티마이저 사용 방법
옵티마이저는 torch.optim 모듈에서 불러올 수 있습니다.
import torch.optim as optim
다음으로, 옵티마이저 객체를 생성합니다.
옵티마이저 객체를 생성할 때는 최소 두 가지 주요 인자를 전달해야 합니다.
모델의 파라미터 model.parameters()와 학습률(lr) 입니다.
3) 옵티마이저의 종류
4) 코드예시
# 딥러닝 모델 정의
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.layer1 = nn.Linear(in_features=1, out_features=5) # 첫 번째 선형 레이어
self.relu = nn.ReLU() # ReLU 활성화 함수
self.layer2 = nn.Linear(in_features=5, out_features=1) # 두 번째 선형 레이어
def forward(self, x):
x = self.layer1(x)
x = self.relu(x)
x = self.layer2(x)
return x
# 모델 인스턴스 생성
model = SimpleNN()
# SGD 옵티마이저 설정
optimizer = optim.SGD(model.parameters(), lr=0.01)
print(optimizer)
SGD (
Parameter Group 0
dampening: 0
differentiable: False
foreach: None
fused: None
lr: 0.01
maximize: False
momentum: 0
nesterov: False
weight_decay: 0
)
'딥러닝 > 딥러닝: PyTorch' 카테고리의 다른 글
PyTorch 10 : CPU와 GPU사용 (0) | 2025.01.19 |
---|---|
PyTorch 9 : 모델 학습 및 평가 (0) | 2025.01.19 |
PyTorch 7 : 사용자 정의 연산 (0) | 2025.01.18 |
PyTorch 6 : 딥러닝 모델 만들기 (torch.nn) (0) | 2025.01.17 |
PyTorch 5 : 데이터 로딩과 전처리 (0) | 2025.01.12 |