사진 -------------------> 딥러닝 신경망 ----> 분류 음성 (CNN 신경망)
텍스트 ------------------> 딥러닝 신경망 ----> 텍스트에 대한 답변 (RNN 신경망)
뇌세포에서 활성화 함수의 역활은 입력되는 신호를 기억할지 말지를 결정하는 기능을 합니다. 기억이 되려면 강한 자극이 들어와야합니다.
■ 활성화 함수 하이퍼블릭 탄젠트 함수
시그모이드 함수는 입력값(신호)를 받아서 0~1 사이의 실수를 출력하는 함수인데 탄젠트 함수는 -1~1 사이의 실수를 출력하는 함수입니다.
예제1. 하이퍼블릭 탄젠트 함수를 파이썬으로 생성하시오
import math
def tanh(x):
return list( map( lambda x : math.tanh(x), x) )
설명: map(함수, 입력값)을 실행하면 입력값이 함수에 입력이 되고 함수에서 값을 처리해서 결과를 출력합니다.
numbers= [ 0, 1, 2, 3 ]
print( tanh(numbers) )
예제2. tanh 함수를 파이썬으로 시각화 하시오.
import numpy as np
import matplotlib.pyplot as plt
import math
def tanh(x):
return list( map( lambda x : math.tanh(x), x) )
x = np.arange(-5, 5, 0.1)
y = tanh(x)
plt.plot(x, y)
plt.show()
■ 활성화 함수 렐루 함수
Relu 함수 ↓
Rectified Linear Unit ↓ 정류된
정류는 전기회로 쪽 용어인데 그림 3-9 처럼 x 가 0 이하일 때는 y 값을 0 으로 해서 아무것도 출력하지 않고 0보다 큰 값은 그 값을 그대로 출력합니다.
고양이의 귀는 고양이를 분류하는데 있어서 너무나도 중요한 픽셀 부분이라 아주 큰 가중치로 학습시에 갱신이 될것이고 활성화 함수인 렐루는 그 중요한 값을 어느 가감도 없이 그대로 순전파 신경망에 흘려 보냅니다.
하지만 배경 부분은 고양이 사진을 분류하는데 있어서 중요하지 않는 부분이라 가중치가 학습되면서 점점 마이너스 값으로 갱신이 되어지기 때문에 렐루는 배경은 0으로 순전파 신경망에 흘려보내며 이 부분은 중요한 부분이 아니다라고 결정해주는 것입니다.
예제 1. relu 함수를 파이썬으로 구현하시오
import numpy as np
def relu(x):
return np.maximum(0, x) #0과 x값중에 큰 값을 출력합니다.
print(relu(-2)) #0
print(relu(0.3)) #0.3
2. 위의 함수를 시각화 하시오.
import matplotlib.pyplot as plt
import numpy as np
def relu(x):
return np.maximum(0, x) #0과 x값중에 큰 값을 출력합니다.
x = np.arange(-6, 6, 0.1) # -6 에서 6까지 0.1 간격으로 실수를 출력함
y = relu(x)
plt.plot(x,y)
plt.show()
3. 지금까지 만든 활성화 함수인 sigmoid, tanh, relu 함수는 전부 구글에서 만든 텐써 플로우 코드에 다 내장되어있습니다.
from tensorflow.keras.models import Sequential # 신경망 모델 구현
from tensorflow.keras.layers import Dense # 완전 연결계층 구현
model = Sequential()
model.add(Dense(3, activation = 'sigmoid')) # 시그모이드함수
model.add(Dense(3, activation = 'relu')) # 렐루 함수
model.add(Dense(3, activation = 'tanh')) # 탄젠트 함수
텐써 플로우로 쉽게 신경망을 만들수 있지만 이 활성화 함수의 역활이 뭔지는 확실히 이해하고 있어야합니다.