딥러닝 - 활성함수 (Activation function)

‍Juhee Kim·2021년 6월 24일
1

Deep Learning

목록 보기
2/7
post-thumbnail

인공신경망의 목표는 데이터에서 발견할 수 있는 복잡한 관계를 학습할 수 있는 강력한 알고리즘과 데이터 구조를 만드는 것 !!

퍼셉트론 복습

x1과 x2라는 두 신호를 입력받아 y를 출력하는 퍼셉트론이다.

#퍼셉트론 수식
y = 0 (b + w1x1 + w2x2 <= 0)
 	or
y = 1 (b + w1x1 + w2x2 > 0)

여기서 b는 편향을 나타내는 매개변수로, 뉴런이 얼마나 쉽게 활성화되느냐를 제어한다.
w1과 w2는 각 신호의 가중치를 나타내는 매개변수로, 각 신호의 영향력을 제어한다.

아래 그림은 편향을 명시한 퍼셉트론이다.

이 퍼셉트론의 동작은 x1, x2, 1이라는 3개의 신호가 뉴런에 입력되어 각 신호에 가중치를 곱한 후, 다음 뉴런에 전달된다. 다음 뉴런에서는 이 신호들의 값을 더하여 그 합이 0을 넘으면 1을 출력, 그렇지 않으면 0을 출력한다.

위의 식을 더 간결히 표현하기 위해 0을 넘으면 1을 출력, 그렇지 않으면 0을 출력하는 동작을 하나의 함수로 나타낸다. 이를 h(x) 로 표현한다.

y = h(b + w1x1 + w2x2)

h(x) = 0 (x <= 0)
	or
h(x) = 1 (x > 1)

입력 신호의 총합이 h(x)라는 함수를 거쳐 변환되어, 그 변환된 값이 y의 출력이 된다. 결과적으로 두 식이 하는 역할은 같다.

활성함수 (Activation Function)

위의 h(x) 처럼 입력 신호의 총합을 출력 신호로 변환하는 함수를 활성화 함수라고 부른다.

입력 신호의 총합을 출력 신호로 변환하는 함수.
즉, 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 한다.

#위의 식을 변형하여 활성화 함수 식 작성
a = b + w1x1 + w2x2

y = h(a)
  • 활성화 함수 처리 과정

신경망에서 각 노드는 활성화 함수를 가지고 있는데, 일반적으로 각 층에는 같은 종류의 활성화 함수를 가지고 있다.
실제 뉴런세포에서 신호를 전달(activate or fire)할지 안 할지를 결정하는 기능을 말하는데, 인공신경망에서 활성화 함수는 다음 층으로 신호를 얼마만큼 전달할지를 결정한다.
그래서 때때로 전달함수(transfer function)이라고 부르기도 한다.

계단 함수 (Step function)

입력이 0을 넘으면 1을 출력, 그 외에는 0을 출력하는 함수

# 함수 정의
def step_function(x):
  return np.array(x>0, dtype=np.int)

계단 함수 구현 예시

# 샘플 데이터를 확인합니다. 
x = np.array([-1, 1, 2])
print(x)

# 0보다 큰가?
y = x>0
print(y)

# 논리형태를 0과 1로 표현해보기
y = y.astype(np.int)
print(y)

#결과
[-1  1  2]
[False  True  True]
[0 1 1]

계단 함수 그래프 구현

# 그래프 그리기
x = np.linspace(-1, 1, 100) 
plt.step(x, step_function(x)) 
plt.show() 

시그모이드 함수 (Sigmoid function)

def sigmoid(x):
 return 1/ (1+np.exp(-x))

시그모이드 함수 그래프 구현

x = np.linspace(-10, 10, 100) 
  
plt.plot(x, sigmoid(x)) 
plt.xlabel("x") 
plt.ylabel("Sigmoid(X)") 
  
plt.show() 

👀 계단함수와 시그모이드 함수 비교

  1. 공통점
  • 비선형 함수
  • 전체적으로 같은 모양의 그래프를 띄고 있다.
    (입력이 작을 때 출력은 0에, 클 때 1에 가까워지는 구조)
  • 입력값에 상관없이 출력은 0과 1사이
  1. 차이점
  • 매끄러움
    시그모이드 함수는 부드러운 곡선이며, 입력에 따라 출력이 연속적으로 변화하는 반면 계단 함수는 0과 1 두 가지의 출력만 가진다.
  • 연속적인 값
    시그모이드 함수는 실수를 출력값으로 돌려준다.
    즉, 퍼셉트론에서는 뉴런 사이에 0 또는 1이 흘렀다면 신경망에서는 연속적인 실수가 흐른다.

ReLU Function

Rectified Linear Unit의 줄임말
실제로 가장 많이 사용하는 활성 함수이다.

입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하이면 0을 출력하는 함수

def relu(x):
	return np.maximun(0,x)

profile
찐문과생의 빅데이터 생존기🐣 열심히 할래용 (ง •_•)ง

1개의 댓글

comment-user-thumbnail
2022년 4월 12일

안녕하세요! 도움이 많이 되었어요 ㅎㅎ 별건 아니지만 h(x) 표현식에서 x 범위에 오타가 있어서 댓글 달아요! h(x) = 1 (x > 1) 라고 되어있는데 (x > 0)이 되어야 할 것 같아요!

답글 달기