zenn.skin 무료버전 배포중!
자세히보기

카테고리 없음

[ML] 퍼셉트론과 신경망 차이 (difference between perceptron and neural network)

koosco! 2022. 10. 31. 15:31

1. 신경망(Neural Network)

퍼셉트론을 사용하면 복잡한 함수도 표현할 수 있습니다. 하지만 앞서 구현한 Gate들처럼 가중치를 직접 설정해주어야 한다는 단점이 있습니다.

하지만 신경망은 데이터들로부터 가중치를 자동으로 학습하여 직접 가중치를 설정하지 않아도 적절한 매개변수값을 구할 수 있습니다.

가장 간단한 신경망의 모습

신경망은 기본적으로 입력층(Input layer), 출력층(Output layer) 그리고 은닉층(Hidden layer)으로 구성됩니다.

입력층과 출력층은 외부에서 볼 수 있지만 은닉층은 외부에서 볼 수 없습니다.

위 그림은 가중치를 갖는 노드들이 2개이기 때문에 "2층 신경망"이라고 하는데 표기에 따라 3층 신경망이라고 하는 경우도 있습니다.

2. 활성화 함수(Activation function)

입력 신호의 총합을 출력 신호로 변환하는 함수를 활성화 함수(activation function)라고 합니다.

퍼셉트론에서 임계값과 비교하여 임계값 이상의 값만 출력해주었는데 활성화 함수가 이러한 역할을 해줍니다.

활성화 함수는 종류가 매우 다양합니다.

일반적으로 단층 퍼셉트론은 계단 함수를 활성화 함수로, 다층 퍼셉트론은 sigmoid function을 활성화 함수로 사용합니다.

퍼셉트론과 신경망의 주된 차이는 활성화 함수의 차이입니다.

1) 계단 함수(step function, unit function)

step function

계단 함수는 0보다 클 때는 1을, 0보다 작을 때는 0을 반환하는 함수입니다.

import numpy as np

def step_function(x):
  y = x > 0
  return y.astype(np.int)

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

sigmoid function

시그모이드 함수는 계단함수와 다르게 모든 x에 대해 미분이 가능하고 부드러운 곡선을 갖는다는 특징이 있습니다.

함수값의 경우 계단 함수는 0 또는 1의 값만 가질 수 있지만 시그모이드 함수는 연속적인 실수값을 가질 수 있습니다.

또 계단함수는 모든 점에 대해 미분값이 0이 되지만 시그모이드 함수는 미분값이 0이 되는 점이 없기 때문에 이후 모델에서 파라미터 학습을 할 때도 사용할 수 있다는 장점이 있습니다.

 

from scipy.stats import expit

def sigmoid(x):
  return expit(x)

scipy에 있는 expit를 사용하면 시그모이드 함수 값을 구할 수 있습니다.

3) 공통점

  • 두 함수는 모두 0 ~ 1사이의 값을 함수값으로 갖는다는 공통점이 있습니다.
  • 또 입력값이 중요하면 큰 값을(1에 가깝게) 반환하고 입력값이 중요하지 않으면 작은 값(0에 가깝게) 반환합니다.
  • 두 함수 모두 비선형 함수입니다.

3. 신경망에서 비선형 함수를 사용하는 이유

신경망에서는 활성화 함수로 선형 함수가 아닌 비선형 함수를 사용합니다.

선형 함수를 활성화 함수로 사용해 신경망을 만들면 층을 깊게 사용하는 이유가 없어집니다.

층을 아무리 깊게 쌓아도 은닉층이 없는 네트워크와 동일한 기능을 수행하기 때문입니다.

 

h(x) = cx라는 선형함수를 활성화 함수로 사용하는 경우를 생각해보겠습니다.

그렇기 때문에 신경망의 활성화 함수는 항상 비선형 함수가 사용되어야 합니다.

'카테고리 없음'의 다른글

  • 현재글 [ML] 퍼셉트론과 신경망 차이 (difference between perceptron and neural network)