상세 컨텐츠

본문 제목

ANN과 ForwardPass의 구현

정보과학융합탐구

by yalu 2023. 3. 30. 20:42

본문

인공신경망의 예시

 보통 간단히 신경망(NN)이라고 불리는 인공 신경망(ANN)은 동물의 뇌를 구성하는 생물학적 신경망에서 영감을 얻은 컴퓨팅 시스템이다. - 위키피디아 -

 

 ANN(인공 신경망)은 입력층, 은닉층, 출력층으로 구성되었습니다. 입력층은 외부에서 입력되는 데이터를 받아들이는 역할을 합니다. 은닉층은 입력층에서 받은 데이터를 가지고 계산을 하여 출력층으로 전달합니다. 출력층은 최종 결과값을 출력하는 역할을 합니다. 이러한 계산 과정에서 각 층들은 앞뒤 층의 가중치(weight)와 편향(bias)이라는 값을 통해 연산됩니다. 이러한 가중치와 편향 값은 초기에는 무작위로 설정되지만, 학습을 통해 최적화됩니다.

 


 

 

 

 이 사진은 두 값을 입력으로, 두 값을 출력으로 하는 간단한 인공신경망입니다.

 

ANN에서 입력층, 은닉층, 출력층 간의 연산은 행렬 연산을 기반으로 합니다. 예를 들어, 입력층에서 입력된 데이터는 입력 벡터로 표현됩니다. 이 입력 벡터는 가중치(weight) 행렬과 곱해져서 은닉층의 뉴런(neuron)으로 전달됩니다. 가중치 행렬은 각 입력과 뉴런 사이의 연결 강도를 나타내는 값입니다.

 

은닉층에서는 입력 벡터와 가중치 행렬의 곱셈 결과에 편향(bias) 벡터를 더한 후, 활성화 함수(activation function)를 적용하여 새로운 값으로 변환합니다. 이 과정은 행렬과 벡터 간의 곱셈과 덧셈 연산으로 표현됩니다.

출력층에서도 은닉층과 마찬가지로 입력 벡터와 가중치 행렬의 곱셈 결과에 편향 벡터를 더한 후, 활성화 함수를 적용하여 최종 출력값을 계산합니다. 이 과정도 행렬과 벡터 간의 곱셈과 덧셈 연산으로 표현됩니다.

이렇게 ANN에서는 행렬과 벡터 연산을 이용하여 입력층부터 출력층까지의 계산을 수행하게 됩니다.

 

 

 

활성화 함수는 생물 뉴런의 역치 준위와 비슷하게 작동합니다. 주로 sigmoid, ReLU, softmax함수를 사용합니다.

추후 활성화함수에 대한 추가 글을 작성할 예정입니다.

 

 

 

 

 

 

 

 

 


import numpy as np 
from Functions import * # Activation Functions

# ANN 구현
def init_network():
  network = {}
  network['W1']=np.array([[0.1, 0.2, 0.3], [0.1, 0.2, 0.3]]) # 1층 가중치
  network['b1']=np.array([0.1, 0.2, 0.3]) # 1층 편향
  network['W2']=np.array([[0.1, 0.3], [0.1, 3.2], [0.2, 0.3]]) # 2층 가중치
  network['b2']=np.array([0.1, 0.2]) # 2층 편향
  network['W3']=np.array([[0.1, 0.3], [0.1, 3.2]]) # 3층 가중치
  network['b3']=np.array([0.1, 0.3]) # 3층 편향
  return network

# Forward Pass 구현
def forward(network, x):
  W1, W2, W3 = network['W1'], network['W2'], network['W3'] # 가중치 불러오기
  b1, b2, b3 = network['b1'], network['b2'], network['b3'] # 편향 불러오기
  a1 = np.dot(x,W1) + b1 # 1층 행렬연산
  z1 = sigmoid(a1) # 1층 Activation
  a2 = np.dot(z1,W2) + b2 # 2층 행렬연산
  z2 = sigmoid(a2) # 2층 Activation
  a3 = np.dot(z2,W3) + b3 # 출력층 행렬연산
  y = sigmoid(a3) # 출력층 Activation
  return y

network = init_network() # 신경망 불러오기
x = np.array([1.0, 0.5]) # 입력벡터
y = forward(network, x) # Forward Pass
print(y) # 출력

오류 해결 과정 - 가중치 행렬의 크기를 잘못 설정하면 안됩니다. 이걸 간과하면 오류 잡느라 수명이 줄어들거든요.

행렬의 크기를 설정하는 방법

[1] Y. Saito and M. Ueno, Deep Learning from Scratch (Shelter Island, NY: O'Reilly Media, 2017),~90p

'정보과학융합탐구' 카테고리의 다른 글

웹 개발의 백엔드와 프론트엔드에 대해 알아보자  (0) 2023.07.03
소수 판별 알고리즘  (0) 2023.05.31
Deep Learning Framework란?  (0) 2023.05.31
DQNAgent  (1) 2023.05.16
PingPongGame  (0) 2023.05.16

관련글 더보기