Week 1: Broken Elevators and Reservoir Computing

Share This:

Tuesday, June 7, 2022

By:

Benjamin Johnson

My first week in Washington was filled with exploration and education.  The first day I moved in, got settled, and checked out the area surrounding the dorm.  The second was Memorial Day, and I met some of the other interns for the first time, then we headed down to the parade at the mall as a group.  After seeing some of the monuments in the area, we settled into the shade under the trees by Constitution Avenue and watched the procession.  Afterwards, we walked over to the White House, partook in a spontaneous rendition of Cha Cha Slide, got some dinner at Chipotle, and went home for the night.

The next day, the interns voyaged to the American Center for Physics and received an orientation from the heads of SPS.  We built spaghetti towers and learned about the program expectations for the summer.

The following morning was my first day of work at Potomac Research.  I headed out for the metro and immediately discovered the elevators in my dorm were out of service.  Just my luck.  Oh well, good thing I only live on the ninth floor.  After descending the stairs, slightly sweatier and more winded than when I stepped out of my room, I took the blue line metro down to Alexandria.  I met with one of my summer mentors, Andrew, and he gave me a bit of an orientation.  Starting from the beginning, he pronounced an overview of reservoir computing (RC) and the hybrid scheme they were working on implementing.  Knowing very little about the topic besides what I garnered from the papers he had sent me previously, this initial meeting was immensely helpful towards obtaining my bearings for the summer.  After the orientation, I met my other two mentors, Daniel and Colin, and we journeyed to a nearby restaurant for lunch.  I got to know the Potomac Research crew a bit better and enjoyed some fish'n'chips that were simply bussin.  Following lunch, we headed back to work and Daniel helped me install software on my laptop that I would need for coding during my internship.  This ended up being a massive pain because every step came with complications, but by around 5, I had some example code running and went home for the day.

On my second day of work, I began analyzing the Python module that Potomac Research had developed for reservoir computing, which they lovingly named respy.  It's fairly complicated, but I got a basic understanding of how it functioned, then Andrew gave me my first real task.  He asked me to implement a Runge-Kutta integration method for predicting the behavior of a set of differential equations useful in chemistry.  The Roberston equations, as they are named, are described as "stiff" because they require a small step size when integrating in order to produce accurate results.  It took me most of the day, but I was able to get my program working for the Robertson system.  Afterwards, I also implemented my program for a second system of stiff equations, the chaotic Lorenz system, which are utilized for modeling heat convection in a fluid (they're useful for topics like weather prediction).  Having dusted off the cobwebs from the part of my brain responsible for coding in Python, I was feeling a bit more confident about my position this summer.  

The third day at work, I expanded my code to implement a third differential equation, the Van der Pol equation, then met with my mentors again to solidify the goals of my main project for the summer.  After some discussion, they decided that my primary summer task would be a form of experiment.  I would begin by calculating the power spectral series (PSD) for the Lorenz system using the code I had already developed.  The PSD provides an analysis of frequencies present in the signal, much like a Fourier transform.  The decision to produce this measurement was somewhat arbitrary, but it functions as a good example of some non-trivial analysis that would be more useful in practice than simply predicting the behavior of the Lorenz equations (they're inherently chaotic, so forecasting a specific trajectory is not particularly interesting).  The experiment deals with the training of the reservoir computer, a form of machine learning that the Potomac Research crew is currently investigating as a cheaper and less computationally intensive alternative to prediction using massive supercomputers.  The goal is to determine which training technique will provide the best results in producing the PSD for the Lorenz system without needing to fully model the equations using the Runge-Kutta method.  The Lorenz system is rather easy to model, so the reservoir computing method wouldn't necessarily be ideal to predict its behavior, but the knowledge we gain implementing the simple case can be helpful for future endeavors.  The training techniques we're considering involve three options: the first is relying entirely on the RC to determine its own parameters for success, the second is developing another simpler machine learning technique, called a feed-forward neural network, to select the ideal RC parameters, and the third is training the RC on various Lorenz parameters as inputs, then using a weighted average of these results to predict the RC parameters which produce the most accurate PSD.  After the meeting, I began working on PSD analysis for my Runge-Kutta code, then headed home for the weekend.

Throughout the week, I also had a great deal of fun with the other SPS interns.  We explored the area and hung out in the dorms, baking, playing games, and watching movies.  I'm very excited for the rest of the internship because it seems like I'll learn a great deal about machine learning in addition to developing some fast friendships.  

So long, until next week!

Benjamin Johnson