Abstraction and Reasoning Challenge

Kaggle recently announced a competition on AI of a building a system that can think and solve analytical reasoning problems just like a human being solves riddles. Following is the link of the challenge.

I went through various notebooks published by the users on this challenge trying to achieve the solution by using one of the existing python libraries. Some even spoke about creating a “Domain Specific Language”.

So far, the AI systems we know is capable of solving problems which it has already seen. But in this case we are expecting the system to solve problems which it has not seen before.

For eg: If I ask a high school kid to solve the following problem

1=5

2=10

3=15

4=20

Then What is 6 = ?

Any kid who is doing atleast average in Mathematics will answer with 30. Because the kid has actually figured out that the input is multiplied with 5 to get the output. This shows that human brain will react to new problems by finding the relative problems and its solutions it went through earlier.

But as I told earlier, today’s AI systems are not efficient to solve these kind of problems. So, how do we solve this?

Here is my approach.

Firstly, we are going to build a machine that is going to behave like humans.

Instead of calling this building a machine we should think that we are raising a machine from zero like we raise a baby after it is born. We teach everything we know and it goes to school and it learns many things gradually. I am going to use the same approach.

Building from the scratch

Since analytical reasoning could be anything from numeric to analogy to verbal. But only if he knows numbers he would be able to solve arithmetic reasoning problems and should know a language and its vocabulary to solve verbal reasoning. I thought to raise a machine by adding basic to complex numerical capability.

Automatic Arithmetic Reasoning:

I started to code in python to achieve this so that when I scale, it would be easy to reuse python frameworks.

I wrote a simple program that will derive the relationship between two numbers and does it iteratively for many set of numbers and there by saving the results in memory.

If one of the relations (adding with 5) matches with other relations in the same iteration, it is considered that the relation is the formula to derive the result. So, whatever the test data is, the result will be exact as it has derived the formula to get outputs.

For eg: Take the earlier example of 1 = 5, 2 = 10… the relationship between two numbers is nothing but the multiplication of input with the number 5. So our system calculates any input with the formula (multiply with 5) and give the result. Now, for the test data, whatever the number you give, no matter it has seen that number earlier or not, it will give the expected result.

If the all arithmetic operations are given inside the system, it will be ready to give the answer for any arithmetic reasoning problem.

Long way to go

I know it is a small step towards a very long journey but my assumption is this is the easiest approach that will take us there fast.

Since, I am done with arithmetic reasoning I am currently working on analytical and verbal and combining everything so that any result can be yielded and one day we start interacting with machines and work with machines.