david's daily developer note

Neural Network 연상메모리. 본문

Develop (Algorithm)

Neural Network 연상메모리.

mouse-david 2010. 6. 27. 02:59
728x90

신경망의 연상메모리를 인간의 사고와 비교해보자.

교통수단인 버스는 우리에게 없어서는 안되는 중요한 교통수단이다.

그 만큼 유용하고 흔하다. 때문에 매우 쉽게 볼수 있고, 보고 있다.


우리는 이렇게 자주보는 버스를 건물이나 나무에 가려져도 버스라고 인식할 수 있다.

우리가 온전한 형태로 보여지지 않는 버스를 버스라고 인식할 수 있는 것은 무엇때문일까?

그것은.. 인간이 버스라는 객체를 반복적인 과정으로 학습하였기 때문이다.


우리는 시각적으로 가려진 버스의 일부분만을 보아도 버스전체의 모습을 연상 할 수 있다.


연상메모리는 인간의 사고 방식을 흉내내어

특정한 입력패턴을 학습하고 학습된 입력패턴과 해당 패턴이 연상하는 패턴을 이용하여

다른 입력이 들어왔을 때 특정한 패턴을 연상해내는 신경망 알고리즘이다


연상메모리만으로는 크게 가치가 없을 수도 있다

기본이 되는 연상메모리를 공부한후 뒤에 더 복잡한 신경망 알고리즘이나

순환연상메모리등을 공부하는데 도움이 된다고 생각한다.


단순한 연상메모리의 알고리즘은 다음과 같다.

학습될 패턴은 임의로 두개로 정한다.


#define PATTERN_NUM 2


각 패턴의 노드는 9개로 정한다


#define s_NODE_NUM 9


int s[PATTERN_NUM][s_NODE_NUM]= {{1,1,1,-1,-1,1,-1,-1,1},

                                              {1,-1,-1,1,-1,-1,1,1,1}};//저장될 입력패턴


연상될 패턴의 노드수는 4로 정한다


#define t_NODE_NUM 4


각 패턴이 연상될 패턴을 을 정한다


int t[PATTERN_NUM][t_NODE_NUM]={{1,1,-1,1},{1,-1,1,1,}};//출력된 연상패턴


입력된 배열의 패턴의 모양은 행렬과 같다

각 각 입력된 학습패턴 s와 연상패턴 t을 행렬의 곱셉에 의한 연산으로 두 패턴사이의 연결강도를 구한다


식은 다음과 같으며 W = S(t)T


참고로 행렬의 곱셉은 전치행렬로 곱해야한다 (t) 는 전치행렬이란 뜻이된다

두개의 패턴의 연결강도는 W는 다음과 같다


 




현재 까지 학습이 종료되고, 두 개의 패턴과 각패턴의 연상패턴이 연결강도로써 학습되었다

인식과정에서 새로운 패턴이 입력되어 해당패턴이 어떤 패턴으로 연상되는지를 확인할 수 있다

입력패턴이 다음과 같을때


int input_pattern[s_NODE_NUM] = {1,-1,-1,1,-1,-1,-1,1,1};


입력 패턴은 구해진 연결강도와의 곱셈으로 값을 구하고 구해진값을 각 노드별로 더하게된다

입력패턴을 X 연결강도를 W 덧셈의 결과가 Y라고 할경우 식은 다음과같다



Y(n) = X(i) * W(j)        

Y(o) = Y1 + Y2 + Y3 + Y4.....Yn


각 구해진 합 Y(o)는 NET 과의 조건검사를 하게된다


  for(z=0 ; z<t_NODE_NUM ;z++)

  {

   if(result[z] > 0 )

    result[z] = 1;

   else if(result[z] ==0)

    result[z] = 0;

   else

    result[z] = -1;

  } 


검사에서 NET 은 0이며 0과같으면 0해당 합을 0으로 NET 보다 크면  1 로 NET 보다 작을경우 -1로 저장하여 출력한다




계산된 값을 NET 과의 조건검사로 바뀐값을 최종연상 패턴으로 출력한다

출력된 연상패턴은 2번째 학습된 패턴의 연상패턴과 동일하다.


728x90

'Develop (Algorithm)' 카테고리의 다른 글

line Intersect  (0) 2018.06.04
영상처리 4방향 윤곽선 추적 알고리즘  (0) 2010.06.27