본문 바로가기
📁 AI

[Machine Learning] 다층 퍼셉트론 (multilayer Perceptron)

by 박개봄 2020. 6. 17.
728x90

다층 퍼셉트론 (multilayer Perceptron, MLP)

 다층 퍼셉트론이란 여러개의 퍼셉트론을 층 구조로 구성한 신경망 모델이다. 다층 퍼셉트론은 퍼셉트론에서의 선형 분리 불가 문제, XOR 문제를 풀 가능성이 존재한다.

 

 2개의 직선을 만들어서 f1(x) 위쪽의 값은 1, 아래쪽의 값은0, f2(x) 위쪽의 값은 1, 아래쪽의 값은 0이 되게 한다. 따라서 중간의 겹치는 부분만 1이고 나머지 부분은 0이 되게 함으로써 XOR 문제를 풀 수 있다. 또한 (1,1)인 부분만 1이기 때문에 결국 AND에 해당되는 퍼셉트론이라고도 볼 수 있다.

 

초기 다층 퍼셉트론과 계단모양 활성화 함수

 하지만 이 당시, 다층 퍼셉트론이 선형 분리 불가 문제에 적용될 수 있다는 것은 알았지만 가중치를 학습할 수 있는 방법을 찾을 수 없었다. 또한 활성화 함수는 계단모양 활성화 함수를 사용하였다.

 

 

다층 퍼셉트론의 학습 

1980년에 다층 퍼셉트론의 학습 방법을 찾게 되었다. 그 방법은 입력-출력 (xi, yi)의 학습 데이터에 대해서 기대출력 yi와 다층 퍼셉트론의 출력 f(xi)의 차이, 즉 오차(error, yi - f(xi))가 최소가 되도록 가중치를 결정하는 것이다.

 

 학습 가능한 다층 퍼셉트론 알고리즘으로 오차 역전파(error backpropagation) 알고리즘이 있다. 이 알고리즘은 경사하강법을 적용한다. 경사하강법은 오차함수의 낮은 지점을 찾아가는 최적화 방법으로, 낮은 쪽의 방향을 찾기 위해 현재 위치에서 오차함수를 미분한다. 즉 경사하강법은 편미분을 해야한다.

 

계단 함수와 시그모이드 함수

 그러나 계단 모양의 함수는 미분이 불가하기 때문에 미분이 가능하고 계단 모양과 비슷한 시그모이드(sigmoid) 함수를 사용하였다.

 

 

다층 퍼셉트론의 학습 목표

 입력(x1,…xd)에 대한 (학습 데이터에서 기대하는)기대 출력 yk와 MLP 출력 Ok의 오차가 최소화 되도록 경사하강법을 사용하여 가중치를 변경하는 것이 다층 퍼셉트론의 학습 목표이다. 

 

 

활성화 함수(activation function)

1) 계단(step) 함수

def step(x):
	if x>0:
    	return 1
    else:
    	return 0

 

2) 시그모이드(sigmoid) 함수

 시그모이드 함수는 구간 (0,1)의 출력을 갖는다.

 

시그모이드 함수(위), 시그모이드 미분함수(아래)

시그모이드 함수를 계산하면 그에 대한 편미분을 아주 쉽게 계산할 수 있다.

시그모이드 함수, 시그모이드 미분함수

def sigmoid(x, a=1): #a값이 커지면 경사도가 증가한다
	return 1/(1+np.exp(-a*x))
    
def d_sigmoid(x, a=1):
	return a*sigmoid(x,a)*(1-sigmoid(x,a))

 

3) 쌍곡탄젠트(tanh) 함수 (Hyper tangent)

 쌍곡탄젠트 함수는 구간 (-1, 1)의 출력을 갖는다.

 

쌍곡탄젠트 함수(위), 쌍곡탄젠트 미분 함수(아래)

쌍곡탄젠트 함수를 계산하면 그에 대한 미분을 간단하게 계산할 수 있다.

미분한 함수는 0에서 가장 값이 큰 가우시안 함수 모양이다.

쌍곡탄젠트 함수, 쌍곡탄젠트 미분 함수

def tanh(x):
	return (np.exp(2*x) - 1)/(np.exp(2*x) + 1)
def d_tanh(x):
	return 1.0-tanh(x)*tanh(x)

 

다층 퍼셉트론 MPL의 동작

 다층 퍼셉트론은 1~3,4개 까지의 은닉층을 사용한다. 기본적으로 입력층을 제외한 은닉층과 출력층에는 활성화 함수를 적용할 수 있다. 출력층에는 시그모이드, 쌍곡탄젠트가 아닌 다른것을 사용한다. 또란 활성화 함수를 사용하지 않을 수도 있다.

 

 

1. 입력(x1…xd)이 주어지면 입력값에 가중치(Uji)를 곱해 은닉층에 대한 값을 계산한다.

2. 은닉층의 출력값 Zj를 출력층의 입력으로 사용하여 그 값에 가중치(Vkj)를 곱해 출력층에 대한 값을 순차적으로 계산한다.

   => 입력이 순차적으로 앞으로 가기 때문에 feed forward network(전방향 네트워크)라고 한다.

 

3. 계산 후 활성화 함수를 적용하여 최종적인 출력값 Ok를 얻을 수 있다.

728x90