Math Sci Life Code Log in

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})\) 라고하면, 퍼셉트론의 학습 방법은 다음과 같이 나타낼 수 있다.

  1. 네트워크의 가중치 \((w_1, w_2)\) 를 Random으로 시작한다.
  2. 학습 훈련(Training)에 사용할 샘플들 중에서 1개의 데이터(\(\mathbf{x}\))를 선택한다.
  3. 출력값 \(y \neq d(\mathbf{x})\) 이면, 가중치를 바꾼다.
    • 바꾸는 방법은 \(\Delta w_i = d(\mathbf{x})x_i\).
    • Threshold값인 \(\theta\) 값은 \(x_0 = 1\) 인 입력의 가중치로 생각할 수 있기 때문에, 퍼셉트론의 출력값이 틀릴 때에는 \(\Delta \theta = d(\mathbf{x})\) 로 업데이트 한다.
  4. 2번으로 돌아가서, 모든 샘플 데이터에 대해서 3번을 만족할 때까지 계속한다.

Perceptron Tester



Percetron is learning from data...


17 개의 글이 있습니다.

# 제목 날짜 조회수
01 CS 배우기 요약 2021/06/07 145
02 CS Statements 2021/06/07 128
03 퍼셉트론 2021/04/15 125
04 Blazor and Sqlite 2021/04/15 137
05 Blazor Layouts 2021/04/15 161
06 CS Language Reference 2021/06/07 127
07 VSCode and Markdown 2021/04/15 138
08 Blazor에서 이미지파일 다루기 2021/06/10 211
09 Blazor and Markdown 2021/04/15 144
10 종속성 주입 2021/06/07 152
11 Blazor에서 데이터 다루기 2021/06/07 137
12 Blazor Components 2021/04/15 148
13 CS Glossary 2021/06/07 126
14 Enum 타입 다루기 2021/12/14 135
15 생활코딩 CS01 2022/04/25 261
16 생활코딩 CS02 2022/04/30 165
17 생활코딩 CS03 2022/04/30 441

Most Popular #3

Recent #3

An error has occurred. This application may no longer respond until reloaded. Reload 🗙