Software development industry analysis by Larry O'Brien, the former editor of Software Development and Computer Language
Sunday, July 09, 2006

Exploring Artificial Intelligence is an exciting prospect for non-professional programming (it's a quite rare part of professional programming). Rather than criticize others for being over-reaching in their 3-month long projects, I asked myself what project would I tackle if I had 3 months, a copy of Visual Studio Express, and wanted to produce (with at least 50% chance of success) a "cool" application that helped build enthusiasm and explain some concept in AI?

It's a hard question.

It's difficult to think of something that is both hard enough to take 3 months to do in a prototyping, non-deliverable manner (assuming that you don't have to learn the technology and assuming that you don't have to care about deployment and hardware and graphics and graceful exception handling, etc.) and simultaneously reasonably achievable (that is, not requiring some "a miracle happens here" serendipitous breakthrough in the course of development). I think that this "achievability chasm" is actually worth reflecting upon as one of the reasons that AI is languishing: you can learn the algorithm and do the canonical textbook sample but convincing yourself (and others) that the technique will yield real-world value requires a commitment (more than 3 months) that very, very few people have the resources to attempt.

Some things that I wouldn't do:

  • Recreate a classic experiment. This wouldn't take 3 months.
  • A workbench. This was a tougher one: a workbench for developing fuzzy logic or exploring evolutionary computation is something that you could make some serious headway on in 3 months. But, in terms of exciting others, workbenches don't cut it. There have long been, for instance, workbenches for neural networks and, as valuable as they might be to experienced practitioners, I think that newcomers don't respond to them in the way that one might hope.
  • Hard-coded game AI. For instance: "Write the best damned squad tactics mod for your favorite FPS." The thing is, the goal is to build enthusiasm and excitement for some legitimately non-mainstream technique, not to write a couple thousand lines of imperative code that momentarily impress. Not that game AI is off-limits, only that simply slogging away with top-down implementation does not meet the goals.

I thought about the problem both in terms of algorithms / technologies we consider "AI" (e.g., neural nets, evolutionary computation) and functions (machine sensing, learning, manipulating). I eventually mind-mapped several ideas:

Test Jeff Hawkins' (On Intelligence) Architecture on Tic-Tac-Toe

Hawkins' theories have appealing characteristics, but it needs to be tested on a humble task. He details his proposed cortical architecture well enough that if it works as he says, you should see unique pattern recognition even if you implement it with a classical training algorithm. The challenge I propose is the rotation-invariance of tic-tac-toe: any learning algorithm that can learn that the rule is "if the first play is in a corner, play to the opposite corner," without being exposed to that in the training set or having rotation hard-coded would powerfully validate the algorithm.

Evolvable Artificial Life in the CLR

This probably breaks my "no recreation of classic experiments" rule (ref. Tierra), but it would be interesting to write a genotypic-phenotypic system that generates valid IL. This would allow for experiments in artificial life within the safe confines of the CLR.

That is, the odds of a random bunch of bytes being interpretable as a valid computer function is extremely low. That makes it very difficult to explore machine-generated functions. However, if what you generate are "known valid" terminals and branches (essentially, a tree), you can then see if various evolutionary models generate complexity.

Fuzzy Logic Workbench

Definitely breaks my "no workbench" rule, but fuzzy logic just screams for the type of 3-D visualization of response manifolds that would be relatively easy to do in WPF.

Webcam-Based Weather Recognition/Prediction

A program that can look at many outside-pointing Webcams and determine whether it's sunny or cloudy, raining or snowing (good challenge for neural nets). Use geotagging to correlate Webcams. Use weather station information to gather learning data. Can a Webcam in Montreal predict tomorrow's weather in Boston?

What Makes a Flickr Photo a Favorite?

A good challenge for machine learning techniques. Search for correlations in the tags. Do basic image processing (color harmony? contrast? edges? skin tones?).

Offline Voice Recognition in Noisy Environments

I submit that the premise that voice recognition should be focused on realtime transcription is flawed. For one thing, composing by continuous dictation is very hard (see Recording in Thoughts). For another, when I'm sitting in front of my computer, I'm willing -- nay, eager -- to use the keyboard and mouse; it's when I'm in a mobile context that I want to use my voice. And, in the mobile context, what I'm interacting with is a small device: a cellphone, PDA, or digital recorder.

Even though some programs allow .WAV file input (Naturally Speaking 8 ), the underlying processing is still realtime (and, last time I checked, single threaded). This is foolish! I would love to take a crack at processor- and database/Internet-intensive voice recognition. For instance, rank every word-pair alternate via their Google distance (the # of Google returns for the word pair); use WordNet to create alternate parse trees from alternates; apply multiple noise filters to the input to see if the recognition changes; use the database of prior recognition for a dictionary, etc.

Note that I'm not talking about the actual transformation of a sound file into a text alternate -- leave that to the existing, pretty easy-to-use APIs. I'm talking about primarily about intense post-processing (and, for the application of filters to the .WAV file, pre-).

For a short project, the focus would have to be very tight. There are two holy grails for this type of voice recognition: voicemail and in-car dictation. My idea would be the recognition of one- to two-sentence task-oriented utterances: "Pick up bacon at the store," and "Call Bob back." 

Generating Narratives

My hunch on consciousness is that it is a semi-continuous narrative whose form is generated by relatively hard-coded rules that interact with a "grammar organ" and whose subject is focused by subliminal processes controlling attention and intention. Obviously, I'm hand-waving huge problems relating to these subliminal aspects, but I think that between WordNet, Wikipedia, and Google, there's a real potential for generating complex narratives, even while punting on the underlying intention. In other words, I think that you could at least win the Loebner Prize...

An Evolvable DSL For Poker AI

The program GS2 is favored to win the AAAI Computer Poker Competition in a few days. GS2 apparently dynamically develops its strategy based on game theory. An evolvable DSL that described poker strategies would be fascinating.

Evolving Teams for Fantasy/Rotisserrie Leagues

One of the nice things about fantasy baseball/football/etc. is that you have a task that's driven essentually by statistics and chance, so you have a good chance at creating a system that could reliably beat poor human players. The task here would be to create a Learning Classifier System from which you could extract "good" rules.

Autonomous Blimpbot

Robotics are the new personal computers. If I had the soldering skillz, I'd love to create a self-directing robotic blimp: start with a remote-controlled blimp with a mounted camera, hack a digital controller ("miracle happens here" for me, but for other people, I'm sure it's do-able), and go forth.

Search
About Larry...
Flickr photostream
Subscribe: RSS 2.0 Atom 1.0
Popular Articles
Programming Sabre with Java, C#, and XML
Genetic Programming in C#
15 Exercises To Know A Programming Language
Top 10 Things I've Learned About Computers From the Movies and Any Episode of "24"
Recently Published Articles
HI
KonaKoder
Categories
Archive
Admin Login
Sign In
Toolroll