Codes
Code your ideas for understanding of natural systems
Updated at 2021.4.15
Updated at 2019.05.05
Perceptron
신경망(Neural Network)의 시초는 1959년 Rosenblatt가 제안한 퍼셉트론이다. 그의 기본 아이디어를 살펴보고, 어떻게 작동하는지를 간단한 예제를 풀어 볼 것이다.
Concept of Neural Network
신경망은 뇌의 뉴런을 모사했다고 하는데, 그 구조는 아래 그림과 같이 가장 심플한 2개의 입력을 가진 것을 나타내 볼 수 있다.
- N 개의 입력(Input)이 있고,
- 각각 가중치(Weight)를 가지고 더해지며,
- bias (Theta, \(\theta\))값이 추가된 후
- 이 값이 특정한 값(Threshold)을 기준으로 활성화(Activate)되거나 안되거나 한다.
이것을 수학적 수식으로 표현하면 다음과 같다.
\begin{align}y=F\left( \sum_{i=1}^{2} w_i x_i + \theta \right)\end{align}
여기서 F는 활성화 함수(Activation Function)이라고 부르며, 여기서는 그 중에 가장 단순한 형태는 Sign
또는 Heaviside
함수라고 부르는 다음과 같은 형태를 사용한다.
\begin{align}F(s)=\left\{\begin{matrix} 1 & s\geq 0\\ -1 & s < 0 \end{matrix}\right.\end{align}
위의 네트워크의 출력값은 1 또는 -1이다. 따라서 분류(Classification)
문제에 사용할 수 있다. +1에 속하는 군(Class)과 -1에 속하는 군을 나누는 것은 아래 수식과 같은 2차 평면 내의 직선으로 나타낼 수 있다.
\begin{align}w_1 x_1 + w_2 x_2 + \theta = 0\end{align}
\(x_2\) 를 구하면,
\begin{align}x_2 = -\frac{w_1}{w_2}x_1 -\frac{\theta}{w_2}\end{align}
즉, \(w_1, w_2, \theta\) 를 잘 설정하면 2차원 데이터(2차원 벡터)들을 직선으로 양분할 수 있다는 말이다.
Perceptron Learning Rule
입력 데이터 벡터를 \(\mathbf{x}\), 원하는 출력값을 \(d(\mathbf{x})\) 라고하면, 퍼셉트론의 학습 방법은 다음과 같이 나타낼 수 있다.
- 네트워크의 가중치 \((w_1, w_2)\) 를 Random으로 시작한다.
- 학습 훈련(Training)에 사용할 샘플들 중에서 1개의 데이터(\(\mathbf{x}\))를 선택한다.
- 출력값 \(y \neq d(\mathbf{x})\) 이면, 가중치를 바꾼다.
- 바꾸는 방법은 \(\Delta w_i = d(\mathbf{x})x_i\).
- Threshold값인 \(\theta\) 값은 \(x_0 = 1\) 인 입력의 가중치로 생각할 수 있기 때문에, 퍼셉트론의 출력값이 틀릴 때에는 \(\Delta \theta = d(\mathbf{x})\) 로 업데이트 한다.
- 2번으로 돌아가서, 모든 샘플 데이터에 대해서 3번을 만족할 때까지 계속한다.
Perceptron Tester
Percetron is learning from data...
총 17 개의 글이 있습니다.
# | 제목 | 날짜 | 조회수 |
---|---|---|---|
01 | CS 배우기 요약 | 2021/06/07 | 144 |
02 | CS Statements | 2021/06/07 | 127 |
03 | 퍼셉트론 | 2021/04/15 | 124 |
04 | Blazor and Sqlite | 2021/04/15 | 136 |
05 | Blazor Layouts | 2021/04/15 | 159 |
06 | CS Language Reference | 2021/06/07 | 125 |
07 | VSCode and Markdown | 2021/04/15 | 136 |
08 | Blazor에서 이미지파일 다루기 | 2021/06/10 | 210 |
09 | Blazor and Markdown | 2021/04/15 | 143 |
10 | 종속성 주입 | 2021/06/07 | 151 |
11 | Blazor에서 데이터 다루기 | 2021/06/07 | 137 |
12 | Blazor Components | 2021/04/15 | 146 |
13 | CS Glossary | 2021/06/07 | 125 |
14 | Enum 타입 다루기 | 2021/12/14 | 134 |
15 | 생활코딩 CS01 | 2022/04/25 | 261 |
16 | 생활코딩 CS02 | 2022/04/30 | 165 |
17 | 생활코딩 CS03 | 2022/04/30 | 441 |