ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ํ๋ ์ธ๊ณต์ง๋ฅ ํ์ต 2๋จ๊ณ: ์ธ๊ณต์ ๊ฒฝ๋ง๊ณผ ๋ฅ๋ฌ๋
octo54 2025. 5. 13. 11:48๐ ํ๋ ์ธ๊ณต์ง๋ฅ ํ์ต 2๋จ๊ณ: ์ธ๊ณต์ ๊ฒฝ๋ง๊ณผ ๋ฅ๋ฌ๋
๐ ํ์ต ๊ธฐ๊ฐ: 7~9๊ฐ์
๐ฏ ํ์ต ๋ชฉํ: ์ ๊ฒฝ๋ง ๋ชจ๋ธ์ ์ดํด์ ๋ฅ๋ฌ๋ ๊ธฐ๋ฒ ํ์ต
๐ 1. ์ธ๊ณต์ ๊ฒฝ๋ง(ANN) ๊ธฐ์ด
์ธ๊ณต์ ๊ฒฝ๋ง(Artificial Neural Network)์ ์ธ๊ฐ์ ๋ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฐฉํ์ฌ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
๋ด๋ฐ(Neuron)์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ์ธต(Layer)์ ๊ฑฐ์ณ ํ์ตํฉ๋๋ค.
๋ฅ๋ฌ๋์ ์ด๋ฌํ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ๋ฅผ ์ฌํํ์ฌ ๋ค์ธต ์ ๊ฒฝ๋ง์ ์ฌ์ฉํ๋ ๊ธฐ์ ์
๋๋ค.
๐ 1-1. ์ ๊ฒฝ๋ง์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์
์ ๊ฒฝ๋ง์ ์ ๋ ฅ์ธต(Input Layer), ์๋์ธต(Hidden Layer), **์ถ๋ ฅ์ธต(Output Layer)**์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ ๋ ฅ์ธต: ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๋ ์ธต
- ์๋์ธต: ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ํน์ง์ ์ถ์ถํ๋ ์ธต
- ์ถ๋ ฅ์ธต: ์ต์ข ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์ธต
๐ 1) ํผ์ ํธ๋ก (Perceptron)
ํผ์ ํธ๋ก ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ๊ฒฝ๋ง ๋จ์์ ๋๋ค.
- ์ ๋ ฅ๊ฐ xx์ ๊ฐ์ค์น ww๋ฅผ ๊ณฑํ์ฌ ํฉ์ฐ ํ, ํ์ฑํ ํจ์๋ฅผ ํตํด ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
y=f(∑wixi+b)y = f(\sum w_i x_i + b)
์ฌ๊ธฐ์ bb๋ ๋ฐ์ด์ด์ค๋ก, ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๐ป ์ฝ๋ ์ค์ต: ๋จ์ผ ํผ์ ํธ๋ก ๊ตฌํ
import numpy as np
# ํ์ฑํ ํจ์ (๊ณ๋จ ํจ์)
def step_function(x):
return np.where(x > 0, 1, 0)
# ์
๋ ฅ๊ฐ๊ณผ ๊ฐ์ค์น
x = np.array([1, 2])
w = np.array([0.5, -0.2])
b = -0.1
# ํผ์
ํธ๋ก ์ฐ์ฐ
output = step_function(np.dot(x, w) + b)
print(f"ํผ์
ํธ๋ก ์ถ๋ ฅ: {output}")
๐ 2) ํ์ฑํ ํจ์ (Activation Function)
ํ์ฑํ ํจ์๋ ์ ๋ ฅ ์ ํธ๋ฅผ ๋น์ ํ ๋ณํํ์ฌ ๋ค์ ์ธต์ผ๋ก ์ ๋ฌํฉ๋๋ค.
ํจ์ ์ด๋ฆ ์์ ํน์ง
ReLU | f(x)=maxโก(0,x)f(x) = \max(0, x) | ์์๋ฅผ 0์ผ๋ก ๋ณํ |
Sigmoid | f(x)=11+e−xf(x) = \frac{1}{1 + e^{-x}} | 0๊ณผ 1 ์ฌ์ด๋ก ์์ถ |
Tanh | f(x)=ex−e−xex+e−xf(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} | -1๊ณผ 1 ์ฌ์ด๋ก ์์ถ |
Softmax | exi∑exj\frac{e^{x_i}}{\sum e^{x_j}} | ํ๋ฅ ๋ก ๋ณํ (๋ถ๋ฅ) |
๐ป ์ฝ๋ ์ค์ต: ํ์ฑํ ํจ์ ๊ตฌํ
def relu(x):
return np.maximum(0, x)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def softmax(x):
exp_x = np.exp(x - np.max(x))
return exp_x / np.sum(exp_x)
# ์์
x = np.array([1.0, -1.0, 0.5])
print(f"ReLU: {relu(x)}")
print(f"Sigmoid: {sigmoid(x)}")
print(f"Softmax: {softmax(x)}")
๐ง 2. ๋ฅ๋ฌ๋ ๋ชจ๋ธ ํ์ต: PyTorch ์ฌ์ฉํ๊ธฐ
๋ฅ๋ฌ๋ ํ๋ ์์ํฌ ์ค PyTorch๋ ์ง๊ด์ ์ด๊ณ ์ ์ฐํ์ฌ ์ฐ๊ตฌ์ ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
๐ 2-1. PyTorch ๊ธฐ๋ณธ ๊ตฌ์กฐ
- ๋ฐ์ดํฐ ์ค๋น: ๋ฐ์ดํฐ์ ๋ก๋ฉ ๋ฐ ์ ์ฒ๋ฆฌ
- ๋ชจ๋ธ ์ ์: ์ ๊ฒฝ๋ง ์ํคํ ์ฒ ๊ตฌ์ถ
- ์์ค ํจ์: ์ค์ฐจ๋ฅผ ๊ณ์ฐํ๋ ํจ์
- ์ตํฐ๋ง์ด์ : ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น ์ ๋ฐ์ดํธ
- ํ๋ จ ๋ฐ ํ๊ฐ: ํ์ต ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ชจ๋ธ์ ํ์ตํ๊ณ ํ ์คํธ
๐ป ์ฝ๋ ์ค์ต: ๊ธฐ๋ณธ ์ ๊ฒฝ๋ง ๊ตฌํ
import torch
import torch.nn as nn
import torch.optim as optim
# ๋ฐ์ดํฐ ์ค๋น
X = torch.tensor([[1.0], [2.0], [3.0], [4.0]])
y = torch.tensor([[2.0], [4.0], [6.0], [8.0]])
# ๋ชจ๋ธ ์ ์
model = nn.Sequential(
nn.Linear(1, 1) # ์
๋ ฅ 1๊ฐ, ์ถ๋ ฅ 1๊ฐ
)
# ์์ค ํจ์์ ์ตํฐ๋ง์ด์
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# ํ์ต
for epoch in range(100):
model.train()
optimizer.zero_grad()
outputs = model(X)
loss = criterion(outputs, y)
loss.backward()
optimizer.step()
if (epoch+1) % 20 == 0:
print(f"Epoch [{epoch+1}/100], Loss: {loss.item():.4f}")
# ์์ธก
with torch.no_grad():
pred = model(torch.tensor([[5.0]]))
print(f"์์ธก๊ฐ: {pred.item()}")
๐ 3. ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง(CNN)
CNN์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํนํ๋ ์ ๊ฒฝ๋ง์ ๋๋ค.
- ํฉ์ฑ๊ณฑ ๋ ์ด์ด(Convolution Layer): ํน์ง ๋งต ์ถ์ถ
- ํ๋ง ๋ ์ด์ด(Pooling Layer): ํน์ง ๋งต ํฌ๊ธฐ ์ถ์
- ์์ ์ฐ๊ฒฐ ๋ ์ด์ด(Fully Connected Layer): ๋ถ๋ฅ ๊ฒฐ๊ณผ ๋์ถ
๐ป ์ฝ๋ ์ค์ต: CNN ๊ตฌํ
import torch.nn.functional as F
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3)
self.fc1 = nn.Linear(32*26*26, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = x.view(-1, 32*26*26)
x = self.fc1(x)
return F.log_softmax(x, dim=1)
model = SimpleCNN()
print(model)
๐ ํ์ต ์ฒดํฌ๋ฆฌ์คํธ:
- ์ธ๊ณต์ ๊ฒฝ๋ง์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ๊ตฌํํ ์ ์๋ค.
- ํ์ฑํ ํจ์์ ์ข ๋ฅ์ ํน์ฑ์ ๊ตฌ๋ถํ ์ ์๋ค.
- PyTorch๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ์ ๊ฒฝ๋ง์ ํ์ตํ ์ ์๋ค.
- CNN์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ํ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํ๋ค.
๐ก ์ค์ต ํ๋ก์ ํธ: ์ด๋ฏธ์ง ๋ถ๋ฅ ๋ชจ๋ธ ๋ง๋ค๊ธฐ (MNIST ๋ฐ์ดํฐ์ )
- ๋ชฉํ: ์๊ธ์จ ์ซ์ ์ธ์
- ๋ฐ์ดํฐ์ : MNIST (0~9 ์ซ์ ์ด๋ฏธ์ง)
- ๋ชจ๋ธ: CNN
์ฝ๋:
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# ๋ฐ์ดํฐ์
๋ก๋
transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
# ํ์ต ๋ฃจํ
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()
print(f"Epoch [{epoch+1}/5], Loss: {loss.item():.4f}")
์ธ๊ณต์ ๊ฒฝ๋ง, ๋ฅ๋ฌ๋, PyTorch, CNN, ํ์ฑํ ํจ์, ๋จธ์ ๋ฌ๋, ์ด๋ฏธ์ง ๋ถ๋ฅ, ์ ๊ฒฝ๋ง ๊ตฌํ, ๊ฒฝ์ฌํ๊ฐ๋ฒ, ์์ค ํจ์, ์ตํฐ๋ง์ด์
'Programming > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- ํ๋ก ํธ์๋
- SEO์ต์ ํ
- CI/CD
- Docker
- Next.js
- Python
- ํ๋ก ํธ์๋๋ฉด์
- LangChain
- ๋ฐฑ์๋๊ฐ๋ฐ
- nodejs
- ์น๊ฐ๋ฐ
- github
- App Router
- gatsbyjs
- Prisma
- llm
- Webpack
- kotlin
- rag
- fastapi
- AI์ฑ๋ด
- seo ์ต์ ํ 10๊ฐ
- nextJS
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- NestJS
- REACT
- ๊ด๋ฆฌ์
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- PostgreSQL
- Ktor
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |