[python] 넘파이를 이용한 신경망 구성

인공 신경망은 기계 학습 및 딥러닝 분야에서 중요한 개념입니다. 넘파이(NumPy)는 파이썬의 핵심 라이브러리로, 효과적인 다차원 배열 연산을 지원하여 신경망 모델을 구축하는 데 있어 매우 유용합니다.

이 블로그 포스트에서는 넘파이를 사용하여 간단한 신경망을 만드는 방법에 대해 살펴보겠습니다.

구성

  1. 신경망 모델링
  2. 학습 알고리즘
  3. 결론

신경망 모델링

가장 기본적인 신경망 구조는 입력층, 은닉층, 출력층으로 구성됩니다.

# 필요한 라이브러리 가져오기
import numpy as np

# 신경망 모델링을 위한 클래스 정의
class NeuralNetwork:
   def __init__(self, input_size, hidden_size, output_size):
       # 가중치 행렬 초기화
       self.weights_input_hidden = np.random.randn(input_size, hidden_size)
       self.weights_hidden_output = np.random.randn(hidden_size, output_size)

   def forward(self, inputs):
       # 순전파 연산 수행
       hidden_layer_inputs = np.dot(inputs, self.weights_input_hidden)
       hidden_layer_outputs = self.sigmoid(hidden_layer_inputs)
       final_outputs = np.dot(hidden_layer_outputs, self.weights_hidden_output)
       return final_outputs

   def sigmoid(self, x):
       # 시그모이드 활성화 함수
       return 1 / (1 + np.exp(-x))

# 모델 생성
input_size = 3
hidden_size = 4
output_size = 2
nn = NeuralNetwork(input_size, hidden_size, output_size)

위 코드에서는 NeuralNetwork 클래스를 사용하여 간단한 신경망을 모델링합니다. __init__ 메서드에서는 가중치 행렬을 초기화하고, forward 메서드에서는 입력값을 받아 순전파 연산을 수행합니다.

학습 알고리즘

이제 모델링된 신경망을 학습시키기 위해 역전파 알고리즘을 구현해야 합니다. 이 과정은 경사 하강법을 사용하여 손실을 최소화하는 방향으로 가중치를 업데이트하는 과정을 포함합니다.

# 손실 함수 정의
def loss_function(predicted, target):
   return np.mean(np.square(predicted - target))

# 역전파 알고리즘 구현
def backward(self, inputs, predicted, target):
   output_error = predicted - target
   output_delta = output_error * predicted * (1 - predicted)
   
   hidden_error = np.dot(output_delta, self.weights_hidden_output.T)
   hidden_delta = hidden_error * hidden_outputs * (1 - hidden_outputs)

   # 가중치 업데이트
   self.weights_hidden_output -= np.dot(hidden_outputs.T, output_delta)
   self.weights_input_hidden -= np.dot(inputs.T, hidden_delta)

결론

넘파이를 사용하여 간단한 신경망을 모델링하고 학습하는 방법에 대해 알아보았습니다. 이는 기계 학습 및 딥러닝을 시작하는 데 중요한 기초를 제공합니다. 더 많은 공부를 통해 신경망의 다양한 측면을 탐구해보시기를 권장합니다.

이상으로 넘파이를 이용한 신경망 구성에 대해 알아보았습니다. 감사합니다.

참고 자료