This month I returned to a can of worms
I opened up last year, namely episodic memory. Quick summary of
previous work on this front: as of last summer, Acuitas could record
events that happened “to him” and group adjacent, similar events
into scenes. Minor scenes were in turn grouped into larger scenes,
forming tree structures. A memory in Acuitas' episodic set can
include connections both to its sequential neighbors before and
after, and to its sub- and super-memories at adjacent levels of the
tree. Acuitas could also search for memories similar to what he was
doing/experiencing currently. This was achieved by walking
sequentially through the whole structure (starting with the most
recent past) until a related memory was found.
Fortunately for elephants, I'm sure they do sometimes forget things. |
With this code running, Acuitas quickly
built up a huge clutter of memories concerning very trivial
day-to-day events. Size remained in the Megabytes range (they're just
text files), but on principle, this couldn't be allowed to continue –
especially since the memories might eventually grow to encompass
richer levels of detail. In addition to overflowing its available
space, a memory that literally records everything will face access
problems. The more information you keep, the longer it takes to
search through it and extract what you want at the moment.
I was left with a nice illustration of
a truth that applies to all entities with finite minds: if you
want the ability to remember, you need the ability to forget.
This leads on into the tricky question
of what to forget. How to decide which memories are worth
keeping? Part of my work this month was focused on computing a
“significance measure” which assigns a numerical value to each
memorized scene. Elements I use to judge the significance of a
memory include …
* Primacy: was this the first time
something happened?
* Uniqueness: how rare are memories
similar to this one?
* Complexity: how many features does
this memory have?
Additional options for judging the
value of memories will open up once I plug in some to-be-written
systems. Since some of these measures are statistical and depend on
the overall memory population, they can change over time. I wrote a
process that crawls through the episodic memory and updates all the
significance measures, and I threw that into Acuitas' sleep cycle.
To improve the ease and speed of
accessing the memories, I added a layer of “type nodes” that link
together memories which share certain salient features in common.
Instead of crawling through the whole list to find memories that
relate to a current situation, Acuitas can just look at the relevant
“type nodes” and find a list of memories that match.
Last, I worked on some methods for
consolidating memories. I devised a way to create summaries of
low-level scenes that are then stored inside the super-scenes higher
up the tree; eventually, these summaries might be what remains when
the lower-level “detail” scenes are forgotten. The summarizer
attempts to extract information that is common across multiple events
or sub-scenes within a scene. I also wrote functions for merging
adjacent scenes that have become sparse.
All that, and I still haven't gotten to
the actual forgetting part! That will come next month (I hope).