I saw Peter Norvig give a great general-audience talk on AI at Berkeley when I was there last month. A few notes from his talk.

- “We have always prioritized fast and cheap over safety and privacy — maybe this time we can make better choices.”
- He briefly showed a demo where, given values of a polynomial, a machine can put together a few lines of code that successfully computes the polynomial. But the code looks
*weird* to a human eye. To compute some quadratic, it nests for-loops and adds things up in a funny way that ends up giving the right output. So has it really ”learned” the polynomial? I think in computer science, you typically feel you’ve learned a function if you can accurately predict its value on a given input. For an algebraist like me, a function determines but isn’t determined by the values it takes; to me, there’s something about that quadratic polynomial the machine has failed to grasp. I don’t think there’s a right or wrong answer here, just a cultural difference to be aware of. Relevant: Norvig’s description of “the two cultures” at the end of this long post on natural language processing (which is interesting all the way through!)
- Norvig made the point that traditional computer programs are very modular, leading to a highly successful debugging tradition of zeroing in on the precise part of the program that is doing something wrong, then fixing that part. An algorithm or process developed by a machine, by contrast, may not have legible “parts”! If a neural net is screwing up when classifying something, there’s no meaningful way to say “this neuron is the problem, let’s fix it.” We’re dealing with highly non-modular complex systems which have evolved into a suboptimally functioning state, and you have to find a way to improve function which doesn’t involve taking the thing apart and replacing the broken component. Of course, we already have a large professional community that works on exactly this problem. They’re called therapists. And I wonder whether the future of debugging will look a lot more like clinical psychology than it does like contemporary software engineering.

### Like this:

Like Loading...

*Related*

“Of course, we already have a large professional community that works on exactly this problem. They’re called therapists.”

Belly laugh of the day! Thanks!

The issue of in what sense the computer has “learned” a polynomial reminds me of the famous quote by Dijkstra: “The question of whether Machines Can Think… is about as relevant as the question of whether Submarines Can Swim.”

I think the issue about how to think about a polynomial is a matter of different notions rather than just cultures. A function is defined by its values (assuming you take the range to be the image) even if you are an algebraist. However, a polynomial is an abstract object which can define a function given an appropriate domain. So if we would like to be careful, we should call such functions polynomial functions rather than polynomials.

Not prioritizing fast and cheap inevitably makes one’s work purely academic. (Literal and figurative meanings both intended) Capitalism values fast and cheap.

To Yiftach’s point, perhaps you could test how well the machine has “understood” the polynomial by running the machine-generated code on other types besides what it was used to train on. In other words, the machine may have trained on ints, and generated output code for a function which accepts ints, but what happens when you try to plug in doubles, or some user-defined type like “polynomials” or “integers mod 7” for which the operations in the output code make sense?

The idea of debugging as psychotheraphy gave me tingles, reminding me of Dr Susan Calvin, Chief Robopsychologist in Asimov’s Robot stories…