Research Philosophy - shivamvats/notes GitHub Wiki
-
Do not start working on a research idea until you have yourself tried to solve the problem using straight forward approaches. In robotics, this means, actually building a robotic system to solve the problem in the real world. Do not start with simulation. You don't know what assumptions to make.
-
Complexity arises out of interactions between simpler units. In robotics, it is often the case that the full problem is composed of multiple parts. Most often, there is no one solution to them all.
-
Do not read too many papers written by others. Think for yourself. Read a paper only if it is saying something new or it solves a problem your have been stuck with. -
Stick to simple ideas
religiously. If you want to use an idea that you cannot fit in your head in one go, then it is probably too complex. -
The best work prunes the tree of knowledge, rather than grow it. For eg, Shannon replaced the multitudes of domain-specific theories created for communication with his one theory of information.
Modularity
Modularity is the principal approach to attack such problems. You break down the full problem into smaller ones that you can handle. Then you build a modular system that uses the sub-problem-specific solution depending on the need. Hence there are three parts to this approach:
- Break down the problem into sub-problems.
- Find good solutions to each sub-problem.
- Have an algorithm that does mode-switching between the solutions depending on the context
Building modular systems is key to solving problems in robotics and not surprisingly, instances of it can be found all-over.
- Macro-actions: In the planning community.
- Options: In the MDP community.
- Adaptive Motion Primitives: Heuristic search for manipulation.
Attack the Bottleneck
Works on problems with a short-tailed difficulty distribution.
Randomization
For some decision problems, introducing some degree of randomization in the decision-making process gives an across-the-board improvement.
- Sampling-based Planning: Works well across-the-board
- Randomized MAB Algorithms: In the adversarial setting
- Epsilon-greedy: RL
How to Do Great Research
To a large extent, this is a summary of Richard Hamming's speech You and Your Research
- Courage: Be afraid of nothing. You are looking for order in chaos. If you spend your time thinking of reasons for why something can't work, then you will never get anywhere. Of course, there are 100 reasons why it can't work. Can you find one for why it might?
- Emotional Commitment: You cannot be equanimous about your research problems. You need to be firmly emotionally invested in them. Otherwise there are thousands of other things think about in life. Emotional commitment is required to force your brain to work on the problems of your choosing all the time.
- Energy: Great researchers are full of energy and vitality. You need to be always trying new things to discover something important every once in a while. You can't sit idle.
- Vision:
Writing Research Papers
A paper may have two types of contributions: 1. Problem: An innovative and important new problem. 2. Non-trivial Idea: Solve a non-trivial problem - meaning that the most straightforward solution does not work and hence you come up with a new solution.
The strongest papers make both contributions while most papers focus just on the latter- attempting to solve a well-known problem differently. The former on its own does not make a strong paper.
Research Code
The objective of research code is wildly at variance with the goals of standard software design principles. The number one concern when writing research software should be easy of changing things. Some ground rules to achieve this:
- Prefer interpreted languages (like Python) whenever you can. This can drastically shorten the turnaround time of a change.
- First write the simplest code that works. Refactor and rewrite if needed.
- Use struct over class.