정보공간_1

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

IT 놀이터/Elite Member Tech & Talk

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

알 수 없는 사용자 2013. 11. 30. 16:53

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

이번 회는 Hopfield Network에 이어 BAM(Bidirectional Associative Memory) 알고리즘에 대해 이야기를 해보려 합니다. 


2. BAM

BAM은 Hopfield Network와 비슷한 구조의 알고리즘이지만 Hopfield Network와는 달리 양방향으로 패턴을 연상할 수 있다는 특성을 지니고 있습니다. BAM은 바트 코스코(Bart Kosko)가 1988년 Hopfield Network 모델을 확장하여 제안한 것으로 어떤 학습 집합 A 패턴으로부터 다른 학습 집합 B 패턴을 연상할 뿐 아니라, 그 반대로도 연상 할 수 있어 다양한 분야에 폭 넓게 응용할 수 있습니다. 

양방향 연상이란 정확히 어떤 것을 의미할까요? 지난 번과 마찬가지로 쉬운 이해를 위해 예를 들어보도록 하겠습니다.

우리는 사과 이미지를 보았을 때 ‘이 것은 사과다.’라는 생각을 하게 됩니다. 사과의 외형을 눈으로 보게 되면 머릿속에서 ‘사과’라는 단어를 연상하기 때문입니다. 컴퓨터에 비해 지능이 훨씬 뛰어난 사람들은 사과를 보았을 때 단어를 연상하는 것 뿐 아니라, 반대로 ‘사과’라는 단어를 듣게 되었을 때에는 머릿속으로 사과 영상을 떠올게 되는데 이 것을 양방향 연상이라고 할 수 있습니다.

이제 본격적으로 양방향 연상을 수행하는 BAM의 구조에 대해서 살펴보도록 하겠습니다. BAM의 구조는 다음과 같습니다. 



n개의 A 집합 요소들과 m개의 B 집합 요소들이 존재한다고 가정하였을 때, 각각의 집합 요소들은 상대 집합의 모든 요소들과 서로 완전히 연결된(fully-connected) 구조를 하고 있습니다. 쉽게 설명하자면 A 집합의 n개의 요소들의 입력 값이 B 집합의 m개의 출력 요소와 연결되며, 반대로 B 집합의 m개의 입력 요소들이 A 집합의 n개의 출력 요소와 연결되는 것입니다. 

이 두 집합의 각각의 패턴들은 설계에 따라 크기가 같을 수도 있겠지만, 대부분의 경우엔 서로 다를 것입니다. 이를 위해 집합 A와 B를 서로 연관지어 계산하기 위한 상관 관계 행렬을 만들게 되는데 이를 위한 식은 다음과 같습니다. 


상관 관계 행렬식은 BAM의 학습식으로 볼 수 있습니다. 집합 A와 B가 위 식에 의해 계산되어 그 결과인 상관 관계 행렬을 만들게 되고 이를 바탕으로 연상(인식)에 사용되기 때문입니다. 

만약 집합 A의 각 벡터의 크기가 10이고, 집합 B의 각 벡터의 크기가 15라고 가정하였을 때 상관 관계 행렬의 크기는 10 * 15와 같습니다. 

다음으로 인식을 위한 식은 다음과 같습니다.


BAM의 인식 과정도 Hopfield Network와 마찬가지로 학습된 상대 패턴들 중 특정한 벡터에 완전히 수렴하는 시점(불완전 상태 → 완전 상태)까지 입력 값과 출력 값을 꾸준히 갱신하는 구조입니다. 이 부분은 다음 회에서 실제 구현에 적용하면서 더 설명하도록 하겠습니다.

그 외 BAM의 알고리즘적 특성은 Hopfield Network와 거의 비슷합니다. 앞서 설명드렸듯이 BAM이 Hopfield Network로부터 확장한 알고리즘이기 때문입니다. 그러므로 BAM 알고리즘을 이해하기 위한 이론적 지식은 Hopfield Network를 먼저 이해하신다면 보다 쉽게 이해할 수 있습니다. 

BAM도 Hopfield Network와 마찬가지로 지능형 시스템을 설계할 때, 학습 가능한 패턴의 수를 고려하여야 하는데 이 값은 두 집합의 벡터 크기 중 보다 작은 집합의 벡터 크기와 같다고 볼 수 있습니다. 즉 집합 A의 크기가 10이고 집합 B의 크기가 15일 때 최대 10개의 패턴 만을 기억 시킬 수 있는데 이는 이론 상의 수치이므로 설계와 패턴의 형태에 따라 이 결과는 달라질 수 있습니다. 

알고리즘에 대한 설명은 끝났습니다. 다음 회에서는 BAM을 이용한 심플한 패턴 인식 예제를 설계하고 구현해보도록 하겠습니다. 감사합니다~!