Table of contents
- Subjects Completed
- CS 7637: Knowledge-Based Artificial Intelligence - Cognitive Systems
- CS 7638: Artificial Intelligence for Robotics
- CS 6601: Artificial Intelligence
- CS 7641: Machine Learning
- CS 7646: Machine Learning for Trading
- CS 6476: Computer Vision
- CS 6460: Educational Technology
- CS 6340: Software Analysis
- CS 7642: Reinforcement Learning
- CS 6515: Graduate Algorithms
As covered in my last post, I recently graduated from the OMSCS program. In this post I will discuss the subjects I completed towards the Machine Learning specialisation.
Subjects Completed
I took the Machine Learning specialisation and took most of the popular subjects from that specialisation, even though many are considered difficult and time consuming.
If I could pick subjects again I would have tried to fit in a subject on distributed computing and possibly compilers, probably swapping out Computer Vision and EdTech.
CS 7637: Knowledge-Based Artificial Intelligence - Cognitive Systems
This was a great subject to start with, the content itself is knowledge based AI rather than statistical based AI as seen with machine learning. This made the subject interesting, albeit not quite as useful for the current trends in industry.
The assessments consisted of interesting homework tasks based on course work and ethical questions, exams on the course work and a semester long project with multiple deliverables.
In the semester long project we had to write an agent to complete Raven's Progressive Matrices (RPMs). My agent was one of the top performing agents for at least one deliverable, and the competitive aspect of this was fun but not really utilised much in the class. This assignment generally diverged from the course material however, but it allowed me to reflect on how humans think and how the representation of certain problems (e.g. images of RPMs) can make it hard to apply knowledge based approaches and why end-to-end deep learning is so powerful as a result.
Anecdotally, I believe the subject now has coding assessments based directly on the course content, which is a suggestion I (and likely many others) had made.
CS 7638: Artificial Intelligence for Robotics
As the instructors made abundantly clear, "AI" is an interesting concept. When techniques become well known, it usually becomes unfashionable to call them "AI". This class is more accurately a class about algorithms for robots.
The course videos were produced by Sebastian Thrun and were fantastic, the assignments were fun but challenging at times and overall the subject ran like a well tuned machine.
Great for a summer class, but felt a bit MOOC-like compared to other classes.
CS 6601: Artificial Intelligence
This class is a broad study of AI, including game playing, search and statistical AI like machine learning. This class was one of my favourites.
One of the highlights of this class is that three of the assignments, game playing, search and decision trees/classification had a competitive aspect for students wanting to earn extra credit and, unlike in KBAI, this element of the class was promoted. I was able to get extra credit for the game playing (5th place) and search competitions (4th place), but was unable to compete against students with ML, Kaggle and data science experience to place in the top 3 for the third competition.
One of the most interesting aspects of this course were the two exams, these were take home exams with a week to complete that had to be completed in a week in open book form but with no communications allowed. In a way, it was like completing 6 mini-assignments at the same time - but the assignment could be completed by code, by hand or by both if you wished. They took approximately 20-40 hours to complete, so I had to schedule a couple of days of leave off work for each. The exams were quite interesting, and everyone learnt a lot over the process of completing them.
A bourbon barrel-aged stout in the US known as "Dragon's Milk" became a meme around our cohort in Slack, often among completion of the exams, but nothing close was widely available in Australia. Interestingly, cult-like obsessions and memes were common across basically all of the OMSCS's most challenging classes.
CS 7641: Machine Learning
This subject was amazing, it was my first exposure to machine learning outside of the bits from KBAI and AI and I learned a lot. The lectures with Dr Isbell and Dr Littman are polarising due to the conversational approach and banter, but I enjoyed them.
The projects generally fit a brief along the lines of "go and explore what we have taught over the last few weeks and write a report showing that you understand it well". My understanding of the word "interesting" has been forever shaped by these reports. The assignments were notorious for being able to fill any and all free time you have if you let them, so it was perhaps lucky that the main initial COVID lockdown occurred over the bulk of this semester.
The projects are lax with code reuse as the goal is demonstrating an understanding rather than writing code, but in previous semesters students had cheesed this policy to the extent of writing code that almost produced an entire report, leading to a gap in student's marks and true understandings followed by the banning of code reuse from fellow or past students a semester before I took this class.
This class had a reputation for grading inconsistency and "unfairness", but I found my efforts were rewarded in each assignment so I cannot speak to this. The class had a regrade system, but one that would punish tenuous regrade requests. Ultimately, if you submit great work, it's hard for even the harshest grader to deduct marks.
What makes the ML assignments tough is that with minimal guidelines on the assignment, and having to design your own experiments, there is no hiding any shortcomings in your understanding. You really need to show that you understand the content, can setup experiments to test hypothesis about this content and can critically analyse the results. This is how ML can expand to fill all of your free time, as there are always new experiments to try and report refinements to make.
ML uses some of a curve or scaling, after the midterm exam you should have a good idea of where you sit and how this process works.
This is not a class in solving toy problems using the current hottest deep learning framework, nor should it.
CS 7646: Machine Learning for Trading
Due to scheduling constraints, I was unable to take this class before ML but as I had studied an undergraduate finance degree I was interested in this topic and the crossover of my separate undergraduate majors.
The videos in this subject were great and I enjoyed the assignments, on the finance side the subject covers portfolio theory and a number of finance ideas quite rapidly as the subject can assume more mathematical and statistic assumed knowledge than a finance degree can. On the ML side, the subject gives a good introduction to Pandas and a few ML and RL algorithms.
This was a good summer subject, the only concern I had over the semester was that the marking could penalise certain mistakes quite heavily which is detrimental in a subject with no curve. Part of the subject requires a text co-written by the instructor, which is usually a red flag, but it is available quite cheaply online and I felt it was a good read.
CS 6476: Computer Vision
This subject covers classical Computer Vision techniques that predate deep learning, it was a difficult subject with quite comprehensive and long lectures but I enjoyed the content and all of the assignments. The assignments were in Python using NumPy and OpenCV, the lectures often mention MATLAB but the subject has since been changed to mandate Python.
When I took the class, it felt like it was in autopilot. The lectures were great, but the presenter had taken a dean position at another institution shortly after they were released. The assignments relied on great office hour recordings from a few years earlier from a TA that was no longer involved, and the assignments largely hadn't changed. But everything worked.
In semesters since, the reviews of the subject on OMSCentral have sharply dropped. It appears that changes were made to assignments and this lead to problems. From what I gather on Reddit, the OMSCS administrators are aware of these issues and experienced TAs/staff were added to the subject to address these concerns.
I would advise anyone considering this class to check reviews from a recent semester.
CS 6460: Educational Technology
This class is a largely self driven subject as you are researching and building something based on your research. It is a great subject to take if you have some ideas about creating technology related to education in some way, or an online course for some topic.
You are paired with a mentor who takes the place of a supervisor in a thesis project or PhD, and in some ways this subject is structured like a mini PhD. As OMSCS has no thesis requirements, this is a good class to take if you want to do a research project like this. There are also opportunities to continue your project across another class/semester if you wish under a special project class.
My project revolved around creating an aggregator site for indexing educational videos off sites like YouTube, categorised by classes in formal classes such as the OMSCS. My idea was that there are many commonalities between class structures and the utility of resources, particularly if there are textbooks in common. Generally a tutor or subject coordinator would have to vet and categorise resources, but top students are capable of doing this and there are both more of these students than staff, and they are less time constrained.
I built a functional prototype using Django, but found that maintaining subject categories within a single class that might change each semester is a difficult problem without moderators (like staff). This problem becomes harder if recommended resources want to be retained across semester, or shared between separate classes. Sites like StackExchange solve this problem through the use of tags and search, but hierarchical navigation based on a formal syllabus was an important aspect of my idea.
How useful and enjoyable this subject is depends heavily on your assigned mentor, some mentors were very engaged across the whole subject while others, according to reddit, others have allegedly clashed with students on project scope. My mentor was somewhere in between, marking my work and providing feedback as necessary.
CS 6340: Software Analysis
This class, formerly known as Software Analysis and Test, is about static and dynamic analysis techniques for finding bugs and issues in code. This is a topic that interests me, but some colleagues had picked this subject under a mistaken belief that it would cover writing unit tests and similar.
The bulk of the subject involved writing LLVM analysers or transformers, but the subject frequently jumped between languages as needed which was refreshing. I believe we were exposed to code in C, C++, LLVM IR, JavaScript, TypeScript and Java across the semester.
I found this a fun subject to complete over summer.
CS 7642: Reinforcement Learning
After finishing ML and seeing Dr Isbell and Dr Littman tease the sequel subject, Reinforcement Learning, I knew I had to take it and briefly considered taking it immediately afterwards over summer!
I am glad I did not take this subject over summer however as it has a heavy workload, the assignments are all quite time consuming and there are many readings across the semester to stay on top of. There were 3 projects in addition to the exams, project 1 involved reproducing results from an iconic paper while project 2 and project 3 involved deep learning RL projects.
Project 2, Lunar Lander, was already quite infamous as a major time sink around OMSCS but Project 3 was a big step above this where we had to train collaborative football agents on the Google Football environment. This involved quite long training times, the benchmarks to beat were quite strong and the template code had some small bugs and was hard to extend for some approaches people wished to take. It was the second semester this project had been run and I expect by now it has been refined to steer students in the correct direction or avoid.
The Project 3 experience could easily have become a disaster, and some students certainly seemed defeated by it, but the TA team were fantastic at addressing feedback, answering questions and motivating students which prevented the toxicity on Ed + Reddit + OMSCentral that sometimes emerges when new projects go awry in the OMSCS.
CS 6515: Graduate Algorithms
As a required subject for most specialisations of the OMSCS, this subject is considered one of the final milestones for OMSCS students and it comes with a reputation for being hard to enroll into and hard to complete.
The former is undeniable, most students can't enroll into GA until their final semester. But the latter is disputed by checking the grade breakdowns provided on the GT website. Most students that stick with the subject get the grades they need to graduate, but a sizeable amount of students (presumably about to graduate) do have to drop out of the subject, retry or switch specialisations.
Graduate Algorithms covered interesting topics like dynamic programming, divide and conquer, graph algorithms, greedy algorithms, linear programming and NP-Completeness. Graduate Algorithms is effectively the second algorithms course you might take in a rigorous Comp Sci undergrad after a basic data structures and algorithms course, and a lot of its reputation stems from the fact that many students did not complete such a data structures course, including me.
It is possible to catch up during the semester, but some familiarity with Big O analysis, basic data structures (e.g. linked lists, graph representations, union find), graph terminology and algorithms (DFS, BFS, Dijkstras) and search and sort algorithms (binary search, merge sort, quick sort) will be useful going in.
The grade weighting in GA is heavily exam based (75% of the grade based on 3 exams, with an optional cumulative final replacing the worst grade) and certain topics in the class require some ideas to click or some ingenuity to be able to solve problems. Dynamic Programming in the first exam is the best example of this and served in some ways as a weed out exam for people not prepared for the subject.
The grading in GA is the subject of much criticism, but a lot of it is undeserved or excessively abrasive towards the staff. There can be harsh penalties for getting certain parts of an answer wrong, missing steps or presenting them wrong however. The latter two are covered in office hours and Ed threads, and the former is meant to be addressed by practicing questions as the exam and assignment questions are quite fair. Some criticisms of the grading or questions focused on rubric transparency or ambiguities in questions, and these criticisms have merit but I am concerned got drowned out by general negativity and complaints.
As this is the final subject in a postgraduate computer science course, most students have some familiarity with algorithms and problem solving, so if mistakes received only minor penalties, most of the class would receive As with imperfect answers and there would be little motivation to learn the concepts well. When viewed this way, and considering the sheer size of the class, I have some sympathy for the grading rubrics. But a small but sizeable portion of the class were very vocal about their dislike of the grading rubrics which soured the experience to some extent.
It was a huge relief finishing exam 3 and being confident I had the marks for an A without needing the final exam, I stuck around to assist with regrade requests and it was unfortunate seeing some of these in the final exam knowing that most of the requests were the difference between passes and fails.