Welcome! Thanks for stopping by! 👋

I'm a PhD candidate studying heavy-ion collisions at CERN with the ALICE experiment. I am working to understand how the most fundamental particles, quarks and gluons, interact and combine to form more familiar particles like protons. Throughout my PhD I have discovered a deep passion for machine learning, even inspiring two publications in my research group using interpretable machine learning in physics. As I bring my academic chapter to a close, I am seeking a job in machine learning when I graduate in May 2024. I have spent the past year preparing for a transition to industry work in machine learning and feel confident that I can bring a lot of value to any company I work for! Please read on to learn about some of my projects and experiences, and check out my Projects page to enjoy some AI generated color palettes!

My Experience

Science and Research

My Physics Story

When I attended my physics department orientation I was thrilled to find that my advisor was Jennifer Klay, and later that day she mentioned working with students and sending them to CERN. It was around this time that the Higgs boson discovery had been announced and I wanted to be a part of this exciting field, and a trip or two to Switzerland didn't sound too bad either! I started working with the ALICE experiment at CERN in 2015 while attending Cal Poly, San Luis Obispo and continued on in my PhD program with Christine Nattrass at the University of Tennessee, Knoxville. I have visited Geneva, Switzerland to assist in operating the experiment on five occasions in that time. On my most recent trip, I worked as a Run Manager handling all the day-to-day operations for the experiment 24/7 over a two-week period. I have made lifelong friends from all over the world, and have had a ton of unique experiences.

ALICE Experience

🔬In fulfillment of my membership in the ALICE collaboration, I have completed a undergraduate senior project and will complete my thesis project analyzing ALICE data. I have contributed two novel analysis C++ classes to the ALICE software framework. These classes serve as a way to reproduce my analysis and expand upon it. I have also contributed an implementation of a necessary correction to an intermediate measurement that has been used by two other analyses. Working with the ALICE software has helped me learn more about C++, complex build processes, building research software, and working in a collaborative framework.

📑 As a young member of the ALICE collaboration, I was a perfect candidate for taking shifts to operate the ALICE detector. During my undergraduate studies I acted as the shift leader three times, learning and building relationships each time. Then, in my graduate studies I had three more oppurtunities to participate in the experiment opertion. First, during the pandemic I acted as the remote run manager for the eastern United States. I procured an adequite computer and set up a clean space for visiting scientists to monitor the data quality and non-critical operations. I coordinated with several sites to ensure the US satisfied its obligation. Then, I acted as the shift leader and was asked to return the next month and serve as the run manager, overseeing the ALICE shift crew operations 24/7 for two weeks. These oppurtunities exposed me to interpersonal challenges and solutions that will forever change the way I interact with people.

Bringing Machine Learning to Tennessee

I was first introduced to machine learning in my undergraduate Physics on the Computer class. My final project was building a neural network from scratch and training it on the MNIST handwritten digit recognition task. Since then, my interest has only grown! Early in my graduate studies I highlighted some machine learning work in my group's field and exposed some pros and cons. This stimulated discussion leading to two papers on interpretable machine learning in physics.

📖First Author Paper This paper demonstrates that a simple decision rule on a couple of fundamental observables captures over 95% of the background rejection of a random forest trained to classify jets as signal or background. I then used a metric borrowed from clustering, the silhouette score, to establish that the background remaining after the decision rule is applied is very similar to the signal and requires new observables for further discrimination.

📖Second Author Paper This paper uses symbolic regression to explore the functional form most consistent with the predictions from a neural network trained to estimate the background contamination to the measurement of a jet's momentum. The resulting functional form was then clearly justified through previous theoretical work. The result of these studies was a more robust and accurate estimation of the background contamination to the measurement of a jet's momentum. My contribution was primarily consulting on machine learning techniques and troubleshooting.

Machine Learning, Data Analysis and Statistics

Interpretable Machine Learning

🧠 I used knowledge distillation to approximate black-box techniques, like neural networks and random forests, with explainable methods that can be interrogated by the domain experts. Additionally, I explored unorthodox uses of machine learning metrics. This resulted in two publications: a first author publication using a single decision rule to distill a random forest at a level of more than 95% background rejection compared with the random forest on a jet classification task, and a second author paper using symbolic regression to distill a neural network trained to regress the background contamination to a jet's momentum. The former also uses the silhouette score metric to quantify how similar certain populations of the background are to the signal, therefore demonstrating the need to explore new observables to rout these "imposters" out!

Modelling Gaussian Mixtures with Domain Knowledge and Biased Sampling

📊 I employed advanced sampling techniques to better model a gaussian mixture using domain knowledge about multiple detector signals to determine the fractions of each particle species in jets produced in heavy ion collisions. This technique allows us to statistically estimate the particle composition due to different physical processes, revealing the nature of hadronization, or the construction of particles from their fundamental components. Using a natural ordering present in one detector's signal, I collected biased samples containing an abundance of each particle type and used these samples to better determine the mean and variance of each particle type. Fixing the shape parameters, only the mixture weights need to be determined leading to a better fit.

Color Palette Transformer Model

🌈 I built a color palette dataset composed of sequential, divergent, and qualitative palettes. I then trained two transformer models to reproduce the palettes as sequences, with and without the context of which type of palette they were being trained on. After finding that the contextual information was not being properly learned, I trained the first model to a satisfactory loss that produced qualitatively good palettes and exported it for use in the JS ONNX runtime. I constructed a web app to demonstrate the palette generation capability. Check it out for yourself on my Projects page!

FunkifyThis, Neural Style Transfer for Genre Transmutation

🎸 FunkifyThis is an exploration into the extent to which a spectrogram of a song captures the style or genre of the song. I trained two different CNNs on mel-scaled spectrograms from the GTZAN dataset on the task of genre classification. The first CNN, which used a standard architecture convolving both the time and frequency axes, acheived 55% accuracy on the test set. The second CNN, which used a frequency only convolution achieved a 65% accuracy on the test set. Each CNN was then used in the neural style transfer algorithm to style one song as another. The results are disconcerting at best and pure noise at the worst, but with more thought and a much larger dataset, perhaps the style transfer could be made to work. I'm not holding my breath! 😁

Weight Matrix Rank-Aware Network Pruning

📄Rank-aware pruning is one of my current research interests. Almost all machine learning techniques feature tensors and matrices prominently, and there are several ways that the learning behaviour can be studied through these objects. In addition to monitoring the values of their entries and the gradients that ultimately update those values, I became interested in looking at the rank of the weight matrices through the training process. Some work has been done that shows an Adam optimizer paired with a weight decay penalty will reduce the rank of the weight matrices. The goal of my investigation into this phenomena is to understand the realtionship between limiting rank over a long training session, the underlying problem, and the depth of the network. I'm also cooking up a meta-learning algorithm that rebuilds new networks based on the learned rank of a previously trained network. I would like to publish these results once some clear conclusions can be drawn.

Reinforcement Learning, Monte-Carlo Tree Search and EM policy optimization

🕹️ I implemented a Monte-Carlo tree search algorithm and trained it to perfection on Tic-Tac-Toe. Additionally, I attempted to train it on CartPole, a continuous observation and action-space game with little success, even with clever dynamic discretization schemes. Instead, I used the EM algorithm to jointly train the policy and values functions represented as neural networks, succesfully solving CartPole.

Software Development

Coding has supported every step of my academic career

📈 I have been using C++ and Python for research and data analysis since 2013. I started my programming journey 2005 with LibertyBASIC and continued in high school drawing fractals in C++. My early experience in C++ was a primary factor in why I was able to start doing research in my first year of college. Some of my early projects were using Kivy to build an android app in python that could measure objects based on a picture. This led into using photogrametry for non-invasive measurements of astronomical equipment. Finally, I was able to jump right into the ALICE software and debug longstanding issues in the group.

Route2Fair, the new digital fair date book

🎡Route2Fair is a step into the digital age for fairs and the service members that they contract with. Using hand-compiled data about current fair dates, contacts, and locations, Route2Fair will provide a digital alternative to planning a fair season. What has typically been an arduous task of digging through an often not up-to-date date book now has a simple, streamlined solution. A FastAPI-based backend, dockerized and deployed to a Google Cloud Run service provides a low-latency and scalable API for retrieving fair information. The frontend is powered by Streamlit and provides a clean and consistent interface for users to browse available fairs. I hope to release this to users this year.

Distributed Computing and Physical Simulations

⚗️ Throughout my PhD I attended many interesting courses. My High Performance Computing class gave me a unique oppurtunity to utilize my university's HPC cluster and gain experience with distributed computing in C++. As my final project I implemented a materials science simulation that simulated the drying of rod-like molecules suspended in a vertical plane of solution. I used OpenMPI to split the simulation accross vertical slices of the remaining solution. I had to learn how to debug a distributed program and manage state-transfer at boundaries. It was a fun challenge and I gained valuable skills that I will surely use moving into the world of mcahine learning.

Reddit Stock Trading Interface

🚀GameStop to the moon! During this odd cultural phenomenon I built a command line interface that provided users quick and convenient access to stock trends on the r/pennystocks subreddit. In addition to using the reddit api to find mentions of stock symbols, I used the yahoo finance api to correlate the up-to-date price with mentions on the subreddit. I never made any money from it, but I did get two stars on GitHub! 🥳🥳