본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작

강의 종료

수강 인증

학습 인증샷

강의 후기
딥러닝 추천 모델의 필요성
비선형적인 패턴 학습
비정형 데이터 학습
병렬처리 분산컴퓨팅 gpu 사용 등 대규모 데이터 처리에 효율적
ch03-01. 딥러닝이란
적절한 수의 뉴런과 활성함수가 있다면, 어디든 갈 수 있어
적절한 수의 뉴런과 활성함수는 어떻게 정하지?
=>
1. 경험 기반 설정
점진적 실험
성능 vs 파라미터 수 트레이드오프
결국 여러가지 경우의 수를 테스트 해야한다
이 점이 딥러닝 모델의 블랙박스와 유사한 경우라고 생각한다.
어떻게 계산해서 추천한지를 모르는 것 처럼
뉴런을 어떻게 구성해야 잘 추천할 수 있는지 또한 모험을 통해 알아가야한다.
그래서 더더욱 데이터 최적화와 학습 최적화가 중요하다.
정해진 공식이 없어 간단한 가이드라인을 따르지만 결국 경험을 기반한 튜닝이 중요하다.
데이터가 적으면 간단하게 시작하고
데이터가 크고 복잡하면 더 깊고 넓게 시도해볼 수 있다.
다양한 layer, batchnorm, dropout, activation function 들을 조합 별 학습시키고 최고의 결과를 출력하는 파이토치 베이스 코드
import torch
import torch.nn as nn
import torch.optim as optim
import itertools
# 1. 학습 데이터 준비 (y = 2x + 1)
X = torch.tensor([[1.0], [2.0], [3.0], [4.0]])
y = torch.tensor([[3.0], [5.0], [7.0], [9.0]])
# 2. 실험 파라미터
hidden_layer_configs = [
[32],
[64, 32],
[128, 64, 32]
]
activation_functions = {
'ReLU': nn.ReLU,
'Tanh': nn.Tanh,
'Sigmoid': nn.Sigmoid
}
batchnorm_options = [True, False]
dropout_options = [True, False]
dropout_prob = 0.3 # 고정
# 3. MLP 클래스 정의
class MLP(nn.Module):
def __init__(self, input_dim, hidden_dims, output_dim, activation_fn, use_bn=False, use_dropout=False, dropout_p=0.3):
super(MLP, self).__init__()
layers = []
prev_dim = input_dim
for dim in hidden_dims:
layers.append(nn.Linear(prev_dim, dim))
if use_bn:
layers.append(nn.BatchNorm1d(dim))
layers.append(activation_fn())
if use_dropout:
layers.append(nn.Dropout(p=dropout_p))
prev_dim = dim
layers.append(nn.Linear(prev_dim, output_dim))
self.model = nn.Sequential(*layers)
def forward(self, x):
return self.model(x)
# 4. 학습 함수
def train(model, X, y, epochs=500, lr=0.01):
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=lr)
for epoch in range(epochs):
model.train()
pred = model(X)
loss = criterion(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
return loss.item()
# 5. 조합별 실험
best_loss = float('inf')
best_model_state = None
best_config = None
combinations = itertools.product(
hidden_layer_configs,
activation_functions.items(),
batchnorm_options,
dropout_options
)
print("모든 조합 실험 시작...\n")
for hidden_dims, (act_name, act_fn), use_bn, use_dropout in combinations:
model = MLP(
input_dim=1,
hidden_dims=hidden_dims,
output_dim=1,
activation_fn=act_fn,
use_bn=use_bn,
use_dropout=use_dropout,
dropout_p=dropout_prob
)
loss = train(model, X, y)
print(f"Structure {hidden_dims}, Act {act_name}, BN {use_bn}, Dropout {use_dropout} → Loss: {loss:.6f}")
if loss < best_loss:
best_loss = loss
best_model_state = model.state_dict()
best_config = {
'hidden_dims': hidden_dims,
'activation': act_name,
'batchnorm': use_bn,
'dropout': use_dropout
}
# 6. 저장
torch.save({
'config': best_config,
'state_dict': best_model_state
}, "best_model.pt")
# 7. 결과 출력
print("\n✅ Best Model Configuration:")
print(f" Structure : {best_config['hidden_dims']}")
print(f" Activation : {best_config['activation']}")
print(f" BatchNorm : {best_config['batchnorm']}")
print(f" Dropout : {best_config['dropout']}")
print(f" Final Loss : {best_loss:.6f}")
print("📦 모델이 best_model.pt에 저장되었습니다.")
실제 서비스에서는 layer의 순서 또한 고려해야겠지만 좋은 gpu를 가지고 빨리 처리하면,,ㅋ,ㅋ
'패스트캠퍼스' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 10일차 : 30개 프로젝트로 끝내는 추천시스템 구현 초격차 패키지 강의 후기 (0) | 2025.04.10 |
|---|---|
| 패스트캠퍼스 환급챌린지 9일차 : 30개 프로젝트로 끝내는 추천시스템 구현 초격차 패키지 강의 후기 (0) | 2025.04.09 |
| 패스트캠퍼스 환급챌린지 7일차 : 30개 프로젝트로 끝내는 추천시스템 구현 초격차 패키지 강의 후기 (0) | 2025.04.07 |
| 패스트캠퍼스 환급챌린지 6일차 : 30개 프로젝트로 끝내는 추천시스템 구현 초격차 패키지 강의 후기 (0) | 2025.04.06 |
| 패스트캠퍼스 환급챌린지 5일차 : 30개 프로젝트로 끝내는 추천시스템 구현 초격차 패키지 강의 후기 (0) | 2025.04.05 |