보통 딥러닝을 deep neural network라고 부르거나, fully connected layer라고
부르기도 한다. 혹은 MLP(Multi Layer Perceptron)이라고 부르기도 한다.
MLP는 공부를 좀 해봐서 이번 수업 때도 그리 어렵지는 않았다.

01. MLP는 무엇인가?

  • MLP (다층 퍼셉트론, Multi-Layer Perceptron)은 인공신경망(ANN)의 가장 기본적인 형태로, 하나 이상의 은닉층(hidden layer)을 포함한 Fully Connected Network를 의미함
  • MLP의 구성 요소
    • 입력층(Input Layer)
    • 은닉층(Hidden Layer)
    • 출력층(Output Layer)
  • 각 층의 뉴런들이 다음 층의 모든 뉴런과 연결되어 있기 때문에 ‘fully connected’ 혹은 ‘dense’ layer 라고도 부름

02. Perceptron은 무엇일까?

  • 인공지능에서 인간의 두뇌(뉴런, 시냅스)를 모방해서 만든 신경망을
    구성하는 것을 perceptron이라고 부름
  • Perceptron은 단일 뉴런 구조
    output=f(WTX+b)output = f(W^TX + b)
  • 수식 설명
    • XX : 입력벡터
    • WW : 가중치벡터
    • bb : bias
    • ff : activation function(활성화 함수)

03. 비선형 함수

  • 활성화 함수가 선형일 경우, MLP는 선형 모델과 다를 것이 없음
  • '비선형적인 패턴'을 더 잘 학습하도록 하기 위해, '비선형'의 활성화
    함수를 사용함
  • 활성화 함수에는 크게 세 가지가 있음
    • ReLU
    • Sigmoid
    • tanh

04. Loss Function & Backpropagation

  • MLP는 loss를 최소화하는 방향으로 학습
    • 예: 분류 문제 → CrossEntropyLoss
  • 역전파(Backpropagation)를 통해 각 가중치의 기울기(gradient)를 계산하고 Optimizer(SGD, Adam 등)를 통해 파라미터를 업데이트

05. MLP가 활용되는 영역

  • MLP는 기본적으로 고정된 길이의 벡터 입력을 받아 처리
    • 이미지 분류 (28×28 픽셀 → 784 vector)
      • 물론 이미지 분류는 CNN(Convolutional Neural Network)가
        성능이 훨씬 좋음
    • 이진 분류 / 다중 분류
    • 회귀 문제

06. MLP의 한계

  • CNN처럼 공간적 특징(feature)을 잡아낼 수 없기 때문에 정보가 소실됨
  • RNN처럼 순차적인 정보를 처리하지는 못함
  • 파라미터 수 많음(Dense하게 연결되어 있기 때문)

07. 예시

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 데이터 로딩
train_loader = torch.utils.data.DataLoader(
    datasets.MNIST('.', train=True, download=True,
                   transform=transforms.ToTensor()),
    batch_size=64, shuffle=True)

# 모델 정의
class MLP(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(28*28, 128)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(128, 10)
        
    def forward(self, x):
        x = x.view(-1, 28*28)  # flatten
        x = self.relu(self.fc1(x))
        return self.fc2(x)

model = MLP()
optimizer = optim.Adam(model.parameters())
criterion = nn.CrossEntropyLoss()

# 학습
for epoch in range(5):
    for images, labels in train_loader:
        output = model(images)
        loss = criterion(output, labels)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
profile
2025화이팅!

0개의 댓글