My Sophomore Year at UC Berkeley
A month ago, I completed my second year at Berkeley, and now that I've had some time to think about what I accomplished, I couldn't be more proud of myself. This year brought about new challenges and exciting opportunities for academic growth and personal development. From engaging in entirely new communities of people to delving deeper into mathematics and computer science, this year was a whirlwind of learning and unforgettable experiences. In this blog post, I will share my experiences of the last year as well as my academic journey through the fall and spring semesters, highlighting my courses, professors, and projects.
Table of Contents
- Spanish 3 - Intermediate Spanish
- Math 104 - Introduction to Analysis
- CS 61C - Great Ideas of Computer Architecture
- CS 170 - Efficient Algorithms and Intractable Problems
- Course Staff - CS61A Academic Intern
Cooperative Housing
Northside Life
Last year, I lived on Southside in the dorms. Southside is known as the busier side, with more places open later at night, places to eat, etc. whereas Northside is typically more quiet and relaxed. Having experienced both, I feel that I prefer living on Northside, especially considering the fact that its much closer to many of my classes.
Last year, I had to walk roughly 10 minutes to get to the computer science buildings, as they are located on the northern part of campus, but this year I only needed 1-2 minutes to get to my classes. My housing could not have been in a better location for this. Additionally, just down the street from where I lived, there is a huge variety of places to eat. The only downside is that most places close much earlier than I'd prefer.
Another huge plus is that my house is much closer to the libraries on campus. This must have influenced me to go more often because I spent significantly more time in the library this past year as compared to my first year.
New Community
In the Berkeley Student Cooperative (BSC) organization, there are houses and apartments. I lived in one of the smaller houses, along with about 25 other people. At this house, I made many new friends and memories. I feel very fortunate to have been able to live in this situation, and am excited to continue living there in the future!
For the first semester, I was elected as the house's social manager by my peers. My responsibilities included organizing events, maintaining a safe environment at social gatherings, and fostering a friendly community. Some of the events included pumpkin carving, trivia night, secret Santa, room-to-room, and a Snackpass lunch party. Besides the events, I found that I bonded a lot with others during dinner or when I went with them to the library. Although I was initially nervous to live with a whole new group of people, my fears were quickly dispelled when I realized that my housemates would become some of my closest friends.
Although I didn't run for social manager in the second semester, I found myself increasingly invested in the coop community. I spent more time with my new friends studying together in the library, hanging out after dinner, and playing board games in the lobby, among other things. I started an intramural sports soccer team for the house, worked on a research project with a housemate, and even volunteered to play music for a BSC block party charity event.
All of the friends, opportunities, and experiences I have had from this new coop community have been a tremendous influence on my life. My year would have been drastically different if not for this amazing living situation, and for that, I am extremely grateful.
Workshift
A part of living in the coop system is completing your workshift so that rent can be cheaper. In the houses, each resident is required to complete 5 hours of workshift each week. These hours can be accumulated through various tasks such as mopping, vacuuming, washing pots/dishes, cooking, or through managerial positions.
In the Fall, I accumulated my hours with the following:
- Social Manager (2 hours)
- Cookshift (2 hours)
- Pots & Pans (1 hour)
In the Spring, I accumulated my hours with the following:
- 2 Cookshifts (4 hours)
- Pots & Pans (1 hour)
This meant that throughout the year, I was cooking food for 25 people 1-2 times a week. Above are some pictures of some of the meals I made. I'm really glad I decided to do cookshift, as I learned a lot about cooking, and I got to make the executive decisions on what food to eat on certain days of the week! Although there were a couple weeks that had stressful shifts, I have a lot of good memories of some very tasty food.
In addition to 5 hours per week, there is also a small amount of hours required each semester for house habitability improvement, bathroom cleaning, and kitchen cleaning. A highlight of these for me was in the first semester when I assembled another shelf to store people's snacks on. Before this shelf, there was very limited space, so it felt good to contribute positively to that problem. Also, it meant that I had space to store my own snacks during the second semester!
UC Jazz
Last year, I joined UC Jazz, and it was an amazing experience. It was an easy decision to stay in the program, and I can easily say that I had another great year. Once again, I had the privilege of playing in both a combo and a trio.
Combo
This year, I worked with a different combo led by Dann Zinn. He was an amazing instructor that I feel really elevated my playing. I also got to play with a new drummer, pianist, alto saxophonist, and trombonist. They each had their own unique playing styles that were always a joy to work with.
I also wrote some music for my combo to perform. I have a lot of experience writing music from back in high school, but during last year, I didn't write nearly as much music. It was nice to get back into composing, although I still wish I had more time to do it more.
Trio
During the Spring semester, the trio from last year continued rehearsing weekly. I felt that we played at a much higher level this year, as we were more accustomed to each other's playing style, and better knew our roles. I also wrote a tune for this group, titled "Activities". I learned a lot from my fellow musicians in this group who each had a lot more experience than me.
The following are excerpts of pieces we played at our final concert.
Launchpad
In the beginning of my sophomore year, I knew that I was interested in learning more about AI and ML. The previous summer, I took Coursera's deep learning specialization taught by Andrew Ng, and found the entire field to be very interesting. Thus, I sought out student organizations to join where I could share my interest with my peers. I heard about Launchpad, a creative AI and ML club at Berkeley.
The application process was actually really long for a student club, with an initial application having two 250-word response questions, a coffee chat, a group meeting, and a technical interview. Regardless, after going through this process, I received a phone call from the club's president.
She said that they were going through deliberations and needed to verify some things about me. She proceeded to rapid fire some insanely hard math questions that I knew I couldn't answer given the format of a phone call. Confused and slightly disappointed, I then heard a bunch of people laughing. I then realized that they were pulling my leg the whole time, and the point of the call was to let me know of my admission if I wanted to join.
Now, a year later, I am incredibly grateful for the opportunities presented to me through this club. I have met some amazing people and learned a lot!
ML Education
After joining Launchpad, the club organized lots of events for the new members to get caught up to speed on the basics of machine learning. They held a new member weekend event which was a 2 day education session on Saturday and Sunday for 6 hours each, complete with free food and lectures on neural networks, Pytorch, and autoencoders.
Then, each week had an education event, which was a 2 hour lesson on various ML topics such as CNNs, RNNs, LSTMs, GANs, and high level overviews of topics like transformers, stable diffusion, and speech recognition.
HumMus
Each semester, Launchpad members can choose to work on a project. My first semester, I worked on a project called HumMus, which actually has nothing to do with food. HumMus stands for Humanizing Music. The goal of the project was to develop a model that takes in computer-generated MIDI data, and applies a humanization effect on parameters such as rhythmic imperfection, note intensity, dynamic variation, etc.
We referenced a recent paper on a model called MuseMorphose, to build a Transformer VAE model that takes in our desired parameters and applies the transformation.
Our model works by splitting each of the training scores into 8 bins for each musical parameter. For example, training score 1 can be determined as a 7 for rhythmic imperfection and a 3 for note intensity, while training score 2 might be placed at a 3 for rhythmic imperfection and 4 for note intensity. Then, our model learns embeddings for each of the different bins and applies style transfer by shifting the bin of some input piece.
Here is an example of our model being applied to an input piece.
You may notice that other factors have been changed, and this is due to the fact that we also modified polyphony as well as rhythmic complexity. However, it is clear that the entire mood of the original has changed in the humanized version.
Overall, this project helped me to learn a lot about autoencoders, as well as working with musical data.
Attune Client Project
In my second semester, I worked on a client project with the company Attune. This project was a continuation from the previous semester, although most of the team was new, including myself.
We worked on detecting anomalies given extensive sensor data. We used decision trees along with an LSTM to first classify thresholds and then interpret data with a sequential context.
The hardest part of this project was building a prototype that could work real-time, rather than on past data. This project taught me a little bit about AWS, Kafka Streams, and managing large amounts of data. However, I still have a lot more to learn in this field.
One huge perk of working on a client project was the free food every meeting, along with a large social budget to do fun events like rock climbing. This was my first time bouldering, and it was very fun!
Fall 2022
In the Fall semester, I took Spanish 3, Math 104, CS 61C, CS 170, and was on course staff for CS 61A as a Lab Academic Intern. In total, this was 18 units. While this is the most units I've ever done, I'd say this semester was slightly easier than the Spring semester due to a couple factors.
First, I took Spanish 3, which accounted for 5 of my units, as pass/no-pass. This helped to alleviate the stress of getting a good grade in a class I was just taking for fun anyways. Second, towards the end of the semester, I was fortunate enough to have the strike eliminate some projects, which reduced my work load by a decent amount.
Spanish 3 - Intermediate Spanish
Spanish 3 was always one of the highlights of my day, and luckily for me, I had it every day of the week. I was fortunate to have a very nice professor who focused specifically on developing our speaking skills and building confidence. This class focused less on grammar and syntax, and more on real communication. Through engaging conversations, interactive exercises, and cultural exploration, I found myself more comfortable expressing myself in Spanish. The confidence I gained from my summer trip to Mexico was only further extended by taking this class, which I am very glad I did.
Not only did I improve my language skills, but I also broadened my understanding of different hispanic cultures and perspectives. We watched multiple short films from filmmakers from Mexico, Puerto Rico, Chile, Argentina, and Nicaragua. I hope to visit many of these places in the future, and hope that I can one day use the skills I learned in the classroom to communicate with the people there.
Math 104 - Introduction to Analysis
In Math 104, I had the privilege of learning from Ryan Hass, an organized professor who gave well-paced lectures and an environment ripe for questions. Real analysis introduced me to the proofs behind all the calculus knowledge I learned about in AP Calculus back in high school. Although the subject matter was challenging, my professor's clarity and the structured course helped me navigate through the difficulties of real analysis.
We covered sequences, limits, convergence/divergence, compactness, derivatives, integrals, infinite series, etc. My favorite concept was towards the end, when we used the ideas of partitions and limit supremums to define the Riemann integral. I always enjoy when math classes take the tools defined previously in the class to dive deeper into their own implications, and this was certainly an interesting case of that.
CS 61C - Great Ideas of Computer Architecture
CS 61C was a course that pushed me to expand my knowledge of computer science in a direction I had not looked into at all. While it was considered an easier version compared to previous offerings due to the As-for-all initiative and strike, it still provided valuable insights into machine structures, allowing me to learn a lot.
I learned about topics such as C programming, machine representations of numbers, RISC-V, pipelining, hazards, parallelism, caching, and virtual memory. This course allowed me to delve deeper into the inner workings of computers, enhancing my understanding of low-level programming concepts.
My favorite project was when we designed a 2-stage pipeline for a computer to run RISC-V instructions. This really put our understanding of registers, ALUs, RISC-V, and circuits to the test. When the pipeline finally worked, it was really satisfying to know that I could completely account for why the instructions were working (except for maybe how circuits worked on the physical level).
CS 170 - Efficient Algorithms and Intractable Problems
CS 170 is an amazing course that I would recommend to anyone who is at all interested in computer science theory. I took it with Jelani Nelson and James Demmel, who were both fantastic professors. I was particularly impressed with Jelani Nelson was like a celebrity to me, as I remember watching his computer science lectures at Harvard for fun back when I was in middle school.
This course covered topics such as algorithm design, linear programming, graph theory, and basic complexity theory. Among different types of algorithmic design, we studied divide-and-conquer strategies, dynamic programming, greedy algorithms, and approximation algorithms.
Additionally, this course had a project where teams designed an algorithm to approximate a solution to an NP-hard problem. I found this challenge immensely fun, and I obsessed over reading relevant research papers in order to learn computationally efficient techniques to improve my results. My project repo can be found here. I learned a lot about simulated annealing, as well as some of the basics of semi-definite programming (SDP), although the latter did not end up being useful to my final solution.
Course Staff - CS61A Academic Intern
As an academic intern for CS 61A, the introductory programming course I took as a freshman, I had the pleasure of helping other students succeed. It was a fulfilling experience to guide and mentor fellow students, share my knowledge, and witness their growth in the field of computer science. Being able to contribute to the learning community at UC Berkeley was incredibly rewarding and reinforced my own understanding of fundamental programming concepts. Although I stopped working in support of the strike towards the end of the semester, I really enjoyed helping my peers and hope I can be a part of course staff again sometime in the future.
Spring 2023
In the Spring semester, I took Math 185, EECS 127, CS 189, and CS 270, totaling 15 units. Despite being the lowest amount of units I've taken in a semester, this was by far the busiest semester I've had. Not only did I take 4 technical classes, but I took pretty difficult time-consuming ones, with CS 189 being one of the harder classes in the CS department. I'm really proud with how I did this semester, but going forward, I might have to slightly cut back on the schedule I give myself.
Math 185 - Introduction to Complex Analysis
To be honest, I wasn't initially excited to take Math 185, only doing so as it was a major requirement, but that had completely changed by the end of the semester. Michael Christ is an amazing professor, whose passion and enthusiasm for the subject of complex analysis, and mathematics in general, really motivated me to work harder on the content in this course.
Covering new topics such as Möbius transformations, complex differentiation, the Cauchy-Riemann equations, path integrals in the complex plane, Cauchy's integral theorem, homotopy, and estimation techniques, this course was packed with new insights to mathematics that followed naturally from the foundation built up from Math 104. Although I struggled more in this class than others, I still really enjoyed this class.
EECS 127 - Optimization Models in Engineering
EECS 127 was a magnificent course that really instilled a deep understanding of the linear algebra and mathematics underlying optimization. Gireeja Ranade is a great professor who clearly cares about her students' success as well as the content she teaches.
The beginning of the course reviewed the basics of linear algebra, which brought me back up to speed after forgetting a lot of the content from Math 110. It also emphasized some more applied topics such as least squares and low rank approximation that I would guess you might learn in EECS 16B as opposed to Math 110, the former of which I didn't take.
Next, we covered new topics such as MLE, convexity, various descent methods, strong/weak duality, KKT conditions, LPs, QPs, SOCPs, and various applications such as control theory, SVMs, and mixed integer programs. There is so much more for more to study in the field of optimization, and this course gave me a solid basis to learn more about optimization on my own.
Taking this course alongside CS 189 was great also as the content overlapped in such a way that mathematical hand-waviness in CS 189 was often explained at some point in EECS 127. For example, an early homework problem in CS 189 utilized KKT conditions without explaining how they were true, but eventually we learned about them in EECS 127.
CS 189 - Introduction to Machine Learning
CS 189 is a must-take for anyone at Berkeley interested in machine learning. I knew coming into this semester that this was my highest priority class, as I had already been working with ML on my own and in my club, and knew that I wanted to do more with it. I took it with Jonathan Shewchuck, who I found to be very easy to follow in lectures, with a very consistent style and note-taking scheme.
This class covered gradient descent, SVMs, QDA, LDA, MLE, decision theory, ridge/lasso regression, decision trees, kernelization, neural networks, back propagation, PCA, SVD, learning theory, ensemble learning, and nearest neighbors.
I decided I wanted to improve my LaTex skills this semester, so I committed to submitting every write-up in LaTex for this class. Over 7 homework assignments, I averaged 44 pages per writeup, with my longest one being homework 6 (this one covered neural networks) with 70 pages. However, the homework assignment that took me the longest to complete is easily homework 2, which was the math review assignment.
It should be noted that about half of the pages of all my write-ups can be accounted for by the code appendices, but it's still pretty clear that this class took a significant amount of time.
But, I have no regrets with how I spent that time, as after taking this course, I feel much more confident with the foundations of machine learning, and feel much more equipped to read papers. CS 189 is probably the class I've work the hardest for out of all my past courses, and I'm really proud to say that I was able to end up with an A+ by the end of it. It felt great to have all of my hard work pay off in the end, and I can't wait to continue learning more about ML.
CS 270 - Combinatorial Algorithms and Data Structures
Originally I was planning on taking Math 106, a probability course, but after some convincing by a housemate, I switched into CS 270, my first graduate-level course at Berkeley. I'm really glad I did so, because this class was amazing. While it was incredibly challenging conceptually, I learned so much in this course.
This course was taught by Jelani Nelson, who I add for the undergraduate algorithms class just a semester before. Once again, I found his lecture style to be very compelling and clear.
This course covered a very wide assortment of topics, such as a new single-source-shortest-paths (SSSP) algorithm called BNW [Bernstein, Nanongkai, Wulff-Nilsen] that is able to compute the shortest paths of a graph from one vertex to all other vertices, regardless of edge weights, in linear time. Prior to this algorithm, the only linear time algorithm was Dijkstra's algorithm, which requires positive edge weights. It was incredibly inspiring to be able to understand such a groundbreaking new algorithm.
Beyond BNW, we also studied algorithms for max flow, amortized analysis techniques, various hashing concepts, online algorithms, online primal/dual, PTAS/FPTAS, the simplex method, and hardness within P. We also covered interesting data structures such as link-cut trees, splay trees, Fibonacci heaps, van Emde Boas trees, y-fast tries, and Bloom filters.
My research project for this course, which I completed with the housemate that convinced me to take it in the first place, was on voting theory. We looked into new Condorcet Consisting voting systems such as Simple Stable Voting (SSV), Stable Voting (SV), and Split Cycle Voting (SC). Although we were unable to prove NP-completeness for SSV or SV, we did learn a lot about the field, compiling our findings into a literature review.
Intramural Sports - Soccer
To destress from all my coursework, I participated in a weekly intramural league with my housemates. Just like last year, this was incredibly fun, and always ended up being one of the highlights of my week. We played on Wednesday nights at either 10pm or 11pm, and we actually won 2 games (a huge improvement from last year)! Technically, our first win was a forfeit since the other team didn't show up, but the second win was legit, and it was the last game of the season!
Participating in this league was great bonding experience for everyone involved, and I'm looking forward to playing with everyone again next semester.
Conclusion
So that's my sophomore year recapped. I really enjoy doing these reflections, as I get to look back on the pictures I took and remember what exactly I was doing for the past year. Reading the conclusion of last year's recap, it's nice to see that my outlook on the future then about moving to Northside and joining a new community did end up having a very positive impact on me.
Right now, I'm looking forward to taking summer classes again, this time at Berkeley. I'm thinking of taking CS 188 and Math W128A, although I'm not 100% locked in. I'm also curious to see how I'll continue contact with my friends who moved out of my house this past semester, as well as how I'll connect with the new members. There's a lot for me to look forward to, and I'm very excited!