Hi everyone
It's been a long time.
Lately I've been reading something and gone curious about my experimental algorithm and decided to devote some more time into it.
The experimental algorithm performed relatively well in all the examples provided with openHTM.
So I've worked for it for some time and made a speed-up of 10-20x of the original state in openHTM.
This allows for more testing of some more "real" (rather than toy) tests.
So I introduced the option to "dream". Dreaming is when you give the region it's own output as a feedback, without training it.
The way the experimental algorithm works, is like a camera recorder. It records what it sees. For this reason, when a "recording" ends (when a region dreams, occasionally the recording "stream" will end), I introduced a state of complete random input for one timestep in order to continue dreaming about something else (whatever comes up).
But this is a fuzzy camera. that also rates it's predictions in strength, so the information that really matters are the "winner" columns. the columns that were predicted the most.
I tried to give MIDI notes of the song "coldplay-magic" to 100x8 region, where each column has 500 cells.
after it trained on the whole song, in one random position I let it dream for the same length of the song. When dreaming I configured to feedback only 1% of the total region columns (which are the top predicting columns).
The representation of the MIDI notes are 8 polyphonic rows. each row represent one note that is played right now. the column also has "zero note cell" when no notes are played for that polyphonic row.
The only algorithm active is the temporal pooler, which means many columns (zero note cells) provide almost no information but are active - and can be a source of confusion. Therefore I used segment threshold activation of 3 cells to counteract this.
The full song is about 3000 timesteps long. I let it dream on 6000 timesteps. Watch how it can maintain extremely long sequences while preserving context.
Here are the midi files : (if no downloads, will be expired in 30 days)
Region input : http://www.sendspace.com/file/qh6muv
Dreaming of region with 200 cells per column : http://www.sendspace.com/file/xr72t5
Dreaming of region with 500 cells per column : http://www.sendspace.com/file/et6vps
I do not know how much % of the original song was "absorbed" in the region.
If anyone needs my sources or files, just say.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
thanks for sharing your results. I found it very interesting.
Which encoder do you use for your test?
Best regards
Binh
Gesendet: Freitag, 06. Juni 2014 um 18:50 Uhr Von: Itay <itay2541@users.sf.net> An: "[openhtm:discussion] " <general@discussion.openhtm.p.re.sf.net> Betreff: [openhtm:discussion] Is the experimental algorithm ready for "prime time"?
Hi everyone
It's been a long time.
Lately I've been reading something and gone curious about my experimental algorithm and decided to devote some more time into it.
The experimental algorithm performed relatively well in all the examples provided with openHTM.
So I've worked for it for some time and made a speed-up of 10-20x of the original state in openHTM.
This allows for more testing of some more "real" (rather than toy) tests.
So I introduced the option to "dream". Dreaming is when you give the region it's own output as a feedback, without training it.
The way the experimental algorithm works, is like a camera recorder. It records what it sees. For this reason, when a "recording" ends (when a region dreams, occasionally the recording "stream" will end), I introduced a state of complete random input for one timestep in order to continue dreaming about something else (whatever comes up).
But this is a fuzzy camera. that also rates it's predictions in strength, so the information that really matters are the "winner" columns. the columns that were predicted the most.
I tried to give MIDI notes of the song "coldplay-magic" to 100x8 region, where each column has 500 cells.
after it trained on the whole song, in one random position I let it dream for the same length of the song. When dreaming I configured to feedback only 1% of the total region columns (which are the top predicting columns).
The representation of the MIDI notes are 8 polyphonic rows. each row represent one note that is played right now. the column also has "zero note cell" when no notes are played for that polyphonic row.
The only algorithm active is the temporal pooler, which means many columns (zero note cells) provide almost no information but are active - and can be a source of confusion. Therefore I used segment threshold activation of 3 cells to counteract this.
The full song is about 3000 timesteps long. I let it dream on 6000 timesteps. Watch how it can maintain extremely long sequences while preserving context.
Here are the midi files : (if no downloads, will be expired in 30 days)
Region input : http://www.sendspace.com/file/qh6muv
Dreaming of region with 200 cells per column : http://www.sendspace.com/file/xr72t5
Dreaming of region with 500 cells per column : http://www.sendspace.com/file/et6vps
I do not know how much % of the original song was "absorbed" in the region.
If anyone needs my sources or files, just say.
in NuPic, Encoder is a method converting the input data (e.g. float) into the sparse representation (here binary), so that NuPic can handle them well.
Uptonow, NuPic implements it in Python, no C++-version for encoding is available.
Best regards
Binh
Gesendet: Sonntag, 08. Juni 2014 um 07:54 Uhr Von: Itay <itay2541@users.sf.net> An: "[openhtm:discussion] " <general@discussion.openhtm.p.re.sf.net> Betreff: [openhtm:discussion] Is the experimental algorithm ready for "prime time"?
What do you mean by "Encoder"?
I explained most of the important details at the first post
I explained how I converted MIDI into sparse representation at the first post, but I will give more details about it here :
First I did not use sparse pooler. which means that the data goes into the network in 1-by-1 ratio.
The network size is 100x8. 100 columns width, 8 height.
every row (which has 100 columns) represents one note which is active right now.
all the 8 rows represents 8 different notes that can be active at the same time.
in the 100 columns, of one row, only one column is active at the same time. the column index (numbered from 0) symbolizes the note number, for an example, the C note in octave 5 is something like 50. the column index 0 for every row represents inactive note. when it's active, then no other column in the row should be active. This is in order to always feed data and track on it - even when there is none.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Gesendet: Montag, 09. Juni 2014 um 17:33 Uhr Von: Itay <itay2541@users.sf.net> An: "[openhtm:discussion] " <general@discussion.openhtm.p.re.sf.net> Betreff: [openhtm:discussion] Is the experimental algorithm ready for "prime time"?
I explained how I converted MIDI into sparse representation at the first post, but I will give more details about it here :
First I did not use sparse pooler. which means that the data goes into the network in 1-by-1 ratio.
The network size is 100x8. 100 columns width, 8 height.
every row (which has 100 columns) represents one note which is active right now.
all the 8 rows represents 8 different notes that can be active at the same time.
in the 100 columns, of one row, only one column is active at the same time. the column index (numbered from 0) symbolizes the note number, for an example, the C note in octave 5 is something like 50. the column index 0 for every row represents inactive note. when it's active, then no other column in the row should be active. This is in order to always feed data and track on it - even when there is none.
Answer : Clearly, the experimental is not yet ready for prime-time.
I'm beginning to wonder whether there are any practically possible perfect "temporal poolers" that are capable of learning sequences of ANY length without confusing. but I'm going to research through this.
Imagine you have the sequence : ABCABCDABCE. but it's repeating, like this : ABCABCDABCEABCABCDABCEABCABCDABCE.
in a perfect temporal pooler, you would get two sequences :
1. ABC
2. ABCABCDABCE.
both sequences do not conflict each-other.
But, the transition columns of the first "ABC"s are the same when the first 'A' is shown. according to the experimental pooler, all the cells in the column are active. so how would you know if you are in the first 'A' of "ABC", in the first 'A' of "ABCD", or in the first 'A' of "ABCE"? in a single pass, you have to decide which right cell would get increased. which context is more "right" than "wrong".
the other context cells in the 'A' column, for an example, the start of "ABCD" would get decreased and increased as the sequence plays.
The first "ABC" of "ABCABCDABCE" is right every single time. so it's receiving more permanence increases than any other. it's receiving this only because it's the FIRST.
but what if.. there was "ABCABCDABCE ADC ABCABCDABCE ADC"..?
Just some of my thoughts. I will test and check what happens.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Itay,
To me it just seems like you want too much from a single layer.
Even though I'm human which should be an inspiration to HTM, it is not easy for me to make any definite conclusion on a string like 'ABCABCDABCEABCABCDABCEABCABCDABCE'.
I just can find patterns like ABC, ABCA, ABCD and ABCE at most - my short-term visual memory is short.
And I'm sure, my brain's getting most of mistakes you describe.
And when you write a string like this "ABCABCDABCE ADC ABCABCDABCE ADC", it means you get it hard too and you use a hierarchy of 'atomic' strings ABCABCDABCE and ADC to describe it.
My brain perceives the first of them like ABC..CE but with some effort I can train it to dissect the string into ABC, ABCD and ABCE.
So my opinion is that we have to use a hierarchy to deal with large uncertainties, like nature does it.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Nick.
I tested the "ABCABCDABCE ADC ABCABCDABCE ADC" example on the experimental temporal pooler on it's latest version that's located in my computer (after a few ironing of stupid bugs) and it worked. It seems like it's merely the existence of the synapse when no other cells in the column are active, allows the correct tracking after the sequence, even if it's a long one. (but once inside the sequence, all the permanence are off the scale!)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi everyone
It's been a long time.
Lately I've been reading something and gone curious about my experimental algorithm and decided to devote some more time into it.
The experimental algorithm performed relatively well in all the examples provided with openHTM.
So I've worked for it for some time and made a speed-up of 10-20x of the original state in openHTM.
This allows for more testing of some more "real" (rather than toy) tests.
So I introduced the option to "dream". Dreaming is when you give the region it's own output as a feedback, without training it.
The way the experimental algorithm works, is like a camera recorder. It records what it sees. For this reason, when a "recording" ends (when a region dreams, occasionally the recording "stream" will end), I introduced a state of complete random input for one timestep in order to continue dreaming about something else (whatever comes up).
But this is a fuzzy camera. that also rates it's predictions in strength, so the information that really matters are the "winner" columns. the columns that were predicted the most.
I tried to give MIDI notes of the song "coldplay-magic" to 100x8 region, where each column has 500 cells.
after it trained on the whole song, in one random position I let it dream for the same length of the song. When dreaming I configured to feedback only 1% of the total region columns (which are the top predicting columns).
The representation of the MIDI notes are 8 polyphonic rows. each row represent one note that is played right now. the column also has "zero note cell" when no notes are played for that polyphonic row.
The only algorithm active is the temporal pooler, which means many columns (zero note cells) provide almost no information but are active - and can be a source of confusion. Therefore I used segment threshold activation of 3 cells to counteract this.
The full song is about 3000 timesteps long. I let it dream on 6000 timesteps. Watch how it can maintain extremely long sequences while preserving context.
Here are the midi files : (if no downloads, will be expired in 30 days)
Region input : http://www.sendspace.com/file/qh6muv
Dreaming of region with 200 cells per column : http://www.sendspace.com/file/xr72t5
Dreaming of region with 500 cells per column : http://www.sendspace.com/file/et6vps
I do not know how much % of the original song was "absorbed" in the region.
If anyone needs my sources or files, just say.
Von: Itay <itay2541@users.sf.net>
An: "[openhtm:discussion] " <general@discussion.openhtm.p.re.sf.net>
Betreff: [openhtm:discussion] Is the experimental algorithm ready for "prime time"?
It's been a long time.
Lately I've been reading something and gone curious about my experimental algorithm and decided to devote some more time into it.
The experimental algorithm performed relatively well in all the examples provided with openHTM.
So I've worked for it for some time and made a speed-up of 10-20x of the original state in openHTM.
This allows for more testing of some more "real" (rather than toy) tests.
So I introduced the option to "dream". Dreaming is when you give the region it's own output as a feedback, without training it.
The way the experimental algorithm works, is like a camera recorder. It records what it sees. For this reason, when a "recording" ends (when a region dreams, occasionally the recording "stream" will end), I introduced a state of complete random input for one timestep in order to continue dreaming about something else (whatever comes up).
But this is a fuzzy camera. that also rates it's predictions in strength, so the information that really matters are the "winner" columns. the columns that were predicted the most.
I tried to give MIDI notes of the song "coldplay-magic" to 100x8 region, where each column has 500 cells.
after it trained on the whole song, in one random position I let it dream for the same length of the song. When dreaming I configured to feedback only 1% of the total region columns (which are the top predicting columns).
The representation of the MIDI notes are 8 polyphonic rows. each row represent one note that is played right now. the column also has "zero note cell" when no notes are played for that polyphonic row.
The only algorithm active is the temporal pooler, which means many columns (zero note cells) provide almost no information but are active - and can be a source of confusion. Therefore I used segment threshold activation of 3 cells to counteract this.
The full song is about 3000 timesteps long. I let it dream on 6000 timesteps. Watch how it can maintain extremely long sequences while preserving context.
Here are the midi files : (if no downloads, will be expired in 30 days)
Region input : http://www.sendspace.com/file/qh6muv
Dreaming of region with 200 cells per column : http://www.sendspace.com/file/xr72t5
Dreaming of region with 500 cells per column : http://www.sendspace.com/file/et6vps
I do not know how much % of the original song was "absorbed" in the region.
If anyone needs my sources or files, just say.
---
[Is the experimental algorithm ready for "prime time"?](https://sourceforge.net/p/openhtm/discussion/general/thread/31da7e51/?limit=25#6f5c)
---
Sent from sourceforge.net because you indicated interest in <https://sourceforge.net/p/openhtm/discussion/general/>
To unsubscribe from further messages, please visit <https://sourceforge.net/auth/subscriptions/>
What do you mean by "Encoder"?
I explained most of the important details at the first post
Von: Itay <itay2541@users.sf.net>
An: "[openhtm:discussion] " <general@discussion.openhtm.p.re.sf.net>
Betreff: [openhtm:discussion] Is the experimental algorithm ready for "prime time"?
I explained most of the important details at the first post
---
[Is the experimental algorithm ready for "prime time"?](https://sourceforge.net/p/openhtm/discussion/general/thread/31da7e51/?limit=25#d129)
---
Sent from sourceforge.net because you indicated interest in <https://sourceforge.net/p/openhtm/discussion/general/>
To unsubscribe from further messages, please visit <https://sourceforge.net/auth/subscriptions/>
I explained how I converted MIDI into sparse representation at the first post, but I will give more details about it here :
First I did not use sparse pooler. which means that the data goes into the network in 1-by-1 ratio.
The network size is 100x8. 100 columns width, 8 height.
every row (which has 100 columns) represents one note which is active right now.
all the 8 rows represents 8 different notes that can be active at the same time.
in the 100 columns, of one row, only one column is active at the same time. the column index (numbered from 0) symbolizes the note number, for an example, the C note in octave 5 is something like 50. the column index 0 for every row represents inactive note. when it's active, then no other column in the row should be active. This is in order to always feed data and track on it - even when there is none.
Von: Itay <itay2541@users.sf.net>
An: "[openhtm:discussion] " <general@discussion.openhtm.p.re.sf.net>
Betreff: [openhtm:discussion] Is the experimental algorithm ready for "prime time"?
First I did not use sparse pooler. which means that the data goes into the network in 1-by-1 ratio.
The network size is 100x8. 100 columns width, 8 height.
every row (which has 100 columns) represents one note which is active right now.
all the 8 rows represents 8 different notes that can be active at the same time.
in the 100 columns, of one row, only one column is active at the same time. the column index (numbered from 0) symbolizes the note number, for an example, the C note in octave 5 is something like 50. the column index 0 for every row represents inactive note. when it's active, then no other column in the row should be active. This is in order to always feed data and track on it - even when there is none.
---
[Is the experimental algorithm ready for "prime time"?](https://sourceforge.net/p/openhtm/discussion/general/thread/31da7e51/?limit=25#3ae9)
---
Sent from sourceforge.net because you indicated interest in <https://sourceforge.net/p/openhtm/discussion/general/>
To unsubscribe from further messages, please visit <https://sourceforge.net/auth/subscriptions/>
Answer : Clearly, the experimental is not yet ready for prime-time.
I'm beginning to wonder whether there are any practically possible perfect "temporal poolers" that are capable of learning sequences of ANY length without confusing. but I'm going to research through this.
Imagine you have the sequence : ABCABCDABCE. but it's repeating, like this : ABCABCDABCEABCABCDABCEABCABCDABCE.
in a perfect temporal pooler, you would get two sequences :
1. ABC
2. ABCABCDABCE.
both sequences do not conflict each-other.
But, the transition columns of the first "ABC"s are the same when the first 'A' is shown. according to the experimental pooler, all the cells in the column are active. so how would you know if you are in the first 'A' of "ABC", in the first 'A' of "ABCD", or in the first 'A' of "ABCE"? in a single pass, you have to decide which right cell would get increased. which context is more "right" than "wrong".
the other context cells in the 'A' column, for an example, the start of "ABCD" would get decreased and increased as the sequence plays.
The first "ABC" of "ABCABCDABCE" is right every single time. so it's receiving more permanence increases than any other. it's receiving this only because it's the FIRST.
but what if.. there was "ABCABCDABCE ADC ABCABCDABCE ADC"..?
Just some of my thoughts. I will test and check what happens.
Hi Itay,
To me it just seems like you want too much from a single layer.
Even though I'm human which should be an inspiration to HTM, it is not easy for me to make any definite conclusion on a string like 'ABCABCDABCEABCABCDABCEABCABCDABCE'.
I just can find patterns like ABC, ABCA, ABCD and ABCE at most - my short-term visual memory is short.
And I'm sure, my brain's getting most of mistakes you describe.
And when you write a string like this "ABCABCDABCE ADC ABCABCDABCE ADC", it means you get it hard too and you use a hierarchy of 'atomic' strings ABCABCDABCE and ADC to describe it.
My brain perceives the first of them like ABC..CE but with some effort I can train it to dissect the string into ABC, ABCD and ABCE.
So my opinion is that we have to use a hierarchy to deal with large uncertainties, like nature does it.
Hi Nick.
I tested the "ABCABCDABCE ADC ABCABCDABCE ADC" example on the experimental temporal pooler on it's latest version that's located in my computer (after a few ironing of stupid bugs) and it worked. It seems like it's merely the existence of the synapse when no other cells in the column are active, allows the correct tracking after the sequence, even if it's a long one. (but once inside the sequence, all the permanence are off the scale!)
I don't say the limit is 3 or 4 but there is 'some' limit, depending on the layer size