This is my first post in a series of posts covering AI for Developers. In this post, I will cover a better definition of AI for developers.
It still amazes me how much confusion and misinformation is still out there around something as basic as the definition of Artificial Intelligence.
I made this post for you as a developer. In this post, I will cover a deeper definition of AI from a developer viewpoint. This definition of AI is usually not covered in a typical discussion or post. Most posts covering the definition of AI are too high level or too deep in CS theory.
If you're not a developer, you can still gain a lot form this post as I will not get too technical.
At the end of this series, you will have an entire picture of AI and be able to understand how it will impact you as a coder. More importantly, you will have avoided the traps of misinformation coming from both proponents and detractors in the hype space.
Avoid The AI Hype
I can usually tell within minutes of speaking with a developer if they're AI literate. I find that developers will either parrot popular media hype and exaggerate its capabilities and potential. Or developers will dismiss it all-together as hyped driven by evil big business and ignorant media.
The root of this misunderstanding stems from blind spots to all the areas of AI. It also ties to not understanding the real problems AI can solve and can't solve.
Something as simple as knowing all the different areas of AI will give you the confidence to answer the question of “What exactly is AI?”. This will also help you navigate your continuous learning in the subject.
When I first started my journey into AI, I could only find very deep academic explanations of AI or high-level lay-person versions. There was nothing geared to someone with a developer background. Something that explained AI in the context of coding and algorithms would have helped me get a jump start.
Instead, I struggled through and had to dive deeper into the academic theory to pull out what I needed and relevant to me.
In this post, I'm not going to get academic. The last thing I want to do is get too much into the weeds and that will overwhelm you.
Instead, I will strike a balance and keep concepts at a level that might be too deep for a layperson but deep enough to give you value as a developer.
If I stopped you on the street and asked you what is AI?
Think about what your answer would be. Write it down and at the end of the post compare what you wrote to your new understanding of AI.
You might have a definition of AI on the tip or your tongue that you can ramble off when asked.
I know I was not sure for a long time and would give confusing answers if asked.
Aside: One of the things that I did that helped me understand AI was the Udacity nano degree. If you are curious about Udacity, I wrote a review here.
If you like visuals I also created a mind map of all the topics covered in Udacity Nano degree. Download them here. (Update: it has changed a little since I took it, they split it up into two courses)
Developers Almost Understand AI:
When I ask developers what they think is the definition of AI, I get some generic and nongeneric answers.
I sometimes get a one-liner like "Software behaving like humans where we can't tell the difference". The "Turing Test" comes up many times.
A branch of computer science dealing with the simulation of intelligent behavior in computers. The capability of a machine to imitate intelligent human behavior
Sometimes I get answers from developers where they call out a method like Neural Networks or Machine Learning.
Or developers will use specific examples like self-driving cars or image recognition.
These examples are a little more detailed than a generic answer but far from a true understanding of the definition of AI.
A big mistake I see is that many developers have a one-sided view of AI. Many developers tend to ignore an entire side of AI which is core to many advances in the field.
I will explain this more later on in the post.
So why is getting the definition of AI straight so important?
Well, you need to understand what it is before you learn how to use it or judge its value.
If you want to be an AI developer/ practitioner, you will have to go deeper than a trivial understanding of the scope of AI.
At a high level, one reason its so difficult to define AI is because software that we consider AI is constantly changing.
When examples change, it makes it difficult to explain an abstract concept because we can't depend on the same examples over time. Many examples of AI are constantly changing over time. We can’t depend on the same examples to help with picturing the concepts in a more concrete way.
To explain this more, I will start with a basic question...
Is a Chess playing game really AI?
I love playing chess and when I was a kid a little electronic board that I got as a gift astonished me. This electronic board would play Chess against me and I could not beat it at anything above level 6.
Although this was fascinating and I wondered how developers programmed it, I never related it to AI. AI was not the hype back then. It was during the last part of the AI winter so I assumed whatever was under the hood was a piece of software and not considered AI.
Back in the day, when computer scientists created a Chess playing agent, they considered it in the realm of AI. Even when this cheap game board was available to me, DeepBlue was making headlines by beating the world champion. Only then did the label of AI start to resurface.
That labeling of Chess playing agents as AI may have faded over time. Before the AI hype, If you were to stop a person on the street and ask them how the game does it, they would have said it's some sort of algorithm. They would have most likely not used the term AI.
Today, AI is on people's minds because of all the hype, there is a higher chance they would reference AI.
So you might be asking, is the definition of AI really just based on how people perceive it?
Short answer is ... yes.. sorta
It's All Just Different Levels of AI
The algorithm used in Chess playing agents is called “Adversarial Search”. This algorithm is taught today in graduate level AI courses. The same algorithm is also used for more advanced and popular examples of AI like AlphaGo.
Back then Chess playing agents were not as powerful. Engineers had to supplement the algorithm with large endgame combination libraries. Adversarial search is the exact same algorithms used in more advanced systems like DeepBlue.
Today AlphaGo is the new cool AI and has way more sophistication and processing power. But it's still a set of algorithms based on the same theories used years ago to build Chess playing agents. There is a lot more to AlphaGo than adversarial search, I will not go into that here.
Many experts say that what relaunched AI and ended the AI winter was not necessarily new theory but advances in compute power.
Here's another question...
Is Navigation AI?
Another example is pathfinding with navigation software like google maps, would you call that AI?
Probably not. But again, the core algorithms used are the same core algorithms used in AI.
You might have noticed a common thread here around the concept of search and AI. And you are right if you noticed that. Searching for end games in Chess or searching for the best route on a map are all search algorithms and can fall under AI depending on the "Hardness" of the problem.
Search is one of the main blind spots developers usually don't associate to AI.
I know I never associate search to AI before I learned more about AI and I bet you didn't either.
I will explain how search and AI are related next.
Computationally Hard Problems
So, let's think about this, if they're all the same algorithms what makes something AI vs not?
It comes down to what we as humans consider to be difficult tasks or problems and only solvable by intelligent beings like us. So if a computer starts to solve these same difficult problems, it must be intelligent like us.
This idea of difficulty is usually referred to as "Computational Difficulty" and AI is used to solve what are called “Computational Hard Problems”.
NP-Hard is a term used to describe a problem that is Non-deterministic and only solved in Polynomial-time. Basically, any problem that can't be solved explicitly and requires a large number of algorithmic iterations to find an answer or the best possible answer is NP-Hard.
A simple way to understand what NP-Hard means is to put our developer hat on and imagine a problem that requires a recursive loop over a large search space. If we use a brute-force way, this problem will require a large number of loops to reach a solution and also a very large memory footprint to reach the solution.
When you try to run a brute-force solution, it will take an impractical time or memory to solve.
AI is a way to Avoid brute-Force
If we use AI, it could add intelligence beyond a brute-force method and solve it in a practical time.
Sometimes adding intelligence to the algorithm is a technically simple process and this is where our perception of it being AI starts to get blurry.
As these computationally hard problems are solved with AI and we start to understand how it could be solved with software, we start looking at the next level of hard and stop referring to the current problem as computational hard. This leads us to stop referring to the software, that solved the old problems, as AI and just refer to it as software.
So the best way to explain AI is with general areas of problems like “Adversarial Search” vs using fixed examples like “Chess playing”.
This is more of technical explanation and why it makes explaining and defining AI at a lay-person's level difficult.
Example of NP-hard problem: Isolation Game
The Isolation Game is a game on a square box grid where each player takes turns like tic-tac-toe. Each player is limited by moving only to a square adjacent to the last move they made and not into a spot previously occupied by either player. The first player to run out of moves, or get isolated, loses the game.
This is a super short explanation, you can google it to learn more about how it works. The point I want to make is that the number of moves for each player decreases by 1 at a minimum after each move.
Let's say you have a board of 5x5 square board. If you had to write a program that had to take into account each possible move you could compute the total number of possibilities like this:
First move would have 25 possible moves since its 5 x 5 = 25 squares. Second move would be 24 possible moves. Third would be 23 possible moves and so on.
So to account for all possible combinations, you have to multiply each level from 25 to the last move of 1
This would look like : 25 x 24 x 23....... x 3 x 2 x 1. This calculation is referred to as the factorial of 25 written as 25!
If you put that in a calculator it would come out to be 25! = 10^25 (WOW! big number). This is how many loops your program would need to execute to track all possible moves.
Size and Time Craziness:
Here is where it gets eye-opening.
If you used the latest multi-core gigahertz processor that can compute at 10^9 operations per sec, you could compute the time it takes like this :
10^25 operations divided by 10^9 operations/sec = 10^25 / 10^9 = 10^16 secs
If you convert 10^16 secs to years that will give 317,097,920 years !!!!!
This clearly shows how a brute-force approach to NP-Hard problems is a futile effort. And remember, this is just for a 5x5 board, what happens if the board gets bigger? craziness that's what...
Now, if you added more intelligence beyond brute-force to this algorithm, you could reduce the compute cycles needed to analyze the board. This may lead you to find a solution or near solution and could officially label it AI.
This is what the techniques in "Adversarial Search" do, they add intelligence to reduce cycles and make it possible to get a solution within a practical time.
It's really that small of a difference between AI and not AI. I will explain the different scales of AI in the next section.
Different Scales of AI
There's a scale used in academia to map out levels of intelligence. From the image above, you can see the lowest type of AI called "Reflex" vs the highest level on right side "Logic"
Reflex agents are in a category which makes it easy to classify any "If..Then" software as a form of AI. This really bothered me when I came across this definition of AI because I write software for a living and never called myself an AI developer.
But technically, if I added intelligence to an algorithm in the form of IF...THEN statements, I could technical say a made an intelligent reflex based agent. It's a weak reference and stretching what most people would call AI.
On the other hand, many reflex agents were implemented in robotics in manufacturing. Factory robots are more likely to be called AI despite the robot having simple reflex algorithms in the software. It could be in the form of - if the sensor detects a part on the belt, then initiate arm to pick it up.
There are many more advanced robotics with more than reflex agents but it's hard to tell what's driving them. So, many observers tend to lump all robotics under the umbrella of AI.
This is also where many systems like Chatbot platforms get labeled AI by the vendors and evangelists trying to ride the AI hype.
Most Chatbots are just IF...THEN systems with a thin layer of NLP (Natural Language Processing) slapped in front of it. Because the NLP portion is another form of AI related to Neural Networks (I will get to NN's next), the Chatbot systems are labeled AI.
Most Chatbot implementations end up with disappointing results. This is due to the majority of the value being driven not by the small layer of NLP but by a larger Reflex agent behind it. [you can read more about my CES 2018 review of disappointing AI here]
There are more sophisticated bots out there. These bots are not only reflex agents but learn as they go. These bot use Machine Learning which I will cover next...
Why is Machine Learning (ML) not on the AI scale?
You may have noticed something missing here on this scale. Look again and notice that ML is across the bottom of the scale. What gives?
ML doesn't really sit anywhere on this scale, it's really an entirely different paradigm. Since ML agents are not programmed with complexity but fed data and build internal levels of complexity, it could behave at any scale of sophistication.
Agents built with ML are good at classifying, clustering and splitting information. Because the more sophisticated ML/DL agents can do this at a level that surpasses humans, ML, as a category, is considered AI all on its own.
It can be used at the left-hand side of the AI scale to feed a reflex based agent. For example, an NLP based agent can break down sentences for a reflex agent chatbot to do its thing.
ML can also feed clustered data into a more complex logical agent on the right side. For example, an ML agent can analyze maintenance data and feed a sophisticated expert system agent to make recommendations for a technician to take actions on a piece of equipment.
AI and ML are terms that get conflated a lot. ML is what most developers think about when the term AI comes up.
It is also why many developers write it off as hype. Developers misunderstand how ML and Deep Learning (DL) can be used and only hear about the hyped use cases that are usually full of bugs and yielding disappointing results.
I will cover ML in the next post in this series since it's a large topic and deserve focus.
It's clear that AI is not just a single sentence definition. The tech industry uses the term Artificial Intelligence to describe different technology approaches to computationally hard problems.
To complicate things more, the definition of AI is also a moving target and constantly shifting. As the existing techniques fall out of favor for the newer algorithms, new examples of AI are born and old ones declassified from AI.
ML is AI but AI is not only ML. This is a big mistake most developers tend to make. They conflate the definition of ML and AI. Some of the impractical/limited use cases highlighted in ML/DL are big reasons developers write AI off as hype.
If you're a developer and want to start learning AI, you need to have a good and clear understanding of all the techniques under the AI umbrella. You also need this understanding before you judge it and write it off as hype.
Once you have this clear understanding you can then look at each area in detail and focus in on one AI area at a time.
One of the biggest issues preventing a traditional developer from learning and jumping into AI is the overwhelm of academic and theory-based information. If you're able to overcome this information overload, the concepts behind AI are easy for any developer like you to learn. You don't need a Ph.D. to figure it out.
I hope this article gives you a clearer picture of the definition of AI. I do believe that understanding AI is much simpler than developers make it out to be. More importantly, it's a huge opportunity you should not pass up.
In my next post on this series of AI for developers, I will cover Machine Learning in more detail and cover the biggest mistake you can make as a developer relative to AI.
Hi, I’m Nader Kutub. I’m passionate about finding ways to productize emerging technologies like AI, AR/VR, and Blockchain. Follow me as I cut through all the hype and build real products that customers really want.