제가 공부하면서 느낀 내용을 게시하기 때문에 이론이 실제와 다를 수 있습니다. 문제점과 틀린점이 있다면 댓글로 말해주시면 감사하겠습니다.
kook의 AI 공부 블로그 주인장
퍼셉트론
$$ 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 구현하기
Perceptron Decision Boundary
붉은 배경은 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)
$$
\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_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이므로 붉은 영역에 포함되지않는 것을 볼 수 있다.
신경망
$$ y = f(\sum_{i=1}^{n}w_i x_i + b) $$
\(f\) 는 활성화함수
다층 퍼셉트론(MLP)와 똑같은 구조로 은닉노드를 수백 수천개 까지 쌓은 형태를 말한다.
퍼셉트론은 신경망에 아주 기초가 되는 개념이고 앞으로는
이러한 신경망을 학습하는 방법(역전파),
활성화함수,
손실함수 등을 알아볼 것이다. !
답글 남기기