도서 : 신경망 첫걸음(한빛미디어)
지음 : 타리크라시드(송교석 옮김)
- 신경망 내의 신호를 따라가보기 위해 간단한 2개의 계층에 각각 2개의 노드가 있는 신경망을 만들어보겠습니다.
- 가중치는 임의로 W(1,1) = 0.9, W(1,2) = 0.2, W(2,1) = 0.3, W(2,2) = 0.8로 정했습니다.
- 입력값은 1.0과 0.5, 이렇게 두고 각각의 노드로 입력되는 값들을 계산해 보면 다음과 같습니다.
- 이를 마지막으로 시그모이드 활성화 함수에 입력 값으로 적용하면 y = 1 / (1 + 0.3499) = 1 / 1.3499 = 0.7408과 y = 1 / (1 + 0.5488) = 1 / 1.5488 = 0.6457이라는 출력 값을 얻게 됩니다.
- 지금은 2개의 계층 뿐이지만 엄청나게 많은 노드들과 계층들을 계산하기 위해서는 하나하나 계산하기 힘들 것입니다.
- 따라서 행렬을 이용하여 좀 더 쉽게 계산하는 방법을 알아보겠습니다.
- 솔직히 행렬곱은 유용합니다
- 행렬(matrix)이란 사실상 숫자로 구성된 사각형의 격자에 지나지 않습니다. 행렬은 위의 복잡한 계산을 매우 간단한 형태로 압축해서 표현할 수 있도록 도와줍니다.
- 대부분의 컴퓨터 프로그래밍 언어는 행렬 작업을 잘 처리하므로 이런 복잡한 업무를 행렬 기반으로 잘 만들어서 컴퓨터에게 넘기기만 하면 컴퓨터가 알아서 매우 빠르고 효율적으로 처리할 수 있게 됩니다.
- 점곱(dot product) 또는 내적(inner product) : 첫 번째 행렬의 열의 수와 두 번째 행렬의 행의 수가 같아서 서로 다른 크기의 행렬임에도 행렬곱이 가능
- 2개 계층의 노드 간 가중치로 구성되어 있는 행렬과 입력 계층의 신호로 구성되어 있는 행렬의 행렬곱을 표현해보면 다음과 같습니다.
- 결과 행렬에서 나타내는 바는 input값들이 가중치에 의해 조정되어 더해진 결과입니다. 이 결과값들은 시그모이드 활성화 함수에 입력 값 x로 전달됩니다. 이를 간단한 공식으로 나타내면 X(시그모이드 함수로 넘겨질 x값의 행렬) = W(가중치의 행렬) * I(입력 값들의 행렬) -> 일반적으로 행렬을 표현할 때는 다른 하나의 숫자를 담고있는 변수보다 진하게 표시한다
- 따라서 계층 2의 최종 결과물은 O(신경망의 마지막 계층의 모든 결과 값을 포함하는 행렬) = sigmoid(X) 와 같이 표현할 수 있습니다.
- 3계층 신경망에 행렬곱 적용하기
-
계층이 3개인 신경망을 통해 신호를 전달해보겠습니다. 계층 1은 입력 계층(input layer)이라고 부르며 마지막 계층 3은 출력 계층(out layer)이라고 부릅니다. 중간에 위치하는 계층 2는 은닉 계층(hidden layer)이라고 합니다.
-
입력 값은 3개가 존재하며 각각 0.9, 0.1, 0.8입니다. 각 가중치들은 다음과 같이 행렬로 표현했습니다. 입력 계층과 은닉 계층의 행렬, 은닉 계층과 출력 계층 간의 가중치의 행렬이 각각 만들어졌습니다.
-
먼저 입력 값들을 첫 번째 순서인 입력 계층 -> 은닉 계층의 행렬과 곱합니다. 그렇게 나온 결과 값을 sigmoid함수에 넣어서 완전한 결과 값을 도출합니다.
-
그 후 다시 은닉 계층 -> 출력 계층의 행렬과 곱합니다. 그렇게 나온 결과 값을 다시 sigmoid함수에 넣어서 최종적인 출력 값을 구합니다.
-
다음 단계는 지금 얻은 결과 값을 학습 데이터의 실제 값과 비교해 오차를 구하는 것이 될 것입니다.
'Deep-Learning > Deep-Learning 기초 지식' 카테고리의 다른 글
[신경망 첫걸음]데이터 준비하기 (0) | 2019.02.20 |
---|---|
[신경망 첫걸음]가중치의 진짜 업데이트 (0) | 2019.02.20 |
[신경망 첫걸음]여러 노드에서 가중치 학습하기(역전파) (0) | 2019.02.19 |
[신경망 첫걸음]여러개의 분류자와 뉴런 (0) | 2019.02.17 |
[신경망 첫걸음]인공 신경망의 동작 원리 (0) | 2019.02.04 |