퍼셉트론(Perceptron)과 신경망(Neural Networks) 쉽게 이해하기

그동안 블로그에서 머신러닝의 개념과 적용 방법을 최대한 쉽게 다뤘는데, 이번에는 딥러닝의 영역까지 한 번 살펴봐야 할 거 같다.

뭐 물론 깊이 들어가면 어려울 테니… 일단 딥러닝이 대체 뭐고, 어떤 원리로 작동하고 어떤 곳에 사용되는지 알고 있는 것에 목표를 두자.

딥러닝을 얘기하려면 일단 퍼셉트론(Perceptron)부터 이해하고 가는 게 좋다.


퍼셉트론(Perceptron)이란

일단 Perceptron이라는 단어를 자세히 보면 퍼셉션과 뉴런, 이렇게 두 단어가 조합된 거라는 걸 알 수 있다.

  • Perception : 무언가를 인지하는 능력
  • Neuron : 감각 입력 정보를 의미있는 정보로 바꿔주는 뇌에 있는 신경 세포

결국 퍼셉트론은 생물학적 뉴런이 감각 정보를 받아서 문제를 해결하는 원리를 따라한 인공 뉴런이라고 볼 수 있다.

퍼셉트론을 하나만 보면 꽤 단순한 원리에 의해 결정을 내려준다.

입력 값에 대해 가중치를 적용해 계산한 후, 확인해서 결과 전달하기.

예를 들어 퍼셉트론 기반의 자율주행 자동차라고 하면, 왼쪽에 장애물이 있으면 오른쪽으로 핸들을 틀고 오른쪽에 장애물이 있으면 왼쪽으로 핸들을 트는 뭐 그런 셈. 장애물의 위치를 입력 받아서 어느 방향으로 핸들을 틀지 결정해주기만 하는 거다.

그런데 놀랍게도 퍼셉트론은 자신이 내린 결과를 확인해서, 미래에는 더 나은 결정을 하도록 자기 자신을 수정한다! 이게 딥러닝의 힘 아니겠는가.

물론 현실 세계는 이렇게 단순하지 않기 때문에 수많은 퍼셉트론을 묶어놓은 일종의 다발, 신경망(neural network)을 형성해서 문제를 해결해야 한다.

퍼셉트론의 구성요소

(위에서 얼핏 언급하긴 했는데) 퍼셉트론은 세 가지 구성요소로 설명할 수 있다.

1. Inputs

인풋. 입력값. 뭐 흔히 머신러닝에서 말하는 feature(속성 혹은 자질)이다. 예를 들어 ‘사람’이라고 치면 키, 몸무게, 나이 같은 거.

2. Weights

가중치는 각 인풋에 대해 일정량의 중요도를 부여하는 개념이다. 예를 들어 어떤 인풋에 대해 가중치가 크다는 건 그 인풋이 아웃풋을 결정하는 데에 더 큰 역할을 한다는 뜻이다.

3. Output

퍼셉트론은 인풋과 가중치를 사용해서 아웃풋을 생성한다. 물론 아웃풋의 유형은 문제의 특성에 따라 조금씩 다르게 나타날 수 있다. 예를 들어 비가 올지 예측하려면 아웃풋이 2진(binary)일 거다. 1 아니면 0, 비가 오거나 안 오거나 둘 중 하나니까. 그런데 만약 다음 날의 온도를 예측하는 거라면 아웃풋의 범위가 커진다.

퍼셉트론이 아웃풋을 내는 원리

퍼셉트론은 인풋을 받으면 가중치에 따라 가중합(weighted sum)을 계산하고, 그 값이 특정 기준을 만족하면(activation function) 1, 아니면 0 으로 결과를 돌려주는 방식이다.

뇌에 있는 신경 세포, 뉴런 들이 어떻게 작동하는지 이런 이미지로 흔히 표현하는데

여기 이렇게 불이 들어오는 것처럼, 퍼셉트론도 그런 거다.

퍼셉트론의 학습 방법

만약 인풋과 아웃풋을 모두 알고 있는 데이터가 있으면 이 퍼셉트론이 제대로 아웃풋을 냈는지 아닌지 확인할 수가 있다. 그래서 퍼셉트론은 결과를 제대로 못 맞출 때마다 학습 오류(training error)를 만들어내는 셈이다.

퍼셉트론의 성능을 개선하기 위해서는 이 퍼셉트론을 정의하는 파라미터, 즉 가중치를 변경해야 할 거다. 그리고 정답을 최대한 많이 맞출 수 있도록 최적의 가중치 조합을 찾는 게 학습의 목표가 된다.

그렇다면 가중치를 어떻게 조정해야 할까? 이제부터는 퍼셉트론 알고리즘(Perceptron Algorithm)을 이해해야 하는데… 이게 구체적으로 어떻게 작동하는지 수학적으로 이해하는 건 너무 어려우니 접어두자. 나도 잘 모른다.

그래도 개념적인 이해를 해보자면, 아래와 같은 규칙을 따른다고 볼 수 있다.

weight = weight + (error * input)

그래서 퍼셉트론의 오류가 최소화될 수 있는 방향으로 가중치를 조금씩 조정해가는 거다.

그리고 여기서 더 정확도를 높이기 위해 편향(bias)를 포함시켜 미세한 조정을 해주게 된다.

그래서 요리조리 막 학습을 하면 결국 최적의 값을 찾게 된다.

아래 그림은 퍼셉트론이 선형 분류 혹은 결정 경계를 찾는 과정을 시각화 한 것이다.

막 움직이다가 결국엔 최적의 선을 찾고 멈춘다.

매번 이렇게 선형으로 기준을 설정해서 쉽게 결정을 내릴 수 있다면 얼마나 좋을까. 그러나 현실 세계는 그리 녹록치 않을 거다.

그래서 이렇게 비선형적인 결정 기준을 설정하기 위해 등장하는 것이 신경망(Neural Networks)이다.

신경망(Neural Networks)

인풋으로 받는 feature의 수도 더 늘리고, 퍼셉트론의 개수도 더 늘려서 여러 겹으로 묶어놓은(Multilayer Perceptrons) 것을 신경망(Neural Networks)이라 부른다.

아래와 같은 모양새다.

정말 실제 뉴런처럼 생겼다…!

그리고 이렇게 구성된 신경망은 현실 세계의 훨씬 복잡한 문제를 해결할 수 있다(고들 한다.)


일단 오늘은 여기까지. 딥러닝은 그냥 개념만 훑어보고 넘어가자.

추천 글


댓글 남기기