Skills
Programming Languages
Python
My primary language for both my research, internship, and personal project exploits.
Java
Used in my Virginia Tech and high school CS courses, including data structures.
Matlab
Used in my Foundations of Engineering courses at Virginia Tech.
Machine Learning Tools
PyTorch
My deep learning framework of choice, used for work, research and projects. A collection of frequently used boilerplate, usable as a library or for copy/pasting, is available here.
OpenCV
My limited OpenCV experience involves creating bounding boxes around handwritten letters as a part of a winning hackathon project (HackBI 2017) and applying Haar cascades for an (unreleased) project.
Scikit-learn
At BIST I used the k-means and spectral clustering features of scikit-learn.
OpenAI Gym
Part of my work for Decipher involved creating a custom Gym environment to simulate a scaleable microservice under traffic. We also used Gym’s toy environments for testing various RL algorithm improvements.
NumPy and Pandas
Used for the loading and proccessing of datasets for various tasks. I am highly confident working with NumPy and have a little less experience with Pandas.
Matplotlib and Visdom
I have extensive experience working with these tools to graph ML algorithm losses and create visualizations. I have created Matplotlib graphics that were presented to research supervisors and may be included in papers. At Decipher, I worked on live Visdom demonstrations of our team’s work that were presented to several major clients.
Machine Learning Concepts
Neural networks (fully connected, recurrent, and convolutional)
At Decipher, we used fully connected and recurrent neural networks as part of deep reinforcement algorithms. My BIST project involved comparing 1D convolutional vs. fully connected neural networks for classifying sonar data. At Hume and BIST, I used convolutional neural networks for computer vision.
Reinforcement learning
The product under development by my team at Decipher is powered by deep reinforcement learning. I am familliar with policy gradient, Q-learning, and actor critic based methods, including Proximal Policy Optimization and Soft Actor Critic. I have tuned these algorithms and helped develop and maintain an internal PyTorch-based RL library. I have also implemented improvements to allow for the use of recurrent neural networks in off-policy RL algorithms. To learn more, I am currently reading from Sutton and Barto’s Reinforcement Learning and working on my own collection of Rl algorithm implementations, called cleaRLy.
Generative Adversarial Networks (GANs)
I have read several papers on GANs, implemented a basic one here, and written a proposal for Decipher about a potential application of GANs.
Autoencoders
In addition to implmenting an autoencoder as part of my templates library, I have used them as a preprocessing step for unsupervised clustering as part of my BIST work.
Genetic algorithms
I wrote a genetic algorithm implementation using NumPy for experience, however, note that the code doesn’t have a good test example and that a valid cost function should be swapped for the default.
Math
Probability and Statistics
While I am still admittedly an amateur here, I have taken a Coursera introductory course and am in the process of reading Probability Theory: A Concise Course, How to Measure Anything, and Jaynes’ Probability: the Logic of Science. I am also taking Theoretical Statistics (STAT 4105) in Fall 2020 at Virginia Tech
Calculus
I have completed calculus through multivariable and just started reading The Calculus Gallery by William Dunham.
Discrete Math
My discrete math course at VT covered boolean algebra, set theory, basic number theory, and proofs.
Software Engineering/Infrastructure
Linux
I have administed Ubuntu servers and AWS machines for various tasks, and run Arch Linux on my main laptop (wow, the Arch linux user found a way to mention it, what a surprise).
Git
In addition to using Git to keep track of my VT reserach and personal projects, Decipher uses Git heavily so I have experience with slightly more complex topics such as writing clean PRs, reviewing other developers’ code, dealing with merge conflicts and rebases, etc.
Kubernetes and Docker
Our product at Decipher heavily involves Kubernetes, so deploying our product requires containerizing our code with Docker and modifying our Kubenetes infrastructure to support it. However, my knowledge is still very limited.
Soft Skills
Agile development
Decipher uses Scrum for project management and I am familliar with providing daily updates at standup meetings, discussing strategy at sprint planning, and presenting results at sprint retrospectives.
Writing
See above.