On Mon, 2007-07-09 at 21:12 -0700, David Doshay wrote:
> I also think that it is not a bad thing to have our knowledge set
> "start conflicting" with itself. That is the nature of life and the
> nature of Go. It is well known in learning theory that a child builds
> models of the world until they have too many inconsistencies,
> and then spends some time pretty confused and less adept than
> when just a little younger, but then reformulates something in
> their heads and then abruptly become more adept. I do not see
> that our programs should be different.

But there is a mechanism for doing so in the human brain.  I am not
opposed in any way to self learning or even human assisted learning that
is self-correcting in this way.  But that's not how it works in our
programs.  The real issue to me is that knowledge engineering, the way
it's done in computer go program is just an ugly hack.     

What really irks me is that in most peoples minds, that is considered
the "elegant" approach - hard coding tons of fixed "knowledge" into the
program.  Nothing could be farther from the truth,  this is a dirty
shortcut, a hack.   There is nothing elegant whatsoever about  having a
huge database of patterns that tell the program what and what not to do
- then calling it "smart."   

The reason UCT/MC is elegant is that it has a built in mechanism to
discover truth for itself.   It may not be the best way and perhaps
there is something better but at least it is a try.    In a lot of ways
it mimics the human thinking process.   The MC play-outs is a crude
substitute for human experience (the experience is gained on the fly)
and UCT tree is a substitute for reasoning about characteristics of the
position, what does and doesn't work.  

If someone were to create a strong program that was free of all domain
specific knowledge, it would be an incredibly elegant piece of art.
If someone were to create an equally strong program full of pattern
based rules and regulations it would be a vulgar beast - a brute force
monster.

If you can imagine a program with a self-learning mechanism, one that
could take knowledge provided by you and I and make some sense of it -
actually understand it and modify it when appropriate,  then you would
have something beautiful - but that's not the way things currently work
with the heavily knowledge engineered programs. 

It's the difference between giving a man a fish or teaching him to fish
to use a well known analogy.   A pattern based program is like supplying
a man with lots of fish,  a UCT program is like teaching a man to fish
for himself.

I would like to say I'm not opposed to having knowledge explicitly coded
into the software - I'm speaking mostly philosophically.   The analogy
is learning from a teacher and if your teacher is smarter than you it is
foolish to reject his advice.  If you are dying of hunger you should
take the fish.   Sometimes we acknowledge the role of advisers and take
their advice even if we don't understand it.   However, if possible,
it's better if you understand for yourself.  

Have you ever driven up to a stop-light that was stuck on red?   How
long will you wait there?   At some point you will break the rules
because you know something is wrong with the rules in this case.   This
is not the way in knowledge engineered programs - they would wait
forever at the light. 
  

- Don


_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to