In many applications, the data resides in different locations, and may need to processed collectively by nodes in a computer network. For example, in a network of cameras, each camera may collect a sequence of images at one location. The cameras may then collectively process these images, to extract useful information about themselves or their surroundings. Or, each computer may collect information about its user. The computers can collaborate to understand each user's preferences. In this manner, the nodes in the network can take intelligent actions, without relying on any centralized service.
Distributed processing often poses a number of challenges. Since the data does not reside in a single location, the nodes need to operate in a setting where they do not have a complete knowledge of the task at hand (much like most people function in their daily lives). Therefore, it is often necessary to devise communication patterns that allow the nodes compute the correct answer with only a limited information. Furthermore, the algorithm needs to be robust to small amount of failure. For example, if a few nodes in the network get disconnected or provide wrong information, the rest of the nodes should still compute a meaningful answer. To address these challenges my research draws from a number of areas, including optimization, probabilistic analysis, and graphical models.
Some projects that I have worked on: