[CV] 퍼셉트론, 신경망
퍼셉트론이란 동물의 신경계 시스템을 비슷하게 흉내 내어 설계한 알고리즘이다.
입력값(Input)과 가중치(Weight)의 곱을 모두 더한 뒤 활성 함수를 통해 최종 출력(Output)을 정한다.
다수의 신호를 입력받아 하나의 신호를 출력한다. (다중입력 단일 출력 형태)
여기서 x1~xi 는 입력값, w1~wi 는 가중치, 퍼셉트론의 동작 경향성인 x0와 그 가중치인 w0 이 있고
신호의 전달 여부를 결정하는 활성함수가 있다.
동물의 신경계에서 역치 이상이 되어야 신경신호가 전달되는 것처럼,
퍼셉트론 구조에서는 (입력값 x 가중치) 의 합들이 활성 함수를 거쳐서 나온 출력 값에 따라 신호 전달 여부가 결정된다.
또한 퍼셉트론은 선형방정식으로 표현이 가능하다. 즉, 선형 분류기이다.
따라서 퍼셉트론을 이용해 논리 연산(AND, OR, NAND etc.)이 가능하다.
퍼셉트론은 선형 분류기이기 때문에 비선형적인 문제들은 해결할 수 없다.
이를 해결하기 위해 여러 개의 퍼셉트론을 사용한 다층 퍼셉트론이 등장했다.
여러 개의 퍼셉트론을 조합하여 선형 분류기인 단일 퍼셉트론만으로 해결할 수 없는 문제들을 해결할 수 있게 되었다.
다층 퍼셉트론을 Mulit Layer Perceptron, MLP 라고 한다.
입력층과 출력층 사이에 중간층인 은닉층(Hidden Layer)이 있는데,
은닉층이 3층 이상이면 심층 신경망인 Deep Neural Network (Deep NN) 라고 한다.
층의 수가 깊어지고 한 층의 노드 수들이 많아지면 가중치가 증가한다.
다층 퍼셉트론의 동작원리는 단층 퍼셉트론의 동작원리와 거의 같고
다른 점은 은닉층, 출력층에 있는 활성 함수가 여러 개라는 것과 이에 따른 가중치가 여러 개라는 것이다.
머신러닝을 모델링할 때 데이터를 이용하게 되는데,
여기에 훈련 데이터와 시험 데이터라는 개념이 등장한다.
수집한 전체 데이터가 10이라고 한다면 7:3 또는 8:2 정도로 훈련 데이터와 시험 데이터를 나눈다.
나눈 데이터를 사용해서 훈련 데이터는 신경망을 학습시키는 데에 사용하고
시험 데이터는 학습결과를 검증할 때 사용한다.
신경망은 학습을 거치면서 훈련 데이터로부터 가중치의 최적값을 자동으로 획득하게 된다.
손실 함수는 이런 신경망이 잘 학습할 수 있도록 하는 지표이다.
손실 함수의 결과를 가장 작게 만드는 가중치를 찾는 것이 신경망 학습의 목표이기 때문이다.
신경망을 학습시키고 점검할 때 학습이 잘 이루어졌는지를 판단하는 지표로 정확도가 아닌 손실함수의 값을 사용한다.
신경망 학습에서는 가중치와 편향을 볼 때 손실함수의 값을 최대한 작게 하는 변수값을 찾는다.
변수의 미분값을 계산해서 이를 단서로 변수의 값을 갱신하는데 손실 함수의 미분함수를 이용해서
해당 변수에서 미분 값이 음수이면 변수를 양의 방향으로 바꾸고,
미분 값이 양수이면 변수를 음의 방향으로 바꾸어 손실함수의 값을 줄인다.
이때 미분 값이 0이면 변수 변화 방향에 상관없이 손실 함수의 값이 달라지지 않으므로 가중치 변수 갱신을 멈춘다.
정확도를 지표로 삼으면 미분 값의 대부분이 0이 되기 때문에 매개변수를 갱신할 수 없기 때문에
신경망을 학습시키고 점검할 때 정확도가 아닌 손실 함수를 사용한다.
경사법은 손실 함수의 값을 작게 만드는 기법으로, 함수의 기울기를 활용한다.
손실 함수를 미분한 값을 이용해 변수를 갱신한다고 했다.
손실 함수의 값을 작게 만들어가는 과정에서 변수에서의 기울기 경사가 점점 감소하므로(완만해지므로)
이를 경사하강법(경사감소법)이라고 부른다.
즉, 손실 함수에서 변수에서의 기울기 경사를 감소시키면서 손실 함수의 가장 작은 값을 찾고
그때의 변수 값을 최적의 값으로 설정하게 된다.