티스토리 뷰
신경망 기초
신경망(neural network)은 신경세포(neuron)를 모델화한 계산소자인 인공신경(artificial neuron)을 조합한 것이다.
그렇면 가장 최소 단위인, 인공신경부터 접근해보자.
인공신경 모델
- 입력값
- 가중치
- 문턱값
- 전달함수(또는 출력함수 또는 활성화 함수)
입력된 값 $ x_{i} $ 에, 입력마다 미리 정해진 상수 $ w_{i} $ 를 곱한다. 이 상수 $ w_{i} $ 는 가중치(weight)라 부른다.
입력신호는 가중치를 곱한다음 모두 더하고 문턱값이라 불리는 상수 $ v $ 를 뺀다.
이렇게 하여 입력 신호를 더한 다음 문턱값을 뺀 계산 값을 다음에서는 기호 $ u $를 이용하여 나타낸다.
마지막으로 계산 값 $ u $를 전달함수(transfer function)로 처리한 결과인 $ f(u) $를 인공신경 출력 $ z $ 라 한다. 전달 함수는 출력함수(output function)라고도 한다.
이 과정을 수식으로 나타내면 다음과 같다
$$ u = \sum_{i} x_{i} w_{i} - v $$
\[ z = f(u) \]
전달함수( $ f(u) $ )에는 다양한 함수를 사용할 수 있다.
- 계단(step) 함수
- 시그모이드 함수
- 시그모이드 함수를 이용하면, 뒤에 설명할 역전파(back propagation)에서 학습 계산 처리가 쉬워지므로 역전파를 이용할 때 전달 함수로 자주 사용함
인공신경 예시
그림 4-4. 인공 신경의 예
예시 입력으로 $ (x_{1}, x_{2}) = (0, 0) $ 을 준다고 할때, 아래와 같이 계산된다.
\begin{align*} u_{00} &= \sum_{i} x_{i} w_{i} - v \\ &= 1 \times 0 + 1 \times 0 - 1.5 \\ &= -1.5 \\ z_{00} &= f(-1.5) \\ &= 0 \end{align*}
마찬가지로 $ (0,1) $, $ (1,0) $, $ (1,1) $ 에 대한 출력은 $ z_{01} = 0 $, $ z_{10} = 0 $, $ z_{11} = 1 $이다.
이는 AND 논리소자와 동일하게 동작된다.
문턱값을 0.5로 조정하면, 출력도 변경된다. 계산해보면, OR 논리소자와 동일하게 동작된다.
신경망, 그리고 신경망의 학습
⭐️ 2층의 피드포워드 형 신경망 계산을 따라가보자.
그림 4-5. 피드포워드 형 신경망(2층 망, 2입력-1출력), 또는 계층형 망(layered network) 이라 부름
- 가중치와 문턱값을 다음과 같이 가정하자
$ (w_{11}, w_{12}, w_{21}, w_{22}, w_{13}, w_{23}) = (-2, -2, 3, 1, -60, 94) $
$ (v_{1}, v_{2}, v_{3} = (-1, 0.5, -1)) $
- 전달 함수로는 계단 함수를 사용한다고 가정하자
이때 입출력 관계를 계산하면 아래와 같아진다.
$ x_{1} $ | $ x_{2} $ | $ u_{1} $ | $ z_{1} $ | $ u_{2} $ | $ z_{2} $ | $ u_{3} $ | $ z_{3} $ |
0 | 0 | 1 | 1 | -0.5 | 0 | -59 | 0 |
0 | 1 | 4 | 1 | 0.5 | 1 | 35 | 1 |
1 | 1 | 2 | 1 | -1.5 | 0 | -59 | 0 |
1 | 0 | -1 | 0 | -2.5 | 0 | 1 | 1 |
하나의 인공신경일때와 마찬가지로, 신경망에서는 가중치와 문턱값의 설정에 따라 움직임이 결정된다.
따라서 하나의 인공 신경일때와같이, 이 역시도 신경망에서의 학습은 가중치와 문턱값을 적절히 조정하는 절차를 의미한다.
"신경망의 학습 과정"
- 모든 가중치와 문턱값을 초기화(예를 들면, 무작위)
- 다음을 적당한 횟수 반복
- 학습 데이터 집합에서 하나의 학습 예를 골라 신경망에 넣어 출력을 계산한다
- 교사데이터와 신경망의 출력을 비교하여 오차가 적어지도록 가중치와 문턱값을 조절한다
- 2-2 에서 가중치와 문턱값 조절 방법이 핵심 토픽이다
- 이때 효율적인 학습방법이 "역전파(back propagation)"이다.
"인공신경망"의 "학습 절차" 중, 계층형 신경망에서 널리 사용되는 역전파에 관해 알아보자.
퍼셉트론
가장 간단한 계층형 신경망인 퍼셉트론을 이해하고, 한계점을 파악한 뒤, 개선 방안인 역전파를 알아보겠다
개요
1950년대 퍼셉트론(perceptron)이라 불리는 계층형 신경망이 널리 연구되었다. 퍼셉트론의 학습 과정은 단순하긴 하지만, 실제로는 역전파의 기본형으로 생각할 수 있다.
퍼셉트론 구조 및 컨셉
- 입력층(자극층)
- 입력 신호를 다음 단계의 인공신경에 절달하기만하는 고정화된 소자
- 중간층(연상층)
- 출력층(응답층)
한계점, 개선방안(역전파)
퍼셉트론의 컨셉이 이러하다.
따라서,
퍼셉트론 학습에서는, 출력층의 가중치와 문턱값을 변경하여 학습을 진행한다. 그러므로 퍼셉트론의 학습능력은 한정된다.
중간층의 고정된 가중치와 문턱값 설정에 따라서, 학습데이터에 대해 만족할만한 학습이 이루어지지 않을때도 있다.
역전파에서는 이 점을 개선하여, 출력층 뿐만 아니라, 전 단계의 가중치와 문턱값도 학습 대상으로 하고있다.
퍼셉트론 학습
퍼셉트론의 학습은, "신경망의 [출력층의 가중치와 문턱값] 학습" 이다.
신경망에서 출력층의 가중치와 문턱값 학습은 교사 데이터를 포함한 학습 데이터를 이용하여 수행된다. 이 과정은 일반적인 신경망의 학습방법과 유사하다.
학습 과정
- 학습 데이터 선택 및 출력 계산
- 먼저 학습 데이터 집합에서 하나의 학습 예를 선택하고, 이를 신경망에 입력하여 출력을 계산한다.
- 오차 계산 및 비교
- 신경망의 출력과 교사 데이터를 비교하여 오차를 계산한다.
- 가중치 및 문턱값 조절
- 오차가 최소화되도록 신경망의 가중치와 문턱값을 조정하는데, 이를 위해 다음과 같은 방법을 사용할 수 있다.
- 출력값 < 교사데이터
- 출력값이 교사 데이터보다 작은 경우, 출력이 커지도록 가중치와 문턱값을 조정한다.
- 출력값 > 교사데이터
- 출력값이 교사 데이터보다 큰 경우, 출력이 작아지도록 가중치와 문턱값을 조정한다.
- 출력값 < 교사데이터
- 오차가 최소화되도록 신경망의 가중치와 문턱값을 조정하는데, 이를 위해 다음과 같은 방법을 사용할 수 있다.
이러한 과정을 통해 신경망은 학습을 반복하며, 오차를 점차 줄여나간다.
⭐️ 수식 정리
오차 E를 아래와 같이 정의하자.
$$ E = o_{t} - o \;\;\;\; 오차: E,\; o_{t}: 교사데이터, \;o: 실제출력 $$
이렇게 오차를 정의하면, 위에서 신경망의 오차가 최소화 하도록 하는 조절을 아래의 식으로 표기 가능하다.
\[ w_{i} \leftarrow w_{i} + \alpha \times E \times h_{i} \;\;\;\; \alpha : \text{학습계수} \]
이 식에 전달 함수(활성화 함수)의 영향을 고려한 항을 더하면 갱신 식은 다음과 같다.
\[ w_{i} \leftarrow w_{i} + \alpha \times E \times f'(u) \times h_{i} \]
이때 전달 함수로 시그모이드 함수를 이용한다고 할때, 미분계수 f'(u) 는 다음과 같다.
$$ f'(u) = f(u) \times (1 - f(u)) = o \times (1 - o) $$
따라서,
전달 함수(활성화 함수)의 영향을 고려한 항을 더한, 가중치 갱신 식은 아래와 같다.
$$ w_{i} \leftarrow w_{i} + \alpha \times E \times o \times (1 - o) \times h_{i} $$
위 식에서, 문턱값 갱신에 대해서는 중간층에서의 출력 hi가 항상 -1인 특수결합에 관한 가중치로 사용하면, 그대로 가중치와 마찬가지 갱신식으로 처리할 수 있다
지금까지를 정리하면, 퍼셉트론 학습은 가중치 갱신 식 을 사용하여 [출력층의 가중치와 문턱값]을 [갱신]해가는 과정이라 할 수 있다
역전파(Back Propagation)
앞에서는 퍼셉트론 모델을 기반으로하여, 출력층의 가중치를 학습하는 방법을 살펴보았다. 출력층만 학습이 가능하다는 한계점이 존재했다.
이번에는 그 [앞단계의 가중치]를 역전파를 이용하여 학습하는 방법에 대해 알아보자
역전파란 거꾸로 무언가를 전파한다는 의미이다. 출력층에서 입력층의 방향을 의미한다.
개요(처리과정)
그림 4-13. 역전파에서 중간층 오차
- 출력층의 학습은, 이전에 살펴본 가중치 갱신 식으로 학습가능하다
-
중간층의 학습은, 간층과 출력층의 결합강도가 오차 E 에 대한 영향의 강도라 할 수 있다.
- 즉, 전체 출력 결과의 오차에 대해 중간층의 '책임'은,
- 중간층에서 출력층으로의 결합상태에따라,
- 중간층을 구성하는 인공신경이 각각 분담한다고 생각할 수 있다.
- 그림 4-13을 예로 들면,
- 중간층의 3개의 인공신경은,
- 출력층으로의 결합가중치(w1 ~ w3)에 따라 오차에 영향을 줄 것이다.
- 이렇게 하면,
- 출력층의 인공신경에 강하게 결합한 중간층의 인공신경일수록 오차에 대한 기여가 커진다고 할 수 있다
- 반대로 말하면, 결합의 가중치가 작은 인공신경은, 출력 오차에 대한 기여가 작아진다고 할수 있다
- 이러한 사고방식을 이용하여,
- 오차 E를 중간층과 출력층의 결합 가중치로 분배하면, 중간층의 인공신경 각각의 오차를 정의할 수 있다.
- 남은 것은, 분배한 오차를 이용하여 가중치 갱신 식 과 마찬가지 사고방식으로, 중간층의 가중치를 학습하는 것이다
- 이렇게 하면, 3개층의 망 뿐만아니라, 더 많은 층의 신경망 학습이 가능하다
- 이때,
- 최종출력오차 E가, 학습과정에 따라 출력층에서 입력층을 향해 역방향으로 전파된다
- 이러한 모양을, 역전파라 표현하는 것이다
- 이때,
- 즉, 전체 출력 결과의 오차에 대해 중간층의 '책임'은,
⭐️ 역전파 계산 과정
[출력층의 인공신경이 [하나]]일때, 역전파의 구체적 계산과정은 다음과 같다
- 적당한 종료조건을 만족할때까지 다음을 반복
- 학습데이터 집합 중 하나의 예 $ (x, o) $ 에 대해 다음을 계산
- $ x $를 이용하여 중간층의 출력 $ h_{i} $를 계산
- $ h_{i} $ 를 이용하여 출력층의 출력 $ o $를 계산
- 출력층의 인공신경에 대해 다음을 계산
- $ w_{o} \leftarrow w_{o} + \alpha \times E \times o (1 - o) \times h_{i} $ 식(3)
- 중간층의 j번째 신경셀에 대해 다음을 계산
- $ \Delta_{j} \leftarrow h_{j} \times (1 - h_{j}) \times wj \times E \times o \times (1 - o) $ 식(4)
- 중간층의 j번째 신경셀의 i번째 입력에 대해 다음을 계산
- $ w_{ji} \leftarrow w_{ji} + \alpha \times x_{i} \times \Delta_{j} $ 식(5)
3층 신경망에서의 역전파 학습
로직을 기술하면 아래와 같다
- 가중치와 문턱값 초기화
- 입력 데이터를 읽어들임
- 다음을 모든 학습데이터에 대해 반복하여 계산
- 입력값과 가중치 wh를 이용하여, 출력층에 대한 입력 hi를 구함
- hi와 가중치 wo 를이용하여 출력값을 계산
- 식(3)[출력층의 인공신경]에 따라 출력층의 가중치와 문턱값을 학습
- 식(4)[중간층의 j번째 신경셀]와 식(5)[중간층의 j번째 신경셀의 i번째 입력]에 따라 중간층의 가중치와 문턱값을 학습
여기서 2층 신경망 에 비해 3-3, 3-4 만 추가되었을 뿐이다.
- Total
- Today
- Yesterday
- OOP
- S1
- tomcat11
- 연관관계 편의 메서드
- 객체 변조 방어
- generic sort
- generic swap
- 논문추천
- Spring MVC
- CPU
- 톰캣11
- condition variable
- tree
- pocu
- 백준
- Memory
- Dispatcher Servlet
- servlet
- 엔티티 설계 주의점
- C
- core c++
- PS
- Java
- sleep lock
- reader-writer lock
- S4
- 개발 공부 자료
- thread
- 이진탐색
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |