맛동산

계단 함수와 시그모이드 함수 그리고 ReLU, 활성화 함수가 선형 함수면 안되는 이유 본문

파이썬/딥러닝 구현

계단 함수와 시그모이드 함수 그리고 ReLU, 활성화 함수가 선형 함수면 안되는 이유

오지고지리고알파고포켓몬고 2017. 5. 15. 12:51

계단 함수 구현

 
import numpy as np
import matplotlib.pylab as plt

#####################################################
## 계단함수
x = np.array([-1.0, 1.0, 2.0])
print(x) # [-1.  1.  2.]

y = x>0
print(y) # [False  True  True]

z = np.array(x>0, dtype=np.int)
print(z) # [0 1 1]

def step_function(x):
    return np.array(x>0, dtype=np.int)

x2 = np.arange(-5.0, 5.0, 0.1) # 71p 오타
y = step_function(x2)
plt.plot(x2,y)
plt.ylim(-0.1,1.1)
plt.show()

 

 

시그모이드 함수 구현(시그모이드 함수 식 참조)

 
import numpy as np
import matplotlib.pylab as plt

####################################################
## 시그모이드

def sigmoid(x):
    return 1 / (1 + np.exp(-x)) # numpy의 브로드캐스트

x = np.array([-1.0, 1.0, 2.0])
#print(np.exp(-x))
y = sigmoid(x)
print(y)

x = np.arange(-10, 10, 0.1)
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1, 1.1)
plt.show()

 

 

 

ReLU 함수 구현

 
import numpy as np
import matplotlib.pylab as plt

####################################################
## ReLU

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

# print(np.maximum(0,x))
# maximum : 두 원소중 큰 값을 반환
# np.maximum(0,1) -> 1
# np.maximum(0,x) (x : -10 ... 9.9) -> 브로드캐스팅에 의해 maximum(0, -10) ... maximum(0, 9.9)

x = np.arange(-10, 10, 0.1)
y = relu(x)
plt.plot(x,y)
plt.ylim(-0.1, 10.1)
plt.show()

 

 

 

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

선형 함수를 이용하면 신경망의 층을 깊게하는 의미가 없음

 

h(x) = cx를 활성화 함수로 하는 3층 네트워크에서 y(x) = h(h(h(x)))가 되는데, y(x) = c*c*c*x가 되고 y(x) = ax, a = c^3 의 식이 되는겨. 즉 층을 늘린 의미가 없는겨

 

so 층을 쌓는 혜택을 얻고 싶으면 활성화 함수로 비선형 함수를 사용해야함.

 

 

 

수치 예측을 하는 신경망 구조를 만들기 위해서 어떤 활성화 함수를 구현해야하는가?

단순히 활성화 함수를 없애는 것으로 수치 예측 모델이 나올 수 있나?

자연어 처리 모델에 응용 가능성은?

'파이썬 > 딥러닝 구현' 카테고리의 다른 글

재현신경망?  (0) 2017.05.19
신경망의 내적은 행렬의 내적과 같다  (0) 2017.05.19
SyntaxNet 관련 좌표  (0) 2017.05.15
다층 퍼셉트론의 구현(XOR)  (0) 2017.05.14
단순 퍼셉트론  (0) 2017.05.12
Comments