인공 신경망

Aelim Shin·2021년 9월 9일
0

딥러닝/CV

목록 보기
2/7

인공 신경망이란 ?

  • 신경망 구조를 모방하여 만든 모델
  • 여러 자극 혹은 입력이 들어오면 각각의 가중치를 곱해 더해주고 추가적으로 편차도 더해줌
  • 인공 뉴런 : 다 더한 값을 활성화 함수를 통해 변형하여 전달하는 단위
  • 인공신경망 : 인공 뉴런들이 모인 네트워크

인공 신경망의 요소

  • 입력, 출력
  • 입력 단과 층력단 사이의 은닉층
  • 은닉층 수에 따라 신경망과 심층 신경망으로 나뉨
  • 심층 신경망: 2개 이상의 은닉층을 가진 인공 신경ㅁ아
    -> 하나의 셀(뉴런)에서와 마찬가지로 입력값들의 가중치 합을 활성화 함수에 통과시켜 변형시키고, 이 과정을 반복적으로 진행하여 최종 결과값을 낸다.
  • 행렬 연산

활성화 함수

  • 활성화 함수가 없다면 은닉층이 몇 개더라도 결국 선형변환이기에 깊은 모델을 만든 의미가 사라짐
  • 가장 많이 사용되는 함수로 <시그모이드>와 <하이퍼볼릭 탄젠트>가 있음
  • 시그모이드 : 결과값이 0 에서 1인 완만한 곡선형태
  • 하이퍼볼릭 탄젠트 : 결과값이 -1 에서 1의 값을 가짐
  • 두 함수 모두 모든 구간에서 미분 가능하기에 역전파하기에 유용함

전파와 역전파

  • 전파(순전파): 인공신경망에 입력값이 들어와 여러 은닉층을 순서대로 거쳐 결과값을 내는 과정
  • 역전파 : 결과와 정답의 차이로 계산된 손실을 연쇄법칙을 이용하여 입력 단까지 다시 전달하는 과정

파이토치로 구현

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.init as init
num_data = 1000
num_epoch = 10000

#데이터 생성
noise = init.normal_(torch.FloatTensor(num_data,1),std=1)
x = init.uniform_(torch.Tensor(num_data,1),-15,15)
y = (x**2) + 3 
y_noise = y + noise

## 모델, 손실함수, 최적화 함수 설정
model = nn.Sequential(
          nn.Linear(1,6),
          nn.ReLU(),
          nn.Linear(6,10),
          nn.ReLU(),
          nn.Linear(10,6),
          nn.ReLU(),
          nn.Linear(6,1),
      )

loss_func = nn.L1Loss()
optimizer = optim.SGD(model.parameters(),lr=0.0002)

# 모델 학습
loss_array = []
for i in range(num_epoch):
    optimizer.zero_grad()
    output = model(x)
    
    loss = loss_func(output,y_noise)
    loss.backward()
    optimizer.step()
    
    loss_array.append(loss)
 
# 손실 그래프
import matplotlib.pyplot as plt

plt.plot(loss_array)
plt.show()

# 학습모델의 결과와 실제 목표값 비교
plt.figure(figsize=(10,10))
plt.scatter(x.detach().numpy(),y_noise,label="Original Data")
plt.scatter(x.detach().numpy(),output.detach().numpy(),label="Model Output")
plt.legend()
plt.show()

손실 그래프

학습모델 결과와 실제 목표값 비교

profile
꿈꾸는 소웨러의 개발 요모조모

0개의 댓글