My Data Story

[딥러닝] 인공 신경망 - 퍼셉트론 본문

Deep Learning

[딥러닝] 인공 신경망 - 퍼셉트론

Hwasss 2021. 9. 4. 12:24
728x90

◈  '인공 신경망' 목차

1. 퍼셉트론

     가장 간단한 인공 신경망 구조인 퍼셉트론에 대해 살펴보자.

2. 다층 퍼셉트론

3. 케라스 API 소개

4. 시퀀셜 API 구현

5. 함수형 API 구현

6. 서브클래싱 API 구현

7. 모델 저장과 복원, 콜백, 텐서보드

8. 신경망 하이퍼파라미터 튜닝하기


인공 신경망은 딥러닝의 핵심이다. 

요즘 많이 사용하는 다층 퍼셉트론(MLP)을 설명하고 이어서 케라스 API를 사용하여 인공 신경망을 구현하는 방법을 알아본다.

케라스는 신경망 구축, 훈련, 평가, 실행을 목적으로 설계된 멋지고 간결한 고수준 API 이다. 

1. TLU

퍼셉트론은 가장 간단한 인공 신경망 구조 중 하나로 TLU 또는 LTU라 불리는 조금 다른 형태의 인공 뉴런을 기반으로 한다. 입력과 출력이 이진 on/off 값이 아닌 어떤 숫자이고, 각각의 입력 연결은 가중치와 연관되어 있다. TLU는 입력의 가중치 합을 계산한 뒤 계산된 합에 계단 함수를 적용하여 결과를 출력한다. 

 

<TLU 구조>

 

퍼셉트론에서 가장 널리 사용되는 계단 함수는 헤비사이드 계단 함수이다.

이따금 부호 함수를 대신 사용하기도 한다. 

 

 

하나의 TLU는 간단한 선형 이진 분류 문제에서 사용 가능하다. 

입력의 선형 조합 계산 값이 임계값을 넘으면 양성 클래스를 출력하고, 그렇지 않으면 음성 클래스를 출력한다. 

 

TLU를 훈련한다는 것은  최적의 W 조합 값을 찾는 것이다. 

(훈련 알고리즘에 대해서는 잠시 후에 알아보도록 하자.)

 

 

2. 퍼셉트론 

퍼셉트론은 층이 하나뿐인 TLU로 구성된다. 

한 층에 있는 모든 뉴런이 이전 층의 모든 뉴런과 연결되어 있을 때, 완전 연결 층 또는 밀집층이라 한다. 퍼셉트론의 입력은 어떤 입력이 주입되든 그냥 출력으로 통과시키는 입력 뉴런으로 구성된다. 입력층은 입력 뉴런과 편향 특성이 더해진다.

 

위 퍼셉트론은 샘플을 3개의 다른 이진 클래스로 동시에 분류할 수 있는 다중 출력 분류기이다. 

 

다음 식을 활용하여 한 번에 여러 샘플에 대해 인공 뉴런층의 출력을 효율적으로 계산할 수 있다. ∮ 은 활성화 함수로, 인공 뉴런이 TLU일 경우 계단 함수이다. 

 

<완전 연결층의 출력 계산>

 

 

3. 퍼셉트론 학습 알고리즘

퍼셉트론은 예측할 때 만드는 오차를 반영하도록 조금 변형된 규칙을 사용하여 훈련된다. 

페셉트론 학습 규칙은 오차가 감소하도록 연결을 강화시킨다.

다시 말해, 퍼셉트론에  한 번에 한 개의 샘플이 주입되면 각 샘플에 대해 예측이 만들어진다. 

잘못된 예측을 하는 모든 출력 뉴련에 대해 올바른 예측을 만들 수 있도록 입력에 연결된 가중치를 강화시킨다. 

퍼셉트론 학습 규칙은 다음과 같다.

 

 

각 출력 뉴런의 결정 경계는 선형이므로 퍼셉트론도 (로지스틱 회귀 분류기처럼) 복잡합 패턴을 학습하지 못한다. 

하지만 훈련 샘플이 선형적으로 구분될 수 있다면 이 알고리즘이 정답에 수렴한다.

이를 퍼셉트론 선형 이론이라고 한다. 

 

 

4. Perceptron 클래스

사이킷런은 하나의 TLU 네트워크를 구현한 Perceptron 클래스를 제공한다. 

 

from numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron

iris = load_iris()
X = iris.data[:, (2,3)]
y = (iris.target == 0).astype(np.int)

per_clf = Perceptron()
per_clf.fit(X, y)

y_pred = per_clf.predict([[2, 0.5]])

 

 

cf. 퍼셉트론 vs 로지스틱 회귀 

사실 퍼셉트론 학습 알고리즘은 확률적 경사 하강법과 매우 닮았다.그래서 Perceptron 클래스는 SGDClassifier(loss='perceptron', learning_rate='constant', eta0=1, penalty=None) 과 같다.다만 로지스틱 회귀 분류기와 달리 퍼셉트론은 클래스 확률을 제공하지 않으며 고정된 임계값을 기준으로 예측을 만든다. 이런 이유로 퍼셉트론 보다 로지스틱 회귀가 더 선호된다.

 

 

5. 퍼셉트론의 약점

1969년 'Perceptron' 논문에서 퍼셉트론의 여러 가지 심각한 약점을 언급했다. 특히 배타적 논리합 (XOR) 분류 문제와 같은 일부 간단한 문제를 풀 수 없었다.(이는 로지스틱 회귀와 같은 다른 선형 분류기도 마찬가지이다.)

 

<XOR 문제>

 

이런 XOR 문제는 퍼셉트론을 여러 개 쌓아올리면 일부 제약을 줄일 수 있음이 밝혀졌다. 

이런 인공 신경망을 다층 퍼셉트론이라 한다. 

 

<다층 퍼셉트론>