정보공간_1

[4기 부산 김한남] BAM을 이용한 패턴 인식#2 본문

IT 놀이터/Elite Member Tech & Talk

[4기 부산 김한남] BAM을 이용한 패턴 인식#2

알 수 없는 사용자 2013. 11. 30. 18:58

안녕하세요. 부산 멤버십 22-1기 김한남 회원입니다. 

이번 회는 지난 회에 이어 BAM 알고리즘의 실제 설계와 구현을 진행해보려 합니다. BAM은 Hopfield Network를 기반으로 한 알고리즘이므로 Hopfield Network를 먼저 이해하신다면 보다 쉽게 이해를 할 수 있습니다.

신경회로망 알고리즘은 알고리즘의 이론적 이해가 전부가 아니므로 직접 설계하고 프로그래밍 해보는 것과 해보지 않는 것에는 큰 차이가 있습니다.(개인 견해입니다.) 지난 회를 보시고 BAM 알고리즘에 흥미를 느끼셨더라면 반드시 이번 포스팅을 보시면서 BAM 알고리즘을 이용한 프로그램의 설계와 구현도 함께 진행 해보시기 바랍니다. 

본론으로 돌아가 본격적으로 설계와 구현을 진행하도록 하겠습니다. 

제가 이번 예제를 통해 학습 시킬 패턴들은 다음과 같습니다. 그룹 A의 벡터 크기는 5이고 그룹 B의 벡터 크기는 4입니다. 저는 A의 1번 벡터와 B의 1번 벡터를 서로 연상하고, A의 2번과 B의 2번, A의 3번과 B의 3번 벡터를 서로 연상하도록 구현할 것입니다. 즉, A의 1번 벡터를 BAM에 입력으로 주면 BAM은 B의 1번 벡터를 출력할 것입니다. 


그룹 A

 


 


 


 1번 벡터

2번 벡터 

 3번 벡터


위 벡터들을 이진 값(1, -1)으로 표현하면 다음과 같습니다. 


 [ 1 1 1 1 1 ]

 1번 벡터

 [ -1 -1 -1 -1 -1 ]

 2번 벡터

 [ 1 -1 1 -1 1 ]

3번 벡터



그룹 B

 



 

 


 1번 벡터

2번 벡터 

3번 벡터 


위 벡터들을 이진 값(1, -1)으로 표현하면 다음과 같습니다. 


 [ 1 1 1 1 ]

1번 벡터 

 [ -1 -1 -1 -1 ]

 2번 벡터

 [ -1 -1 1 1 ]

 3번 벡터


벡터의 크기가 커지면 커질 수록 계산 과정이 복잡해지므로 이번 예제는 아주 심플하게 패턴 A 그룹의 크기는 5, 패턴 B 그룹의 크기는 4로 정하였습니다. 학습 식에 의한 가중치 집합(W, 상관 관계 집합)은 다음 식의 결과와 같습니다. 



그리고 위 식에 대한 결과는 다음과 같습니다. 풀이 과정은 간단하므로 생략하겠습니다. 



Hopfield Network와 마찬가지로 굉장히 간단하게 학습 가중치 집합을 만들 수 있습니다. 지능형 시스템이나 패턴 인식에 학습 과정도 물론 중요하지만 이보다 중요한 것은 인식(연상)이라고 할 수 있습니다. 그래서 이제 실제 인식 과정을 진행해 볼 것입니다. 인식 과정을 효과적으로 이해하기 위해서는 학습한 벡터에 약간의 노이즈를 섞은 데이터로 입력을 주고 그 결과가 어떻게 갱신되는지를 관찰하고 확인하는 것이 가장 좋은 방법이라고 생각합니다. 하지만 이에 앞서 학습 알고리즘이 제대로 적용되었는지를 확인하는 과정이 필요합니다. 이를 위해서 학습한 벡터들을 그대로 BAM에 입력으로 주었을 때 상대 벡터가 출력되는지를 확인하는 일을 진행해주어야 합니다. 이를 검증 과정이라고 합니다.

그럼 본격적인 인식에 앞서 벡터들이 올바르게 학습이 되었는지 검증 과정을 간략히 진행해보도록 하겠습니다. 
원래는 모든 학습 벡터들에 대하여 검증 과정을 수행하여야 하지만 문서가 너무 길어지므로 그룹당 한 패턴진행하도록 하겠습니다. 


< 검증 >

Y1은 [ 1 1 1 1 ]이므로 

x1 = 1 + 1 + 3 + 3 = 8
x2 = 3 + 3 + 1 + 1 = 8
x3 = 1 + 1 + 3 + 3 = 8
x4 = 3 + 3 + 1 + 1 = 8
x5 = 1 + 1 + 3 + 3 = 8

각각에 대하여 부호활성화 함수에 통과시키면 결과는 [ 1 1 1 1 1 ]이 출력


X1은 [ 1 1 1 1 1 ]이므로 

y1 = 1 + 3 + 1 + 3 + 1 = 9
y2 = 1 + 3 + 1 + 3 + 1 = 9
y3 = 3 + 1 + 3 + 1 + 3 = 11
y4 = 3 + 1 + 3 + 1 + 3 = 11

각각에 대하여 부호활성화 함수에 통과시키면 결과는 [ 1 1 1 1 ]이 출력


결과가 나왔습니다. 학습시킨 데이터와 동일한 결과를 내어주고 있습니다!

저는 그룹당 한 벡터에 대해서만 검증을 수행하였지만 여러분들께서는 모든 벡터들에 대해서 검증 과정을 수행해보시기 바랍니다. 

이제 어떤 불완전한 입력에 대하여 BAM이 노이즈를 어떻게 수정하고 상대 패턴을 어떻게 연상하는지 확인해보도록 하겠습니다. 

그런데 한가지 짚고 넘어가야 할 것이 있습니다! 그룹 A 크기의 벡터를 BAM에 입력으로 주면 그룹 Y 크기의 벡터가 출력되고,
 그룹 Y 크기의 벡터를 BAM에 입력으로 주면 그룹 X 크기의 벡터가 출력되는데 노이즈를 어떻게 수정하고 올바른 결과를 낸다는 것일까요?

만약 어떤 입력과도 일치하지 않는 결과를 출력으로 낼 경우 결과를 그대로 가중치 집합과 계산하여 다시 입력 크기의 벡터를 만들어주는 방법으로 결과를 수정합니다. 즉, 다음 식과 같습니다. 첫 입력인 벡터 X는 불완전한 벡터 Y로 연상되고, 이 벡터 Y는 다시 벡터 X로 연상됩니다. 두 벡터에 어떠한 변화도 없을 때 까지 벡터는 수정되어 결국엔 완전한 벡터 출력을 내게 되는 것입니다. 



다시 본론으로 돌아가서 본격적으로 노이즈가 섞인 한 벡터에 대하여 연상(인식)을 진행 하겠습니다. 


<인식>

 


 실험 벡터


 [ 1 1 -1 1 1 ]

 실험 벡터


노이즈가 섞인 위 실험 벡터는 그룹 A의 첫 번째 벡터와 가장 유사하다는 것을 알 수 있습니다. 최종적으로 연상 과정을 완료하였을 때 결과는 그룹 B의 첫 번째 벡터를 출력할 것 입니다. 

자, 그럼 제가 예상하는대로 결과를 출력하는지 확인해겠습니다. 

이번 입력 벡터는 그룹 A의 크기와 동일하므로 가중치 행렬을 자신의 전치 행렬로 계산해주어야 합니다. 

인식을 위한 식이 다음과 같으므로


y1 = 1 + 3 - 1 + 3 + 1 = 7
y2 = 1 + 3 - 1 + 3 + 1 = 7
y3 = 3 + 1 - 3 + 1 + 3 = 7
y4 = 3 + 1 - 3 + 1 + 3 = 7

각각에 대하여 부호활성화 함수에 통과시켜 결과가 [ 1 1 1 1 ]으로 출력되었습니다.

자, 결과가 나왔습니다. 예상했던 대로 그룹 A의 첫 번째 벡터와 동일한 값을 내어주고 있습니다!


아주 간단한 예제이므로 그룹 B 크기의 벡터를 임의로 만들어서 어떤 결과를 내는지도 한번 계산 해보시기 바랍니다. 

지금까지 총 4회에 걸쳐 신경회로망 알고리즘인 Hopfield Network와 BAM을 소개해드렸습니다. 신경회로망 알고리즘은 이 외에도 다양하므로 인공지능과 패턴인식에 관심있으신 분들께서는 관련 서적이나 논문을 통해 공부 해보시는 것을 추천드립니다. 

이번 회를 끝으로 신경회로망에 대한 포스팅은 끝내도록 하겠습니다. 긴 글 읽어주셔서 감사합니다.