머신 러닝에서 MNIST 수기 숫자 판독을 위한 CNN(Convolutionary Neural Network) 코드를 경험하였으면 그 다음 RNN(Recurrent Neural Nwtwork) 분야로 넘어가 보자. CNN에 이어 RNN으로 넘어간다고 해서 RNN 이 CNN 이 후에 개발된 것은 전혀 아니란 점을 알아 두자. CNN 이 1990년대 말 LeCUN에 의해 집중적으로 연구되었던 반면에 RNN은 물리학을 전공하고 화학 및 바이오 분야에서 칼텍의 교수였던 Hopfield 교수에 의해 1982년에 알려지게 되었다.
Hopfield Neural Network는 content-addressible(associative) memory 즉 관계형 기억 모델로서 즉 인간이 어떤 내용을 기억하고 있으면 관련된 기억 정보들을 연상하여 떠 올릴 수 있다는 것이다. 홉필드 네트워크는 머신 러닝에서 cost 함수의 최소화가 가능했듯이 국소적인 최소값을 찾을 수 있긴 했지만 때로는 기대했던 기억을 찾지 못하고 잘못된 최소값을 찾기도 한다. 그럼에도 불구하고 홉필드 네트워크는 인간의 기억 능력을 이해할 수 있는 모델로 여겨진다.
머신 러닝에서 cost 함수의 최소값을 찾아내기 위해 사용되는 Backpropagation 이론이 1986년에 Hinton 교수에 의해 완성된 점을 참고해 보면 그 이전인 1982년에 알려진 홉필드 네트워크가 최소값을 찾아내는 방법은 불완전한 부분이 있을 수도 있다는 점을 이해하도록 하자.
Hopfield 네트워크에서는 지금의 cost 함수를 대신하여 에너지 함수가 사용된다. 물리적인 에너지 시스템에서 질점은 항상 글로벌 하게 가장 낮은 에너지 상태에서 균형을 취하게 된다. 하지만 에너지 곡면의 기울기가 매끈하지 못할 경우에는 국지적인 최소 값에서 질점이 균형을 취할 수도 있다.
RNN 의 원조임에 틀림 없는 Hopfield의 네트워크에 대해서 알아보기로 하자. 원리적인 측면이지만 오히려 RNN 알고리듬 보다 더 어려울 수도 있으므로 단순히 원리적인 차원에서 이해만 고려하도록 한다.
Hopfield의 네트워크에서 다루는 입력과 출력은 “+1” 과 “-1” 또는 “+1”과 “0” 또는 “High”와 “Low” 와 같이 이진적(binary)으로 처리한다. 아직 그 당시에는 지금의 Computational Graph의 Node 와 Edge 대신하여 Node 르 대신하는 Unit 이란 개념을 사용하였다. 아울러 Unit과 Unit을 연결하는 선을 따라서 웨이트 값이 부여된다. w12 라 함은 Unit 1에서 Unit 2 로의 시냅스적인 연결로 생각하자.
이 Hopfield 네트워크에서 각 Unit은 타 Unit 과 연결이 되면서 웨이트 값이 부여되지만 자신과의 연결에 따른 웨이트 부여는 없다. 아울러 Unit i에서 Unit j로 연결하는 웨이트 값과 반대로 Unit j에서 Unit i로 연결하는 웨이트 값은 대칭적으로 같다고 가정한다. 이 가정은 에너지 함수가 단조롭게 감소하게 되는 특성을 부여하나 이 대칭성이 깨질 경우에 Hopfield에 의하면 부분적으로 카오틱하거나 주기적인 특성을 보여주기도 하나 content-addressible(associative) memory 기능 자체가 소실될 정도는 아니다.
Hopfield 네트워크를 대상으로 웨이트 업데이트 과정을 살펴보자. binary classification 이 이루어지지만 조건이 Rosenblatt 과는 다소 다르다. 즉 쓰레시홀드 값 이상이면 “+1”이고 그러히 않으면 “-1” 이다. 웨이트에 관한서는 이미 앞서 설명이 이루어졌다.
업 데이트 방식은 시간적인 차원에서 동시에 함꺼번에 synchronous 하게 이루어지거나 아니면 특정 시간에 어느 하나가 asynchronous 하게 업데이트가 일어나게 된다. synchronous 업데이트는 기술적으로 성취하기가 쉽지 않으므로 배제하기로 한다.
웨이트 wij를 + 값으로 가정하자. 한번씩 업데이트가 일어나므로 만약 j Unit 의 상태 sj가 “+1” 이면 wijsj 가 양의 값을 가지는데 쓰레시홀드 값 이상이라고 하면 si 는 “+1” 이 된다. 반대로 만약 j Unit 의 상태 sj가 “-1” 이면 wijsj 가 음의 값을 가지므로 쓰레시홀드 값 이하이고 si 는 “-1” 이 된다. 즉 si 는 sj 와 상태 값이 같아지게 된다.
웨이트 wij를 - 값으로 가정하자. 한번씩 업데이트가 일어나므로 만약 j Unit 의 상태 sj가 “+1” 이면 wijsj가 음의 값을 가지는데 쓰레시홀드 값 이하이므로 si 는 “-1” 이 된다. 반대로 만약 j Unit 의 상태 sj가 “-1” 이면 wijsj 가 양의 값을 가지므로 쓰레시홀드 값 이상이고 si 는 “+1” 이 된다. 즉 si 는 sj 와 상태 값의 반대가 된다.
즉 상호연결하는 웨이트 값이 양이면 연결된 뉴론 유닛들의 값은 같아지며 반대로 웨이트 값이 음이면 서로 부호가 달라지게 된다.
어디에선가 많이 접해 본 논리인 듯한데 아마도 집적회로 중의 플립플롭 회로를 생각해 볼 수 있을 것이다.
결국 웨이트 값이 “+”인 경우에 한해서 웨이트 업데이트 작업을 반복하여 즉 학습(training)을 반복하여 쓰레시 홀드를 넘어서게 되면 j번째 유닛(Unit)에 저장되어 있던 다시 말해서 기억되어 있는 값을 i 번째 유닛(Unit)에서 얻어 볼 수 있게 된다. 즉 기억을 되살렸다는 의미일 것이다.
학습 방법에 관해서는 2가지 관점에서 보기로 하자. MNIST 문제를 다룸에 있어서처럼 일정한 수의 샘플을 무작위로 추출하여 batch를 구성하여 전체 샘플들에 대해서 한방에 cost 함수를 구성하여 학습시키는 방법이 있을 수 있는데 이는 샘플수가 엄청나게 많아지게 되면 컴퓨팅 부담이 지나치게 커지게 된다. 반면에 Stochastic Gradient Descent 기법처럼 주어진 batch 에 대해서 학습이 된 상태에서 샘플들이 소량으로 추가됨에 따라 업데이트 개념으로 학습을 해나가는 것이다. 두 방법이 일장일단이 있을 수 있겠지만 SGD가 보다 현실적일 수 있을 것이다.
영문으로 된 관련 내용을 읽어 보면 지금까지 코드 실행을 통해 이해할 수 있는 범위를 넘어서는 내용들이 많이 있다. 어차피 Hopfield에서 시작하여 LSTM(Long Shor0term Memory) RNN까지 연결되는 내용으로 파악한다면 Hopfield 네트워크는 간단히 개념 정도만 가지고 가도 될 것이다.