본문 바로가기
밑바닥 딥러닝

Chapter3 - Neural Network(1)

by winston1214 2021. 1. 10.
반응형

신경망 예시

맨 왼쪽 층을 입력층, 가운데 층을 은닉층, 맨 오른쪽 층을 출력층

가중치를 갖는 층(화살표가 있는) 2개 이므로 ‘2층 신경망

 

활성화 함수

활성화 함수(Activation Function)

: 입력 신호의 총합을 출력 신호로 변환하는 함수

: 입력 신호의 총합이 활성화를 일으키는지 정하는 역할

가중치가 달린 입력 신호와 편향의 총합을 a라 칭함

이러한 ah 함수(활성화 함수)에 넣어 출력 하는 것이 y

활성화 함수 처리 과정

가중치 신호를 조합한 결과가 a 라는 노드, 활성화 함수 h()를 통과하여 y 라는 노드로 변환

 

단순 퍼셉트론 : 단층 네트워크에서 계단함수(임계값을 경계로 출력이 바뀌는 함수)를 활성화 함수로 사용한 모델

 

다층 퍼셉트론 : 여러 층으로 구성되고 여러 활성화 함수를 사용하는 신경망 모델

 

## 활성화 함수의 종류

1. 계단 함수(Step Function)

임계값을 경계로 출력이 바뀌는 함수

 

def step_function(x):
    if x>0: return 1
    else: return 0 # numpy array error 발생
    
def step_function(x):
    y = x > 0
    return y.astype(np.int)
x = np.array([1.0,2.0])
step_function(x)

 

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

x = np.arange(-5.0,5.0,0.1)
y = step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.title('Step Function Plot')
plt.show()

Step function

2. 시그모이드 함수(Sigmoid Function)

def sigmoid(x):
    return 1/(1+np.exp(-x))
x = np.array([-1.0,1.0,2.0])
sigmoid(x)
x = np.arange(-5.0,5.0,0.1)
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.title('Sigmoid Function Plot')
plt.show()

sigmoid

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

 

차이점 :

시각적인 직관적 비교 : 매끄러움의 차이

퍼셉트론은 0 아니면 1이라는 이진적으로 값을 반환하지만 신경망은 그 사이에 있는 실수(0.731,0.88 )을 반환해준다.

 

공통점 : 입력이 작을 때는 0에 가깝고 입력이 클 때는 1에 가까워진다.

범위는 0~1 사이

 

## 비선형 함수

step functionsigmoid function의 공통점 = 비선형 함수

 

신경망은 비선형 함수를 활성화 함수로 사용해야 된다.

? 층을 아무리 깊게 해도 의미가 없음

 

선형 h(x)=cx를 활성화 함수로 사용할 때

y(x)=h(h(h(x))) y=c*c*c*x = y=ax(a=c**3) 따라서 여러층으로 구성하여도 의미가 없음

 

3. ReLU(Rectified Linear Unit) 함수

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

 

x = np.arange(-5.0,5.0,0.1)
y = relu(x)
plt.plot(x,y)
plt.ylim(-2,5)
plt.title('ReLU Function Plot')
plt.show()

ReLU

 

## 다차원 배열의 계산

행렬 곱 계산 방법

A = np.array([[1,2],[3,4]])
A.shape # (2,2)
B = np.array([[5,6],[7,8]])
B.shape # (2,2)
np.dot(A,B)
'''
array([[19, 22],
       [43, 50]])
'''

행렬의 곱에선 대응되는 차원의 수를 일치 시켜야됨

A = np.array([[1,2,3],[4,5,6]])
A.shape # (2,3)
B = np.array([[1,2],[3,4],[5,6]])
B.shape # (3,2)
C = np.array([[1,2],[3,4]])
C.shape # (2,2)

np.dot(A,B)
'''
array([[22, 28],
       [49, 64]])
'''
np.dot(A,C) # error

 

반응형

'밑바닥 딥러닝' 카테고리의 다른 글

Chapter5 - Backpropogation  (0) 2021.07.03
Chapter4 - Training Neural Network(1)  (0) 2021.02.02
Chapter3 - Neural Network(3)  (0) 2021.01.10
Chapter3 - Neural Network(2)  (0) 2021.01.10
Chapter2 - Perceptron  (0) 2020.12.28

댓글