티스토리 뷰

밑바닥부터 시작하는 딥러닝 : 파이썬으로 익히는 딥러닝 이론과 구현 

 

실습 환경 : google colab 

 

3장 - 신경망 

 

 

 


 

활성화 함수(activation function) : 입력신호(input)의 총합을 출력신호(output)로 변환하는 함수 

 

계단 함수 

 - 개념 

# 계단 함수
# 입력(input) 이 0을 넘으면 1을 출력하고 그외에는 0을 출력한다.
def step_function(x) : # x는 실수(부동소수점) 만 받아들인다. 넘파이 배열을 인수로 넣을 수는 없다. 
  if x > 0 :
    return 1
  else :
    return 0

 

- 넘파이 배열도 입력 받으려면 

def step_function(x) :
  y = x > 0 # bool (True/False 형태로 저장된다.)
  return y.astype(np.int) # bool을 int로 변환해준다.

 

계단 함수를 구현해보자 

import numpy as np
import matplotlib.pylab as plt

x = np.arange(-5.0, 5.0, 0.1)     # -5.0 부터 5.0 까지 0.1 단위의 범위. 
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

 

np.arange (numpy.arange) 참조 

https://numpy.org/doc/stable/reference/generated/numpy.arange.html

 

numpy.arange — NumPy v1.26 Manual

arange(start, stop, step) Values are generated within the half-open interval [start, stop), with spacing between values given by step.

numpy.org

 

결과 

 

 

 

시그모이드 함수(sigmoid) : 

 

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

 np.exp (numpy.exp) 참조

https://numpy.org/doc/stable/reference/generated/numpy.exp.html

 

numpy.exp — NumPy v1.26 Manual

 

numpy.org

 

np.exp 이해해 보기 :

자연상수 'e'에 대한 지수함수

 

n의 거듭제곱으로 된 a(a^n으로 표시됨)는 a를 n번 곱하는 것을 의미한다.

(ex : 2의 3제곱은 8이다. 라고 했을때 2는 밑수 (a) 이고 3은 지수(n) 이다. 
np.exp()는 여기서 밑수인 a가 자연 상수 'e'(약 2.71828)이고, 이에 대해 입력값 n제곱을 한 것을 의미한다.

시그모이드 함수 출력확인

 

 

-1.0 이 시그모이드를 통해서 0.26894.... 가 나온것을 풀어보면

step 1. 자연상수(2.71828)에 -(-1.0)을 제곱

step 2. 1을 더해주고 

3. 1을 step 2의 결과로 나눈다.  

 

 

 

시그모이드 함수를 구현해보자 

 

x = np.arange(-5.0, 5.0, 0.1)     # -5.0 부터 5.0 까지 0.1 단위의 범위. 
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

 

 

 

 

신경망에서는 활성화함수로 비선형 함수를 사용해야한다. 

시그모이드 , 계단 함수 모두 비선형임. 

선형함수는 은닉층이 없는 네트워크로만 구현이 됨. 

 

 

ReLU 함수 

입력이 0을 넘으면 그 입력을 그래도 출력하고 0이히아면 0을 출력한다. 

(시그모이드와 계단은 입력이 0을 넘으면 1을 출력하지만 ReLU는 입력이 0을 넘으면 입력을 그대로 출력한다는게 차이점)

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

 

np.maximum : 

두개의 입력값중에 큰 값을 반환한다. 

입력된 값(x)이 0보다 크면 입력된 값이 그대로 반환될것이고 0보다 작으면 0이 반환된다.

 

np.maximum (numpy maximum)  

https://numpy.org/doc/stable/reference/generated/numpy.maximum.html

 

numpy.maximum — NumPy v1.26 Manual

This condition is broadcast over the input. At locations where the condition is True, the out array will be set to the ufunc result. Elsewhere, the out array will retain its original value. Note that if an uninitialized out array is created via the default

numpy.org

 

ReLU함수를 구현해보자 

x = np.arange(-5.0, 5.0, 0.1)     # -5.0 부터 5.0 까지 0.1 단위의 범위. 
y = relu(x)
plt.plot(x, y)
plt.ylim(-0.1, 6.0) # 출력이 5까지 나올테니 y축을 6까지 설정
plt.show()

 

 

 

 

 

'Programming' 카테고리의 다른 글

신경망의 학습 - 손실함수  (0) 2024.01.01
신경망 - 손글씨 숫자 인식 (mnist)  (0) 2023.12.31
댓글