티스토리 뷰

DL/Pytorch

[Ch4] 인공 신경망(ANN)

jeong_reneer 2022. 1. 15. 22:10

4.1 신경망

1) 인공 신경망(Artificial Neural Network)

2) 인공 신경망의 구성 요소 : 입력층, 은닉층, 출력층

- 심층 신경망 (DNN) : 2개 이상의 은닉층을 가진 인공 신경망

3) 활성화 함수 → 비선형성

 

 

4.2 순전파와 역전파

1) 순전파 (Forward Propagation) : 입력값이 여러 은닉층을 통과해 결과값으로 나오는 과정

 

2) 역전파 (Backward Propagation) : 결과값과 정답의 차이로 계산된 손실을 연쇄법칙을 통해 입력단까지 다시 전달하는 과정

* 역전파 계산 과정 (시그모이드 예제)

 

 

4.3 모델 구현, 학습 및 결과

# 데이터 생성
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)

# 손실 그래프
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()

 

ReLU 활성화 함수의 영향 : 은닉층은 해당 층의 입력값에 가중치를 곱해 선형변환이 일어나도록 하는데, ReLU는 이 중 0보다 작은 값들을 모두 0으로 만들기 때문에 여러 은닉층을 통과하면서 여러 지점에서 꺾인 모양이 나타나게 됨.

'DL > Pytorch' 카테고리의 다른 글

[Ch7] 학습 시 생길 수 있는 문제점 및 해결방안  (0) 2022.01.22
[Ch6] 순환신경망(RNN)  (0) 2022.01.20
[Ch5] 합성곱 신경망(CNN)  (0) 2022.01.15
[Ch3] 선형회귀분석  (0) 2022.01.15
[Ch1, 2] Deep Learning & Pytorch  (0) 2022.01.10
댓글
공지사항