빅데이터 & 인공지능

MLP 신경망 (Multi-Layer Perceptron)

헬로월드! 2020. 11. 21. 20:04

MLP 란 여러 개의 퍼셉트론 뉴런여러 층으로 쌓은 다층신경망 구조

입력층과 출력층 사이에 하나 이상의 은닉층을 가지고 있는 신경망이다.

인접한 두 층의 뉴런간에는 완전 연결 => fully connected 된다.

 

 

 

초록색 화살표 : 역방향 전파

 

 

다층 뉴런은 왜 필요할까? 복잡한 패턴 분류를 위해서는 입출력 간의 복잡한 변환 구조가 필요하다. 사용하는 뉴런의 수를 늘리고 층을 추가하여 복잡한 구조의 의사결정 경계를 생성할 수 있다. 단일뉴런 ( 퍼셉트론)으로는 선형분리 가능한 경계선만 생성가능함. 두개의 뉴런을 결합함으로써 XOR 과 같은 비선형 분리가 가능한 결정선을 생성할 수 있다. 뉴런을 추가함으로써 다각형 모양의 경계선을 생성할 수 있다. => 복잡한 데이터의 분류가 가능해진다!  , 일반적으로 다층 신경망은 (MLP 는) 2-3 개 계층으로 구성된다. 

 

MLP 의 구조는 입력층, 은닉층, 출력층의 전방향 신경망이다. (은닉층은 하나 이상!)

 

1. 활성화 함수

퍼셉트론에서는 step 함수 (계단 함수) 를 활성화 함수로 사용,

MLP 에는 다양한 비선형 함수들을 활성화 함수로 사용 

인공 신경망을 통과해 온 값을 최종적으로 어떤 값으로 만들지.

 

1) step function : 임계값을 미리 설정하고 (threshold value) 임계값 보다 크면 1, 아니면 0

2) Sigmoid fuction : [0,1] 사이의 값

3) Linear function : y =x 

4) tanh function : [-1, 1] 사이의 값

5) ReLu function : 양수이면 그대로 , 음수이면 0 

6) Leaky ReLU 

7) ELU

 

 

2. 손실 함수 : 전체 오차는 목표 출력값에서 실제 출력값을 빼서 제곱한 값을 모든 출력 노드에 대하여 합한 값이다 => 평균제곱법(MSE) 

 

3. 역전파 알고리즘 (EBP : Error BackPropagation) : 입력이 주어지면 순방향으로 계산하여 출력을 계산한 후에 실제 출력과 우리가 원하는 출력 간의 오차를 계산한다. 오차를 역방향으로 전파하면서 오차를 줄이는 방향으로 가중치를 변경한다. 

 

4. 다층 신경망의 활용: 다양한 지도 학습 문제에 적용 가능, MNIST 데이터셋에 적용, 스팸 여과기 만들기 !

 

MLP 를 Google Drive 에서 COLAB 으로 실습해보았다.

 

Activation function = 활성화 함수는 ReLu를 사용하고 만족스럽지 않으면 LeakyReLU, ELU 를 사용한다.

그래도 만족스럽지 않다면 tanh 를 사용 , Deep learning 에서 Sigmoid 는 사용하지 말자 (Sigmoid 는 MLP 까지만!) 

실무적으로는 ReLU 를 가장 많이 사용한다. LeakyReLU/ELU 도 괜찮다. 

 

텐서플로우를 이용한 신경망 모델 구성

  •  Sequential Model : 주로 이걸로 코딩할 것이다. 아주 쉽고, 1개입력과 1개출력으로 계속 처리한다. 70%의 경우 적용이 가능하다. 입력층에서 부터 차곡차곡 , tf.keas.Sequential 
  • Functional API : 다중입력 , 다중출력 등으로 처리 , 95% 의 경우에 적용 가능 , model=tf.keras.Input, Model 
  • Model 서브클래스: 가장 유연하게 사용할 수 있지만 어렵고 복잡하다. 

 

 

 

 

 

첫번째 레이어 inputlayer 는 세개가 들어온다고 표시해준다 (input_shape(3,)) 으로

hidden layer 는 unit 이 4개로 되어있다. 

위의 모델 summary 에는 hidden layer 2개와 outputlayer 를 표시해준다.

param = (input 뉴런 수 + 1) * output 뉴런 수 

 

이제 모델을 살펴봤으니 퍼셉트론으로는 해결할 수 없었던 XOR 을 풀어본다.

 

 

100번 실행 

 

손실그래프

 

손실 그래프를 봤을 때 loss 가 잘 줄어드는 것 처럼 보이지만 사실상 0.257~ 0.253 사이에서 줄어드는걸로 봐선

loss 가 크게 줄어들지 않는 것을 알 수 있다.