참고자료: 밑바닥부터 시작하는 딥러닝
💡 활성화 함수는 임계값을 경계로 출력이 바뀌는데, 이런 함수를 계단 함수라고 한다.
그렇다면 계단 함수 이외의 함수를 사용하면 어떻게 될까? 신경망에서 이용하는 활성화 함수를 알아보자!
1. 시그모이드 함수
👉🏻신경망에서 자주 이용하는 활성화 함수이다. 신경망에서 입력을 받으면 해당 함수를 이용해 신호를 변환하고 출력을 돌려주는 변환기이다.
2. 계단 함수 구현하기
파이썬으로 계단 함수를 이해해보자!
def step_fuction(x):
if x > 0:
return 1
else:
return 0
👉🏻계단 함수를 단순하게 구현하면 다음과 같다. 하지만 인수 x는 실수(부동소수점)만 받아들이기 때문에 넘파이 배열도 지원하도록 수정이 필요하다.
def step_fuction(x):
y = x > 0
return y.astype(np.int)
👉🏻넘파이의 트릭을 이용해 두 줄로 줄였다! 과연 어떤 트릭을 사용했을까? 넘파이 배열의 자료형을 반환할 때는 astype() 메서드를 이용한다. 원하는 자료형을 인수로 지정하면 된다.
3. 계단 함수의 그래프
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype=np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) #y축의 범위 지정
plt.show()
👉🏻앞에서 정의한 계단 함수를 matplotlib 라이브러리를 사용해 그래프로 그려보자!
- np.arange(-5.0, 5.0, 0.1)는 -5.0에서 5.0 전까지 0.1 간격의 넘파이 배열을 생성한다.
- step_functions은 받을 배열의 원소 각각을 인수로 계단 함수 실행해 결과를 배열로 만들어 돌려준다.
👉🏻위의 x, y 배열을 그래프로 그리면 위와 같고 모양이 계단 같기 때문에 계단 함수라고 부른다.
4. 시그모이드 함수 구현하기
def sigmoid(x):
return 1 / (1 + np.exp(-x))
👉🏻파이썬으로 시그모이드 함수를 구현해보았다. 넘파이의 브로드캐스트 덕분에 해당 함수가 넘파이 배열을 잘 처리할 수 있다.
- np.exp(-x)는 exp(-x)수식에 해당한다.
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) #y축의 범위 지정
plt.show()
👉🏻시그모이드 함수를 실행하면 다음과 같은 그래프가 나온다!
5. 시그모이드 함수와 계단 함수 비교
💡둘의 가장 눈에 띄는 차이점은 매끄러움의 차이이다! 시그모이드가 더 매끄러운데 이러한 점이 신경망 학습에서 매우 중요한 역할을 한다.
👉🏻또 다른 차이점은 계단 함수는 0과 1 중 하나의 값만 돌려주고 시그모이드 함수는 실수를 돌려준다. 다시 말해 퍼셉트론에서는 뉴런 사이에 0 혹은 1이 흘렀다면, 신경망에서는 연속적인 실수가 흐른다.
👉🏻이번에는 둘의 차이점을 보자! 둘 다 입력이 작으면 출력이 0에 가깝고 입력이 커지면 출력이 1에 가까워지는 구조이다.
6. 비선형 함수
💡계단 함수와 시그모이드 함수 모두 비선형 함수이다.
✍🏻비선형 함수란? 직선 1개로는 그릴 수 없는 함수를 말한다.
👉🏻신경망에서는 신경망의 층을 깊게 하기 위해 비선형 함수를 이용한다. 선형 함수를 사용하면 은닉층이 없는 네트워크에 불과하다.
7. ReLU 함수
📌ReLU 함수: Rectified Linear Unit, 입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하이면 0을 출력하는 함수이다.
👉🏻최근에 ReLU 함수를 주로 이용한다.
def relu(x):
return np.maximum(0, x)
👉🏻넘파이의 maximum함수를 이용하면 쉽게 구현할 수 있다.
'그 땐 AI했지 > 그 땐 DeepLearning했지' 카테고리의 다른 글
[TAVE/밑딥] ch03 신경망 | 04 3층 신경망 구현하기 (0) | 2022.06.03 |
---|---|
[TAVE/밑딥] ch03 신경망 | 03 다차원 배열의 계산 (0) | 2022.06.03 |
[TAVE/밑딥] ch03 신경망 | 01 퍼셉트론에서 신경망으로 (0) | 2022.06.02 |
[TAVE/밑딥] ch02 퍼셉트론 | 06 NAND에서 컴퓨터까지 (0) | 2022.05.27 |
[TAVE/밑딥] ch02 퍼셉트론 | 05 다층 퍼셉트론이 충돌한다면 (0) | 2022.05.27 |