# Hypothetical TP?

**URL:** <https://discourse.numenta.org/t/hypothetical-tp/7128>\
**Category:** Implementations\
**Created:** [January 31, 2020, 3:07am UTC](https://discourse.numenta.org/t/hypothetical-tp/7128 "2020-01-31T03:07:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![mraptor](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/mraptor/32/4469_2.png) [@mraptor](https://discourse.numenta.org/u/mraptor)\
**Post date:** [January 31, 2020, 3:07am UTC](https://discourse.numenta.org/t/hypothetical-tp/7128/1 "2020-01-31T03:07:32Z")

</div>

Would the following hypothetical algorithm match somehow the expectation of Temporal-Pooler.  
Not the feedback part, only the requirement of **stable unique** output part.

Let say the TM generate sequence of SDR’s : s1, s2, s3, s4, s5, …

The algorithm is very simple every step we pick randomly 50% of the ON bits of the two neighboring SDRs. f.e. ( let **f50()** be the operation pick 50% of the ON bits)

```
   TP1 = f50(s1) | f50(s2)
   TP2 = f50(TP1) | f50(s3)
   TP3 = f50(TP2) | f50(s4)
   ............
   TPn = f50(TP_n-1) | f50(s_n+1)

```

i.e. TP-SDR is a trailing SDR, because f.e. **TP2** has 25% of **s1** , 25% of **s2** and 50% of **s3** … **TP3** has 12.5% of **s1** , 12.5% of **s2** , 25% of s3 and 50% of **s4** … and so on …

[TP](https://github.com/numenta/htmresearch/wiki/Overview-of-the-Temporal-Pooler)

---

<div class="post-metadata">

**Author:** ![dmac](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/dmac/32/5842_2.png) [@dmac](https://discourse.numenta.org/u/dmac)\
**Post date:** [February 3, 2020, 5:33pm UTC](https://discourse.numenta.org/t/hypothetical-tp/7128/2 "2020-02-03T17:33:02Z")

</div>

Hello mraptor,

I’ve studied this in depth. I too came to your hypothetical solution, tested it, and found that it does not work. The problem is that the overlap\*\* between any two consecutive SDRs should be determined by the underlying data. At the extremes: you could have a stationary input (which should yield nearly 100% overlap); or a completely different input (which should yield very low overlap). But this hypothetical solution has a constant hardcoded overlap, regardless of the situation.

However this does shed light on how to correctly analyze the stability of a temporal pooler.

I have a different theory about how the TP works. I measured the overlap between consecutive SDR’s to verify that it works. Here is my report about it: [https://github.com/ctrl-z-9000-times/sdr\_algorithms/blob/master/ascii\_stability.pdf](https://github.com/ctrl-z-9000-times/sdr_algorithms/blob/master/ascii_stability.pdf)

I hope this helps.

* * *

\*\* The overlap between two SDR’s is the fraction of bits which are ON in both SDRs. It is a measure of similarity.

---

<div class="post-metadata">

**Author:** ![mraptor](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/mraptor/32/4469_2.png) [@mraptor](https://discourse.numenta.org/u/mraptor)\
**Post date:** [February 3, 2020, 6:19pm UTC](https://discourse.numenta.org/t/hypothetical-tp/7128/3 "2020-02-03T18:19:21Z")

</div>

What if the overlap is based on function which somehow calculates the size/ratio of the overlap based on last several SDRs i.e. not 50/50 ?

f.e. the bigger the overlap between current TM and TP, the smaller the portion of current TM used and vs versa.

thinking louldy if overlap is 10% then pick 10% of TM and 90% of TP, !! hmm… cant yet wrap my mind of the logic to select correct percentage, yet

---

<div class="post-metadata">

**Author:** ![mraptor](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/mraptor/32/4469_2.png) [@mraptor](https://discourse.numenta.org/u/mraptor)\
**Post date:** [February 3, 2020, 7:31pm UTC](https://discourse.numenta.org/t/hypothetical-tp/7128/4 "2020-02-03T19:31:29Z")

</div>

I use similarity measure sometimes instead of overlap (it is more stable and is %)

sim = olap(x,y) / |x|

so what about :

pick-random% of TM-sdr = 0.5 \* (1-sim)

the bigger the sim the smaller the % from TM-sdr.

=========exp avg =======

this is a different way for % of bits to change/borrow :

%change += rate \* ( 1 - %similarity)

---

<div class="post-metadata">

**Author:** ![dmac](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/dmac/32/5842_2.png) [@dmac](https://discourse.numenta.org/u/dmac)\
**Post date:** [February 3, 2020, 8:34pm UTC](https://discourse.numenta.org/t/hypothetical-tp/7128/5 "2020-02-03T20:34:31Z")

</div>

I think your new idea is circular. It uses the overlap to determine what the overlap should be.

I also think you misunderstood the different layers in the cortex. The TM & TP are different cell populations.

> **[A Theory of How Columns in the Neocortex Enable Learning the Structure of the...](https://numenta.com/neuroscience-research/research-publications/papers/a-theory-of-how-columns-in-the-neocortex-enable-learning-the-structure-of-the-world/)**
>
> This paper proposes a network model composed of columns and layers that performs robust object learning and recognition. The model introduces a new feature to cortical columns, location information, which is represented relative to the object being...

---

<div class="post-metadata">

**Author:** ![mraptor](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/mraptor/32/4469_2.png) [@mraptor](https://discourse.numenta.org/u/mraptor)\
**Post date:** [February 4, 2020, 1:05am UTC](https://discourse.numenta.org/t/hypothetical-tp/7128/6 "2020-02-04T01:05:48Z")

</div>

> [@dmac](#):
>
> I think your new idea is circular. It uses the overlap to determine what the overlap should be.

no… I think of it as … it is using overlap to decide how many bits to copy from both SDR’s … to the final SDR i.e. what portion stays the same and what changes.  
if they are similar it changes a little, if they differ then it changes alot …
