Machine Learning is an extensively algorithm-driven study which makes computer/device/software capable of learning on the basis of their own previous experience and improve the performance of a task. It also gives machines/software ability to analyze, predict and sort huge amounts of data.
Extending human intelligence
When Steve Jobs was a kid, he read a study that measured the efficiency of locomotion for various species. That is, the researchers wanted to find out which animal uses less energy for traveling 1 kilometer. The condor was the winner of this analysis whereas humans’ performance was rather unimpressive, appearing about a third of the way down the list. But then someone had the idea of testing the efficiency of the locomotion of a man on a bicycle. And it turned out that the man on a bicycle blew away the condor, performing with an efficiency completely off the top of the charts. Jobs realized that what makes humans different from other animals is that we are able to build tools that make us better.
Years later, when he started working with computers, Jobs made one of his famous quotes: “Computers are like a bicycle for the mind”. Today, forty years after Apple was founded, computers are indeed dramatically extending the capacity of our brains.
Computers are like a bicycle for the mind. — Steve Jobs
Let me very naively classify the functions of the brain into two groups: memory (i.e., storing information) and intelligence (i.e. doing / computing stuff) . Regarding memory, computers are greatly extending our brains by allowing us to store essentially an unlimited amount of data. The problem that needs to be solved is developing faster methods of storing and retrieving information from such external memory. Computer science has also achieved a great extension of our intelligence. For example, we have mathematical software that allows us to rapidly perform complex calculations.
However, traditional computer science faces a major limitation regarding the task of extending human intelligence: we first need to explain to the computer how to perform the task we want to accomplish. For example, to create a mathematical software, we first must write a program that explains to the computer how to do each mathematical operation. Once the program is finished and installed on a computer, then it can perform those operations much faster than we can. Therefore, computers can only achieve tasks that we can explain how to perform.
Programming people and computers
You can think about programming a computer the same way you would think about teaching a task to a human. For example, you could tell a friend something like, “If the oven’s timer goes off, then switch off the oven by pressing this button”. By doing that, you have “programmed” this person to do something you needed. Programming a computer to do this task would be pretty similar to programming a human. The code could be something like:
if oven.timer_alarm == on:
button.status = pressed
It is just a matter of language. You program people in the English language, whereas you program computers using some programming language.
Programming a computer is like explaining to someone how to do a task. You can only explain tasks you know how to do.
However, what if the task we want to program is a more complex one? Or what if we need to program a task but we don’t even know how such a task is done?
Let’s think about when we teach a kid how to identify different kinds of animals. Unlike the example of the oven, you cannot start describing the characteristics of every animal like: “If the animal is within this range of colors and has black vertical stripes with a slightly elliptical shape and has a nose like… then it is a tiger”. Can you imagine using that teaching strategy with kids? It would be impossible and would take forever. In most cases you wouldn’t even be sure which features of each animal you are using to identify it. Instead, what we do is to show pictures of animals to children together with some specific tips, and this way they unconsciously learn what features are those that identify each animal.
Well, it turns out that if you want to program a computer to identify animals, the only way to do so is to use a programming language to manually describe each animal so that the computer can tell the difference between one animal and another. For the same reasons that you cannot teach children to identify animals by thoroughly describing them, this endeavor is obviously doomed to failure.
The need to make a program that explains to computers how to perform each task is the great limitation faced by traditional computer science programming. It has prevented computers from further extending our intelligence to solve more complex tasks. To truly extend our intelligence, we need computers to accomplish tasks that we don’t even know how to do.
The Artificial Intelligence revolution
Here is where Machine Learning comes to the rescue. Machine Learning is the field that studies how to make computers learn. In other words, a Machine Learning algorithm is a computer program that teaches computers how to program themselves so that we don’t have to explicitly describe how to perform the task we want to achieve. The information that a Machine Learning algorithm needs in order to write its own program to solve a particular task is a set of known examples.
For example, for the task of teaching a computer to identify animals, we will show to the computer a bunch of labeled pictures (e.g. this picture is a tiger, this picture is a cat, etc.), the same way we do it when we teach children. The Machine Learning algorithm will use these samples to identify which are the features that differentiate one animal from another, and with this information, it will write its own program to perform the task of identifying animals. Now you can see how enabling computers to learn and enabling computers to write their own code are the same thing (if you want to read a brief explanation about how Machine Learning algorithms work, take a look at ).
Therefore, Machine Learning is the way to make computers learn how to perform complex tasks whose processes cannot be easily described by humans, or even tasks that we don’t know how to accomplish (e.g. “I want to calculate how many customers would buy this product” or “I want to make this photo look like a Picasso painting” ).