Menu

Is the experimental algorithm ready for "prime time"?

Itay
2014-06-06
2014-06-16
  • Itay

    Itay - 2014-06-06

    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.

     
    • HoaNam

      HoaNam - 2014-06-07
      Dear Itay,
      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.


      ---

      [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/>
       
  • Itay

    Itay - 2014-06-08

    What do you mean by "Encoder"?
    I explained most of the important details at the first post

     
    • HoaNam

      HoaNam - 2014-06-09
      Dear Itay,
      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


      ---

      [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/>
       
  • Itay

    Itay - 2014-06-09

    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.

     
    • HoaNam

      HoaNam - 2014-06-10
      it is clear. Thanks.
       
      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.



      ---

      [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/>
       
  • Itay

    Itay - 2014-06-16

    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.

     
    • Nick

      Nick - 2014-06-16

      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.

       
      • Itay

        Itay - 2014-06-16

        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!)

         
    • Nick

      Nick - 2014-06-16

      I don't say the limit is 3 or 4 but there is 'some' limit, depending on the layer size

       

Log in to post a comment.