Thursday, May 15, 2008

Where to Simulate Behavior

In this post I am going to describe how behavior does not have to be simulated on the surface; it can be simulated beneath the surface through the interaction of lower level components to produce the desired behavior.

This is most evident in the real world. The real world is built on top of real things, which are themselves built from smaller things, which are built on even smaller things, and so on, possibly to infinity, but more likely ending with strings. For instance, you are made of organs, which are made of cells, which are made of chemicals, which are made of atoms, and so on. And each of these exhibit a behavior which can be simulated in software if its behavior is sufficiently known and software engineering techniques exist to simulate them. While it may not be the case that behavior at all levels can be perfectly simulated, lets assume for my arguments that some day it can be mastered.

Following the example of simulating you, we could attempt to write software that behaves exactly as you do. But we can also write software that behaves exactly as all your organs do, connect them exactly as they are connected in your body, and we will have created something that collectively behaves exactly as you do. We could also write software that behaves exactly as all the types of cells in your body do. Then we could put these cells together exactly as they are put together in the organs in your body. Then connect these exactly as they are connected in your body, and we will have created something that collectively behaves exactly as you do.

This is quite an interesting revelation for me with important implications on how behavior can be simulated. Instead of attacking a complex problem head on and recreate it in software at the top level, if you know details on how the subsystems work and can sufficiently recreate them in software, you can write software to simulate the behavior of lower level components and then link them as the real lower level components are linked to produce the desired top-level behavior.

This introduces a new problem for designing software when this approach is taken. The problem is how to connect and combine the lower level components. This may be more complex than writing software to simulate the top-level behavior. A prime example is in simulating the human brain. People have very good models of neurons and can create software the behaves very close to the real thing. But the wiring of neurons in the brain is so complex nobody has connected digital neurons in such a way that the human brain is simulated through simulating and connecting digital neurons.

But the brain is not a nearly random mass of neurons. While the brain is nearly completely made of neurons, it has been found that neurons form specific components that perform specific functions that are then combined to form higher-level components and so on. Based on my basic understanding, neurons form cortical columns that perform specific functions such as recognize patterns and make predictions. Then these cortical columns form levels of cortical hierarchy that generalize information information going up the hierarchy and localize information going down the hierarchy. Then these levels of cortical hierarchies form functional systems of the brain such as the vision system, auditory system, etc. And finally these are combined to form what we experience as consciousness. (note that when I have been talking about the brain, I have been focusing on the neocortex, which is the brain of our brain where real intelligence occurs).

Based on this structure of the brain, we can attempt to write software to simulate any of these components of the brain such as the cortical columns or levels of the cortical hierarchy. But again, with the brain, it is so complex and so little is known, this is very hard to do. And even when moving up to higher level components it is exceptionally difficult to be able to put these components together to form what we call the brain.

I am still hanging on to the idea that any behavior at any level can at least some day be simulated sufficiently in software, but this is not the case today. But there is another option for simulating behavior when the complexity at the highest level is beyond the capability for direct simulation. If lower-level components are sufficiently known, they can be simulated and combined to form the top level behavior. But there is a trade off, it can be just as hard, if not harder, to combine simulated components than it is to simulate at a higher level.

The real point I am trying to make is that real-world behavior is driven by a hierarchy of components, each of which exhibits behavior that when sufficiently known can some day be sufficiently simulated in software. When attempting to simulate something like the human brain, there are several layers of the hierarchy that can be simulated, not just the top-level of the brain or specific lower-level components such as neurons. There are several layers above and below the actual neurons that exhibit behavior that might be simulatable in software. And when attempting to solve a complex simulation problem like simulating the brain, don't lock yourself into the obvious paths. Look for and try to understand the hierarchy of components and find the level that make sense for the problem at hand. Some lower-level components might be unnecessary to simulate while some higher-level components might be too complex to simulate. Know that options exist and explore them.

A few final closing questions to clear up some words I've used.

What is behavior?

Behavior is observable information. It can be observed via direct human observation or measured via instrumentation. There may be more going on under the hood of the behavior, but I don't think it matters. If we are trying to simulate the intelligent behavior of the human brain, why should it matter if or how our artificial brain thinks to itself? If for all externally observable and measurable reasons it behaves like a brain, I don't think it matters what happens on the inside if our only goal is to simulate the intelligent behavior of the human brain. However if you are trying to simulate every neuron and every synapse then it does matter how it works on the inside. This could be the case if you are trying to understand the human brain and/or apply knowledge learned from the simulated brain to the actual human brain.

The point is that when only the top-level behavior is of concern, there is no need to simulate, in software, at any lower level unless a higher-level behavior is too complex or there is something to be learned by lower-level behavior. Because once you simulate, in software, at a particular level, the lower levels become irrelevant and do not exist in the simulation.

What does it mean to simulate?

I'm really using the word simulate in two ways. I have mostly used it to describe the process of creating software that is supposed to act like whatever you are trying to make it act like. In this case the software is directly simulating the desired behavior. This may or may not be the top-level behavior. It is just behavior that is being simulated in software.

The other way I use the word simulate is to describe the end simulation, regardless of whether it is being directly driven by software or whether it is being driven by the interaction of lower-level components. I have heard this called an n-order simulation, or when n > 1, emergent behavior.

Thursday, April 17, 2008

A Rare Doctor's Proof

I've been watching a lot of House and Mystery Diagnosis lately and came up with this (weak and not very scientific) proof about doctors.
  • Doctors are human
  • Doctors are bound by the capacity of humans
  • Humans have a limited capacity for memory
  • Doctors have a limited capacity for memory
  • Being able to make a diagnosis requires memory
  • Doctors have a limited capacity for diagnosis
  • Doctors can only diagnose what they know
  • Doctors are unlikely to make a diagnosis they have not yet encountered either in a textbook, paper, or clinically
  • Doctors are less likely to encounter rare problems
  • The rarer the problem, the rarer the doctor
  • The rarer the problem, the less likely a correct diagnosis
What does this mean? I guess most importantly, don't get born with, or contract, a rare disease or illness. And if you do, you might have a tough time finding a doctor that won't write you off and tell you there's nothing wrong with you because they can't figure it out.


p.s. I had stubbed this up and sat on it for almost a month, only now to finally polish it up a little (and I mean a little) and post it.

Monday, March 03, 2008

More Publishers Phase Out DRM on Audio Books

"The trend will allow consumers who download audio books to freely transfer these digital files between devices like their computers, iPods and cellphones — and conceivably share them with others. Dropping copying restrictions could also allow a variety of online retailers to start to sell audio book downloads".

I'm posting this because I made an earlier post about how I started using Audible. I've so far purchased and listened to 10 audio books from Audible since June '07, and have been mostly happy. The only gripe I have with Audible is the DAMN DRM. A big part of reading books is sharing them with friends and family. You can do it with the dead tree versions, but not with Audibles'. It feels like I don't actually own the book, even though I paid for it. When I tell someone I read some book (that I actually listened to in audio form from Audible), I feel bad because I can't lend it to them because of the DAMN DRM. I'm being alienated by Audible, and my friends are being alienated by me. It is also a pain to shuffle around my various audio players and computers. At least they let you download books you purchased from their website as much as you want. Hopefully Audible/Amazon will free their audio books from the grasps of that DAMN DRM.

read more | digg story

Labels:

Thursday, February 28, 2008

Patent reform coalition aims to abolish software patents

A coalition of patent reform advocacy groups has launched a new project that aims to challenge the legality of software patents.

read more | digg story

Wednesday, February 27, 2008

Why isn't there an Intellectual Property Property Tax?

A great article discussing the social impact of intellectual property rights conflicting with social value.

read more | digg story

Thursday, January 03, 2008

TeleJamming

So, I came up with this idea, it's called TeleJamming, which is when you play music with other people when you're not physically with them, from possibly distant locations, using a computer and the internet. I'm not quite sure of the usability and quality we could achieve using today's technology and average internet connection speed, but it could work, at least in theory.

Here I'll outline the initial technology design for enabling TeleJamming. Everything is based in an application that must run on your computer, be connected to the internet, and be able to listen to your instrument. The interface will closely resemble a digital mixer. It will take audio input, both directly from your instrument input and from other players. It will allow you to adjust levels, record, and playback. And it will allow you to listen, in real time, to other players.

There will be one person playing the role of producer, and zero or more persons playing role of player. The producer has control over the mixer, including levels, recording, and playback. The role of producer may be passed to a player, but only one person at a time can be a producer. A player simply plays their instrument.

There will be 3 basic modes of operation; jam mode, record mode, and playback mode. In jam mode, all players will be able to hear each other. This is primarily to synchronize playing, and is not used for recording purposes because it is in a low quality audio format because of bandwidth limitations. In recording mode, each player's computer will record their own audio stream in a high quality audio format and transfer it to the producer after recording is completed. Playback mode is similar to jam mode, but a recording is played back from the producer which is heard by the players.

In jam and playback mode, the SIP prodocol with a high quality audio codec will be used in a way similar to a teleconference bridge. Video could also be used over SIP, but might not be possible because of bandwidth limitations and the importance of the high quality and low latency requirements of the audio channel.

There are also features that could be added to allow multiple players on the same computer or to allow players to record their portion ahead of time and can be used by the producer during live recording.

One major barrier of entry could be that each player must be able to capture their instrument's audio on their computer. This is not always an easy task and usually requires more equipment than people usually have, such as a microphone or a quality recording device.

This is not meant to replace studio recording. The primary use, as I see it, is in jam mode. What I think is great about it is it will let you connect up with old friends who moved away or allow you to collaborate with people you would never be able to play with in person. I think the technology is all there, the only real new part is the use of VoIP to interact in real time with other players.
My Photo
Name: Joe Monti

I can has blog.

Barack Obama Logo
Joe