본문 바로가기
2023-1/인공지능

FNN 원리와 구현

by 철없는민물장어 2023. 4. 19.
728x90
다층 신경망
FNN(Feedforward Neural Network)

 

기존 퍼셉트론의 선형분리성의 한계를 극복한다.

2개의 계층으로 구성된 다층 펏뎁트론으로 XOR기능을 구현해 입증했다.

 

2개 이상의 계층을 갖는 구조를 활용

다 계층 구조 활용의 최대 걸림돌인 학습 문제를 오류 역전파 알고리즘으로 해결.

 

비선형 활성화 함수를 도입하여 다양한 함수 기능 구현

-계단함수 대신 시그모이드 함수를 적용

 

다층 신경망은 초기에 다층 퍼셉트론으로 불렸지만, 시그모이드 함수를 사용하는 신경망은 더 이상 퍼셉트론이 아님.(이진출력이 아니라 0과1사이 모든 값이 나오니까)

따라서 다층 신경망, 일반 신경망(FNN, feedforward neural network: 앞먹임 신경망) 이라고 부름

 


FNN의 구조

 

  • No cyclic link
  • 한 개의 히든 계층.(은닉 계층이 2개 이상이면 Deep FNN)
  • 다양한 활성화 함수 사용

(출력층에는 출력층 함수가 붙는데, 위 그림에는 빠져있음)


각 계층의 입력,가중치,편향은 위와 같이 행렬로 표현할 수 있다.

x=np.array([2,1])
w=np.array([[0.4,0.2,0.3],[0.1,0.2,0.1]])
b=np.array([0.1,0.2,0.3])

v=np.dot(x,w)+b

 

여기서 활성화 함수로 시그모이드 함수를 적용시킨다면

def sigmoid(x):
	return 1/(1+np.exp(-x))
    
y=sigmoid(v);

이렇게 작성한다.


FNN 예시코드

def setup_network():
	net = {}
    net['W1']=np.array([[0.4,0.2,0.3],[0.1,0.2,0.1]])
    net['b1']=np.array([0.1,0.2,0.2])
    
    net['W1']=np.array([[0.1,0.4],[0.2,0.3],[0.4,0.6]])
    net['b1']=np.array([0.2,0.1])
    
    return net
    
def predict(net, input) -> object:
	W1,W2 = net['W1'],net['W2']
    b1,b2 = net['b1'],net['b2']
    
    #계층1 계산
    v1=np.dot(input,W1)+b1
    h1=sigmoid(v1)
    
    #계층2 
    v2=np.dot(h1,W2)+b2
    h2=sigmoid(v2)
    
    #출력층 소프트맥스함수 계층
    y=softmax(h2)
    
    return y
    
FNN = setup_network()

x=np.array([[2.2,1.3],[1.2,2.3]])

y=predict(FNN,x)

print("OUTPUT: ",y)

출력층의 값을 결정하는 함수로 소프트맥스 함수를 사용하면

각 출력의 합이 1이 된다. 즉, 각 값은 확률이 됨.

 

728x90

'2023-1 > 인공지능' 카테고리의 다른 글

역전파 학습 개념  (0) 2023.06.12
기울기 강하 기법  (0) 2023.06.12
퍼셉트론의 학습  (0) 2023.04.19
신경망  (0) 2023.04.19
신경망, 퍼셉트론  (0) 2023.04.19

댓글