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