바뀜

5,241 바이트 추가됨 ,  2021년 12월 6일 (월) 17:43
1번째 줄: 1번째 줄:  +
== 개요 ==
 +
신경망을 사용해 인공지능을 만드는 방법. 모든 문제를 같은 맥락에서 풀 수 있나는 점에 커다란 이점이 있다.
 +
 +
= 주요 아이디어 =
 +
 
== 퍼셉트론 ==
 
== 퍼셉트론 ==
 
1957년에 프랑크 로젠블라트에 의해 고안된 알고리즘. 신경망(딥러닝)의 기원이 되는 알고리즘이다. 딥러닝의 기초 아이디어.
 
1957년에 프랑크 로젠블라트에 의해 고안된 알고리즘. 신경망(딥러닝)의 기원이 되는 알고리즘이다. 딥러닝의 기초 아이디어.
17번째 줄: 22번째 줄:     
== 다층 퍼셉트론 ==
 
== 다층 퍼셉트론 ==
multi layer perceptron. 마빈 민스키와 시모어 페퍼트가 다층 퍼셉트론으로 XOR 연산이 가능함을 보였다.(애초에 XOR은 2개의 게이트를 이용해 만들 수 있다. 여기에서 모티브를 얻었을진 모르겠지만..) 이처럼 1층의 연산결과를 받아 XOR게이트를 구현할 수 있었다. 이처럼 퍼셉트론을 쌓아 비선형적 처리의 가능성을 보였다.
+
multi layer perceptron. MLP. 마빈 민스키와 시모어 페퍼트가 다층 퍼셉트론으로 XOR 연산이 가능함을 보였다.(애초에 XOR은 2개의 게이트를 이용해 만들 수 있다. 여기에서 모티브를 얻었을진 모르겠지만..) 이처럼 1층의 연산결과를 받아 XOR게이트를 구현할 수 있었다. 이처럼 퍼셉트론을 쌓아 비선형적 처리의 가능성을 보였다.
    
기본적으로 2진수를 10진수로 변환하는 것이나, 가산하는 과정이나 AND, OR, NAND, XOR 만으로 만들 수 있으니, 이 방법으로 컴퓨터를 표현할 수 있다. 결국 이들만으로 컴퓨터의 일을 수행할 수 있다는 것은 학습을 통해 2층만으로도 컴퓨터를 만들어낼 수 있다는 것이다.
 
기본적으로 2진수를 10진수로 변환하는 것이나, 가산하는 과정이나 AND, OR, NAND, XOR 만으로 만들 수 있으니, 이 방법으로 컴퓨터를 표현할 수 있다. 결국 이들만으로 컴퓨터의 일을 수행할 수 있다는 것은 학습을 통해 2층만으로도 컴퓨터를 만들어낼 수 있다는 것이다.
25번째 줄: 30번째 줄:  
=== 활성화함수 ===
 
=== 활성화함수 ===
 
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>
 +
 +
= 가중치 =
 +
 +
== 가중치의 초기값 ==
 +
0에 치우치면 미분값이 0이 되기 때문에 훈련이 거의 일어나지 않는다.(몇만번 반복해도 모델이 개선되지 않는 경우가 많다.) 이를 기울기 소실이라 부른다. 그렇다고 수를 가운데로 몰면 가중치가 비슷한 값들이 많아, 같은 크기의 훈련값을 갖게 된다. 이러면 뉴런을 여러개 두는 이유가 사라진다.
 +
 +
== Xavier ==
 +
때문에 Xavier초기값이 제안되어 쓰인다. 가장 적절한 초깃값을 찾기 위해 앞층 노드의 수에 따라 <math>\frac{1}{\sqrt{n}}</math>의 표준편차를 갖게 설정하는 것이 적절하다 알려져 있다. 이렇게 하면 다음 층까지 적절한 분산으로 전달되고, 훈련이 효율적으로 이루어진다.
 +
 +
== He 초기값 ==
 +
Xavier 초기값은 활성화 함수가 선형인 것을 전제로 이끈 결과이다. 따라서 ReLU처럼 선형이 아닌 경우엔 여기에 맞는 초기값을 사용해야 하는데, 이를 찾아낸 카이밍 히의 이름을 따 He 초기값이라 부른다. 앞쪽의 노드가 n개일 때 <math>\frac{2}{\sqrt{n}}</math>의 표준편차를 갖게 분산시킨다. 단순히 ReLU에선 음의 영역이 0이기 때문에 2배 넓게 분포시켰다고 보아도 된다.
 +
 +
= 정규배치화 =
 +
층이 깊어지면서 인풋의 값이 점차 한 지점으로 몰리는 경향이 있어 초기값 설정이 중요했다. 그럼 자연스레 드는 의문은 '층의 끝에서 다시 초기의 정규배치를 갖게끔 조절해주면 되지 않을까?'인데, 실제로 이 방법을 쓰면 초기값 설정에 크게 구애받지 않고, 학습속도를 빠르게 만들어주었다. 초기값에 대한 전략과 정규배치화를 함께 사용하면 빠른 학습속도를 얻을 수 있다.
 +
 +
= 오버피팅 방지 =
 +
 +
== 네트워크 크기 줄이기 ==
 +
 +
===무조건 크게?===
 +
너무 많은 파라미터는 과적합의 원인이 되기도 한다. 과적합을 막기 위해 네트워크의 크기를 줄이는 것도 전략이다. 손실이 감소할때까지 점차 유닛의 수를 늘려가는 것이 일반전략.(일반적으로 네트워크가 크면 작은 네트워크보다 더 빠르게 과적합 되었다.) 네트워크가 크면 오히려 성능이 안좋아진다.
 +
== 가중치 감소 ==
 +
훈련을 많이 하다 보면 오버피팅이 일어나기도 한다. 일반적으로 오버피팅은 가중치의 값이 커서 발생하기 때문에 이를 제한하는 전략이다. 가중치 감소를 사용하면 훈련데이터의 정확도가 100%에 이르지 못하지만, 오히려 시험데이터에선 정확도가 올라간다.
 +
 +
가중치 규제라고도 하며, L1, L2 규제 등이 있다.
 +
 +
* L1 규제 : 가중치의 절대값에 비례하는 비용이 추가(가중치의 L1 노름).
 +
* L2 규제 : 가중치의 제곱에 비례하는 비용이 추가(가중치의 L2 노름). L2 규제는 신경망에서 가중치 감쇠라고도 부른다.
 +
 +
== 드롭아웃 ==
 +
신경망이 복잡해지면 가중치 감소만으론 대응하기가 어려워진다고 한다. 이때 사용하는 방법으로, 뉴런을 임의로 삭제하면서 학습하는 방법이다.
 +
 +
학습할 땐 없애고, 추론할 땐 없앴던 비율을 곱하여 출력한다.
 +
 +
기계학습에선 여러 모델의 출력을 평균내어 답을 내는 앙상블학습이 정확도가 높다는 것이 실험적으로 알려져 있는데, 드롭아웃은 여러 모델을 만드는 효과를 한 모델에서 구현한 것이라 보아도 되겠다.
 +
 +
= 하이퍼파라미터 =
 +
훈련률, 가중치 감소 계수 등에서 어떤 값이 잘 들어맞을지는 직접 돌려봐야 알 수 있다. 각각의 훈련에서 수천번 이상의 훈련이 이루어지니, 하이퍼파라미터를 찾는 과정은 로그스케일로 널찍널찍하게 정해 연산을 수행한다. 굉장히 오랜시간이 걸리므로 가능성이 없는 값은 초기에 포기하는 편이 효율적이다. 가장 적절한 값이 있는 범위를 좁혀나가면서 최적의 값을 찾아나간다.
 
[[분류:딥러닝 이론]]
 
[[분류:딥러닝 이론]]