코딩

[Python] 행렬 미분 정리

obin01 2025. 2. 19. 21:06

1. 행렬미분

스칼라, 벡터, 행렬에 대한 미분을 포함하며 그레디언트 행렬 또는 야코비안 행렬로 표현됨

머신러닝에서는 선형 회귀, 로지스틱 회귀, 신경망의 역전파등의 활용

2. 경사 하강법에 활용

import torch

# 데이터 정의 (입력 X, 정답 y)
# 입력 데이터
X = torch.tensor([[1.0], [2.0], [3.0]], requires_grad=False)
# 실제 값 (y = 2x)
y = torch.tensor([[2.0], [4.0], [6.0]], requires_grad=False)

# 가중치 초기화 (학습할 값)
w = torch.tensor([[1.0]], requires_grad=True)  # 초기값 w = 1.0

# 학습률 설정
lr = 0.1  

for epoch in range(10):
    y_pred = X @ w
    # 손실 함수
    loss = ((y_pred - y) ** 2).mean()
	# 미분 계산
    loss.backward()
    
    with torch.no_grad():
    	# 경사 하강법 적용
        w -= lr * w.grad
        # 기울기 초기화
        w.grad.zero_()

    print(f"Epoch {epoch+1}: Loss = {loss.item()}, w = {w.item()}")

 

결과)