Hello Scott,
Where can I find further info about Temporal Memory Algorithm? I've read
White paper but English is not my native language so I'm a bit lost.
Thank you very much.
On 11/03/2015 11:53 PM, Scott Purdy wrote:
Thanks Daniel, that is a good explanation. The longer version can be
seen here:
http://numenta.com/learn/science-of-anomaly-detection.html
And you probably want to understand the Temporal Memory algorithm as
well since the anomaly score is built on top of that.
On Tue, Nov 3, 2015 at 12:56 PM, Daniel McDonald
<[email protected] <mailto:[email protected]>> wrote:
There's one aspect of this thread that I don't feel has been touched
on, which may help in understanding prediction and the anomaly
score. I learned this at the spring hackathon in NY.
If you look at how the anomaly score is implemented [1], you'll see
that it computes the ratio of the difference of the number of active
columns and the number of active columns which were also predicted
to the number of actives. That is, (#active - #activeAndPredicted)
/ #active. Note that this formula does not depend on the total
number of predicted columns. In fact, if the HTM predicts all
columns, the anomaly score will be 0 for any subsequent input. In
this case, the HTM would be completely uncertain about the next step
in the sequence, so it predicts a superposition of all possible
patterns; therefore, any subsequent input is not anomalous.
That is exactly what happened to my Market Patterns hack at the
hackathon. After training the HTM on years of stock market data,
the anomaly score dropped quite low; however, when I looked
carefully at what was going on, the HTM had, in fact, saturated and
was predicting more than half of the columns to be active at each
step in the sequence. In effect, it was saying that the sequences
were unpredictable and anything was possible in the next step (we
already knew that about the stock market, right?). Consequently,
whatever happened next was not anomalous.
When I look at your example data, I read it this way:
At 175, 0.0 was read and 0.0 is the prediction for the next step.
The anomaly score of 0.325 is meaningless, because we don't have
data from the previous step.
At 176, 62 was read, which doesn't match the prediction of 0.0 (from
175), so it is anomalous (0.65). 52 is predicted for the next step.
At 177, 402 is read. It is completely anomalous (1.0). That is
there is no overlap in the columns predicted for the value 52 and
the columns active for the value 402. If you are using a scalar
encoder, that makes sense, since the bit patterns for such different
numbers likely have no overlap in the encoding or in the SDR
produced by the SP. 0.0 is predicted for the next step.
At 178, 0 is read, and the anomaly score drops low (0.125), since
the actual matches closely to what was predicted at the previous
step. The score isn't exactly 0, because the predicted SDR from the
previous step and the encoded SDR for the new input may differ in
some columns. In other words, in the previous step, when 0.0 was
reported as the prediction, this was only an approximate translation
of a predicted SDR, where 0.0 was the closest decoded
representation. 0.0 is predicted for the next step.
At 179, 402 is read, which is completely anomalous (1.0) because the
predicted SDR for 0.0 had no column in common with the encoded SDR
for 402.
180 is similar to 178, and 0.0 is predicted.
At 181, 3 is read. The anomaly score is low (0.05), because the
scalar encoder produces overlapping patterns for similar numbers, so
there is likely overlap in the SDR's for 0 and 3. 402 is predicted.
At 182, 50 is read. The anomaly score is low (0.1), which is a bit
puzzling; however, it may be due to saturation. The prediction of
402 could represent a case where many columns were predicted
representing a superposition of possible states, and 402 was just
the strongest one (i.e., had the highest overlap of the encoded SDR
for 402 with the predicted columns). That is, 52 may have also been
predicted, but to a lesser degree than 402. It may be helpful to
look at how many columns are predicted vs. active in each step to
see when this happens. If the number of predicted columns suddenly
jumps, it means that the HTM is uncertain about the next step (or,
that it sees many possible next steps given the current context).
[1]
https://github.com/numenta/nupic/blob/master/src/nupic/algorithms/anomaly.py
Best regards,
Daniel
On Tue, Nov 3, 2015 at 4:23 AM, Wakan Tanka <[email protected]
<mailto:[email protected]>> wrote: