ch0nny_log

[빅데이터분석] 딥러닝_3. 하이퍼블릭 탄젠트 함수/렐루함수 본문

빅데이터 분석(with 아이티윌)/deep learning

[빅데이터분석] 딥러닝_3. 하이퍼블릭 탄젠트 함수/렐루함수

chonny 2024. 10. 4. 10:43
[ 복습 ]
 
 사진   -------------------> 딥러닝 신경망 ----> 분류  
 음성                             (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')) # 탄젠트 함수

텐써 플로우로 쉽게 신경망을 만들수 있지만 이 활성화 함수의 역활이 뭔지는 확실히 이해하고 있어야합니다.  

 

 

✨ 딥러닝 면접질문) 신경망에 활성화 함수의 역할이 무엇인지 대답해 줄 수 있나요?