The mechanism of a Hopfield net is that if you keep updating, you eventually converge to one of your memories (the best one, in some sense). The usual / better-biologically-motivated update function is considered to be a stochastic mechanism, whose update function is the same as breadth-first, but bit-by-bit is stochastic. Alright I don't know if I mentioned this about Hopfield nets- as deep learning goes, they use a few things we know/research from animal neuronal models. For example the Lyapunov condition, that it's possible to use decreasing energy as a metric for convergence to an answer (which will be stable). Here I note two important things about the bit-by-bit stochastic updates. (By stochastic update, I just mean you choose one bit (one neuron) uniform randomly, then apply the bit-update formula to that neuron; you're guarunteed by the conditions of Hopfield nets this will converge to a memory eventually). Other than being laborious, what this does not do is increase some confidence metric in which memory will be chosen. It flips a bit congruent converging to a stable state. The same bit might be flipped again differently as the system evolves towards the stable state, but the formula always works. Despite the fact the the same bit might flip a different way later as other parts of the image have been flipped, under some constraints at least the image becomes more similar to one of the memories, and attains stability (the update is always to do nothing) when it reaches one memory or other. So the answer being converged to fades into view over the updates, the annoying thing being that you have to watch whether changes are still happening or not to know whether you've converged yet. Hopfield (etc) have I believe written about how Hopfield nets are useful without having absolute knowledge of whether you've finished converging or not. Well, that was long winded, but they fade one memory into the foreground over time, eventually. That's what they do. Ah, I didn't mention my broad strategy I'm working on yet. Imagine a tree. You have memories of leaves, memories of a flower, memories from the trunk. Then we divide a picture of a tree into a grid, and independently converge each tile of the grid with the same set of memories / update rule locally. In that context, each tile will eventually converge to a unique memory independently. But we can just mix other functions into the update rule (maybe much slower than we are updating the bits properly). One of my ideas is to - and this is painful to execute - when an unconverged tile is sufficiently close to a memory by some threshold, to have rules like then flipping some bits in neighboring tiles based on another network of memories, to do with the organisation of tiles making up a tree. A flower is amoung leaves, leaves are above a trunk - have relatively close matches start to stochastically mutate nearby tiles towards what it thinks should be there, but then continue updating properly. I think this kind of method obviously ruins the guaruntee of convergence, though as researched by Hopfield, even if a little ongoing chaos has been introduced, the chaos might be small and local enough that the mechanism is still useful. As well as chaos, I think a method like this will introduce hysteresis- a random path being traversed towards the convergence will remember which tiles it started to get right first. Letting my mind wander a bit. I was also looking a little at Interlisp Medley's implementation of TCP in Maiko/src/inet.c etc, and interrupt driven ether network mechanics - 10MBDRIVER ? MAIKOETHER ? Still figuring it out. Using interrupt signals rather than polling.