박사과정의 선배님께 좋은 말씀을 들어서 이렇게 글을 올린다.


인공신경망도 종류가 여러가지인데 우리는 이것을 main이 되는 비선형 제어기 또는 main을 보조하는 보조제어기로써 사용할 수 있다. 이 비선형 제어기를 사용하여 비선형성이 강한 시스템을 학습을 통하여 제어를 가능하게 할 수 있다. 그런데 우리가 이를 사용하면서 주의하고 상기해야 할 점이 있다.


'인공신경망은 만능이 아니고 최선이 아니라 차선이다.'


무슨말인가 하면 인공신경망이라는 녀석은 무분별하게 쓸만한 기술이 아니라는 것이다. 무슨 문제가 해결이 안되면 '인공신경망을 쓰면 되지' 라는 안이한 판단을 내려서는 안될것이다. 이녀석을 쓰는것이 최선인 경우가 있고, 또는 어쩔 수 없이 차선책으로써 쓰는 경우가 있다는 것이다.


예를 들자면 패턴인식의 경우, 시간은 걸릴지 모르나 최초의 학습과정을 완료하면 이후의 패턴인식에서 다시 학습할 필요가 없거나 새로운 패턴을 입력시킬 때만 다시 학습해주면 된다. offline학습을 하여도 별 문제가 없다.


그렇다면 제어의 경우는 어떤가?

RBF를 실시간 보조제어기로 사용할 경우, 그냥 LMS의 역전파 알고리즘 보다는 빠르다고 하여도 역시 제어에 사용하기에는 연산량이 많을 수 밖에 없다. 필연적으로 고성능의 MCU가 필요하게 된다. 제어주기는 빠를수록  좋기 때문에 주기당 연산시간을 많이 차지하는 인공신경망은 그다지 제어에 알맞다고 할 수 없겠다. 기껏해야 뉴로퍼지 정도일까?


럼, 나름 장점은 있지만 연산량이라는 치명적인 단점을 가지는 인공신경망을 왜 쓰게될까?

굳이 답을 제시하자면 안써도 될것을 쓰게 만들었기 때문이라고 하고싶다. 무슨 말이냐면 선형화를 하면 충분할 시스템을 비선형성을 심하게 내포하게 설계하기 때문이다.

두바퀴 밸런싱 로봇을 예로 들어보자. 또는 역진자를 예로 들어보자. 이녀석들을 넘어지지 않게 제어하려면 시스템을 높이가 길게, 가로 세로폭을 좁게 만들고 무게중심을 시스템 상단에 위치시켜 최대한 단순하게, 선형화 모델에 적합하게 만들어야 한다. 이 때 선형화 식을 적용하기 쉽고 제어하기도 쉽다(실제 시스템이 이론을 따라갈 수 있다는 것이다) 그런데 이러한 설계를 간과하고 무게중심을 최하단에(모터가 굉장히 무겁고 프레임이 하단에 집중되어 있을 경우 이렇게 된다) 놓아버리면 어떻게 될까? 예를 들어 바퀴 중심 5센티 위에 무게중심이 있을경우 말이다. 선형화된 모델이 상상이 가는가? 이런 시스템은 설사 선형화를 하고 제어gain을 찾는다 하더라도 제대로 동작하기 힘들다. 결국 제어를 위해 필요한 요소들이 부적절하게 되고 안정성이 떨어지게 되어 억지로 인공신경망을 이용하여 제어를 하게 되는것이다.


결론을 들자면, 인공신경망이라는 녀석은 선형화된 설계를 잘 하면 굳이 필요하지는 않다는 것이다. 인공신경망 없이 제대로 제어할 수 없다면 그 시스템은 설계를 제대로 하지 않았다는 것이 된다. 그런고로 제어에 인공신경망을 썼다는 것은 결코 자랑할 만한 일이 아니다.

'지능제어' 카테고리의 다른 글

제어기초  (0) 2015.01.27
RBF  (0) 2014.12.07
RBFN 링크  (0) 2014.12.04
RBF(Radial Basis Function) 신경망  (1) 2014.10.27
확률가우시안  (0) 2014.10.27

저번에 참고한 URL을 기반으로 RBFN을 설명하자.

자세히 들어가기 전에, 우선 MLP를 학습할 것을 권장하며, 설명도중 언급되지는 않겠지만 '학습과정'과 '학습 후 분류과정'을 함께 설명하고 있기 때문에, 이해도중 헷갈릴 경우 과연 어떤 과정중을 설명하는지를 잘 생각해 보자.


Architecture_Simple




RBFN은 training set에 대한 input의 유사도를 측정한다. 각 RBF Neuron은 prototype를 저장하고있다.

새로운 입력이 들어오면 입력값과 prototype간의 유클리디안 거리를 계산한다.


위 RBFN의 구성은 아래와 같다.

1.input vector

2.RBF Neurons

3.output nodes


1. input vector

우리가 분류하길 원하는 n차 벡터를 의미한다. 모든 입력벡터들이 RBF뉴런에 반영된다.

(그림상 왼쪽의 푸른 n차 사각형을 의미)


2. RBF Neurons

각 RBF neuron마다 별개의 prototype벡터를 가지고 있다. 각 RBF neuron은 입력된 벡터와 해당 뉴런의 prototype간의 유사도를 비교한다. 따라서 출력은 0에서 1 사이의 값으로 이 값이 유사도를 의미한다. 입력값이 prototype과 같을경우 출력은 1이고 유클리디안 거리로 계산한 유사도가 멀 경우 출력은 0에 가까워 진다. RBF neuron의 출력은 bell curve(정규분포)를 따른다.


뉴런의 응답값은 활성화값이라 불린다.


또한 prototype벡터는 해당 뉴런의 center(중앙값)이라 불리운다. 즉, 이 center value는 bell curve의 중앙값임을 나타낸다.


3. Output Nodes

위의 category(범주)라는 단어 때문에 헷갈릴 수 있지만, 출력(output)은 우리가 원하는 총 m개의 출력범주로 이루어져 있다.

i개의 input을 넣고 m개의 서로 다른, 우리가 판단해야할 출력으로 이루어져 있는 것이다.


output node의 값은 연관된 카테고리(출력값)에 대한 score(점수)를 계산한다. 패턴인식에서 보자면 가장 높은 score를 가진 출력값이 '정답, 참값'등이 된다.


MLP를 했다면 당연히 알겠지만 해당 카테고리는 뉴런의 갯수(k)만큼의 활성화 값과 가중치의 곱으로 계산되어지며 각 카테고리마다 뉴런 대 output node를 이어주는 가중치 값이 다르다.


물론 카테고리마다 연관성이 강한 뉴런에는 positive한 가중치를, 그렇지 않은 뉴런에는 negative한 가중치로 이어져 있을 것이다.


RBF Neuron Activation Function

]


RBF 의 각 뉴런은 입력과 training set에서 뽑은 prototype벡터간의 유사도를 측정한다고 앞서 언급하였다.

당연히 prototype과 유사한 input 벡터일수록 뉴런에서 1에 가까운 값을 출력할 것이다. 앞뒤가 바뀌게 설명했는데, 입력값과 prototype이 유사할 수록 해당 뉴런은 1에 가까운 값을 출력하는 것이다. 여러가지 유사도 함수가 존재하는데 가장 자주 사용되고 기본으로 사용되는 것이 가우시안 함수이다. 아래가 1차 입력에 대한 가우시안 함수이다.

gaussian

x가 입력이고 mu가 평균값이다. 시그마가 표준편차이다. 여기서 통계를 배운 사람들이 잘 아는 bell curve(정규분포)를 구할 수 있다. 아래 정규분포에서 중앙값이 평균값 5이며 sigma는 1이다.

bell_curve


 RBFN의 전형적인 활성화 함수는 아래와 같다.

Activation_Equation


가우시안 분포에서 mu는 분포의 평균을 의미하며 여기에서는 위 bell curve(정규분포)의 중앙을 가리키는 prototype vector를 의미한다.


우리가 사용할 활성화 함수는 beta값이 1/(2*sigma^2)값이 된다. 

위의 활성화 함수는 가우시안 함수에서 1/(sigma*sqrt(2*pi))가 제거되었는데 이 outer coefficent는 Gaussian함수의 높이를 조절하는 term이다. 이는 output 노드에 적용되는 가중치에 필요없는 부분이다. 위 outer coefficient를 제거하고, 학습과정에서 output노드는 정확한 계수(가중치)를 학습해갈 것이다.


beta값은 bell curve(정규분포)의 width를 조절한다.

[여기에서는 sigma를 신경쓰지 않고 beta로 간략화 시켜서 다루고 있다. beta에 따른 bell curve의 예시를 아래에서 확인할 수 있다.]

Diff_Variances_Plot


Activation_Equation

이 식에서 ||로 표기한것은 x와 mu사이의 유클라디안 거리를 계산하고 제곱함을 의미한다. 1차 가우시안에서 간략화된 식은 (x-mu)^2이다.

input이 prototype vector과 같을경우. ||  ||안의 값은 0이 되고 따라서 phi의 값은 최대인 1이 될것이다. 즉, 이를 통한 유클리디안 거리의 측정으로 우리가 input과 prototype간의 유사도 측정을 할 수 있음을 다시한번 상기하자.


prototype vector 으로부터 멀어질수록 그 응답은 지수적으로 감소한다. RBFN 구조를 다시한번 확인하면, 각 카테고리의 output node가 가중치를 거친 RBF neuron값의 합으로 이루어져 있으며, 따라서 모든 뉴런은 input에 대한 분류에 영향을 미침을 알 수 있다.

그러나, input vector와 prototype간의 거리가 멀 경우, 활성화 함수에 의해 지수적으로 그 값이 감소할 것인데, 결국 이는 해당 뉴런이 output의 결과에 거의 기여하는 바가 없음을 의미한다.(거의 반영되지 않는다는 뜻)



RBF Training.


prototype과 그 분포(분산)을 정하는 방법은 다양하다. 아래 논문에서는 RBFN의 학습을 위한 일반적인 방법을 제시하고 있다.

10.1.1.109.312.pdf



Selecting the Prototypes.

What it really comes down to is a question of efficiency–more RBF neurons means more compute time, so it’s ideal if we can achieve good accuracy using as few RBF neurons as possible.

중요한 언급을 하고있기 때문에 그대로 끌어왔다. 여기서 언급하는 것은 RBF의 뉴런의 갯수가 늘어날 수록 연산시간이 길어질 것이며 따라서 우리는 최대한 적은 갯수의 뉴런을 사용하여 최대한의 정확성을 끌어내야 한다는 것이다.


블로그의 글쓴이는 이를 위해서 K-Means clustering을 통한  cluster center 결정 및 이를 prototype으로 사용할 것을 언급한다. 이는 RBF를 사용하는 다른 여러 이들도 사용하는 방법이다. 그러나 지금까지 찾아본 몇몇 알고리즘은 대부분이 많은 연산시간을 요구하였기 때문에 그 활용성에 의문이 갔었으나 해당 저자가 업로드한 알고리즘은 그 속도가 준수하였기 때문에 다음 글에서 이를 분석해보고자 한다. 이 글에서는 소개만 하도록 한다.


k-means 알고리즘을 사용하여, training example을 카테고리별로 중복없이 분류시켜야 한다.


Approx_Decision_Boundary

위 데이터시트를 보면 수많은 데이터들을 두 개의 클래스(카테고리)로 분류하였고 각 클래스마다 10개씩 총 20개의 뉴런에 대한 prototype을 선정하였다.(검은 별표가 prototype이다)

(위의 데이터시트는 기술적으로는 옳지 않다고 한다)


클래스로부터 얼마나 많은 클러스터를 선정할 수 있는지는 조건에 따르는데, 좋고 많은 결과를 얻기 위해서는 더 복잡한 조건의 설정이 필요하며 이에 따라 네트워크에서 더 많은 연선을 요구하게 된다.


Selecting Beta Values

k-means clustering을 통해 prototypes를 선정하였으면, 각 클러스터의 모든 pointer와 cluster center간의 거리에 대한 평균으로 sigma값을 구하고 이를 통해 beta값을 구하게 된다. 즉, 각 카테고리별로 해당 뉴런에 대응하는 클러스터 내의 중앙값 mu와 x값들간의 거리를 통해 아래와 같이 해당 뉴런의 sigma와 beta를 구하는 것이다.

Variance_Eq

Beta_Eq


Output Weight

마지막으로 output에 대한 weight를 설정해야 한다. 이는 LMS(least mean square)의 gradient descent로 구하게 된다.

이와 관련해서는 다음 시간에 더 자세히 다루도록 한다.

'지능제어' 카테고리의 다른 글

제어기초  (0) 2015.01.27
[잡담] 왜 인공신경망을 쓰는가/착각하는것  (0) 2014.12.29
RBFN 링크  (0) 2014.12.04
RBF(Radial Basis Function) 신경망  (1) 2014.10.27
확률가우시안  (0) 2014.10.27

+ Recent posts