[인공지능] 퍼셉트론과 신경망

제가 공부하면서 느낀 내용을 게시하기 때문에 이론이 실제와 다를 수 있습니다. 문제점과 틀린점이 있다면 댓글로 말해주시면 감사하겠습니다.

kook의 AI 공부 블로그 주인장

퍼셉트론


x₁
w₁ +b
x₂
w₂
y

$$ Perceptron(x) = \text{Activation}(\sum_{i=1}^{2}w_ix_i + b) $$

\(x_1, x_2\) : 입력값, \(w_1, w_2 \) : 가중치, \( b \) : 편향


신경망에 대해서 배우기 전 기초가 되는 개념인 퍼셉트론에 대해서 배워보자.

퍼셉트론은 여러개의 입력값과 여러개의 가중치를 서로 곱해서 하나의 신호를 출력하는 알고리즘이다.

위에 이미지 구조로 or과 and를 구현해보겠다.

단층 퍼셉트론으로 AND와 OR 구현하기

x₂ (Input 2)
x₁ (Input 1)

Perceptron Decision Boundary

Weight 1 (w₁)0.7
Weight 2 (w₂)0.7
Bias (b)-1.0
Decision: w₁x₁ + w₂x₂ + b = 0

붉은 배경은 Output: 1, 흰 배경은 0입니다.

\(w_1, w_2, b \) 를 조절하여 AND, OR, XOR게이트를 구현해보자.
(검은 점이 붉은 영역에 들어오도록 해보자.)

\(\text{Activation}(\sum_{i=1}^{2}w_ix_i + b)\) 이런 식이였는데 갑자기 직선이 나오고 그래프 범위가 나와서 어지러울 수 있다. !
\(x_1\)을 x라고 생각하고 \(x_2\)를 y라고 생각해보자.

$$
\begin{aligned}
w_1x_1 + w_2x_2 + b &= 0 \\
w_2y &= -w_1x – b \\
y &= -\frac{w_1}{w_2}x -\frac{b}{w_2}
\end{aligned}
$$

자 이렇게 일차함수식으로 나타내니까 직선이 보이지 !!
그래서 직선으로 나타낼 수 있다는 것이다. ~

여기서 \(Activation Function\) 활성화함수라는 개념이 추가되는데
\(y\) 값이 0 이상이면 1을 출력하게한다.
-> 이렇게 입력값을 보고 출력값을 정해주는 것(활성화시키는 것)을 활성화함수라고 한다.

활성화함수는 아주 중요한 개념인데
활성화함수가 왜 필요한지에 대해서는 다음에 포스팅하겠다 !

다층 퍼셉트론 (MLP)


x₁
w₁ w₂ w₅ +b₁ +b₃
x₂
w₃ w₄ w₆ +b₂
h₁
h₂
y

$$
\begin{aligned}
h_1 &= f(w_1x_1 + w_2x_2 + b_1) \\
h_2 &= f(w_3x_1 + w_4x_2 + b_2) \\
y &= f(w_5h_1 + w_6h_2 + b_3) \\
\end{aligned}
$$

여기서 \(f\)는 활성화 함수이며 값을 0 또는 1로 출력


XOR 게이트 구현하기

위에 실습에서 XOR게이트를 클릭하면 (1,0)과 (0,1)만 검정점으로 되어있는 것을 볼 수 있다.
단층 퍼셉트론은 직선을 하나만 그을 수 있기때문에 XOR게이트 구현하는 것은 불가능하다.

따라서 단층 퍼셉트론형태에서 은닉층을 추가한 다층 퍼셉트론을 사용하여야한다.

실습을 통해 weigt가 늘어남에 따라 좌표평면 그래프가 어떻게 바뀌었는지 살펴보자.

Multi-Layer Perceptron (MLP)

x₂ (Input 2)
x₁ (Input 1)
Hidden Node 1 (h₁)
3.0x₁ + 3.0x₂ – 1.0 = 0
w₁: 3.0 w₂: 3.0 b₁: -1.0
Hidden Node 2 (h₂)
5.0x₁ + 5.0x₂ – 6.0 = 0
w₃: 5.0 w₄: 5.0 b₂: -6.0
Output Node (y)
1.0h₁ – 1.0h₂ – 0.5 = 0
w₅: 1.0 w₆: -1.0 b₃: -0.5
출력층의 연산 결과가 0보다 크면 붉은 영역으로 표시됩니다.

\(x_1, x_2\)가 각각 x축 y축이 되고
\(w_1x_1 + w_2x_2 + b_1, w_3x_1 + w_4x_2 + b_2\)이 직선이 된다고 생각하면 된다.

은닉층에서 만들어진 \(h_1, h_2\)의 값의 따라 0보다 크면 1을 출력하고 작으면 0이 된다.(활성화함수)

마지막으로 \(h_1,h_2\)의 출력값들과 \(w_5, w_6,b_3\)을 통해 최종 출력값을 정해주면 된다. 여기서 \(w_5, w_6, b_3\) 은 새로운 직선을 만들지 않고 값을 증폭시키거나 감소시켜 활성화 유무를 조절한다.

예시 1 (1,0)

\(w_1 = 3, w_2 = 3, b_1 = -1, w_3 = 5, w_4 = 5, b_2 = -6\) 일때,
\(x_1, x_2 = (1,0) 와 (1,1)\) 를 생각해보자.
\(h_1 = w_1\cdot x_1 + w_2\cdot x_2 + b_1 = 3\cdot1 + 3\cdot0-1 = 2\) … > 0 이므로 \(h_1\)의 값은 1
\(h_2 = w_3\cdot x_1 + w_4\cdot x_2 + b_2 = 5\cdot1 + 5\cdot0-6 = -1\) … < 0 이므로 \(h_2\)의 값은 0
\(w_5 = 1, w_6 = -1, b_3= -0.5\)
\(y = w_5\cdot h_1 + w_6\cdot h_2 + b_3=1\cdot1 + -1\cdot0 – 0.5 = 0.5\) … > 0 이므로 \(y\)값은 1이 된다.
>>> (1,0)을 대입했을때는 붉은 영역에 포함되는것을 볼 수 있다.

예시 2 (1,1)

\(h_1 = w_1\cdot x_1 + w_2\cdot x_2 + b_1 = 3\cdot1 + 3\cdot1 -1 = 5\) … >0 이므로 \(h_1\)의 값은 1
\(h_2 = w_3\cdot x_1 + w_4\cdot x_2 + b_2 = 5\cdot1 + 5\cdot1 -6 = 4\) … >0 이므로\(h_2\) 의 값은 1
\(y = w_5\cdot h_1 + w_6\cdot h_2 + b_3 = 1\cdot1 – 1\cdot1 – 0.5 = -0.5\) … <0 이므로 \(y\)의 값은 0
>>> (1,1) 을 대입했을때 최종 출력이 0이므로 붉은 영역에 포함되지않는 것을 볼 수 있다.

신경망


x₁
x₂
x₃
y

$$ y = f(\sum_{i=1}^{n}w_i x_i + b) $$

\(f\) 는 활성화함수


다층 퍼셉트론(MLP)와 똑같은 구조로 은닉노드를 수백 수천개 까지 쌓은 형태를 말한다.

퍼셉트론은 신경망에 아주 기초가 되는 개념이고 앞으로는
이러한 신경망을 학습하는 방법(역전파),
활성화함수,
손실함수 등을 알아볼 것이다. !

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다