퍼셉트론: 인공 신경망의 빌딩 블록

소스 노드 : 1216283

기계 학습 및 AI 애호가라면 퍼셉트론이라는 단어를 접했을 것입니다. 퍼셉트론은 많은 딥 러닝 과정의 첫 장에서 가르칩니다. 그래서 정확히 무엇입니까? 그 뒤에 숨겨진 영감은 무엇입니까? 분류 문제를 정확히 어떻게 해결합니까? 이 기사에서 우리는 퍼셉트론 뒤에 있는 생물학적 영감으로 시작한 다음 수학적 기술을 탐구하고 마지막으로 퍼셉트론 단위를 사용하여 처음부터 이진 분류기를 구축할 것입니다.

신경망의 생물학적 영감

뉴런(신경 세포)은 신경계의 기본 구성 요소입니다. 인간의 뇌는 서로 연결된 수십억 개의 뉴런으로 구성됩니다. 그들은 뇌로부터 신호를 받고 보내는 일을 담당합니다. 아래 다이어그램에서 볼 수 있듯이 일반적인 뉴런은 수상돌기, 축삭, 세포체 또는 소마의 세 가지 주요 부분으로 구성됩니다. 수상돌기는 세포체에서 나오는 나무 모양의 가지입니다. 그들은 다른 뉴런으로부터 정보를 받습니다. 소마는 뉴런의 핵심입니다. 수상돌기에서 받은 정보를 처리하는 역할을 합니다. 축삭은 뉴런이 정보를 보내는 케이블과 같습니다. 그 끝으로 축색 돌기는 수상 돌기를 통해 다른 뉴런과 연결되는 많은 가지로 나뉩니다. 그만큼 축삭과 다른 뉴런 수상돌기 사이의 연결을 시냅스라고 합니다.

1: 생물학적 뉴런 대 인공 신경망

이미지 출처 : K. 윌렘스 (2017년 2월 XNUMX일). Keras 튜토리얼: Python의 딥 러닝.

ANN은 뇌의 기능에서 영감을 받았기 때문에 뇌가 어떻게 작동하는지 살펴보겠습니다. 뇌는 수십억 개의 뉴런 네트워크로 구성되어 있습니다. 그들은 한 뉴런의 정보가 다른 뉴런으로 전송되는 시냅스를 통해 전기적 및 화학적 신호를 통해 통신합니다. 전송 과정에는 '활동 전위'라고 하는 전기 충격이 포함됩니다. 정보가 전송되려면 입력 신호(임펄스)가 특정 임계값 장벽을 넘을 수 있을 만큼 강해야 하며, 그러면 뉴런만 활성화되어 신호를 추가로 전송합니다(출력).

뉴런의 생물학적 기능에 영감을 받은 미국 과학자 프랭크 로젠블랫은 1957년 코넬 항공 연구소에서 퍼셉트론의 개념을 생각해 냈습니다.

  • 뉴런은 다양한 강도의 전기 자극 형태로 다른 뉴런으로부터 정보를 받습니다.
  • 뉴런은 다른 뉴런에서 받는 모든 자극을 통합합니다.
  • 결과 합계가 특정 임계값보다 크면 뉴런이 '발화'하여 연결된 다른 뉴런으로 전송되는 활동 전위를 트리거합니다.

퍼셉트론의 주요 구성 요소

Rosenblatt의 퍼셉트론은 기본적으로 이진 분류기입니다. 퍼셉트론은 3가지 주요 부분으로 구성됩니다.

  • 입력 노드 또는 입력 계층: 입력 계층은 추가 처리를 위해 초기 데이터를 시스템으로 가져옵니다. 각 입력 노드는 숫자 값과 연결됩니다. 실제 값을 취할 수 있습니다.
  • 가중치 및 편향: 가중치 매개변수는 단위 간의 연결 강도를 나타냅니다. 가중치가 높을수록 관련 입력 뉴런이 출력을 결정하는 영향력이 강해집니다. 편향은 선형 방정식의 절편과 같은 역할을 합니다.
  • 활성화 기능: 활성화 기능은 뉴런이 발화할지 여부를 결정합니다. 가장 단순한 활성화 함수는 단계 함수이지만 시나리오에 따라 다른 활성화 함수를 사용할 수 있습니다.

다음 섹션에서 이에 대해 자세히 살펴보겠습니다.

퍼셉트론의 작동

첫 번째 단계에서는 모든 입력 값에 해당 가중치를 곱하고 더합니다. 얻은 결과를 가중 합계라고합니다. ∑우i*xi, 다르게 표현하거나,  x1*w1 + x2*w2 +…wn*xn. 이 합계는 중요도에 따라 입력을 적절하게 표현합니다. 또한 편향 항 b 이 합계에 ∑wi*xi +를 더합니다. b. 편향은 모델의 성능을 개선하기 위해 조정할 수 있는 또 다른 모델 매개변수(가중치 외에) 역할을 합니다.

두 번째 단계에서는 활성화 함수 f 위 금액에 적용 ∑wi*xi + b 출력을 얻기 위해 Y = f(∑wi*xi + b). 시나리오와 사용된 활성화 기능에 따라 산출 다음 중 하나입니다  {1, 0} 또는 연속 값. 

퍼셉트론의 작동

(종종 이 두 단계는 다층 퍼셉트론에서 단일 단계로 표시됩니다. 여기서는 더 나은 이해를 위해 두 단계를 서로 다른 두 단계로 표시했습니다.)

활성화 기능

생물학적 뉴런은 특정 임계값을 초과할 때만 발화합니다. 마찬가지로 인공 뉴런은 입력의 합(가중 합)이 특정 임계값을 초과할 때만 실행됩니다. 예를 들어 0입니다. 직관적으로 다음과 같은 규칙 기반 접근 방식을 생각할 수 있습니다.

∑wi*xi + b > 0인 경우: 출력 = 1 그렇지 않은 경우: 출력 = 0

그래프는 다음과 같습니다.

활성화 기능

이것은 실제로 Rosenblatt에서 원래 사용했던 단위 단계(임계값) 활성화 기능입니다. 하지만 보시다시피 이 함수는 0에서 불연속이므로 수학적 계산에 문제가 발생합니다. 위 함수의 부드러운 버전은 시그모이드 함수입니다. 0과 1 사이의 값을 출력합니다. 또 다른 하나는 Hyperbolic tangent(tanh) 함수는 -1과 1 사이의 출력을 생성합니다. 시그모이드 함수와 tanh 함수 모두 기울기 소실 문제가 있습니다. 오늘날 ReLU와 Leaky ReLU는 가장 널리 사용되는 활성화 기능입니다. 딥 네트워크에서 비교적 안정적입니다.

이진 분류기로서의 퍼셉트론

지금까지 우리는 퍼셉트론의 생물학적 영감과 수학을 살펴보았습니다. 이 섹션에서는 퍼셉트론이 선형 분류 문제를 해결하는 방법을 살펴보겠습니다.

일부 라이브러리 가져오기 –

from sklearn.datasets import make_blobs import matplotlib.pyplot as plt import numpy as np %matplotlib 인라인

다음을 사용하여 더미 데이터 세트 생성 make_blobs scikit learn에서 제공하는 기능 –

# 데이터 세트 생성 X, Y = make_blobs(n_features = 2, centres = 2, n_samples = 1000, random_state = 12)
# 데이터셋 시각화 plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground truth', fontsize = 18) plt.show()
이진 분류기로서의 퍼셉트론

파란색 점은 1이고 녹색 점은 0입니다. 퍼셉트론 논리를 사용하여 결정 경계를 만들 수 있습니다(초평면) 그래프에서 서로 다른 데이터 포인트를 구분하는 분류를 위해.

계속 진행하기 전에 입력 벡터에 편향 항(XNUMX)을 추가해 보겠습니다.

# 입력 벡터에 바이어스 추가 X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

데이터 세트는 다음과 같습니다.

데이터 세트

여기서 위 데이터 세트의 각 행은 입력 벡터(데이터 포인트)를 나타냅니다. 결정 경계를 만들기 위해서는 적절한 가중치를 찾아야 합니다. 가중치는 아래 규칙을 사용하여 교육에서 '학습'됩니다.

w = w + (예상 — 예측) * x

퍼셉트론 w

새로운 가중치 값을 얻기 위해 ground truth에서 추정 결과를 뺀 다음 현재 입력 벡터를 곱하고 이전 가중치를 더하는 것을 의미합니다. 출력이 실제 클래스와 동일하면 가중치가 변경되지 않습니다. 그러나 우리의 추정이 ground truth와 다른 경우 그에 따라 가중치가 증가하거나 감소합니다. 이것이 각 반복에서 가중치가 점진적으로 조정되는 방식입니다.

가중치 벡터에 임의의 값을 할당하는 것으로 시작한 다음 오류 및 현재 데이터를 사용하여 각 반복에서 점진적으로 조정합니다.

# 무작위 값으로 가중치 초기화 w = np.random.rand(3, 1) print(w)

출력:

[[0.37547448] [0.00239401] [0.18640939]]

퍼셉트론의 활성화 함수 정의 –

def activation_func(z): z >= 1인 경우: 1 반환 그렇지 않은 경우: 0 반환

다음으로 퍼셉트론 학습 규칙을 적용합니다.

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # 업데이트 가중치 w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

가중치가 한 번에 수렴된다는 보장이 없기 때문에 학습 규칙을 지속적으로 적용하면서 모든 훈련 데이터를 퍼셉트론 알고리즘에 100번 공급하여 결국 최적의 가중치를 얻을 수 있도록 했습니다.

이제 최적의 가중치를 얻었으므로 Y =를 사용하여 각 데이터 포인트에 대한 클래스를 예측합니다. f(∑wi*xi + b) 또는 벡터 형식의 Y = wT.x.

# 데이터 포인트의 클래스 예측 result_class = [activation_func(w.transpose().dot(x)) for x in X_bias]

결정 경계 및 예측 클래스 레이블 시각화 –

# 단위 벡터로 변환 w = w/np.sqrt(w.transpose().dot(w))
# 결과 시각화 plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hyperplane ([-10, -1], w), lw = 3, c = '빨간색') plt.title('결정 경계가 있는 퍼셉트론 분류') plt.show()
결정 경계가 있는 퍼셉트론 분류

Ground Truth 이미지를 예측 결과 이미지와 비교하고 잘못 분류된 일부 포인트를 볼 수 있습니다. 정확도를 계산하면 약 98%에 이른다.

보시다시피 여기 원본 데이터가 상당히 분리되어 있으므로 좋은 정확도를 얻을 수 있습니다. 그러나 실제 데이터에서는 그렇지 않습니다. 단일 퍼셉트론을 사용하면 선형 결정 경계만 구성할 수 있으므로 데이터가 혼합되면 퍼셉트론 알고리즘의 성능이 저하됩니다. 이것은 단일 퍼셉트론 모델의 한계 중 하나입니다.

미주

우리는 Rosenblatt의 퍼셉트론 뒤에 숨은 생물학적 영감을 이해하는 것으로 시작했습니다. 그런 다음 퍼셉트론과 활성화 함수의 수학으로 진행했습니다. 마지막으로 장난감 데이터 세트를 사용하여 퍼셉트론이 서로 다른 클래스에 속하는 데이터 포인트를 구분하는 선형 결정 경계를 구축하여 기본 분류를 수행하는 방법을 확인했습니다.

저자에 관하여

프라틱 나비야 현재 Noida에 기반을 둔 분석 및 AI 회사에서 근무하는 숙련된 데이터 과학자입니다. 기계 학습, 딥 러닝, NLP, 시계열 분석, 데이터 조작, SQL, Python에 능숙하며 클라우드 환경 작업에 익숙합니다. 여가 시간에는 Hackathons에서 경쟁하고 기술 기사를 작성하는 것을 좋아합니다.

이 기사에 표시된 미디어는 Analytics Vidhya의 소유가 아니며 작성자의 재량에 따라 사용됩니다.

출처: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

타임 스탬프 :

더보기 분석 Vidhya