Non-Determinism, My Friend
Code either works, or it doesn’t. This is a lesson that every programmer learns early.
Sure, there are shades of gray. You can have code that runs but produces wrong results, or code that produces correct results 99.9% of the time, but fails in that last 0.1%. But, working vs not-working is still a good summary. The non-negotiable part of our job is making sure that our systems stay on the working side of the dichotomy.
One side effect of this requirement is that we learn how to think precisely. Everyone who goes deep into computer science or engineering goes through a stage where they try to debug their own thoughts and the thoughts of people around them. We become irritating pedants until we get over it. We start to re-appreciate the fuzz and the ambiguity that keeps things humming along in life. Ambiguity can be a feature. It keeps possibilities open until we have to nail them down and decide what will really happen.
When you have an engineering background, AI is maddening. You start by writing prompts that are terribly precise — almost like code, but then you forget some punctuation, or misspell something and you discover that it works anyway. The current batch of LLMs are so good at discerning meaning from context that I suspect that most people will drop punctuation from their interactions with them entirely. Punctuation might just be the set of ticks we’ve put into writing to deal with the fact that we don’t know how well our readers can follow context.
Postel’s Law (the Robustness Principle) is a cornerstone of design thinking. It can be paraphrased as “be conservative in what you send, be liberal in what you accept.” AI systems are very liberal in what they can accept. It seems that they place where they need help is in being very constrained in what they produce. If it is code, it should be code that is secure, error-free and precisely satisfies our intentions. That precision doesn’t just magically appear. It needs to be inferred by the system from its training or it comes from us.
When I was a kid, I read a science fiction novel about an AI that became sentient. When humans really wanted to communicate with it precisely, they used Loglan, a spoken language with precise semantics. The novel is fiction, but Loglan is real. It was designed in 1955(!).
I don’t think that we’ll end up with a modern Loglan, but I do think that we’ll find very precise ways to communicate with LLMs during systems development. The best candidates today are the languages that we have that do have precise semantics — specification languages and high-level programming languages. They don’t fully solve the problem. LLMs produce output non-deterministically. When we like the output we call it a creative solution. When we don’t, we call it an error.
Fine-tuning systems to have better fidelity to our specification languages could help. We can also use those specifications as checks on the output or as input to other validators. The alternative is endless, intensive human validation of systems.
On Wednesday, May 22nd at 12:00 PM, Eastern Standard Time. I’m running a free seminar on issues related to code and AI.
There are limited seats available.
Bring yourself and your questions.
Sign up here:
https://www.eventbrite.com/e/where-ai-meets-code-tickets-900086933247