in a way which allowed algorithms/programs to reason about it represent the second generation of AI. At
the heart of such approaches were increasingly sophisticated approaches for representing and reasoning
about knowledge to solve tasks/problems which required such knowledge. Examples of such sophistication
include the use of first order logic to encode knowledge and probabilistic representations to capture and
reason where uncertainty is inherent to the domain.
One of the key challenges that such systems faced and addressed to some extent was the uncertainty
inherent in many domains. Human beings are relatively good at reasoning in environments with unknowns
and uncertainty. One key observation here is that even the knowledge we hold about a domain is not black
or white but gray. A lot of progress was made in this era on representing and reasoning about unknowns and
uncertainty. There were some limited successes in tasks like diagnosing a disease, which relied on leveraging
and reasoning using a knowledge base in the presence of unknowns and uncertainty.
The key limitation of such systems was the need to hand compile the knowledge about the domain from
experts. Collecting, compiling, and maintaining such knowledge bases rendered such systems unpractical.
In certain domains, it was extremely hard to even collect and compile such knowledge (for instance,
transcribing speech to text or translating documents from one language to another). While human beings
can easily learn to do such tasks, it's extremely challenging to hand compile and encode the knowledge
related to the tasks (for instance, the knowledge of the English language and grammar, accents, and subject
matter).
Human beings address such tasks by acquiring knowledge about a task/problem domain, a process
which is referred to as learning. Given this observation, the focus of subsequent work in AI shifted over a
decade or two to algorithms that improved their performance based on data provided to them. The focus
of this subfield was to develop algorithms that acquired relevant knowledge for a task/problem domain
given data. It is important to note that this knowledge acquisition relied on labeled data and a suitable
representation of labeled data as defined by a human being.
For instance, consider the problem of diagnosing a disease. For such a task, a human expert would
collect a lot of cases where a patient had and did not have the disease in question. Then, the human expert
would identify a number of features that would aid making the prediction like, say, the age of the patient,
the gender, and results from a number of diagnostic tests like blood pressure, blood sugar, etc. The human
expert would compile all this data and represent it in a suitable way like scaling/normalizing the data, etc.
Once this data was prepared, a machine learning algorithm can learn how to infer whether the patient has
the disease or not by generalizing from the labeled data. Note that the labeled data consisted of patients that
both have and do not have the disease. So, in essence, the underlying ML algorithm is essentially doing the

