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
댓글