본문 바로가기

Study/class note

딥러닝 / 활성화함수(계단함수, 시그모이드, 하이퍼블릭 탄젠트, 렐루함수)

ㅇ복습

1장 : numpy와 matplotlib 사용법

2장 : 퍼셉트론(저자가 구현한 퍼셉트론 함수는 가중치와 바이어스를 인위적으로 셋팅해서 구현, 텐서플로우오 단층 신경망과 다층 신경망을 만들어 퍼셉트론의 논리 회로 4가지를 직접 학습 시켜서 가중치와 바이어스를 생성했습니다.)

 

3장 신경망

 

1 3장의 학습 내용

책 예제를 통해 필기체 데이터를 인식하는 3층 신경망 생성

-- 신경망의 뉴런에 들어가는 함수들을 이해하고 생성

-- 신경망이 학습을 위해서 필요한 함수가 3가지 잇는데 활성화 함수, 출력층 함수, 오차함수가 있습니다. 이 함수들을 파이썬으로 생성하고 텐써플로우에서 불러올 수 있습니다.

 

3장에서 소개하고 있는 함수들

1. 활성화 함수 : 계단함수, 시그모이드 함수, 렐루 함수, 하이퍼블릭 탄젠트

2. 출력층 함수 : 항등함수(회귀분석), 소프트맥스 함수(분류)

3. 오차 함수 : 평균제곱오차 함수(회귀분석), 크로스 엔트로피 오차함수(분류)

 

 

2 활성화함수 - 계단함수 - p.69

"숫자 0과 1을 리턴하는 함수"

입력값 x <= 0  ------> 0 리턴

입력값 x > 0 -------> 1 리턴

 

예제. 파이썬으로 계단함수 구현하기

def step_function(x):
    if x > 0 :
        return 1
    else:
        return 0

신경망에서 주로 하는 일은 행렬계산해서 확률을 출력하는 것.

행렬 연산할 때 이 계산 작업을 수월하게 하기 위해서 numpy를 이용. numpy array 형태로 데이터를 만들어서 신경망에 흘려보냅니다.

import numpy as np

x_data = np.array([-1,0,1])
print(x_data.shape)  #(3,)  1행 3열


#위의 데이터를 계단함수에 넣어보자   : 에러
print(step_function(x_data))

계단함수가 행렬을 받지 못해서 에러가 생김.

그래서 여러개의 데이터 타입을 한번에 처리할 수 있도록 step_function()도 numpy를 이용해서 다음과 같이 생성해줘야 함(p.69)

def step_function(x):
    y = x > 0       # 입력값 x가 0보다 크면 y에 true가 들어가고 아니면 false가 들어감.
    return y.astype(np.int)  # true를 np.int로 변환하면 1이 출력되고
                             # false를 np.int로 변환하면 0이 출력됨
         
         
# 위의 수정한 계단함수로 데이터를 다시 찍어보자
print(step_function(np.array(3.0)))   #1  array형태의 값을 넣어주면 단일값도 출력 가능
print(step_function(x_data))  #[0 0 1]

 

 

문제23. 위에서 만든 step_function 함수를 가지고 책 71페이지에 나온 것처럼 시각화하시오.

import matplotlib.pyplot as plt
import numpy as np

def step_function(x):
    y = x > 0      
    return y.astype(np.int)

x = np.arange(-6,6,0.1) 
y = step_function(x)

plt.plot(x,y)
plt.show()

 

 

3 활성화함수 - 시그모이드함수

입력값을 받아서 0에서 1사이의 실수를 출력하는 함수

신경망에서는 입력값과 가중치의 곱의 합(ex. x1*w1 + x2*w2)을 받아서 0에서 1사이의 실수를 출력하는 역할을 합니다. 계단함수는 신호를 보내거나 보내지 않거나 하는데 시그모이드는 신호를 강하게 보내거나 약하게 보내거나 합니다.

예제1. 시그모이드 함수를 numpy를 이용해서 생성하기

import numpy as np

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

 

문제24. 위의 시그모이드 함수를 이용해서 아래의 그림처럼 시각화 하시오.

import numpy as np

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

x = np.arange(-6,6,0.1) 
y = sigmoid(x)

plt.plot(x,y)
plt.show()

 

 

4 활성화함수 - 하이퍼블릭 탄젠트 함수

시그모이드 함수는 0~1사이의 실수를 출력하는 것인데 탄젠트 함수는 -1에서 1사이의 실수를 출력하는 함수

 

예제. 하이퍼블릭 탄젠트 함수 생성하기.

import math

def tanh(x):
    return (list(map(lambda x: math.tanh(x),x)))

 

문제25. 위에서 만든 탄젠트 함수를 시각화하시오.

import math

def tanh(x):
    return (list(map(lambda x: math.tanh(x),x)))

x = np.arange(-6,6,0.1) 
y = tanh(x)

plt.plot(x,y)
plt.show()

 

 

5 활성화함수 - 렐루 함수

Rectified Linear Unit

정류는 전기회로 용어인데, x가 0이하일 때는 차단하여 아무것도 출력하지 않고 0보다 큰 값은 그 값을 그대로 출력합니다.

예제. relu함수 생성하기

import numpy

def relu(x):
    return np.maximum(0,x)  # 0과 x값 중에서 큰 값을 반환

print(relu(-2))  #0
print(relu(0.3)) #0.3

 

문제26. 위의 relu함수를 그래프로 시각화하시오.

import numpy

def relu(x):
    return np.maximum(0,x)  # 0과 x값 중에서 큰 값을 반환

x = np.arange(-6,6,0.1) 
y = relu(x)

plt.plot(x,y)
plt.show()

 

반응형