Created at : 2024-06-26 11:48
Auther: Soo.Y

๋ชฉ์ฐจ

  1. ์‹ ๊ฒฝ๋ง์ด๋ž€?
  2. ์‹ ๊ฒฝ๋ง์˜ ์—ญ์‚ฌ
  3. ์‹ ๊ฒฝ๋ง์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ
  4. ์‹ ๊ฒฝ๋ง์˜ ๋™์ž‘ ์›๋ฆฌ
  5. ์‹ ๊ฒฝ๋ง์˜ ํ•™์Šต ๊ณผ์ •
  6. ๋‹ค์–‘ํ•œ ์‹ ๊ฒฝ๋ง์˜ ์œ ํ˜•
  7. ์‹ ๊ฒฝ๋ง์˜ ์ฃผ์š” ์‘์šฉ ๋ถ„์•ผ
  8. ์‹ ๊ฒฝ๋ง ๊ตฌํ˜„ ์˜ˆ์ œ
  9. ์‹ ๊ฒฝ๋ง์˜ ์žฅ๋‹จ์ 
  10. ๊ฒฐ๋ก 

1. ์‹ ๊ฒฝ๋ง์ด๋ž€?

์‹ ๊ฒฝ๋ง(Neural Network)์€ ์ธ๊ฐ„ ๋‡Œ์˜ ์‹ ๊ฒฝ์„ธํฌ ๊ตฌ์กฐ๋ฅผ ๋ณธ๋–  ๋งŒ๋“  ์ธ๊ณต ์ง€๋Šฅ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๊ณต ๋‰ด๋Ÿฐ์ด ๊ณ„์ธต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ณต์žกํ•œ ํŒจํ„ด ์ธ์‹๊ณผ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2. ์‹ ๊ฒฝ๋ง์˜ ์—ญ์‚ฌ

์‹ ๊ฒฝ๋ง์˜ ์—ญ์‚ฌ๋Š” 1940๋…„๋Œ€๊นŒ์ง€ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํ•œ ์ˆ˜ํ•™์  ๋ชจ๋ธ๋กœ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, 1980๋…„๋Œ€ ์ดํ›„๋กœ ์ปดํ“จํŒ… ์„ฑ๋Šฅ์˜ ๋ฐœ์ „๊ณผ ํ•จ๊ป˜ ๊ธ‰์†๋„๋กœ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ 2010๋…„๋Œ€์— ๋“ค์–ด์™€ ๋”ฅ๋Ÿฌ๋‹์˜ ๋ถ€์ƒ์œผ๋กœ ์‹ ๊ฒฝ๋ง์˜ ์ค‘์š”์„ฑ์ด ๋”์šฑ ๊ฐ•์กฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. ์‹ ๊ฒฝ๋ง์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ

์‹ ๊ฒฝ๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋‰ด๋Ÿฐ(Neuron): ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ํ™œ์„ฑํ™” ํ•จ์ˆ˜์— ๋”ฐ๋ผ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ ˆ์ด์–ด(Layer): ๋‰ด๋Ÿฐ์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ์ธต์„ ์ด๋ฃน๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ž…๋ ฅ์ธต(Input Layer), ์€๋‹‰์ธต(Hidden Layer), ์ถœ๋ ฅ์ธต(Output Layer)์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ค‘์น˜(Weights): ๋‰ด๋Ÿฐ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ฐ•๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ•™์Šต์„ ํ†ตํ•ด ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ด์–ด์Šค(Bias): ๋‰ด๋Ÿฐ์˜ ํ™œ์„ฑํ™” ํ•จ์ˆ˜์— ๋”ํ•ด์ง€๋Š” ๊ฐ’์œผ๋กœ, ๋ชจ๋ธ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

4. ์‹ ๊ฒฝ๋ง์˜ ๋™์ž‘ ์›๋ฆฌ

์‹ ๊ฒฝ๋ง์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๊ฐ ๋‰ด๋Ÿฐ์˜ ๊ฐ€์ค‘์น˜์™€ ๋ฐ”์ด์–ด์Šค๋ฅผ ์ ์šฉํ•˜์—ฌ ์ถœ๋ ฅ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์„ ํ˜•์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๋‹ค์Œ ์ธต์œผ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ์ธต์—์„œ๋Š” ์ตœ์ข… ์˜ˆ์ธก๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

5. ์‹ ๊ฒฝ๋ง์˜ ํ•™์Šต ๊ณผ์ •

์‹ ๊ฒฝ๋ง์˜ ํ•™์Šต ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ์ˆœ์ „ํŒŒ(Forward Propagation): ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  2. ์†์‹ค ํ•จ์ˆ˜(Loss Function): ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’ ๊ฐ„์˜ ์˜ค์ฐจ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  3. ์—ญ์ „ํŒŒ(Backpropagation): ์˜ค์ฐจ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ค‘์น˜์™€ ๋ฐ”์ด์–ด์Šค๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(Optimization Algorithm): ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ค‘์น˜์™€ ๋ฐ”์ด์–ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

6. ๋‹ค์–‘ํ•œ ์‹ ๊ฒฝ๋ง์˜ ์œ ํ˜•

์‹ ๊ฒฝ๋ง์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ํผ์…‰ํŠธ๋ก (Perceptron): ๋‹จ์ผ์ธต ์‹ ๊ฒฝ๋ง์œผ๋กœ, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
  • ๋‹ค์ธต ํผ์…‰ํŠธ๋ก (MLP, Multi-Layer Perceptron): ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์€๋‹‰์ธต์„ ๊ฐ€์ง„ ์‹ ๊ฒฝ๋ง์ž…๋‹ˆ๋‹ค.
  • ํ•ฉ์„ฑ๊ณฑ ์‹ ๊ฒฝ๋ง(CNN, Convolutional Neural Network): ์ฃผ๋กœ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง(RNN, Recurrent Neural Network): ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋‚˜ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

7. ์‹ ๊ฒฝ๋ง์˜ ์ฃผ์š” ์‘์šฉ ๋ถ„์•ผ

์‹ ๊ฒฝ๋ง์€ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์‘์šฉ ๋ถ„์•ผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ด๋ฏธ์ง€ ์ธ์‹: ๊ฐ์ฒด ํƒ์ง€, ์–ผ๊ตด ์ธ์‹ ๋“ฑ
  • ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ: ํ…์ŠคํŠธ ๋ถ„๋ฅ˜, ๋ฒˆ์—ญ, ์Œ์„ฑ ์ธ์‹ ๋“ฑ
  • ์ถ”์ฒœ ์‹œ์Šคํ…œ: ์‚ฌ์šฉ์ž ์ทจํ–ฅ ๋ถ„์„์„ ํ†ตํ•œ ์ถ”์ฒœ
  • ์˜๋ฃŒ ์ง„๋‹จ: ์งˆ๋ณ‘ ์˜ˆ์ธก ๋ฐ ์ง„๋‹จ ๋ณด์กฐ

8. ์‹ ๊ฒฝ๋ง ๊ตฌํ˜„ ์˜ˆ์ œ

๋‹ค์Œ์€ PyTorch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์‹ ๊ฒฝ๋ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
 
# ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋ฐ ๋กœ๋“œ
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
 
# ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ ์ •์˜
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 10)
    
    def forward(self, x):
        x = x.view(-1, 28 * 28)
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x
 
# ๋ชจ๋ธ ์ดˆ๊ธฐํ™”
model = SimpleNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
 
# ํ•™์Šต ํ•จ์ˆ˜ ์ •์˜
def train(model, criterion, optimizer, train_loader, num_epochs=5):
    for epoch in range(num_epochs):
        for data, target in train_loader:
            optimizer.zero_grad()
            output = model(data)
            loss = criterion(output, target)
            loss.backward()
            optimizer.step()
        print(f'Epoch {epoch + 1}, Loss: {loss.item():.4f}')
 
# ํ•™์Šต ์‹คํ–‰
train(model, criterion, optimizer, train_loader, num_epochs=5)

9. ์‹ ๊ฒฝ๋ง์˜ ์žฅ๋‹จ์ 

์žฅ์ :

  • ๋ณต์žกํ•œ ํŒจํ„ด ์ธ์‹ ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„์„์ด ๊ฐ€๋Šฅ
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ ์ธํ•œ ๋น ๋ฅธ ์—ฐ์‚ฐ ์†๋„
  • ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ž„

๋‹จ์ :

  • ๋งŽ์€ ๋ฐ์ดํ„ฐ์™€ ๊ณ„์‚ฐ ์ž์›์ด ํ•„์š”
  • ๊ณผ์ ํ•ฉ(overfitting) ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ๋ชจ๋ธ ํ•ด์„์ด ์–ด๋ ค์›€

10. ๊ฒฐ๋ก 

์‹ ๊ฒฝ๋ง์€ ํ˜„๋Œ€ ์ธ๊ณต์ง€๋Šฅ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ, ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ดˆ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์œ ํ˜•๊ณผ ์‘์šฉ ๋ถ„์•ผ๋ฅผ ํ•™์Šตํ•จ์œผ๋กœ์จ ์‹ ๊ฒฝ๋ง์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๊ฒฝ๋ง์— ๋Œ€ํ•œ ์ง€์†์ ์ธ ์—ฐ๊ตฌ์™€ ํ•™์Šต์„ ํ†ตํ•ด ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์„ ํƒ๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฌธ์„œ

https://aws.amazon.com/ko/what-is/neural-network/

https://www.asimovinstitute.org/neural-network-zoo/

https://itwiki.kr/w/์ธ๊ณต์ง€๋Šฅ