Primary goal: To attain immortality by coding up an AI with all my thoughts, beliefs and values to be me after I die.
Secondary goal: To set myself up as world emporer using an army of robots, colonise space and have an awesome DVD collection.
Tertiary goal: To aid humanity... using an army of robots.
Step one: Make a fish. Make a very simple 2-D world with replenishing food. The fish needs to move and eat to live. The AI (a fish) will have basic sensors and a way of moving. This is a simple but first good step. The AI learns passage of time, motives, controlling stuff (in this case, its tail and mouth), remembering stuff.
Step two: Make a smart fish but still in the same simple 2-D world. The fish will need to be able to make higher level abstractions of the world. It should be able to construct any concept that a human can. Enrich its world a bit with objects, goals and maybe a need to make and use higher-level concepts. Perhaps explore the idea of giving the fish commands and hints so that it understands interaction and language.
Step three: Enhance the world. Make it 3-D and introduce physics. Give the fish brain a dog's body with legs, mouth (i.e. grabber) and more sensors. Perhaps experiment with other bodies, such as those with wheels and arms.
Step four: Make many dogs. The AI needs to learn to interact with others of its own kind to achieve goals, perhaps even developing its own language.
Step five: Actually build a physical body. Get it to wash dishes, fetch newspapers, do my housework.
Step six: Sell them. Become insanely rich. Enslave humanity and then eat cake and watch DVDs.
An AI would be easiest to make if it could be self-funded.
Ideas for selling an AI:
An AI would have a similar structure to a human brain:
http://en.wikipedia.org/wiki/List_of_regions_in_the_human_brain
Multi-valued logic could be used. Each "thought" is a statement that has a certain amount of truth associated with it. Aspects of truth of a particular statement include level of truth (0.0 -> 1.0), certainty of truth (0.0 -> 1.0), usefulness (0.0 -> 1.0).
The level of truth is the amount of truth that can be applied to a statement. For example, referring to a chair, the statement "this is a chair" is likely to be quite near 1.0, whereas while referring to a tree stump, the level of truth would be lower. This concept of level of truth may or may not lead to a valid logical system; usually examples refer to a particular object's classification rather than to complex logical expressions. In such a case, the level of truth refers to the likelihood of something belonging in a particular set.
The certainty of truth of a particular statement is the error margin present. If a statement has been made with no accepted facts to base it on, the certainty would be zero. If a statement can be verified using accepted facts, then the certainty of truth would be higher.
The level of truth and certainty of truth can form two dimensions and can be plotted as a line on a graph having level and certainty of truth on its axis.
Alternatively, probabilities could be used, with confidence intervals (e.g. P(x) = 0.7 +/- 0.2).
The AI forms a database of statements. Each statement has metadata about it such as it's level of truth, certainty etc. These form the beliefs of the AI. Other metadata associated with each statement will include links to other relevant statements (for searching), how that statement was derived and when.
Metadata about a statement could include:
Metadata about a statement would be stored in other statements that can also be reasoned about.
Examples of deduction include:
The AI will need to do classification. Many statements would be of a the form a(x)^b(x)^c(x)->d(x), where a, b, c and d are properties of x. An example of this statement is "if it walks like a duck, talks like a duck and looks like a duck, then it's a duck". The classification algorithm looks for patterns and similarities between experiences to be able to re-use knowledge and apply aspects of one experience to another. TODO: how is this classification algorithm going to work?
Reflection is important. The AI must not only be able to work with direct statements, but also use the same algorithms it uses to draw conclusions from statements to work with metadata about those statements. The AI must be able to reason about it's own thinking processes, thoughts and thought patterns.
An evolutionary algorithm being applied to logical statements must have some heuristic for determining the usefulness of a statement. Each statement would have metadata about it's usefulness. Usefulnes would again have level of usefulness and certainty of that usefulness - i.e. how useful a given statement is, and how certain I am of that "usefulness value" I've assigned to that statement. One method of determining usefulness to increase the usefulness of a statement every time it is successfully used to attain an end goal (and thus a reward). Useless statements are pruned and forgotten. New statements are also made and evaluated (with usefulness set to 0.5?).
The AI should be persistent. It's memory is retained indefinitely and it applies knowledge learned from past experience to its current situation.
Doing things: evaluating certain special statements will cause the AI to perform that action. The AI should evolve the level of usefulness on statements to make the evaluation algorithm only evaluate these statements when the AI has chosen to do so. Initially, the AI will look like a spasming duck, but will eventually evolve rules that give it some volition and control over what it does.
It would be good if the AI could also be manually coded in a way that also made it a logic-based programming language.
The AI needs to be able to draw conclusions. Examples include:
Example: sort this list: [ a d e b c ].
Objects: ListItem, List, Movement
Properties:
position(ListItem, position),
timeOf(Movement, time),
before(Movement, Movement, bool),
size(List, size),
sorted(List, bool),
greaterThan(ListItem, ListItem, bool),
Actions:
swapPositions(Item, Item, ..time?..).
The AI would start by making random theories:
goodMove( move(before(a, d, false), ...), 0.5).
goodMove( move(size(l, N),sorted(...), 0.5).
...etc...
These theories would be manipulated using an evolutionary algorithm. The swapPositions() action would be randomly evaluated. When swapPostitions() is evaluated, the List is changed. When a reward is gained (when the "orderedness" of the list increases), it reenforces the steps of evaluation that it made to achieve that state.
The AI would also add its own predicates and theories. In this way, it can define new concepts for itself.
The AI could iterate over the scientific method - make hypothesis, gather evidence, draw conclusions. It would use statistics to determine probabilities of hypothesii being true.
I need to master Prolog.
What is needed is a "Turing Complete" sort of system for knowledge representation. A knowledge representation system is "Gulik complete" if it can represent anything that humans could express, and be able to be worked with (by rewriting terms) to potentially produce the same conclusions that humans would. Substitute "intelligent being" for humans if you want. How would you express this concept in more detail? How would you prove it?
http://en.wikipedia.org/wiki/Dempster-Shafer_theory
http://en.wikipedia.org/wiki/Epistemology
http://en.wikipedia.org/wiki/Bayes%27_rule
http://en.wikipedia.org/wiki/Bayesian_inference
http://nars.wang.googlepages.com/gti-summary
Cédrick Béler is porting NARS to Squeak: http://blog.summer.squeak.org/2008/05/opennars-port-to-squeak-using-seaside.html
Wang's Ph.D thesis on NARS has the most info, and valuable references to other research. Start reading at page 100 (chapter 6), then go back for theoretical explanations.
Artificial general intelligence Research Institute: http://www.agiri.org/wiki/Main_Page
Singularity Institute: http://www.singinst.org/
An afternoon's light reading: http://www.yudkowsky.net/bayes/bayes.html
http://www.opencog.org/wiki/Main_Page [opencog.org]
http://www.agiri.org/OpenCog_AGI-08.pdf [agiri.org]
http://justingibbs.com/how-to-make-singularity-bearable-in-its-infancy [justingibbs.com]
http://www.innergybv.biz/blog/?p=175 [innergybv.biz]
http://ieet.org/index.php/IEET/more/goertzel20080620/#When:22:49:00Z [ieet.org]
http://xlaurent.blogspot.com/2008/06/opensim-for-opencog.html [blogspot.com]
There's a number of GSoC projects for OpenCog currently underway also:
http://code.google.com/soc/2008/siai/about.html [google.com]
http://aima.cs.berkeley.edu/ai.html - more links than I could ever imagine.
(Comment from somebody on Slashdot:)
Page Information
|
Wiki Information |
Recent PBwiki Blog Posts |
I think the Deep Belief Networks of Hinton et al are way ahead of Numenta.. in that they are real science with measurable results that has been reproduced by multiple implementations. The 2006 paper that started it all and Hinton's presentation on google video:
http://www.gatsby.ucl.ac.uk/~ywteh/research/ebm/nc2006.pdf [ucl.ac.uk]
http://video.google.com.au/videoplay?docid=228784531481853811 [google.com.au]
A formal analysis:
http://www.cs.utoronto.ca/~ilya/pubs/2007/inf_deep_net_utml.pdf [utoronto.ca]
Application to natural language processing:
http://www.cs.swarthmore.edu/~meeden/cs81/s08/DahlLaTouche.pdf [swarthmore.edu]
http://www.machinelearning.org/proceedings/icml2007/papers/425.pdf [machinelearning.org]
Reproducing Hinton and extension to and evaluation in other domains:
http://www.machinelearning.org/proceedings/icml2007/papers/331.pdf [machinelearning.org]
Use in Computer animation of facial expressions:
http://aclab.ca/users/josh/downloads/pubs/23_Susskind_Hinton_Movellan_Anderson.pdf [aclab.ca]
Most impressive:
http://www.cs.utoronto.ca/~ilya/pubs/2007/aistats_multilayered.pdf [utoronto.ca]
A C++ implementation (although it has much Python love):
http://plearn.berlios.de/ [berlios.de]
So yeah, there's some pretty good demonstrations of how powerful DBNs are.. Numenta is lagging behind.