Column에 있는 Proximal dendrite segment는 code에는 구현하지 않았다. 

코드에서 dendrite segment는 cell에 있는 10-20개의 segment를 의미한다. 

Spatial Pooler

1) input 은 bit로 이루어져있다. 이  input 은 센서를 통해 얻은 것일 수도 있고, 하위 region의 output일 수도 있다. 

2)  input 에 한정된 숫자의  column 을 할당한다.  column 의 dendrite segment는  input bit들의 subset를 나타내는 potential  synapse 들을 가지고 있다. 각 potential  synapse 는  permanence  를 갖는다. 이  permanence  에 따라서 potential  synapse  는 connected  synapse 가 될 수 있다. 

3)  몇 개의 valid  synapse 가 active  input 에 연결되어있는지를 센다. 

4) 이렇게 세어진 count( column 에 연결된 active  synapse  의 수)는 boost만큼 곱해진다. 이  boost 는 해당  column 이 이것의 column들에 비해서 얼마나 자주 active되었는지에 따라 결정된다. (주변  column 보다 적게 active되었다면  boost  를 크게한다.)

5)  boost 이 된 후에 가장 크게 activate된  column 은 inhibition radius 내에 있는 일정 percentage의  column 을 disable시킨다. 이  inhibition radius 는 입력 bit들의 퍼진 정도에 따라서 동적으로 결정된다. 이제 active  column 의 sparse set이 결정된 것이다. 

6) 각 active  column 에 있어서 

column에 연결된  synapse 의  permanence  를 조정한다. 

active  input 과 연결된  synapse 의  permanence  는 키우고, 

inactive  input 과 연결된  synapse 의  permanence  는 줄인다. 

이를 통해서  synapse 의 연결이 valid에서 invalid가 될 수 있다, and vice-versa. 


Temporal Pooler

1) 각 active column들에 대해서 

predictive state에 있는 cell들을 active로 바꾼다. 

만약 predictive state에 있는  cell 이 없다면 모든  cell 을 active로 바꾼다. 

2) 모든  cell 의 dendrite segment에 대해서 active  cell 에 연결된 synapse의 수를 count한다. 

이 count가 threshold를 넘으면 해당  dendrite  segment 를 active로 한다. 

이런 active  dendrite  segment 를 갖는  cell 을 predictive로 바꾼다. (이미 active state인 것은 제외한다.)

그 외의  cell 은 inactive로 한다. 

3) active한  dendrite  segment 에 대해서 

이  segment 에 연결된  synapse 의 permanence 를 변경한다. 

active  cell 에 연결된  synapse 의  permanence 는 키우고,  (Temporary Mark)

inactive  cell 에 연결된  synapse 의  permanence 는 줄이자.  ( Temporary Mark)

           그리고 이  dendrite  segment 가 속한  cell  에서 "the one that best matches the state of the system in the previous time step"인 두 번째  dendrite  segment 를 고른다. 그리고 이  segment 에 연결된  synapse  의  permanence   를 변경한다. 

active  cell 에 연결된  synapse 의  permanence  는 키우고,  (Temporary Mark)

inactive  cell 에 연결된  synapse 의  permanence  는 줄이자.  (Temporary Mark)

4) 어떤  cell 이 feed-forward input으로 inactive에서 active로 바뀌었다면(well-predicted) 그  cell 과 연결된  synapse 들의 Temporary Mark를 없엔다. (이제 Permanent)

5) 어떤  cell 이 active state에서 inactive state가 되었다면 

해당  cell 에 연결된  synapse 들의 Temporary Mark가 붙은 변화들을 Undo한다. 

* cell이 active하다는 것은 feed-forward와 predictive 모두를 의미한다. 그리고 이 active cell들은 한 region의 output이 된다. 






Functions used in Temporal Pooler

 1. columns[c]->cells[i]->getActiveSegment(t, state)

: 주어진 column의 cell에 있는 segment 중에서 주어진 time step t에서 segment의 상태가 state와 같은 segment의 index를 return한다. 

 2. 


추가적인 IDEA

 1) ANN을 training할 때 system의 top hierarchy의 out에 label을 주고 BP로 train한다. HTM에서도 마찬가지로 하되, region간 feed-back을 주자. 연결된 하위 hierarchy의 column의 activation threshold를 줄이면 될 것 같다. 


 2) 어떤 region의 output은 active이거나 predictive인 cell을 가진column이다. 


 3) HTM의 pseudo code에 나온 것과 같이 모든 time step의 정보를 다 가지고 있을 필요는 없을 것 같다. 경우에 따라 최대 두 개 정도 가지자. 


 4) 하나의 cell에 너무 많은 distal synapse가 붙는 것도 문제가 될 것 같다. 생각해보자.






« PREV : 1 : ··· : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : ··· : 143 : NEXT »