AI_beginner/
└── 01_sine_mlp/
    ├── model.py       # 신경망 구조
    ├── train.py       # 데이터 생성 및 학습
    └── outputs/       # 학습 결과 저장 => 사진으로 

위와 같은 구조로 설계했으며 train.py이 main과 같은 역학로 model.pyimport하는 구조

image.png

import torch
import torch.nn as nn

class SineMLP(nn.Module):
    def __init__(self):
        super().__init__()

        self.network = nn.Sequential(
            nn.Linear(1, 32),  # 입력 1개 → 뉴런 32개
            nn.ReLU(),
            nn.Linear(32, 32),
            nn.ReLU(),
            nn.Linear(32, 1)   # 뉴런 32개 → 출력 1개
        )

    def forward(self, x):
        return self.network(x)
# 1. 순전파(forward): 현재 가중치로 예측
y_prediction = model.forward(x_train)
=> 이전의 가중치를 기반으로 forward한 방향으로 예측값을 계산함

# 2. 예측값과 정답의 오차 계산
loss = loss_function(y_prediction, y_train)
=> loss_function = torch.nn.MSELoss()로 정의했기에 이를 기반으로 값 계산

# 3. 이전 반복에서 저장된 기울기 초기화
optimizer.zero_grad()
=> 변수 정리

# 4. 역전파(backward): Loss를 기준으로 각 weight의 기울기 계산
loss.backward()
=> 역전파를 기반으로 각 지점에서의 weight를 계산

# 5. 계산된 기울기를 이용해 weight와 bias 수정
optimizer.step()

MLP의 한계성

⇒ 즉 MLP는 가장 기본적으로 상태값을 기반으로 NN 가중치를 수정하는 단순구조