다층 퍼셉트론은 단층 퍼셉트론으로는 계산 할 수 없는 복잡한 함수들을 표현할 수 았다.
다층 퍼셉트론을 층처럼 겹겹이 쌓은 것을 인공 신경망( Artificial Neural Network )이라고 한다.
식에 의해 퍼셉트론을 구현 하려면 조건이 필요했었다.
함수 는 퍼셉트론이라는 유닛의 결과물을 내기 위한 계단 함수 이 함수 는 퍼셉트론의 활성화 함수라고 한다.
함수 를 활성화 함수( Actication Function )라고 하며, 각 입력값에 대한 활성화 함수를 적용시켜 최종적으로 값이 결정지어지게 된다.
💡 우리가 여기서 배울건
단순하게 0과 1로만 표현하는 계단 함수 를 넘어서, 다양한 값( 실숫값 ) 으로 표현이 가능한 활성화 함수를 배운다.
뉴런의 연산에서는 입력 신호의 출력 강도(세기)를 의미한다.
출력 강도가 약하면 약할 수록( 0에 가까울 수록 ) 중요하지 않은 값이라 판단
출력 강도가 강하면 강할 수록( 1에 가까울 수록 ) 중요한 값이라 판단
1
), 안된다(0
)출력( 결과물 출력 - 예측 ) 에서는 0 또는 1 이 될 확률을 의미한다.
1로 분류될 확률이 40%
0으로 분류될 확률이 60%
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 계단 함수 구현하기
def step_function(z):
return np.array(z > 0, dtype=np.int)
# 시그모이드 함수 구현하기
# 자연상수 e의 지수함수는 넘파이에 np.exp 에 구현 되어 있다.
def sigmoid(z):
return 1 / (1 + np.exp(-z)) # np.exp(-z) => e의 -z제곱
# 시각화
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 8))
x = np.arange(-5.0, 5.0, 0.1)
ax1.plot(x, step_function(x))
ax1.set_title(`step function')
ax2.plot(x, sigmoid(x))
ax2.set_title('sigmoid function')
plt.show()
이미지 처리에 주로 사용되어지는 함수
최근에는 다양한 분야에서도 효과를 발휘한다고 알려져 있다.
이미지 처리를 위한 CNN
알고리즘과 찰떡궁합인 함수
입력값이 0 을 넘으면 그 입력을 그대로 출력, 0 이하면 0 을 출력하는 함수
최근에는 시그모이드 보다는 비선형 직선을 여러 개 연결하는 ReLU를 더 많이 사용하는 추세
이미지 처리에서 ReLU를 사용하는 이유
# ReLU 함수 구현
# 음수 데이터면 0, 양수 데이터면 해당 데이터가 그대로 출력
def relu(z):
return np.maximum(0, z) # maximum : 둘 중 큰 값을 출력
# 시각화
plt.figure(figsize=(10, 8))
x = np.arange(-0.5, 5.0, 0.1)
plt.title('ReLU Function')
plt.plot(x, relu(x))
plt.show()
x = np.arange(-0.5, 0.5, 0.1)
plt.figure(figsize=(10, 8))
plt.title('tanh function')
plt.plot(x, np.tanh(x))
plt.show()