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가 붙는 것도 문제가 될 것 같다. 생각해보자.
'Enginius > Machine Learning' 카테고리의 다른 글
기계 학습과 수학적 뒷받침 (0) | 2012.04.26 |
---|---|
predictions in the brain using our past to generate a future (0) | 2012.04.05 |
HTM Overview (0) | 2012.03.06 |
SVMlight - multi-class classification (0) | 2012.02.20 |
predictive machine (0) | 2012.01.26 |