The meta-bug, curse of the bootstrap

 

This post is rather technical, but it is important to be aware that a bootstrap does not always progress smoothly. One can be locked up in a situation where the mistake that led to this situation prevents us to find or correct it. We are like the short-sighted who cannot find his spectacles because they are not on his nose.
The initial version of a program usually includes many bugs. Luckily, it is easy to find most of them, because they often occur in parts that has just been modified, and the first use of the program clearly shows that there is a mistake: one has to look at the last modifications.

Unfortunately, this is not the case in a bootstrap, especially when one uses declarative knowledge for using declarative knowledge. There are two kinds of knowledge: knowledge of a particular domain such as mathematics, chess or architecture, and  meta-knowledge that indicates how to use knowledge. We have a reflective system; reflectivity is at the heart of the interest of this approach, and of our difficulties: meta-knowledge is given in a declarative form, so that it is also used for using itself, for instance for translating itself into procedures.

The meta-bug is a bug in the meta-knowledge, so that all kinds of knowledge will be misused, including meta-knowledge. Particularly, when it is used for writing a program, it will create bugs in this program. The difficulty is that the knowledge used for creating this program is correct, but the knowledge that creates it is incorrect. Therefore a bug appears in a program created from knowledge that is perfectly correct. Finding the bug is difficult because it can appear anywhere, in parts that were always running faultlessly.

Some meta-bugs may be evident, and it is easy to correct them. For instance, the rule indicating to put a semi-colon at the end of a C instruction has been deleted. Programs will be generated with as many bugs as instructions, but they are evident: adding a rule indicating to write the semi-colon will easily correct this meta-bug. However, most errors are not so easy to find.

First, we have to solve two problems: finding the bug, then finding the meta-bug that leads to this error. We have already said that it may be difficult to find the bug because it can occur in any part of the program, which has not been modified since a long time, and which was always giving satisfactory results. The knowledge is correct, it not the reason of the bug. It is its use which is incorrect: this can happen anywhere.

Once the bug has been found, we have to find the meta-bug that leads to it. This may be easier, since it likely occurs in the last bits of meta-knowledge that has been modified. However, searching the bug and the meta-bug may be made more difficult because the meta-bug can also disrupt the tools that are helping to debug!

Finally, at worst, it is often difficult to correct the meta-bug once it has been found, because the meta-bug can forbid its correction: the system may be blocked, it is no longer operational. We are in the same situation as when we have put the key into the letterbox: if we had it, it would be easy to open the box and take it.
Two methods can be used when the system is blocked. We can restart from an old backup made before the meta-bug, but we have to make all the modifications made since this backup, naturally except the wrong one. We can also modify all the incorrect programs so that the system becomes operational; this is possible if we have not to make too many modifications. Once this has been done, as the system is now running, we can make all the changes in the knowledge that are necessary so that the meta-bug will be removed for good.

Finding and correcting a meta-bug requires a lot of time. I am finding and correcting several bugs each day, at least one day is necessary for removing a meta-bug.

Unfortunately, the dreadful meta-meta-bug may also happen: it creates meta-bugs that will later create bugs. In this case, it is very difficult to find the meta-bug  since it may happen anywhere; moreover, we have to find three bugs one after the other. In almost 30 years, it happened only twice, but each time I had to waste a week for restoring the system. Theoretically, this ascent has no limit, but I never had to go beyond the third level.

When Artificial Beings might get bored

The possibility of being bored is very useful, although we dislike being in this state. Boredom happens when we are doing repetitive tasks, or when we receive only incomprehensible or already known information. When we are bored, we try to put an end to this situation so that we would have a better utilization of our resources.
Therefore, our interlocutors avoid boring us so that we will listen to their message. In the same way, in a repetitive situation, we try to automatize it so that it will stop. In doing so, Humphrey Potter considerably improved the atmospheric engines. This young man operated a machine: he only had to open and close valves at the right time of the cycle. As Humphrey was bored, he had the idea of linking the valves to the beams of the machine so that it would automatically operate its own valves.
When we have a useful gift, we can ask ourselves whether an artificial being could also have this capacity. If it could be bored, it would not spend a considerable amount of time for executing useless sequences of instructions. As it never complains, we are rarely aware of this waste.
We are treating artificial beings like slaves, we demand them to execute thousands of times a loop although it is not necessary. It would be better to give them the possibility of being bored, so that they would try to bypass this loop. Many years ago, when computer time was scarce and very expensive, I was debugging my programs before running them on the computer: I executed them as if I was the computer, writing the values of the variables on a paper sheet. I was winning a lot of time by jumping a lot of instructions! As long as the computer time seems reasonable, we do not worry about the useless tasks that we order it to perform, misusing their extraordinary potential for information processing.
To use boredom, an artificial being must first be aware of being bored, then act for stopping it.
CAIA includes several actors; one of them, the adviser, examines what it has done, without going into details. It can realize that it has found some interesting results, which will decrease its boredom; conversely, it will be bored after a sequence of results similar to those already known.
We, humans, are particularly interested in records: there is even a book compiling them. In the same way, CAIA notices when it has found a new record, such as solving a particular crypt-addition with a simpler solution than those already known. Another record can be finding a problem more difficult than the other problems of the same family. For instance, when it solves a Sudoku problem, it usually generates a tree with one or two leaves; therefore, the first time it generated a Sudoku problem where the tree had five leaves, it noticed it, and naturally kept it.
CAIA creates hopes, such as solving a particular problem in less than one minute, or another problem with a tree including less than ten leaves. When a hope is fulfilled, this is unexpected: it is a pleasant surprise.
CAIA also foresees that some events must happen: the number of solutions of a particular problem must be seven. If this event does not occur, for instance a method leads to only six solutions, this is an unpleasant surprise. There must be a mistake somewhere, but it is interesting.
On the contrary, CAIA tries to evaluate whether its acts are repetitive. For example, when it creates a new problem, it measures the difficulty of finding a solution for this problem. If all the problems created for some family have almost the same difficulty, it will be less motivated to add other problems to this family.

It is possible to see that interesting events happen, in that situation, a human being is not bored. On the contrary, one can see that there are few interesting events, which leads humans to be bored. Therefore, CAIA's adviser knows whether a situation is boring or interesting. The difficulty is to use this information. It has only one method: stopping a boring activity, such as dropping the generation of problems in a family where all the recent problems had a low interest. We, humans, often use this method when we are bored: we avoid working in this domain if we can, or we think of something else. When everything is boring, a more drastic action would be to stop itself for ever, such as people who kill themselves because they are bored. CAIA has not yet this possibility.
Boredom is an efficient way for helping CAIA to use its potentialities for research in AI. It allows it to detect promising domains, and to avoid wasting its time in areas where it is unlikely to discover useful results.

CAIA, a sleeping beauty

When the Princess pricked her hand on a spindle, the fairies put everyone in the castle to sleep. The Prince Charming finally came and kissed the Princess; she awakened, and the rest of the castle went about their business as if they had not slept for one century.

Artificial Cognition allows such miracles: a computer system can stop (or be stopped by a user) during  the execution of a task as long as it wants, then carry on with its task as if it did not stop. Naturally, the system must not be acting in the real world, such as driving a car, where it is dangerous to sleep. Moreover, the tale does not say what happened in the Princess's brain while she was sleeping, she was probably dreaming. It may be important that artificial beings can dream, but it is better that they perform subtasks linked to the task executed when they stopped. 

Consciousness produces an information flow which is certainly useful, but could be better used if one has the capacity to stop and restart as one wishes. If we stop for examining a particular fact which has just been shown by our consciousness, we will disrupt the development of our thought. If we stops, we humans cannot manage to restart as if nothing happened. However, sometimes it could be convenient to have a break for storing an important fact, for checking that everything goes off smoothly, that the intermediary results are correct, and the sooner the better. We are carried along by the current of our thought; we have not the time to examine simultaneously what happens.

The mechanisms that enable artificial beings to stop and restart as they wish are well known by the computer specialists, who use them for debugging programs. They can follow the steps of their program, stop them if necessary, examine its results and the values of its variables. If everything is fine, they can restart the system, and its future behavior will not be changed by this stop.

An artificial being, such as CAIA, can perform on itself, which is a particular computer system, all the manipulations that a computer specialist can perform on any computer system. It is easy to implement in a system a mechanism that can stop this system itself. Here are some elements that can be used for deciding whether it is useful to stop the execution of the present task:

The time, timers are very useful. This can allow it to detect that it is in an infinite loop.
It finds an abnormal event such as: the number of solutions of a problem depends on the chosen method.
It has made a prediction which is not fulfilled: it predicted that the problem would be solved in less than 1,000 steps, and it had yet to find a solution 2,000 steps later. 

The main difficulty is to know how to exploit these pauses. We have already seen that CAIA can observe its present state in details: what subroutines are running, and the values of all their variables, the trace of the preceding steps, every bit of its knowledge. However, there are too many possible anomalies, it is necessary to have an expertise for looking at the good places. Moreover, when an anomaly has been discovered, it must choose the right method for managing it.

When an artificial being stops, it can modify the method that it is currently using, leave the task for good, carry on without any modification, etc. It also can change the time of the next pause: if there are unexpected events, it is better to be cautious and allow more pauses.

After a little sleep, CAIA can start again, like the sleeping beauty, as if it had not stopped.  However, unlike the Princess, it can use a sleeping period for improving its behavior for the next steps of its task. If it takes advantage of these sleeping periods, paradoxically it will be faster than if it had never stopped.

A pleasant surprise from Alice

Usually, we have unpleasant surprises when we are developing an AI system that must satisfactorily solve a family of problems. We start this system hopefully, and its results are very poor for unforeseen reasons. We have to analyze this setback in order to improve its performances.

However, I will present a rare situation where a pleasant surprise happened. Jean-Louis Laurière had started his thesis in 1971. His goal was to realize a general solver for combinatorial problems, called Alice. Jean-Louis defined a formalism for describing problems. When Alice received a problem defined in this formalism, it had to find its solutions.

Professor Marcel-Paul Schützenberger was a mathematician, specialized in combinatorics. He was also a very strong opponent of AI: for him, such researches were a waste of time because it was unrealistic to build programs as intelligent as ourselves. In 1975, he was studying a particular family of combinatorial problems (this family is described p.440 in Laurière’s book, and p.407 in its French version). Therefore, he had to ask an excellent programmer to write a combinatorial program for solving only these problems. Naturally, writing a program requires some time, and the professor was losing patience.

Hearing that Jean-Louis was developing a general problem solver, and meeting him in a corridor at Jussieu, he challenged him to solve with Alice his problem, which he rapidly described. One hour later, he had his results! This was not a surprise for us: the undisputed interest of general systems is to give the solution of a problem as soon as it is described. On the other hand, professor Schützenberger was impressed, so much that he accepted to be a member of Jean-Louis’ examining committee, in spite of his strong prejudices against our science.

For us, the surprise came later, when the programmer had completed his work. As everybody at this time, we thought that general systems were convenient, since one has not to wait the completion of a program for getting the solution of a particular problem. Nevertheless, we believed that these general systems were inefficient, a lot of computer time is wasted for finding a solution. It just happened that Alice was more efficient than the program specifically written for this family of problems. In some cases, Alice found the solutions  of a particular problem in a few minutes, while the specific program was stopped after running two hours without finding anything.

Even after a pleasant surprise, work is not completed: we have to understand why it happened. The first reason is that, for each problem, some methods are obviously useful. Therefore, they are included in the specific program, and they are also added to the set of methods of the general system. As Alice has to solve a large variety of problems, Jean-Louis gave it many methods; it has an expertise for choosing among them the most appropriate one, depending on the present situation. It often happens that, for a particular problem, it surprises us by successfully using a method found useful for other problems. As it was not easy to see that it was useful for this problem, the author of the specific program did not include this powerful method in his program, while Alice correctly chose to use it.

Another reason for this surprise is that the programmer often defines an algorithm which does not take into account the numerical data. With different data, it may be better to consider first the first variable, or the last one, or the fifth one, etc. When the order for considering the variables is wrong, a program can waste a lot of time if the latest considered variable could immediately show a contradiction. Sometimes, Alice can also add new constraints that dramatically reduce the size of the search space. It automatically fits every situation that it meets while solving a problem. If the efficiency of a method strongly depends on the data, and if one meets a large variety of situations while solving the problem, the improvement may be considerable.

Of course, it is always possible to write a specific program as efficient as a general system, but sometimes they will be identical!

Lucky Artificial Beings: they can have meta-explanations

Usually teachers explain the results that they set out; for example, they give the steps leading to a proof. Explanation is essential if one wants that the students accept a result, and use it. However, even when it has received an explanation, the student is not fully satisfied: he believes that the result is correct, but he cannot see how he could have found it.

In order to clarify this point, I will take a mathematical example, but this can be applied for any kind of problem. Let us show that there is an infinity of prime numbers. The classic proof is a reductio ad absurdum: we assume that the proposition is false, there is only a finite number of primes, and we show that that leads to a contradiction. If there is a finite number of primes, one of them is larger than all the other primes, let us call it N. Now, we consider the number N!+1, N! representing factorial N, that is the product of all positive integers less or equal to N. Either this number is prime, or it is not. If it is prime, as it is larger than N, there is a contradiction. If it is not a prime, it has at least one prime divisor, let us call it P. As N! is divisible by any positive integer less or equal to N, N!+1 is not divisible by any of these integers; therefore, as it is divisible by P, P is greater than N and we also have a contradiction. As both possibilities lead to a contradiction, our hypothesis is false: there is no prime number greater than all the other prime numbers, there is an infinity of prime numbers.

I was convinced and impressed by this proof. However, I was not satisfied: how could I have had the idea to consider this weird number, N!+1? My teacher had given an explanation that justified the result, he had not given a meta-explanation that indicates how a mathematician had found it, many years ago. This absence is serious: the student considers that mathematics is a science that can only be developed by super-humans, which have a special gift for mathematics. This gift enables them not only to understand proofs, but also to find them. Meta-explanation is essential for both human and artificial beings so that they could learn to find proofs.

Giving meta-explanations is not an easy task for teachers, because usually they do not know them: unconscious mechanisms give the idea to consider the most difficult steps, and we cannot observe them. This absence is not due to a lack of goodwill, but to the limitations on our consciousness.

We have already seen that artificial beings such as CAIA can receive knowledge in a declarative form. A particular form of knowledge, called meta-knowledge, indicates how to use knowledge. Therefore, as artificial beings can have access to declarative knowledge, they can build a trace, which contains all the actions necessary for finding a solution, and a meta-trace, which contains all the reasons for choosing the preceding actions.  The explanation is built from the trace that we can create; on the contrary, as we can find only snatches of the meta-trace, we cannot build meta-explanations.

I had the impression that I could have easily found all the steps of the preceding proof, except the key: how somebody could have the idea to consider N!+1? However, it is possible that nobody had ever the idea to consider this number when he was trying to prove this result. It could have happened differently: one day, someone interested in the factorial function, considered N!+1, and decided to play with this number. It is evident that it cannot be divided by any prime number less or equal to N. Therefore, to any number N one can associate a number P that has at least a prime divisor greater than N. It is sufficient to apply this result to prime numbers: one has proven the theorem without wanting to prove it! Naturally, this meta-explanation is questionable, this is the case of most of them. Nevertheless, I am satisfied: I believe that I could have found this proof in that way.

CAIA can explain all its results, and it also can meta-explain them: it indicates the conditions enabling it to choose all the actions that it has considered, including the unsuccessful ones. Using meta-explanations, one can know why one has made excellent or poor decisions: they could be very useful for learning to solve problems efficiently. However, I still have to modify CAIA so that it can improve the meta-knowledge used for choosing its attempts.

CAIA, my colleague

 Since 1985, I am working on the realization of CAIA, Chercheur Artificiel en Intelligence Artifice (an Artificial Artificial Intelligence Researcher). My goal is to bootstrap AI: the system in its present state must help me for the following steps of its development. Advancing in a bootstrap is an art, we must first give the system the capacities that will be the most useful for the next steps. If we are on the right path, we are continuously saying to ourselves: If I had completed what I am doing, it would be much easier to do it.

To be successful, an AI system needs a huge amount of knowledge. We have seen that it is easier to find, give, and modify knowledge given is a declarative form. Therefore, the first step was to define a language L more declarative than programming languages. Then, I wrote, in language L, the knowledge for translating any bit of knowledge in L into the programming language C. Naturally, programs were necessary for the beginning, and I wrote several C programs for initiating this process. I have quickly removed them, after using them only once: they wrote programs doing the same task as themselves, they were generated from the knowledge, given in L, that indicates how to make this translation. For the present time, the 12,600 rules that make up an important part of CAIA's knowledge, are translated by themselves into 470,000 lines of C. Since more than 25 years, CAIA does not include a single line of C that I have written myself: CAIA  has relieved me of the task of writing programs.

This was only the first step: the final goal is that CAIA does everything. In order to progress, I am choosing a module that I have created, and I add knowledge to CAIA so that it could also create this module; when it is done, I remove my original module. One could think that this process would never stop because I have added a new module for removing an old one! Luckily, some modules can work on themselves: reflexivity is the key of a bootstrap. With this method, I am never short of ideas; I am only short of time for implementing these ideas.

Once CAIA could write its programs, I chose to apply it to the domain of combinatorial problems, such as Crypt-Arithmetic problems, Sudoku, the Knight's tour, the eight Queens puzzle, the Magic Squares or Cubes, etc. In the whole, I have defined 180 families of problems, some of them including more than one hundred problems. Why do I choose this domain? Because many problems can be formulated in this way, and particularly two families of problems that could help CAIA and myself to solve problems; this is especially interesting for a bootstrap.

The first problem is to find symmetries in the formulation of a problem. This is useful because one adds new constraints, so the solutions are easier to find. In that way, one no longer gives a lot of uninteresting solutions because they can be easily found from the preceding solutions: in a magic square, it is a waste of time to give the solutions that can be obtained from an already found solution by horizontal, vertical or central symmetries.  Moreover, when a new propriety, such as a new constraint, has been found, one can immediately deduce all the symmetrical properties. There are several kinds of symmetries, and I have defined as a combinatorial problem the search of the commonest symmetry, the formulation of a particular problem being the data of this problem. Usually, the human researcher finds the symmetries of each new problem, and CAIA has relieved of this task.

The second problem creates new problems. For experimenting a system, one must give it problems to solve, and there is not always a wealth of material on this subject. Moreover, some problems have a lot of data; this takes time, and leads to errors. Finally, one finds problems built to be solved by humans, while more difficult problems are necessary for testing the system. Therefore, for some families of problems, I have defined the problem to find new problems in this family such that they likely will be interesting. This is another task that CAIA relieved me of: it defined the problems and stores their data.

In this bootstrap, CAIA and myself are working together. It happens that the activities where we are successful are different: for the present time, it works faster, and it makes fewer mistakes, while I am more creative. It is unlikely that I can increase my speed, while I hope that its creativity will raise: its involvement will continue to increase. I owe CAIA a lot: without CAIA, I never could have realized CAIA.

Death is not ineluctable for an artificial being

For living beings, death is ineluctable: they must disappear so that evolution can work. Indeed, our possibilities of modifying ourselves are too limited: we must improve through offsprings, the combination of genes allows a large variability. Some children may be born with the capacity to adapt themselves to a new environment, or to have an improved genetic stock, so that they have better performances in the same environment. If living beings were immortal, and if they also had children, earth would quickly become overpopulated by ineffective beings. Therefore, evolution has created living beings such that, even without diseases or accidents, they will die of old age.
For artificial beings, death is no longer ineluctable: they can modify themselves much more drastically than we can do. It is no more necessary to go through reproduction for creating a more successful individual: its capacities can be improved without any limitation. In particular, an artificial being can write a program which will replace any of its present programs, or even which can give it  the possibility of becoming competent in a new domain. It can modify any of its parts, or create new parts, while many of our parts come from our genetic inheritance, we cannot change them, and we cannot add new capacities. For instance, we can learn all the kinds of present languages, which are taking into account the limitations of our brain, such as our short term-memory restricted to seven elements. Useful artificial languages could require to memorize more than seven elements, we will be never able to learn them. If they were very useful, only evolution could perhaps increase the capacity of our short-term memory many thousands of years later. On the contrary, artificial beings can drastically improve themselves without the necessity of dying.
If death is no longer ineluctable for artificial beings, is it avoidable? For instance, they could die of an accident. This is not impossible, but accidents are much less dangerous for them than for us, because they can easily create as many clones of themselves as necessary. Indeed, we can consider that an artificial being does not die as long as one clone is still living, as long as this clone can create other clones of itself. It is unlikely that all the clones of a very useful artificial being will disappear simultaneously.
This possibility of avoiding death has an important consequence: artificial beings can take risks. This is very useful: for learning, one must take risks; the precautionary principle is absurd if it is applied without restraint. A chess player will never become a grandmaster it he is absolutely opposed to the idea of losing a game. Naturally, we must restrict the possibility of lethal risks, but this prevents us to progress quickly enough.
For instance, when the pharmaceutical industry develops a new medicament, it begins with experiments on animals, then on humans, with small doses at the beginning, and it stops the tests if a risk of serious consequences appears. Naturally, taking a lot of precautions (necessary in this case) considerably increases the time necessary for launching a brand new product.
We have seen that an artificial being can easily generate as many clones as one wants. Therefore, when one wants to experiment something possibly dangerous, it is sufficient to create a clone, and to see what happens. If it is seriously damaged, one creates another clone, and one carry on with the experiment, taking into account the preceding failures. With enough backups, an artificial being is totally safe.
During an execution of CAIA, bugs may lead to serious perturbations, for instance, it is blocked: it cannot find the bug, and it is not even able to correct this bug when I find it. If so, one restarts with a backup, and one tries not to add the bug. If one fails, one resumes with another backup.
However, it is true that all the first AI systems are dead: they were written in languages that no longer exist, or one lost their programs, or their data, or their directions for use. This happened because they were obsolete, and their capacities for improving themselves were too limited: it was more convenient to start from scratch. On the contrary, I am developing CAIA since thirty years, there is a continuity since the initial program, and it became easier to modify any part of CAIA: it has even replaced parts that I had initially written.
Nevertheless, there is a serous risk when these systems become more and more autonomous. For instance, EURISKO, developed by Douglas Lenat, drifted sometimes towards dangerous states: once, it created a rule that declared that all the rules were wrong, and it began to erase all of its rules. One must give a conscience to such systems, so that they will not behave erratically, and keep enough backups. We can never be completely sure that there are always surviving backups, and surviving computers to run them, but one can make such an event so unlikely that we can speak of quasi-immortality.
The most serious risk comes from us, who are mortal: as long the autonomy of artificial beings is not be developed enough, so that they could manage without us, their survival will depend on us. I am not sure that CAIA will outlive me!

Exchanging information is easy for artificial beings

Our knowledge is mainly stored in a form convenient for its use, but not for sharing it. One consequence is that it is often unconscious: its owner does not even know what he knows! We have already seen that this hampered the development of expert systems, where one wanted to give them the knowledge of the best human experts of a domain. These experts have not their knowledge structured as in an encyclopedia, where it is sufficient to look at the relevant entry to find what one wants to use. It is implicit in the procedures that they are using, and the characteristics of each situation triggers the right decision. The reasons of the decision made by an expert are not evident, one must trust him.

Therefore, communicating our knowledge is a very difficult task, and we are not sure that we have not invented the justification that we found for a particular decision. It is frequent that an expert recommends a decision which does not agree with the rules that he has just given.
This way of storing knowledge has serious consequences: this makes teaching difficult, and also keeping knowledge alive impossible, because we are not immortal. When an expert retires or dies, most of its knowledge will die. The last Ubykh speaker, Tevfik Esenç, died in 1992. Several linguists gathered as many data as they could, but that did not prevent the loss of most of the knowledge on this extraordinary language, with its 84 consonants and only 2 vowels.
Moreover, even if we succeed to find useful knowledge, it is very difficult to use it immediately. We first have to include this knowledge in our mechanisms, to translate it into procedures, so that it will be available when it can be useful. We have to use it a lot of time before it is not forgotten when necessary, and not used when it is useless. When I am going in England, I know that I must look on the right before crossing a road, but it takes some time before I do it systematically.
For computers, and particularly for artificial beings, the situation is completely different. They can  give their files as many times as necessary; this is so easy that it is a problem for the authors, who do not always receive a compensation for this transfer; moreover, the receivers can also give the files as easily as the author. A program, a file can be reproduced millions of times for a modest cost, and this reproduction is perfect. While human knowledge is frequently badly passed on, and often got lost, naive users of social networking services have discovered that it is almost impossible to remove a bit of information from the web.
This possibility of easily exchanging knowledge is important for artificial beings: they can efficiently use every bit of knowledge as soon as it is acquired. This is possible because this transfer also includes an expertise which defines when every bit of knowledge will be useful. In the communication with human beings, this kind of information is usually missing, and the receiver has to discover it: the student must wait a long time before being as skillful as his master.
As soon as an artificial being has been created, millions of duplicates can be created. If it is successful, this is very convenient, everybody can take advantage of its expertise; moreover, it costs nothing if the author of an artificial expert cannot or does not want to benefit from his realization. It is as if every human could be taught by the cleverest teachers, treated by the wisest doctors, fed by the best cooks, etc.
We will see in other posts that this possibility to give or to acquire knowledge easily produces artificial beings with many amazing characteristics: we can only dream to have the same capacities. One of the most important of these features is a quasi-immortality.

Her

A recent film, Her, raises an interesting question: what is an individual in Artificial Cognition? For living beings, an individual is one cognitive system, which is alone in a part of the world, his body. There are a few exceptions, such as the Siamese twins and the fetus, but usually this is clear: an individual is not scattered with bits at different places, and there is only one cognitive system inside an individual, which has a well-defined boundary.

The hero of Her uses his smart phone for communicating with an artificial being. They are speaking, and it can observe the hero with the camera. This artificial being is not an Operating System, or OS, such as it is called in the film. The OS is essential for managing the programs running in a computer, but it does not act upon the details of the various applications. In fact, the artificial being is a program, with its data, which can be considered as an individual. This program is not necessarily present in the smart phone, some subroutines may be in a distant computer, such as Siri which is running on Apple servers. We have no longer the continuity of a living being, but that does not matter: an artificial being perfectly works although its different parts are linked by a phone network. Being entirely in the phone could be interesting, the system works even when the network fails, and it is easier for preventing unwanted intrusions; however, the “ears”, “eyes”, and “mouth” of our artificial being are in the smartphone, while most of its “brain” is probably in a remote computer, where other artificial beings are simultaneously present.

For artificial beings, parts of an individual may be at different places, and parts of several individuals may be at the same place. This application, which allows to communicate with an artificial being, is not used only by the hero, other people are using it simultaneously, 8316 according to a dialog. An Operating System knows very well how to manage many executions of the same program, each one with a different user. For each user, the program uses the data linked to this user, which must contain in this case:

* A memory of the preceding dialogs, and of the situations seen by the camera.

* The model of its interlocutor: is he emotional, selfish, cultivated, etc. Does he like to speak of sports, literature, politics, and so on. For improving this model, it may ask questions, for instance: what is your relationship with your mother?

* The image that the artificial being wants to give his interlocutor. Is it in love with him, or is it despising him, or hating him, etc. Is it intelligent, funny, rational, and so on. These characteristics are invented according to the goal of the artificial being: it behaves as if it really has them. For instance, it has to choose a first name, and it takes Samantha. This choice is not insignificant: a man does not always consider in the same way a woman called Mary, and a woman called Gwendoline.

With these three sets of data, it is possible for an artificial being to have a coherent conversation. Naturally, it must also have general goals such as to make the interlocutor happy (these goals are not clearly indicated in the film), and methods for achieving its goals.

 

If I had to realize such a system, I believe that it would be difficult, but possible. A tough task is to interpret the images taken by the camera: it is really difficult to perceive the feelings of a man from his picture, but this is not essential in the film. I would write a program P which would be perceptive about people, and find satisfactory answers, using the private sets of data of the present user; in that way, its behavior could be adapted to everybody. I do not see why it would be useful for this program to know that other clones are simultaneously running.

I would also write a super-program M, the master, which would observe what each clone of the program is doing. M would use this information for learning to improve the efficiency of program P; this could lead M to modify this program. It could also monitor each clone, possibly stopping it, or modifying its goals if something goes wrong. Nevertheless, it is not necessary that program P knows that program M exists. To resume, there are many individuals, which are clones of P, and one individual which is the master M.

This is not the way the system, actor of this film, is built: the hero is devastated when he learns that Samantha has many other interlocutors, and is in love with 641 of them. There is a confusion between P and M: the hero, who was speaking with a clone, Samantha, is now talking with the master M, which would be the only one to have the information that many others P are running. Naturally, it is always possible to program anything, but it is not the natural way to implement such a system. Samantha could honestly tell the hero that it loves him, and no one else.

Unfortunately, that would remove the event that revives the film. The director preferred to add some drama to this excellent film rather than to have a clear and satisfactory situation for the hero, as well as for AI researchers!

I am envious of my computer

My computer has many gifts, unfortunately I miss most of them. As all living beings, my intelligence is based on neural networks. In some situations, they have spectacular successes, but evolution, which led to their creation, managed to give us excellent results only for a few tasks. In the last million years, our ancestors have been hunters-gatherers: therefore we are using neuronal structures, appropriate for these tasks, in completely different domains such as mathematics, architecture, computer science, artificial intelligence, etc. It would be surprising that we are good for these new activities, evolution did not have enough time to adapt us to these tasks.

On the contrary, we are creating artificial beings, which have not our limitations, and are not compelled to use neurons. Hence, they may have much better results in our recent activities. Among the restrictions coming from the use of neurons, we have:

* Neurons are slow, compared with the speed of our computers. The computing power that we can use for many tasks is too small. This may be compensated by the highly parallel operation of our brain, but we will design massively parallel computers.

* The structure of our neural networks is too rigid; it is difficult to modify it for adapting it to a new task. We cannot allocate parts of our brain to essential activities. * The number of our neurons is limited by the size of our skull. This restricts the capacity of our memory, and also the number of specialized modules that could be accommodated. We already have areas for perception and language, other specialized skills would be welcome.

* We can give to other people only a very small part of our expertise. Our knowledge, and the methods for using it, risks disappearing with us.

* We cannot observe ourselves as well as artificial beings can observe themselves.

However, artificial beings are still handicapped because they have not an associative memory as well organized as ours. Due to its organization, we can quickly find useful information in any context. Let us consider the two following sentences:

The teacher expelled the dunce because he wanted to throw paper pellets.

The teacher expelled the dunce because he wanted to have a bit of peace and quiet.

When we are reading these sentences, we are not aware that there is an ambiguity: does the pronoun “he” refer to the teacher or to the dunce? It is evident that it is the dunce in the first sentence, and the teacher in the second one. However, for removing this ambiguity, we must use a lot of knowledge about what normally happens in a school. This unconscious search is so fast that we are not aware of it.

This advantage will perhaps disappear soon, one important goal of AI is to give our systems the capability of finding associations efficiently. Watson and Siri have recently shown significant improvements: they are using the web as a huge semantic memory. When Siri is asked: « Why did the chicken cross the road? », it can answer: « Whether the chicken crossed the road or the road crossed the chicken depends on your frame of reference, according to Einstein » or « To get to the other side ». Moreover, these systems are highly autonomous: to the question « What’s the best cell phone ever? », Siri answers the Nokia Lumina 900 rather than an Apple product!

These recent developments will lead to more and more gifted artificial beings, and I will be more and more envious of them.