퍼셉트론 정의
퍼셉트론 : 많은 input을 입력받아 하나의 output 을 출력하는 것
뉴런 or 노드 : 신호값 (0 또는 1)
가중치 : 노드가 input 값으로 보내질 때 곱해지는 값
임계값 : output이 1이 되게 하는 어떤 값 (input 신호의 합이 임계값을 넘어서면 output이 1이 된다)
편향 : 결과값에 더해지는 값 (일차 함수에서 상수항)
퍼셉트론의 한계
일차 함수이기 때문에 직선으로만 표현이 가능하다. 따라서 직선 하나로 나눈 영역만 표현할 수 있다.
다층 퍼셉트론
뜻 : 여러 퍼셉트론을 층으로 쌓은 것
ex) XOR은 하나의 퍼셉트론으로 표현이 불가능하기 때문에 다음과 같이 NANA, OR, AND 를 쌓아서 만들어야 한다.
XOR = ((NAND) AND (OR))
신경망
신경망에는 입력층, 은닉층, 출력층이 존재한다.
활성화 함수
- 입력값으로 가중치가 곱해진 입력 신호의 총합을 받고 이를 x 로 사용하는 함수
신경망에서 활용되는 활성화 함수의 예시
1. 계단함수
계단함수는 임계값을 넘는 경우에는 1을, 임계값 이하인 경우에는 0을 return 하는 함수이다.
임계값을 0으로 설정하고 함수를 짜 보았다.
def step(x):
if x>0:
return 1
else:
return 0
배열까지 처리하도록 만들고 싶다면 다음과 같이 작성하면 된다.
def step(x):
y = x > 0
return y.astype(np.int)
계단 함수를 이용한 그래프를 그려보자
1) numpy와 matplotlib을 이용할 예정이다.
import numpy as np
import matplotlib.pylab as plt
2) 아까 했던 계단 함수를 정의하고 x를 설정한다.
def step(x):
return np.array(x>0, dtype=np.int)
# x의 값을 -5.0 에서 5.0까지 0.1의 간격으로 넘파이 배열 생성
x = np.arange(-5.0, 5.0, 0.1)
print(x)
[-5.00000000e+00 -4.90000000e+00 -4.80000000e+00 -4.70000000e+00
-4.60000000e+00 -4.50000000e+00 -4.40000000e+00 -4.30000000e+00
-4.20000000e+00 -4.10000000e+00 -4.00000000e+00 -3.90000000e+00
-3.80000000e+00 -3.70000000e+00 -3.60000000e+00 -3.50000000e+00
-3.40000000e+00 -3.30000000e+00 -3.20000000e+00 -3.10000000e+00
-3.00000000e+00 -2.90000000e+00 -2.80000000e+00 -2.70000000e+00
-2.60000000e+00 -2.50000000e+00 -2.40000000e+00 -2.30000000e+00
-2.20000000e+00 -2.10000000e+00 -2.00000000e+00 -1.90000000e+00
-1.80000000e+00 -1.70000000e+00 -1.60000000e+00 -1.50000000e+00
-1.40000000e+00 -1.30000000e+00 -1.20000000e+00 -1.10000000e+00
-1.00000000e+00 -9.00000000e-01 -8.00000000e-01 -7.00000000e-01
-6.00000000e-01 -5.00000000e-01 -4.00000000e-01 -3.00000000e-01
-2.00000000e-01 -1.00000000e-01 -1.77635684e-14 1.00000000e-01
2.00000000e-01 3.00000000e-01 4.00000000e-01 5.00000000e-01
6.00000000e-01 7.00000000e-01 8.00000000e-01 9.00000000e-01
1.00000000e+00 1.10000000e+00 1.20000000e+00 1.30000000e+00
1.40000000e+00 1.50000000e+00 1.60000000e+00 1.70000000e+00
1.80000000e+00 1.90000000e+00 2.00000000e+00 2.10000000e+00
2.20000000e+00 2.30000000e+00 2.40000000e+00 2.50000000e+00
2.60000000e+00 2.70000000e+00 2.80000000e+00 2.90000000e+00
3.00000000e+00 3.10000000e+00 3.20000000e+00 3.30000000e+00
3.40000000e+00 3.50000000e+00 3.60000000e+00 3.70000000e+00
3.80000000e+00 3.90000000e+00 4.00000000e+00 4.10000000e+00
4.20000000e+00 4.30000000e+00 4.40000000e+00 4.50000000e+00
4.60000000e+00 4.70000000e+00 4.80000000e+00 4.90000000e+00]
3) x를 계단 함수에 적용한다.
y = step(x)
print(y)
내용을 입력하세요.
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
4) y 축의 범위를 지정해주고 그래프를 그린다
plt.plot(x,y)
#y축 범위 지정
plt.ylim(-0.1,1.1)
#plt 그리기
plt.show()
2. 시그모이드 함수
신경망에서는 계단 함수보다 시그모이드 함수가 더 자주 사용된다.
시그모이드 함수의 구현은 다음과 같이 이루어질 수 있다.
def sigmoid(x):
return (1 / (1 + np.exp(-x)))
조금 더 직관적인 이해를 위해 시그모이드 함수를 그려보았다.
1) 먼저 계단함수와 동일하게 numpy와 matplotlib을 이용할 예정이다.
import numpy as np
import matplotlib.pylab as plt
2) 앞서 했던대로 시그모이드 함수를 구현한다.
def sigmoid(x):
return (1 / (1 + np.exp(-x)))
3) x와 표시해줄 y의 범위를 지정해주고 그래프를 그린다.
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1, 1.1)
pt.show()
시그모이드 함수 그래프
3. ReLU 함수
최근에 가장 주로 사용되는 함수는 ReLU 함수이다.
def relu(x):
return np.maximum(0,x)
앞부분은 똑같이 한 뒤에 relu 함수를 구현하고 다음과 같이 작성하면 그래프를 그릴 수 있다.
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x,y)
plt.ylim(-0.1, 4)
plt.show()
'인공지능 > 딥러닝' 카테고리의 다른 글
[밑바닥부터 시작하는 딥러닝] 손실 함수 (0) | 2021.10.21 |
---|---|
[밑바닥부터 시작하는 딥러닝] 신경망 출력층 (0) | 2021.10.21 |