CS 372 (Artificial Intelligence) Fall 2004
Week3 (Due 9/20) Reactions & Thoughts
Ioana Butoi
I am a little bit skeptical about Genetic Programming. Genetic Algorithms seem just more tangible, and more realizable. For me it seems that evolving a program requires more attention than evolving a neural network. In the GA one only needs to worry about numbers, definitely not structures. I understand that trees are used to avoid loops, but still, a program is a complex structure. You cannot just put parts together and hope the result would yield a working program. Imagine that the parts of the program were lego bricks. GP seems like letting a kid play with these bricks and hope that maybe somehow he/she will be able to “build” a working program.
Talking about neural networks, what would be the advantage of evolving a neural network over training one? It seems that a GA is able to search through a broader space, but in the same time a GA has more parameters. I can see how the number of nodes on a particular network layer can be decreased, but can it also be increased? Can we have a gene with a varying number of weights?
Andrew Cantino
Our discussion of NNets and GAs was excellent! I'm excited to get involved in writing/working with these, especially the combined technique that uses GAs to evolve good NNets. In high school, I made a science fair project where I evolved 'creatures' made out of masses and springs that could move around on the computer screen. The system used an iterative vector physics simulator (Hook's law for springs, normal force floor friction, air friction, gravity, Newton's laws, etc.) to provide a 'world' for my 'creatures' to evolve in. I was inspired byAfter Thursday's lecture, I think I better understand some of the flaws in my high school project. At the time I was aware that because I was only allowing a single creature to survive to asexually reproduce, I would often get stuck in local minima. I think I better understand that phenomenon now. I should have allowed multiple creatures to reproduce into the next generation, with some sort of roulette wheel algorithm for selecting them. Also, it would have been interesting to try crossover, although deciding how to merge creatures would have been difficult because they were represented purely as sets of masses and springs.
Anyways, I'm enjoying the class -- and looking forward to applying GAs and NNets to robots and AI. As a project, I might be interested in implementing my own neural net, since I feel like I would learn a lot from actually writing and training one myself. Would this be a realistic or useful project? Perhaps I could combine it with some other project to make my NNet control a robot or work with pryo in some way?
Audrey Flattes
Having done GA evolution I'm finding a little hard to understand and visualize how you could do that on what seems like a much larger level. The idea of machine evolution is interesting and I think that when I consider AI I don't really think about asking a machine to mimic that aspect of human life. I can somewhat understand that appeal in evolving the wall-following robot, because in my mind if you can evolve the robot to reach the point of completely this simple task even though we could just have programmed it from the beginning, by allowing evolution to occur to me it also signals that evolution may possibly occur to a point that outlasts the programmer. But I think the thing that keeps me from buying this hook line and sinker is that I simple don't think that it can be done. In a way I don't think evolution is a simple as we would like to program it to be. After reading and thinking about this I find myself again getting caught up in terminology, "learning", "evolution", I think that if you look hard enough your bound to find learning and evolution in anything. So where does our hope that these things exist end and the reality begin?Christina Florio
Maybe I am missing something from the reading, but I do not really understand the point of machine evolution. I do see that programmers are trying to imitate human evolution, but isn't their process break some rules because it is so structured? In other words, is a fitness function similar to how humans evolve in any way? I think the example also makes me a little wary of machine evolution. How can you compare human evolution to trying to spend most of your time walking against a wall? The book's example makes me question machine evolution because it seems possible to solve this kind of problem through straight and simple programming. Which also makes me wonder whether machine evolution was created just to show to people that machines can behave like humans, that they can “think”, and nothing more. And if this is true, then it seems to be forcing the fact on people that AI does exist.
Kathleen Maffei
The thing I find most interesting about neural networks and genetic / evolutionary programming is that the problem doesn’t have to be solved first, nor does it have to be solvable at all. We only need to know what we want it to do and what information we should probably give it. Of course, those kinds of programming require their own kinds of problem solving – it’s not that it’s the easy way out – but it does mean that the programmer doesn’t have to decide how the resulting program will meet its goals. This would seem to be optimal for some applications where the problem, itself, isn’t very well understood. Experimenting with neural networks and evolutionary programming would seem to be a way to expand what we know about even commonplace algorithms, as they just might turn up some interesting approaches to problems we currently consider thoroughly investigated and resolved.
Sara McCullough
I am also very interested in neural networks and genetic programming. I agree with Kathy about the interesting thing about genetic programming being that the outcome is unknown at the start of a project. Last semester in my emergence class, I remember being quite surprised sometimes about what evolved from a genetic program. I think experimenting with neural networks and evolutionary programming is such a great way to come up with new problem solving ideas or algorithms. I was reading an article about genetic programming that stated that there have been 15 instances among a GP research group in which their programs have produced solutions to problems that duplicate a patented 20th century invention, 6 instances in which the program did the same for a 21st century invention and 2 instances in which the program came up with a new invention. I think that is a pretty amazing feat and leaves a lot of hope for genetic programming to solve many of the world's problems. The possibilities seem endless! Genetic programming is definitely something I am interested in learning more about.
Ben Root
Genetic Algorithms is definitely my favorite topic so far. Taking the idea to genetic programming is very interesting. My main line of thought has been concerning whether closer approximations to the ‘’mechanisms’’ of genetics within a cell would have clear benefits over the approximations used right now. For example, there are interesting mutations that can happen to chromosomes that aren’t just changing a single bit in a bit string. There are inversions, where the tip of one chromosome detaches and re-attaches in the opposite direction.
I’d like to think about what other biological processes can be incorporated into computers. Considering the neural net and genetic algorithms, perhaps there are other types of signaling which go on in the body which are overlooked. An interesting example of this is pheromone trails that ants leave when they find a food source which directs the other ants in the colony to follow the trail to the food. Each successive ant that finds the food at the end of the pheromone trail adds his own trail which in turn draws more ants. This is a positive feedback loop which causes more and more ants to find the food. The more ants that find the food, the more ants that look for the food, etc. This type of feedback is used by Google to analyze web pages. Google searches for the web pages that have the most people link to them (the most ants have left their pheromone trail), and returns those links first.
I was reading a cool page on
Ant Colony Algorithms
Sandeep Singh
Everyone seems to agree that genetic programming and genetic algorithms are two of the most interesting topics discussed thus far. The idea that the program(s) evolve and continue to reproduce until a higher fitness level is attained is one that is both interesting and novel to me. It was only after I had walked out of class did the idea of encoding a neural net via genetic programming finally hit me. Even though it seemed a bit arbitrary, the more I thought about it, the more feasible and reliable it appeared to me.
Nilsson presents the programs as a tree with nodes where the internal nodes are the functions and actions and the leaf nodes are either constants, actions or functions that require no arguments. With these trees, he demonstrates how a mother and father program can join at a randomly selected crossover point to produce a child program. I don’t know if there was something I missed in either the reading or the lecture, but this causes me to question how efficient and strategic the ‘randomly’ chosen node is. Would it be in greater interest to somehow find a better a node at which a crossover can be made so that the subsequent generation would be more fit as opposed to one that was created at a random node? I guess it is possible that through numerous iterations (‘learning’) of picking a random node would a well fit generation be produced.
Ben’s response had brought up an interesting area concerning ants and they way they use pheromones to signal other ants to follow suit. I too believe that could be something interesting to implement into machine and S-R agent learning.
I found the following site to be very helpful in getting a better understanding of how GP, GA and AI work and how they are incorporated into one another:
http://www.geneticprogramming.com/Tutorial/index.html
Darby Thompson
I look at Neural Networks as a way to build complicated functions from the knowledge of a set of inputs and their corresponding outputs. This in itself sounds pretty simple (couldn’t any mathematician calculate it given enough time and computational power?) and not necessarily very useful, however at second glance it seems like it would be a fantastic tool to discover functions and therefore the relationship between events in many areas of science such as physics (especially where the relationship is not linear or even parametric to a low degree). It’s been a long time since I took a physics class, however I can remember experiments where tons and tons of data was produced and we could plot complicated graphs of the inputs and reactions however without hours and hours of computations and equation solving we would not have a function to plot that would produce the correct data. Another great thing about Neural Networks is the abstraction and generalization that it provides, along with the surprising results when we use a trained Neural Network on some inputs that it has not been trained on.
For example, last summer Ioana wrote an ‘avoid obstacles’ behavior for the pioneer simulator. The robot trained itself while roaming around the world when it was going forwards. Once the learning had finished, the robot successfully avoided many obstacles, staying a specified distance away. However, when the robot moved too close to an object and was closer than the distance that it had been trained on, it decided to backup. This behavior had not been taught to the Neural Network and was very interesting to watch.
The difficulties in using Neural Networks is that we still do not have a great idea of what sizes we should make the hidden layer and what Beta and Epsilon values we should use for learning. This I find very frustrating. To create the most accurate Neural Network you might have to try hundreds of different combinations of learning values and hidden layer sizes.
As for Machine Evolution, I must agree with Christina that it doesn’t entirely make sense to me to waste time programming a machine to evolve at every step or to simulate evolution. Why waste time writing an algorithm to evolve the wall following behavior to a certain generation if you can just program that generation behavior yourself now or use a Neural Network to perfect the behavior?
