6-16 멀티 유닛 Hopfield 네트워크 수치 예제

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@codingart·
0.000 HBD
6-16 멀티 유닛 Hopfield 네트워크 수치 예제
![noname01.png](https://cdn.steemitimages.com/DQmY5DmFgYD8eCaDKJQQoRcppr2aep8CoEYsPGhvkhHeZkb/noname01.png)

Hopfield  네트워크에서는 상태 값들과 관련된 스칼라 에너지 값을 가지게 된다.

![noname02.png](https://cdn.steemitimages.com/DQmU4iccEyV3uSYG1arzVfTcrX4rGppHDcCnA6mJnchAa7P/noname02.png)

이 에너지 함수는 Hopfield 네트워크가 업데이트 됨에 따라 값이 감소하거나 또는 같은 값을 유지하게 된다. 업데이트가 되풀이 될수록 에너지 값은 로컬 최소값에 수렴하게 된다. 한편 로컬 최소값은 랜덤한 순서로 구성되는 업데이트 경로에 따라서 달라지기도 한다.

머신 러닝 초보자에게도 Hopfield 네트워크를 쉽게 이해할 수 있도록 5개의 비트 데이터를 2개 기억하고 있는 Hopfield 네트워크에서 임의의 초기 값을 입력하여 기억하고 있는 값을 다시 찾아내는 과정을 대상으로 설명을 시도해보기로 한다.  

Hopfield 네트워크에 기억시키고 싶은 상태 값들로 이루어진 시퀜스 데이터 Vs를 (s = 1, 2, ∙∙∙, n) 기억시키도록 하자. 
다음과 같이 Hopfield 웨이트를 정의하자. 웨이트 매트릭스의 대각선 성분은 0 이다. Hopfield 네트워크의 웨이트는 랜덤한 수로 초기화 되는 머신 러닝과는 다음에 유의하자. 이 형태는 Rosenblatt 이전의 선구자였던 Hebb 의 학습 모델을 사용한 경우임을 참조하자.

![noname03.png](https://cdn.steemitimages.com/DQmd8xo9MsMjXwHXePBLJ2YvokyKebF7sqteLoLsuxJs9Rg/noname03.png)

5 유닛으로 구성된 Hopfield  네트워크에 5비트로 이루어진 하나의 이진수 패턴 (01101)을 인식 또는 저장 시키도록 하자. 이때 필요한 웨이트 매트릭스는 다음과 같이 대칭으로 주어진다.

![noname15.png](https://cdn.steemitimages.com/DQmPwnhMoP1Huu6ErLLArqNByCgp4D5BW3YtdJWpb76VwWg/noname15.png)


웨이트 매트릭스 성분을 일일이 계산해 보기로 하자.

![noname05.png](https://cdn.steemitimages.com/DQmNS5UPcd5nMHHJRDwH3Yyu3SaQVDpqU1q8ZZTXov8KZ7k/noname05.png)

대칭형 매트릭스 형태로 정리하면 다음과 같다.

![noname06.png](https://cdn.steemitimages.com/DQmbbH6oMjfHgKWVamkMFgsBsVXgR4Ar99g9JLiwd8N1jc5/noname06.png)

![noname07.png](https://cdn.steemitimages.com/DQmTrzXbsSaETNSufY4Xb3bmqGkzFxivohjeYppzSTLRkCF/noname07.png)

이와 같이 웨이트 계산 공식을 사용해도 되며 한편으로는 각 패턴별로 웨이트 매트릭스를 계산하여 더해도 동일한 결과를 준다. 
V2 (10101) 패턴에 대한 웨이트 매트릭스는 다음과 같다

![noname08.png](https://cdn.steemitimages.com/DQmZitF5tLt4Hnpy65bdbriq95b7xm7uS7C2ooUc7mPZVRQ/noname08.png)

패턴별로 얻어진 웨이트 매트릭스를 합산하면 다음의 결과를 얻을 수 있다.

![noname09.png](https://cdn.steemitimages.com/DQmdaWk7t9Rjqsz3NtSmQ8XcDvEj91dYRv69Pt1tE4x6CXE/noname09.png)

Hopfield 네트워크 업데이트 

현재 5 유닛으로 구성된 Hopfield 네트워크가 2개의 이진수 패턴 V1 (01101)에 V2 (10101)를 인식하고 있다. 이 2개의 데이터를 비교해보면 앞의 2개의 비트는 01 과 01 로서 서로 다르나 나머지 3대의 비트는 101 로서 동일하다. 이상황은 문자 ‘c’ 와 ‘e’ 또는 ‘O’ 와 ‘Q’를 비교하는 사례와 유사해 보인다. 

새로운 이진수 패턴 (11111)로 업데이트를 시행해보자. 이 새로운 패턴을 앞의 2 패턴과 비교해 보면 2개의 ‘1’ 과 2개의 ‘0’ 비트들이 다름을 알 수 있다.

유닛 3을 업데이트 해보자. 유닛 3을 제외한 나머지 유닛들에 새로운 패턴 값을 부여하고 이들로부터 유닛 3으로의 웨이트 값을 알고 있으므로 Σ합산해서 threshold 값  즉 0보다 크면 ‘+1’을 0보다 작으면 ‘-1’을 부여하자.

![noname10.png](https://cdn.steemitimages.com/DQmZQS7PcnbZ1RyQ8TuV24HCgnFAX38pzhEf3TjETq7wua6/noname10.png)

Hopfield 의 계산법은 입력 값이 변동되더라도 적용이 가능하다. 입력 변동이 synchronous 하다면 즉 동시에 일어난다면 위와 같이 매트릭스를 Markov Chain에서처럼 상태가 변동됨에 따라 한 번에 계산해버리면 된다. 

하지만 실제의 뉴론 시스템에서는 신호가 전달되는 과정에 있어서 지연이 일어나며 firing 도 균일하지 않으므로 synchronous 가정은 현실적이지 못하다. 따라서 랜덤하게 뽑은 순서로 계산하면 된다. 즉 램덤하게 입력되어야 할 유닛을 선정하면 앞에서와 같이 계산이 가능하다. 한 사이클을 다 돌고도 계속해서 업데이트를 해나가다 보면 더 이상 값이 변하지 않는 안정된(stable) 상태에 도달하게 된다. 이러한 stable 한 상태는 이미 Markov Chain 계산 예에서도 이미 관찰하였다. 안정된 상태에 도달하면 업데이트를 끝내도록 한다.

2개의 attractor (10101)과 (01101)을 가지고 (11111)에서 업데이트를 진행하도록 하자. 2개의 attractor를 가정하는 의미는 Hopfield 네트워크의 유닛간의 웨이트 매트릭스를 설정한다는 것이다.
랜덤한 유닛 선택 순서를 3,2,5,1,4,3,2,5,1,4,∙∙∙ 순서로 업데이트가 이루어진다고 가정한다. 2번째 사이클에서 더 이상 변하지 않는 안정된 상태가 얻어졌다.


여기서 로컬 최소값 (01101)이 찾아졌으므로 Hopfield 네트워크 계산을 멈추도록 한다. 2개의 패턴 (10101)과 (01101)을 Hopfield 네트워크가 인식하고 있는데 그 중에 하나를 찾았다. 그러면 나머지 하나는 도대체 어떻게 된 것인가? 

![11.png](https://cdn.steemitimages.com/DQmSscwLobHx7gy1CiEavZuGDgqNAD1K8TEA3HfMpRK2Mop/11.png)

(01101)을 찾아내는 과정에서 랜덤한 순서로서 3,2,5,1,4,3,2,5,1,4,∙∙∙를 사용하였다. 하지만 이 랜덤한 순서 외에도 보다 많은 랜덤한 순서를 선택할 수 있을 것이다. 예를 들어 2,4,3,5,1,2,4,3,5,1,∙∙∙순서를 적용해 보자. 이번 업데이트에서는 학습에 의해 Hopfield 네트워크가 기억하고 있는 패턴 (10101)을 찾았다.

![noname12.png](https://cdn.steemitimages.com/DQmUKqmxqpw4jzDv5VzqLA5AzLjhszc1NGwb6UNRszu3CoE/noname12.png)

즉 Hopfield 네트워크에서는 로컬 최소값을 찾을 수 있지만 랜덤 순서에 따라 서로 다른 값들을 찾아낼 수 있다는 점이다.

![마나마인로고.png](https://cdn.steemitimages.com/DQmeePhYx37SUt2zaQJZjJZenWLWSyeK2zKiEp2erB77Lhb/%EB%A7%88%EB%82%98%EB%A7%88%EC%9D%B8%EB%A1%9C%EA%B3%A0.png)
👍 , , , , , , , , , , , , , , , ,