About

Researcher, educator and solver of computationally-intensive mathematical problems. I am currently employed as a Staff AI Research Scientist at Sage AI where I solve problems in fintech using Machine Learning and Data Science. Prior to this role, I was a Senior Data Scientist at NerdWallet, a Senior Data Science Developer Advocate at Databricks and a Computational Scientist at Virginia Tech.

My current research interests are Natural Language Understanding, Reinforcement Learning and MLOps.

Automated Gradient Computation

Overview of Techniques

Reader level: Beginner Essentials of Chain Rule for Differentiation This section describes some of the basics of chain rule for differentiation that we will use to describe automatic differentiation. $$ \dfrac{ df(a \cdot b) }{dx} = b\dfrac{da}{dx} + a\dfrac{db}{dx} $$ For a function ‘f’ that is dependent on variables ‘ni(x)‘, the partial derivative w.r.t an independent variable ‘x’ can be written as shown below $$ \dfrac{\partial f}{ \partial x} = \sum \dfrac{\partial f}{\partial n_{i} } \cdot \dfrac{ \partial n_i }{\partial x} $$ [Read More]

Continuous Integration for Research Computing

Best Practices for Research

Reader level: Beginner Continuous Integration Continuous Integration (CI) is the process of systematic code testing to ensure that changes made to a codebase do not break existing functionality. Although, firming entrenched into the software development lifecycle research projects rarely takes advantage of this important step. While this may be overkill for single-owner projects that are relatively small, any collaborative project of a reasonable size needs regular testing to avoid absolute pandemonium. [Read More]

Virtualization Technology for Research Computing

Virtual Machines, system and application containers

Reader level: Beginner Virtualization Technology Some of the virtualization technologies that span Cloud Computing services, in increasing order of resource usage, is listed below. This list is not comprehensive, simply an overview of the popular options: Application Containers (e.g. Docker/Rocket) Open platform for running applications in a linux container. This is usually used to run a single process per container and workloads requiring multiple processes are encouraged to be run in different containers that ‘talk’ to each other. [Read More]