"딥러닝 기초 이론"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
25번째 줄: 25번째 줄:
 
=== 활성화함수 ===
 
=== 활성화함수 ===
 
activation function. <math>w_1 x_1 + w_2 x_2+b</math>가 0초과인가 이하인가를 결정하기 위해선 다음과 같이 쓸 수 있다. <math> y= h(w_1 x_1 + w_2 x_2+b)</math>, <math> h(x)= \begin{cases} 0, & \text{if }(x \leqq 0) \\ 1, & \text{if }(x>0)) \end{cases}</math> 라고 하면 간단해진다. 이때, h(x)는 입력값에 따라 해당 값을 출력으로 넘기기도 하고 0을 반환하기도 한다. 이를 활성화함수라 하는데, 이것이 퍼셉트론에서 신경망으로 넘어가는 길목이다.
 
activation function. <math>w_1 x_1 + w_2 x_2+b</math>가 0초과인가 이하인가를 결정하기 위해선 다음과 같이 쓸 수 있다. <math> y= h(w_1 x_1 + w_2 x_2+b)</math>, <math> h(x)= \begin{cases} 0, & \text{if }(x \leqq 0) \\ 1, & \text{if }(x>0)) \end{cases}</math> 라고 하면 간단해진다. 이때, h(x)는 입력값에 따라 해당 값을 출력으로 넘기기도 하고 0을 반환하기도 한다. 이를 활성화함수라 하는데, 이것이 퍼셉트론에서 신경망으로 넘어가는 길목이다.
 +
 +
상황에 따라, 층마다 다른 활성화 함수를 사용한다.
  
 
다양한 활성화 함수에 대해선 다음 문서 '[[활성화함수]]'를 참고하자.
 
다양한 활성화 함수에 대해선 다음 문서 '[[활성화함수]]'를 참고하자.
  
 
=== 컨셉 ===
 
=== 컨셉 ===
 +
신경망에서의 <math> y_1= h(w_1 x_1 + w_2 x_2+b)</math> 연산은 행렬을 이용하여 <math> Y= H(W \times X)</math> 형태로 나타난다. <math> Y= \binom{y_1}{y_2}</math>, <math> W= \begin{pmatrix} w_1 & w_2 \\ w_3 & w_4 \end{pmatrix}</math>, <math> X= \binom{x_1}{x_2}</math> 이처럼 행렬로 나타내면 많은 뉴런의 계산을 넘파이를 이용해 쉽게 해낼 수 있다. b에 해당하는 가중치는 항상 1의 입력을 보내고 여기에 가중치 b를 곱하는 형태로 구현한다.
 +
 +
=== 구현 ===
 +
<syntaxhighlight lang="python">
 +
# 1층 구현.
 +
A1 = np.dot(X, W1) + B1  # 출력값은 각각의 행렬연산으로 이루어진다.
 +
Z1 = sigmoid_function(A1)  # 출력값을 기반으로 활성화함수.
 +
 +
# 2층 구현
 +
A2 = np.dot(Z1, W2) + B2  # 1층에서의 결과가 입력으로 쓰인다.
 +
Z2 = sigmoid_function(A2)
 +
</syntaxhighlight>
 
[[분류:딥러닝 이론]]
 
[[분류:딥러닝 이론]]

2021년 9월 8일 (수) 08:51 판

1 퍼셉트론

1957년에 프랑크 로젠블라트에 의해 고안된 알고리즘. 신경망(딥러닝)의 기원이 되는 알고리즘이다. 딥러닝의 기초 아이디어.

1.1 컨셉

입력신호 가 있을 때 가중치 (weight)를 곱해 처리하고 이 값 값이 특정 값을 넘으면 1, 넘지 못하면 0으로 처리하는 방식이다.

이를 통해 AND, OR 등의 진리표를 재현할 수 있으며 컴퓨터가 하는 기초연산이 가능해진다.(수많은 조합으로 같은 결과를 낼 수 있다.)

모두 똑같은 구조인데, 매개변수 의 값만 다르게 함으로써 다른 결과를 얻을 수 있다.

위의 특정 값을 편향(bias)처리하여 가 0보다 작거나 같으면 0, 0보다 크면 1로 처리하기도 한다.

가중치는 입력신호의 중요성을 나타내고, 편향은 얼마나 쉽게 활성화되느냐를 결정한다.

1.2 한계

AND, OR연산 등 선형 분리가 가능한 문제에서만 사용할 수 있다.(직선 하나로 값을 구분할 수 있는 문제에서만.) 즉, XOR 문제에선 사용할 수 없는데(직선 2개가 필요), 이를 비선형적이라 한다.

2 다층 퍼셉트론

multi layer perceptron. 마빈 민스키와 시모어 페퍼트가 다층 퍼셉트론으로 XOR 연산이 가능함을 보였다.(애초에 XOR은 2개의 게이트를 이용해 만들 수 있다. 여기에서 모티브를 얻었을진 모르겠지만..) 이처럼 1층의 연산결과를 받아 XOR게이트를 구현할 수 있었다. 이처럼 퍼셉트론을 쌓아 비선형적 처리의 가능성을 보였다.

기본적으로 2진수를 10진수로 변환하는 것이나, 가산하는 과정이나 AND, OR, NAND, XOR 만으로 만들 수 있으니, 이 방법으로 컴퓨터를 표현할 수 있다. 결국 이들만으로 컴퓨터의 일을 수행할 수 있다는 것은 학습을 통해 2층만으로도 컴퓨터를 만들어낼 수 있다는 것이다.

3 신경망

3.1 활성화함수

activation function. 가 0초과인가 이하인가를 결정하기 위해선 다음과 같이 쓸 수 있다. , 라고 하면 간단해진다. 이때, h(x)는 입력값에 따라 해당 값을 출력으로 넘기기도 하고 0을 반환하기도 한다. 이를 활성화함수라 하는데, 이것이 퍼셉트론에서 신경망으로 넘어가는 길목이다.

상황에 따라, 층마다 다른 활성화 함수를 사용한다.

다양한 활성화 함수에 대해선 다음 문서 '활성화함수'를 참고하자.

3.2 컨셉

신경망에서의 연산은 행렬을 이용하여 형태로 나타난다. , , 이처럼 행렬로 나타내면 많은 뉴런의 계산을 넘파이를 이용해 쉽게 해낼 수 있다. b에 해당하는 가중치는 항상 1의 입력을 보내고 여기에 가중치 b를 곱하는 형태로 구현한다.

3.3 구현

# 1층 구현.
A1 = np.dot(X, W1) + B1  # 출력값은 각각의 행렬연산으로 이루어진다.
Z1 = sigmoid_function(A1)  # 출력값을 기반으로 활성화함수.

# 2층 구현
A2 = np.dot(Z1, W2) + B2  # 1층에서의 결과가 입력으로 쓰인다.
Z2 = sigmoid_function(A2)