퍼셉트론에서는 가중치를 설정하는 작업을 사람이 수동으로 한다. 이를 해결하기 위해 신경망이 등장했다.

신경망은 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력을 갖고 있다.

퍼셉트론에서 신경망으로


신경망을 그림으로 나타내면 다음과 같다.

image.png

가장 왼쪽 줄이 입력층, 맨 오른쪽 줄이 출력층, 가운데 줄이 은닉층이다.

활성화 함수

입력 신호의 총합을 출력 신호로 변환하는 함수를 활성화 함수(activation function)라고 한다. 말 그대로 입력 신호의 총합이 활성화를 일으키는지 일으키지 않는지 정하는 역할을 한다고 할 수 있다.

image.png

위와 같이 임계값을 경계로 출력이 바뀌는 함수를 **계단 함수(step function)**이라 한다. 퍼셉트론에서는 활성화 함수로 계단 함수를 이용한다.

시그모이드 함수

신경망에서는 시그모이드 함수(Sigmoid Function)를 자주 이용한다. 이것이 퍼셉트론과의 주된 차이라고 할 수 있다. 식은 아래와 같다.

image.png

exp(-x)는 e⁻ˣ를 뜻하며, e는 자연상수로 2.7182…의 값을 갖는 실수이다.

시그모이드 함수는 다음과 같이 구현된다.

import numpy as np

def sigmoid(x):
	return 1 / (1 + np.exp(-x))
	
x = np.array([-1.0, 1.0, 2.0])
print(sigmoid(x))

시그모이드 함수가 넘파이 배열을 처리할 수 있는 이유는 넘파이의 브로드캐스트에 있다.

브로드캐스트(Broadcast) 기능은 넘파이 배열과 스칼라의 연산을 넘파이 배열의 원소 각각과 스칼라의 연산으로 바꿔 수행하는 것이다.

시그모이드 함수를 시각화하면 다음과 같다.