zotric

Just another WordPress.com site

Update

It is ages since I posted here.
But the space is still alive and I hope people have found it a bit useful.
 
The reason for the lack of activity is just that I have been involved with some other things. 
Mainly studying physics.
There are several reasons why I think I should study physics.  Here is a first attempt at listing them:
 
Firstly classical physics, at least, is required for understanding biologically realistic neural simulations.
 
Secondly physics expresses our most fundamental understanding of the physical world and is in itself a fascinating subject.  I need hardly add that it requires great application to come anywhere near an understanding.
 
Thirdly philosophy of mind and philosophy of science are partly concerned with the meaning, implications, metaphysical plausibility and empirical grounding of our best theories.  In order to be effective in the philosophy of science and mind, I believe, one must be versed in the practices of the subjects’ science.
 
Fourthly the genesis of our scientific theories and the form they take could shed light on the nature of the human mind and how its structures of thought are related to underlying physical processes.  Physics is an obvious candidate for study because of the way it most conforms to pure reasoning (mathematics) whilst still being a practical subject. 
 
I hope to share some better insights in the future. Probably in the Neuroscience and Philosophy category – that I have not updated since 2007.
 

On Intelligence is on-line!

Jeff Hawkin’s book is available online for reading.

The book http://www.scribd.com/doc/2942162/HawkinsJeff-On-Intelligence
introduces the neocortical model that inspires this project.

It can also be downloaded.
It is a boon for searching.

Neocortex version 1.4.2c

This should be the last main release of the version 1.4 series.
It tidies up afew user interface items and also has the facilty to visualise training saccades on the main window.

A brief introduction is on a previous recent posting, below.
The user guide is in the folder with the download on SkyDrive:

http://cid-e50c6a362906c9a6.skydrive.live.com/embedrowdetail.aspx/Neocortexversion1.4.2andUserGuide

Note – the download is self contained – you need not install any other software for it to run.

Thinking about how to achieve temporal pooling is quite hard and I think further tinkering is just on the level
of procrastination!

If anyone should ever look at this please let me know how you get on with it!!

Neocortex with Free MinGW compiler

Finally I have it working with MinGW.
The recommended procedure is to use the bundled QT/MinGW from the Trolltech/Nokia site!
See:
http://trolltech.com/downloads/opensource/appdev/windows-cpp

The QT .pro files and full instructions are in the version 1.4.2 Neo folder (see previous entry).

Version 1.4.2b of Neocortex

The files at the folder link below have been updated for version, 1.4.2c above.
14th December 2008.

Updated 17th November 2008.
I’ve put a new version into the folder and called it 1.4.2b.  The source is on SourceForge but I have not yet
published to Source Forge this archive.
The new version is a lot faster.  Thanks to Greg Kochaniak for the suggestions (to Elite).

Original entry 16th November 2008.
This version has the following main fixes and enhancements:
1.  Out of range saccades fixed (Originally version 1.4A)
2.  Fixed menus.  These no longer worked in version 1.4.
3.  The current directory was not always retained.
4.  Hover help on Parameters dialog (Hold mouse over ? boxes)
5.  Visualise training saccades
More explanation and notes to follow

http://cid-e50c6a362906c9a6.skydrive.live.com/embedrowdetail.aspx/Neocortexversion1.4.2andUserGuide

Version 1.4 of Neocortex

Introduction

[Removed superseeded downloads 16/11/2008]
Artificial Intelligence has a strong element of pattern recognition.

The two basic methods of pattern recognition are:

  • Explicit analysis of the patterns using pre-defined specific algorithms.

  • Learning from sets of patterns presented to the system using a general algorithm.

It is the latter approach that Neocortex and similar systems use to recognise patterns.
The aim of using the learning approach is that the AI system can act autonomously and learn in the way that an animal might learn.
The name ‘Neocortex’ is meant to indicate a biologically inspired model although this is to be taken as a metaphor and not literally.
Neocortex is not a direct analogue of the brain, but an approximation of the unified cortical algorithm as described by Hawkins and Blakeslee [1].
Neocortex models the function of some of the key large scale structures of the real neocortex of mammals.
In other words we do not model individual neurons or cortical columns, but rather work on the level of, say, the V1, V2, and V4 regions
of the visual cortex as well as hippocampus.
There is nothing restrictive about this approach. It provides a superstructure into which any detailed processing methods can be placed.

The current status of the model is of a training and research tool.
It allows you to explore the effect of varying certain important aspects of the model such as the number of levels (e.g. thinking of V1, V2 etc. regions),
the size of each level and how one level maps onto another (the model is a hierarchy among levels).

Please read the previous entries here for a list of changes since earlier versions if interested.
[Removed superseded information about this download]

[1] Jeff Hawkins, Sandra Blakeslee “On Intelligence” Henry Holt and Company, 2004

1.4 Beta of Neocortex

(Link to earlier version removed)

This should be the final version before I update the full source.
I’ve added a means to control the way in which a memory slot is discarded for use by a new memory.
This code overall needs to be improved because the discarded memories my sometimes be no worse or less useful than the new one.
It does however provide a way to favour recent over old and little used memories.

Here is the complete set of changes since 1.3.3 for convenience:

1.  The Column class has been renamed SubRegion to reflect more accurately the purpose.
    Columns are not modelled (Suggestion by Elite).

2.  Using the Parameters dialog, Forgetting can be set to to be a percentage of the number of memories at each Region.
    A check box enables the new mode to be set.
    The default (unchecked) is to operate with a forgetting threshold based on the average population per memory.

3.  The user can set the number of saccades that will be used during learning.
    The two numbers that can be set are:
    a.  The number of saccades used in the first pass for each Region.  In this pass the sub-regions are just learning
        the most common patterns in the data.
    b.  The number of saccades in the second pass.  In this pass each Region is learning to associate patterns with the
        patterns that have been learned at the next Region up.
    The default (0) is to operate as before with the program’s limit on saccades.
    The limits are set by means of entering numbers rather than by means of spinners.
    The saccade pattern during learning is a complete ‘raster’ type scan of all the possible positions of the test
    image within the 32X32 matrix.
    The limits on recognition are set as before by means of the spinners in the Parameters window.
    During recognition, the pattern follows a ‘ping pong’ pattern, as you can see on the screen.

4.  The memories at each Region can be constrained by the amount of memory available. 
    If the ‘Constraining Memory’ box is checked then NO forgetting will occur.
    ‘Forget memories’ spinners are greyed out.
     Spinners allow you to set the constraints on memory and some reasonable defaults are set by the program.
    NB You can set memory constraints when forgetting is ‘on’ (Do Not Forget is unchecked) but this is not
    recommended.
  
5.  The FeedForward code has been modified so that as few memories are discarded as possible..
    Previously if the memory was full and no exact match was found the current sequence would be discarded and an error would
    be displayed. Because of forgetting and a large fixed memory size (30,000 per region) this would seldom occur.
    Now if the memory is full, instead of discarding the sequence, Neocortex either uses the best match it has found
    (provided this is greater than 0.95) or it finds the least used old memory and replaces it with the new one.
    The criterion for finding memory that can be re-used is that the number of memories found is less than a thershold
    that is also set by means of spinners.

6.  The Parameters dialog now has a ‘Revert’ button.  This is like a Cancel button except that it leaves you on the
    same screen.  As this has not been fully tested; please use with caution.

7.  The parameters window no longer shows the system menu.

8.  In the code, the Column class has been renamed to SubRegion.

Controlling memory availability and saccades

Another day another version!

This is a rather brief entry but I plan to expand with some results later.
(Link to earlier version removed)
Please use experimental facilities with care and let me know if there are any problems.
There was no version 1.3.3d!

An experimental facility has been added that allows you to set the number of saccades that will be used
    during learning.
    The two numbers that can be set are:
    a.  The number of saccades used in the first pass for each Region.  In this pass the sub-regions are just learning
        the most common patterns in the data.
    b.  The number of saccades in the second pass.  In this pass each Region is learning to associate patterns with the
        patterns that have been learned at the next Region up.
    The default (0) is to operate as before with the program’s limit on saccades.

An experimental facility that was added previously (see previous entry) which allows the memories at each Region to be constrained by the amount of
    memory available. 
    When the ‘Constraining Memory’ checkbox is selected, the ‘Forget memories’ spinners are greyed out.
    It is possible that we may at some stage want to have some variant of forgetting even with constrained memory.
    The default (with up to 30,000 memories per region) is to operate as before with ‘Forgetting’ determined by
    the spinners under ‘Forgetting’.
    Some resaonable defaults are now set up when you select this facility.

The Parameters dialog now has a ‘Revert’ button.  This is like a Cancel button except that it leaves you on the
    same screen.  As this has not been fully tested; please use with caution.

The parameters window no longer shows the system menu.

Controlling memory allocation in Neocortex

This version has a configurable limit for memory at each level.

(Link to earlier version removed)

You can set the memory limits in the Parameters dialog before the start of training.

The suggested way to use this, initially, is to set memory limits to fairly low values (up to about 2000) and check the ‘Do Not Forget’ check box.  This prevents any forgetting (pruning) and you can see the results of limiting memory.

If you do not set memory limits (there is always a maximum of 30,000) the model behaves as before provided the ‘Do Not Forget’ check box is not checked.

The Parameters dialog contains a brief explanation.  Please let me know if it is unclear.  Eventually there may be a user guide!

To get started – note the number of memories reported when ‘forgetting’ is switched on (the default state).  Then repeat the same learning with ‘Do Not Forget’ checked and the limits set to your noted values. 
Learning should be faster and the recognition results are quite similar.

Memory pruning is not necessary with this version because when the limited memory is full, each new memory replaces an existing one rather than creating a new memory.
The methods I have used are
much the same as have been described already in the literature.

At the moment I’m trying to find out what the connectivity is between layers of neocortex.  That
may give us the numbers we need for the model – beats doing 100’s of
tests!

Experimental version of Neocortex

New version
This one allows setting the forgetting of rare memories as a percentage of the memories at each level.

(Link to earlier version removed)

25th August 2008