Hi John,

The classifier is extra-cortical - it's a piece of engineering added to
efficiently extract useful predictions. To explain how it works, let's use
a concrete example of predicting energy use 10 steps ahead in the hotgym
use case.

Firstly, at the outset you tell NuPIC you want to predict a certain field a
certain number of steps ahead (you can do multiple predictions but these
are just copies of the same process). The classifier sets up a virtual
histogram for every cell, which will store the 10-step predictions of
energy use for that cell. For every input seen, the classifier looks at the
active cells from 10 steps in the past and updates their histograms with
the current value of energy use.

To extract a prediction for 10 steps in the future, look at all the active
cells' histograms, and combine their predictions.

The reason this (often, usually) works is that the pattern of currently
active cells (not just columns) identifies the current input in the current
learned sequence. This very sparse representation statistically implies a
very limited set of future outcomes, and the layer's collective beliefs,
derived from combining the histograms, form a good estimate of the future
of the data.

The pattern of predictive cells in CLA is a prediction of the next SDR(s)
one timestep ahead. It could also be used for prediction if you're only
interested in exactly one step ahead, but it would have to be "decoded" to
reconstruct the next input for one field; the histogram already has its
data in the input domain, so it's easier and cheaper just to use the
histograms.

The predictive pattern is, however, crucial in identifying which cells to
activate in the next timestep, which then become the sparse set of active
cells from which we derive the 10-step prediction, so predictive states are
key to NuPIC's predictive power.

Regards,

Fergal Byrne



On Tue, Aug 19, 2014 at 11:14 AM, John Blackburn <[email protected]
> wrote:

> I've been following this discussion with interest. One question, you say
> only active cells are considered in the classifier but my understanding is
> the input to the next region is the union of active and predictive cells.
> That is, if the cell is active or predictive, the next region in the
> hierarchy gets a 1. If it is inactive it gets a 0. Thus, the next region
> cannot distinguish between active and predictive cells. Is that still the
> case? If so, why does the classifier not take the same approach?
>
> Many thanks for your advice,
>
> John Blackburn
>
>
> On Tue, Aug 19, 2014 at 8:42 AM, Nicholas Mitri <[email protected]>
> wrote:
>
>> Great! Thank Subutai. Much appreciated.
>>
>>
>> On Aug 19, 2014, at 3:32 AM, Subutai Ahmad <[email protected]> wrote:
>>
>> Hi Nick,
>>
>> I believe your understanding is exactly right. If we are predicting 10
>> steps into the future, the classifier has to keep a rolling buffer of the
>> last 10 sets of active bits. The classifier sort-of outputs the conditional
>> probability of each bucket given the current activation. I say "sort-of"
>> because there's a rolling average in there, so it's really a "recent
>> conditional probability".  This is how the OPF outputs probabilities for
>> each set of predictions.
>>
>> I believe the implementation stores the indices only for the historical
>> buffer.   The C++ code for this is in nupic.core, in
>> FastClaClassifier.hpp/cpp.
>>
>> --Subutai
>>
>>
>> On Sat, Aug 16, 2014 at 6:14 AM, Nicholas Mitri <[email protected]>
>> wrote:
>>
>>> Hi Subutai,
>>>
>>> So we’re using the predictive state of the cells as a middle step
>>> (during learning) to encode context into the representation of the input
>>> pattern using only active bits? But that’s the extent of their practical
>>> use as far as the CLA classifier is concerned.
>>>
>>> I understood the point you made about the fact that context encoded into
>>> active bits gives us all the information we need for prediction, but
>>> there’s still one issue I’m having with the operation of the CLA
>>> classifier.
>>>
>>> If we’re only using active bits, then the RADC matrix we’re storing
>>> should maintain and update a coincidence counter between the current bucket
>>> and the active bits from a previous time step during its leaning phase. In
>>> that way, when the classifier is in inference mode, the likelihood becomes
>>> the conditional probability of a future bucket given current activation. In
>>> other words, the classifier learning phase creates a relation between past
>>> info (active output of TP at time = t - x) and current input value (bucket
>>> index at time t) so that during inference we can use current information
>>> (at time = t) to predict future values (at time = t + x). (The document
>>> attached isn’t very clear on that point).
>>>
>>> If that’s the case, then the active state of the region should be stored
>>> for future use. Is any of that accurate? and if so, would we be storing the
>>> state of every cell or only the index of the active ones?
>>>
>>> best,
>>> Nick
>>>
>>>
>>>
>>> On Aug 15, 2014, at 9:18 PM, Subutai Ahmad <[email protected]> wrote:
>>>
>>> Hi Nick,
>>>
>>> That’s a great question, and one we worked through as well. The
>>> classifier does really only use the active bits.  If you think about it,
>>> the active bits include all the available information about the high order
>>> sequence. It includes the full dynamic context and all future predictions
>>> about this sequence can be derived from the active bits.
>>>
>>> For example, suppose you've learned different melodies and start
>>> listening to a song. Once the first few notes are played, there could be
>>> many different musical pieces that start the same way. The active state
>>> includes all possible melodies that start with these notes.
>>>
>>> Once you are in the middle of the melody and it’s now unambiguous, the
>>> active state at any point is unique to that melody as well as the position
>>> within that melody. If you are a musician, you could actually stop
>>> listening, take over and play the rest of the song. Similarly, a classifier
>>> can take that state as input and predict the sequence of all those notes
>>> into the future with 100% accuracy.  This is a very cool property. It is a
>>> result of the capacity inherent in sparse representations and critical to
>>> representing high order sequences.
>>>
>>> As such, the classifier only needs the active state to predict the next
>>> N steps.
>>>
>>> So what is the predictive state? The predictive state is in fact just a
>>> function of the active bits and the current set of segments. It doesn’t add
>>> new information. However it has other uses. The predictive state is used in
>>> the Temporal Memory to update the set of active bits given new sensory
>>> information. This helps fine tune the active state as you get new
>>> information. It also helps the system refine learning as new (possibly
>>> unpredicted) information comes in.
>>>
>>> —Subutai
>>>
>>>
>>>
>>> On Fri, Aug 15, 2014 at 7:40 AM, Nicholas Mitri <[email protected]>
>>> wrote:
>>>
>>>> Hi Subutai,
>>>>
>>>> Again, thanks for forwarding the document. It was really helpful.
>>>>
>>>> I have a quick question before I delve deeper into the classifier.
>>>> The document mentions that the classifier makes use of the ‘active’
>>>> bits of the temporal pooler. Are we grouping active and predictive bits
>>>> under the label ‘active' here?
>>>>
>>>> If the predictive bits are not mapped into actual values by the
>>>> classifier, then what module is performing that task when I query for the
>>>> predicted field value at any time step?
>>>>
>>>> If they are, what process is used to decouple multiple simultaneous
>>>> predictions and map each to its corresponding value to compare it against a
>>>> value after X time steps? Is it as simple as looking at the normalized RADC
>>>> table and picking the top 3 buckets with the highest likelihoods, mapping
>>>> them into their actual values, then attaching the likelihood to the
>>>> prediction as a confidence measure?
>>>>
>>>> There are clearly some major holes in my understanding of the
>>>> algorithms at play, I’d appreciate the clarifications :).
>>>>
>>>> thanks,
>>>> Nick
>>>>
>>>> On Aug 13, 2014, at 8:39 PM, Subutai Ahmad <[email protected]> wrote:
>>>>
>>>> Hi Nick,
>>>>
>>>> Nice diagram!  In addition to the video David sent, we have a NuPIC
>>>> issue to create this document:
>>>>
>>>> https://github.com/numenta/nupic/issues/578
>>>>
>>>> I found some old documentation in our archives. Scott is planning to
>>>> update the wiki with this information. I have also attached it here for
>>>> reference (but warning, it may be a bit outdated!)
>>>>
>>>> --Subutai
>>>>
>>>>
>>>> On Wed, Aug 13, 2014 at 9:03 AM, cogmission1 . <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi Nicholas,
>>>>>
>>>>> This is the only source with any depth I have seen. Have you seen this?
>>>>>
>>>>> https://www.youtube.com/watch?v=z6r3ekreRzY
>>>>>
>>>>> David
>>>>>
>>>>>
>>>>> On Wed, Aug 13, 2014 at 10:46 AM, Nicholas Mitri <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hey all,
>>>>>>
>>>>>> Based on my understanding of the material in the wiki, the CLA
>>>>>> algorithms can be depicted by the figure below.
>>>>>> There’s plenty of info about SP and TP in both theory and
>>>>>> implementation details.
>>>>>> I can’t seem to find much information about the classifier though.
>>>>>> If I’ve understood correctly, this is not a classifier in the Machine
>>>>>> Learning sense of the word but rather a mechanism to translate TP output
>>>>>> into values of the same data type as the input for comparison purposes.
>>>>>>
>>>>>> I’d really appreciate some more involved explanation of the process
>>>>>> in terms of what data is stored step to step and how the look-up/mapping
>>>>>> mechanics are implemented.
>>>>>>
>>>>>> best,
>>>>>> Nick
>>>>>>
>>>>>> <Screen Shot 2013-12-02 at 4.00.01 PM.png>
>>>>>>
>>>>>> _______________________________________________
>>>>>> nupic mailing list
>>>>>> [email protected]
>>>>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> nupic mailing list
>>>>> [email protected]
>>>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>>>>
>>>>>
>>>> <multistep_prediction.docx>
>>>> _______________________________________________
>>>>
>>>> nupic mailing list
>>>> [email protected]
>>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> nupic mailing list
>>>> [email protected]
>>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>>>
>>>>
>>> _______________________________________________
>>> nupic mailing list
>>> [email protected]
>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>>
>>>
>>>
>>> _______________________________________________
>>> nupic mailing list
>>> [email protected]
>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>>
>>>
>> _______________________________________________
>> nupic mailing list
>> [email protected]
>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>
>>
>>
>> _______________________________________________
>> nupic mailing list
>> [email protected]
>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>>
>>
>
> _______________________________________________
> nupic mailing list
> [email protected]
> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
>
>


-- 

Fergal Byrne, Brenter IT

Author, Real Machine Intelligence with Clortex and NuPIC
https://leanpub.com/realsmartmachines

Speaking on Clortex and HTM/CLA at euroClojure Krakow, June 2014:
http://euroclojure.com/2014/
and at LambdaJam Chicago, July 2014: http://www.lambdajam.com

http://inbits.com - Better Living through Thoughtful Technology
http://ie.linkedin.com/in/fergbyrne/ - https://github.com/fergalbyrne

e:[email protected] t:+353 83 4214179
Join the quest for Machine Intelligence at http://numenta.org
Formerly of Adnet [email protected] http://www.adnet.ie
_______________________________________________
nupic mailing list
[email protected]
http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org

Reply via email to