Hello all,

I'm working on an (I suppose) agi system, in my spare time. I will sketch it 
and I'd like to have some feedback from you about what's good and what is 
wrong about it. 
I'm an amateur in ai, but I've read/studied as much as I could. The most 
promising areas, I think, are neural networks, reinforcement learning (e.g. 
R. Sutton), and definitely not: symbolic computation.  

My system/agent design:
The system consists of (internally identically structured/operating) modules 
connected in an hierachical tree structure. The base modules are connected to 
an external environment, virtual or real.
A module gets input, I, from its 'child' module(s), and gives output, O, back. 
Also, the module, if not the top module, gives input, C, to its 'mother' 
module (a fixed part if its 'I'), and gets output, S, back (a fixed part of 
mother's 'O'). The base modules get input from the external environment 
('perception'), and pass output to it ('action'). (All inputs and outputs are 
vectors of bits). 
Also each module gets an external evaluation signal (a real: high = good, low 
= bad), that is passed above recursively (a mother module uses an average). 

Four neural networks (1 or 2 hidden layers) in a module do the following (each 
step/cycle): 
Abstraction:    C,I,O -> new C (C')
Prediction  :   C',I,O -> predicted next value of I             
Action       :  C',S,I,O -> new O
Evaluation :    C',I,O -> expected external evaluation

Training of the networks is done in batch (although online is possible). It's 
done by minimizing an error with gradient descent. (I use a home grown 
inefficient and simple, for me more easily understandable version).
Abstraction and Prediction are trained together, as a whole (recurrent 
network); their error is the difference between the predicted input and the 
real future input. Evaluation is trained with the error being the difference 
between the expected external evaluation and the real external evaluation. 
Action is trained by maximizing the expected external evaluation (If the 
external, calculated with the other networks; or if Abstraction/Prediction of 
the mother module functions well, the error is the difference between C 
(calculated with Abstraction) and S (calculated with mother module).
Action cannot be trained well without the other networks working well. And as 
you can see the training gets different when the mother module starts to 
function.
Also a module cannot be trained properly without one or more of its childs' 
abstraction/prediction functioning well. Without a well working Abstraction 
the system module must give random output (O) to ensure the agent does not 
get stuck in some cul de sac in the environment.

A mother module operates slower than its childs so that it uses about as many 
time on the CPU as them (together). This can be done with multi-threading and 
some timing mechanism.

Why this design?
C can be seen as a kind of memory or abstracted context. C is an abstraction 
outof the flow of inputs and outputs. Abstraction is a process of keeping 
what is important, and removing what is unimportant. But what is important? 
That which adds to predictive power (Popper: the mark of knowledge is 
predictive power). So that's why Abstraction is trained on prediction: to 
ensure C contains the important aspects of the passed experience (lossy 
datacompression).  
C is a predictive representation of state (see also Sutton). The training of 
Abstraction can be seen as concept formation. 
The modules are arranged in a tree structure not only because there are 
multiple input/outout channels to the environment that need to be connected, 
but also because the C's can be seen as states themselves that can be 
predicted with same mechanism as with which they were formed. To use the same 
mechanism makes it possible to view the system recursively. Abstraction after 
abstraction is made until the top level module (where does it end?) has a 
very general and abstract representation of the environment and the agent 
itself, capturing (I hope) the essential working (in interaction) of it. It 
can predict the state of the environment on the long run, but not in detail. 
The lower modules predict more in detail. But the lower modules have a nearer 
time horizon. The top level must be able to see ahead far enough for the 
agent to be able to maximize its evaluation in the long run. Otherwise a new 
module is put on top of it. 
The idea is that action can be taken on basis of C and the latest detail 
information I,O. All the information that is needed (I guess) is there, in 
{C,I.O}. The action of non-base modules can be seen as giving goals (in terms 
of C) to its child systems that they must achieve.   
Action of the top module keeps being trained by the external reinforcement 
signal. One might think of an external S given by the user (and also of the 
user interpreting its C, trying to 'unblackbox' it). 

The reinforcement signal can also be made outof a 'boredom-factor', i.e. if a 
module predicts to well (ad nauseam), its action is evaluated negatively. 
This ensures exploratory behaviour, because the agent will try to be in a 
state in the environment which cannot predict well (i.e. does not know well), 
and then will learn to predict.  
(perhaps this is a bit sadistically, as we know outof our human experience)

Some key ideas according to me:
- use neural networks because they are universal function approximators
- don't make assumptions about the environment (general AI)
- use reinforcement learning because then you don't need to specify how goals 
must be achieved (only known in some, uninteresting, cases), only what goals 
must be achieved
- All the agents cognitive mechanisms must be in service of making it able to 
determine the consequences of its actions in the future
- mind is all about prediction, knowledge is all about prediction (Sutton 
(richsutton.com)/Popper)
- The agent must forget otherwise it will become NP
- abstraction is leaving unimportant things out (lossy data compression)
- abstraction formation is grounded in (detailed) predictive power
- abstraction formation is (can be) a recursive process
- high abstraction makes long term prediction possible, though not detailed
- Use knowledge of the environment to maximize external evaluation in the long 
term
- keep it simple (recursion with buiding blocks, don't optimize performance 
unless fundamental. Not NP is already fine.)

I suppose a lot can be improved. It seems that the same things are done twice 
or more (by Prediction and Action for instance). I doubt the hierachy 
structure (maybe a non-cyclic graph is better?). I have trouble with 
recurrent backpropagation of errors. I have trouble with implementation in 
C++ (or Lisp?) on Linux. Training in batch or online? Of course I doubt the 
basic ideas (that's a reason for this post).
I have some working code of the agent (called Dasein) learning Go, executing 
non-crashingly that is. But I think there were some fatal design flaws on all 
levels. I suppose I can correct them.    

I got my inspiration from neural network theory and Sutton's reinforcement 
learning. I discovered that what I thought were (my) good ideas he already 
thought of, and much better of course.  
The idea that got me working on a system myself is the idea of recursive 
abstraction. I couldn't find something alike anywhere. And I thought it might 
work. That got me the necessary obsession one needs.
I saw that Sutton is also thinking towards recursive abstraction. The term 
'predictive representation of state' is his. He also thought about predicting 
those states (see his latest publications and talks on richsutton.com).
And maybe Mr. Voss and Mr. Goertzel also have similar ideas, and maybe they 
have dismissed them long ago ;-) Or maybe they have much better ideas. (Their 
ideas on their web sites look very promising)

Anyway, I'd like to have some feedback. I'm working on my own, in my spare 
time, with little help from others (not able not interested etc.). And 
although I'm very motivated, obsessed at times, it's very difficult to keep 
the motivation and concentration, especially with a wife and child, a job etc 
etc and a being a generalist liking to read widely about all kinds of 
subjects. A little feedback would help (to continue with concentrated energy, 
or to stop without second thougths).     



Maybe a bit more about my motivation:
Maximizing joy seems the new modern goal for many people in Holland (where I 
live) (and the West in general), after centuries of calvinistic suspicions 
about joy and praise of hard work. Christian religion is fading away, what 
stays is some vague idea that there must be 'something more'.  
Myself being an atheist and physicalist, I don't argue that we must return to 
the old religion. There simply no evidence for God and soul, only evidence 
against. Understanding and accepting that, we cannot return. But also, I 
think atheism and physicalism are complete disasters, because we are left in 
a teleological desert.  What must we do? We can drop dead as a far as the 
universe is concerned, it cannot even be concerned because it is not 
personal. There are only evolving configurations of matter. It all just 
happens. I feel quite unhappy living in such a place. 
The problem of the dead of god and the erosion of the soul are already old 
problems. Existentialists like Nietzsche, Wittgenstein and Heidegger wrote 
about them and about the resulting bottomlessness of life. Tolstoi: science 
is unimportant because it tells us not what to do. Dostojevski: If God is 
dead all is allowed.
Well, then we can choose for ourselves what to do. What we like, what we think 
is interesting, what is fun. It can be seen as a liberation. But 
paradoxically I don't see people getting happier, I see them getting slaves 
of their impulses, failing to get their idea of heaven realised on earth, and 
see them viewing their lives as meaningless and failed, people just go on, on 
some basic survival instinct, afraid of asking deep questions about why they 
do what they do, protecting a core of motivation at any cost. But that core 
is empty. 
I think the grounding of teleology in the world needs to be restored, the 
reunion of 'what is' and 'what ought', as it was united in religion and the 
philosohpy of Aristotle. This is I think The Problem of Modernity, that it 
must solve. Then people can be rooted again in the world, feeling at home.
However, I think there is no solution for human life, at least not with help 
of something far superior in intelligence. Something with a complete as 
possible understanding of the universe, self knowledge and thinking power is 
the best chance on solving the teleological problem. There can be no proof of 
that, but it is the most promising direction I can see. That is why I'm 
interested in agi, and of course ultimately in the Singularity.
If their is no Ultimate Goal known the only goal can be: search for it. 

I suppose I differ in my motivation quite a bit from most other Singulatarians 
(maybe I'm not one?). I doubt the others share my religious temperament, my 
negative motivation, and only some desperate handwaving at positive 
motivation. I'm certainly not a technofile, and I don't share much optimism 
of singulatarian thought. It's just that the Singularity is the only option.
But also, yes, I am very much intrigued by general artificial intelligence, 
and I see a lot of good and beautiful ideas.

On the other hand, I just like to take strawls in a forest (the 'Holzwege' of 
Heidegger), to feel rooted in the world. Leading a stupid SL -2 simple life, 
of a farmer...a hunter-gatherer. But I know too much to do that.

Met vriendelijke groet, bij voorbaat dank,
Arnoud Michel

-------
To unsubscribe, change your address, or temporarily deactivate your subscription, 
please go to http://v2.listbox.com/member/[EMAIL PROTECTED]

Reply via email to