본문 바로가기
실전머신러닝

신경망분석(Neural Net) with R - 이론편

by 다빈치스탁 2020. 9. 10.
728x90
반응형

Tensorflow를 이용한 Python 머신러닝에서도 한번은 다룰 내용이지만 R 역시 원리는 동일하기 때문에 잠시 짚고 넘어가자. 인공신경망은 인간 두뇌구조와 유사한 뇌신경망의 원리를 모방한 기술로 학습을 통하여 데이터들간의 패턴 혹은 관계를 습득하는 방식을 의미한다. 이게 사실 인공지능이라는 아주 거창한 말로 불려서 그런거지 데이터마이닝의 관점에서 본다면 복잡한 구조를 가진 빅데이터로부터 예측문제를 해결하기 위한 (비)선형 분석방법이라고도 볼 수 있다. 

 

우리가 일반적으로 인공신경망이라 함은 FFNN(Feedforward Neural Network)와 같은 계층적 네트워크를 의미하며 가장 먼저 개발되어 보편적으로 알려져 있다. 그 중에서 simple layer(광의의 의미에서 머신러닝), multi layer(딥러닝)으로 구분하기도 한다. 그 외에도 GRNN(General Regression Neural Network), 확률적 네트워크 등 많은 신경망들이 연구되고 있다. 

 

아주 복잡해보이지만 모든 인공지능은 아래의 알고리즘에서 크게 벗어나지 않는다. 즉 어떠한 정보의 입력들을 가중치와 편향(bias)으로 변형된 값으로 변환한다. 이때 단순히 가중과 편향만 가지고 결과값을 얻어내면 예를 들어 289, 1024,, 등 입력값과 가중치에 따라 값이 매우 전차만별로 떨어지게 된다. 통상 사람의 신경세포는 일정한 세기(강도)일 경우 다음 뉴런으로 전달하게 되는데 이를 모방한 함수(activation function)가 sigmoid, relu 등이다. 함수의 개형으로 보면 입력값이 크면 클수록 1에 수렴하게 되고 적으면 적을수록 0에 수렴하게 된다. 릴루의 경우 극단 값(아주 크거나 작은 값)들은 1,0으로 그냥 뱉어버린다. 그런데 이렇게 활성화함수에 입력되고 나서도 전체의 합은 1(100%)이 아닌게 되므로 확률적으로 판단할 수가 없다. 따라서 softmax 함수를 이용해서 각 값들을 확률로 변경해준다. 그 중 가장 높은 확률을 선택하여 결과를 도출하고 정답과 비굑를 한다.(지도학습). 이렇게 예측의 분포와 정답의 분포를 비교해서 서로 다를 경우 그 오차를 최소화하기 위한 미분최적화(오차역전파, 합성함수의 미분:체인룰)를 진행하여 가중치와 바이어스를 수정해 나가는 것이 거의 인공지능분석의 전부(?)까지는 아니더라도 아주 중요한 플로우다.

 

인공지능을 구현하기 위해서는 R 보다는 Tensorflow Python 이 여러가지로 연구자료도 많고 구현하기가 용이한 부분이 많다. 그러나 어차피 신경망을 학습하는 방법론은 큰 차이가 없으니 R을 이용한 신경망 분석에서는 위에서 설명한 Neural Net 방식과 SVM 정도만 다루어보겠다.

 

우선 SVM : Support Vector Machin은 군집분석의 확장으로 패턴인식에 응용되고 있고 회귀분석과 분류분석에 주로 적용이 된다. 일반적으로 회귀분석이 데이터를 가장 잘 설명하는 하나의 직선의 방정식을 찾아내는 것이고 이때 사용되는 방법이 MSE(최소잔차) 방법인데 반해 SVM의 경우에는 종속변수들이 독립변수들의 선형결합으로 구성될 때(복수 개의 wx + b 의 합) margin 이 최대가 되는 계소를 산정하는 방법이다. 여기서 margin 이라는 것은 두 개의 직선이 이루는 간격을 의미하며 이를 최대화 하는 방법이다. 즉 회귀분석은 데이터의 분포를 가장 잘 설명할 수 있는 회귀방정식을 추론하는 것인데 반해 SVM은 두 집단의 분류를 위한 선형결합의 분석방법이다. 어랏? 그러면 SVM은 분류의 문제에만 적용이 가능한가? 그렇지 않다. SVM을 이용한 예측도 가능하다. 자 위의 그림에서 왼쪽 회귀직선에 신뢰구간을 그려보자. 왜? 회귀직선을 추론했다고 하더라도 일정한 확률로 오차가 발생가능한데 그 오차의 범위를 그려보면 아래와 같다.

 

닮지 않았는가? 그럼 이렇게 한번 생각해보자. 회귀분석에서는 특정한 직선과 실데이터의 오차(잔차)를 최소화하는 직선을 찾는 방법인데 이것을 추론하기 위해 sum((관측치 - 평균)^2)을 최소화했다. 그러면 이제 오른쪽을 보자 상단의 직선은 잔차가 +가 되는 선이고 하단의 직선은 잔차가 -가 되는 선이니 이 둘 사이의 마진을 최대화한다면 신뢰구간을 99%로 확장한 회귀직선과 아주 닮아있다. 이를 바꾸어 말하면 좀 더 일반화된 회귀직선을 찾는 것과 유사해진다는 것이다. 분석의 접근법에 차이는 있지만 엎어치나 매치나 한가지라는 점에서 SVM으로도 예측을 수행할 수 있다.

 

728x90
반응형

댓글