Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.9 / 5):
Workload: 8 hours/week
I bought the textbooks that were recommended in the syllabus -- both Big Nerd Ranch books for Android and for Kotlin. These helped tremendously in the beginning getting ramped up. I used them through the first two homeworks and then felt good enough with the videos to get through the rest of the class. You get enough starter code for the homeworks and flipped classrooms to make sense. Just plan ahead for homework 4. Class wasn't too difficult and overall will teach you the basis of making an app. Spent alot of time on Google and Stack Overflow. Would not count on the TAs for help -- office hours are usually full and you might be in a waiting room for the full hour and not get to ask your question. Not sure if thats the norm with these big classes but it was frustrating at first.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (4.3 / 5): ★★★★☆
Lecture Rating (4.3 / 5): ★★★★☆
Difficulty (4.3 / 5):
Workload: 14 hours/week
Pros:
1. You will come out understanding the fundamentals of OSs
2. Lecture quality is really good imo, professor is very knowledgeable and its really cool how he can explain design tradeoffs.
Cons:
1. It's annoying that you will have an exam and project due with in a day or two of each other (both midterm and final)
2. Projects are quite time consuming, which is why they make you work on it in groups. I got very lucky with a great group though, hopefully you do too. Projects are also very unclear on how to actually start and the steps to take. Instructions are long but still too high level.
3. Midterm was somewhat related to the projects while final was not related whatsoever
Detailed Review:
I got extremely lucky with a great group and they really did most of the work, which I feel horrible about. I underestimated how much time this class would take and feel bad taking another class (Algorithms) on top of this, which greatly reduced my contributions. I think it is still possible to take another class with this class, just take a less demanding one and start early on the projects.
Please use the KAIST lectures, and even then, definitely use LLMs to understand what needs to be done for the projects. They appear to give you the answers and code needed, but be extremely wary, it's mostly not right or way more than you need. It seems like they have stripped some of the Pintos test cases for us, so for example, you don't need to implement memory mapped files in Project 3, nor a cache in Project 4. Definitely use printf statements a ton to figure out what is going wrong.
What's odd to me though, is that I think taking Parallel Systems before this class is for sure better so that you can be comfortable with locks and race conditions in a more contained and smaller setting. I think it would be very rough to have learn all of that from scratch here. But the paradoxical point is that if you take this class first then take Parallel Systems, the lecture material in Parallel Systems will make a lot more sense (most of it went over my head tbh, it would have helped to have taken this class first). I do think people should take the compilers class (SIMPL) before this mainly because that touches on concepts like the stack and heap and even malloc at the very end, which is very nice context to have for this class. But it's not a hard requirement.
You do have test cases for the projects which is very nice, but this class is still hard because the descriptions and test cases are not enough to know the path and direction of implementation you should take. I am sure most everyone used external resources (other lectures like KAIST, GitHubs of other Pintos implementations, LLMs, etc) to get these projects done.
Midterm and final were entirely lecture based. Take really good notes when watching the lectures, in particular understand the tradeoffs whenever they're mentioned, and key ideas and concepts highlighted.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (3.6 / 5): ★★★★☆
Lecture Rating (3.6 / 5): ★★★★☆
Difficulty (3.9 / 5):
Workload: 15 hours/week
Pros:
1. Lectures providing deeper insights into the math principles of some classic machine learning algorithms
2. Introductions to some concepts that are not covered in most AI courses
3. Responsive and helpful TAs
Cons:
1. Maths
2. Peer-grading for homework is useless
3. Not easy A, even if curved (but you may get a better grade if you are B- or C?)
Detailed Review:
This is my first semester course. I selected this course because I took an ML course during my undergrad as a minor course. However, this ML course is much more difficult than the ML course I took during my undergrad. I spent a lot of effort and got a marginal A.
Generally, this course is a theoretical course and is math-heavy. This course includes two parts. The first part is Algorithm, which introduces the math principles of some commonly-used algorithms like decision trees, logistic regression, linear regression, AdaBoost, PCA, and SVD. The second part is statistical modeling, which covers MLE, Bayesian Inference, clustering(KMeans, EM, GMM), kernel regression, and neural networks.
The difficulty decreases with the course progress. The first couple of weeks are the most difficult weeks, and some students quit during this period. What really impressed me was the PAC framework studied in the first week, which is a concept very hard to understand. There are 5 theory homeworks and 5 programming homeworks in this course. The first theory homework took me an entire weekend to finish. After solving the first two homeworks, the remaining homeworks would not take too much effort to finish.
All the homeworks are peer-graded. To be honest, this method is useless, as most comments are useless. Some students didn't give you full marks even if your answer was totally correct. You need to request TAs for regrading. Fortunately, all TAs are very responsive, and I often get a higher mark after I submit my regrading requests.
This course also includes two exams, each exam for one part. The exams require you to print all the materials. I think printing all materials is senseless, as the screen is proctored during the exam. The exams are more straightforward than the homework, but they are not easy, and you still need to work hard to get better grades, as the average exam grade is approximately B-. TAs would provide some practice questions before the exam. Answering those questions would be helpful for the exam.
To sum up, this course requires some basic math background, and you would want to brush up on basic calculus, linear algebra, probability, and statistics before taking this course. It will return to you with insights into the foundation of ML. If you are ready for challenges and really want to learn something, this course would be a good course for you.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (3.9 / 5):
Workload: 22 hours/week
Interesting material, but I had a really tough time with it. Lots of works getting your model in the proper shape. I know its the only class available in the summer, but I wouldn't recommend it. Seems like too much work for such a compressed schedule.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (3.9 / 5):
Workload: 12.5 hours/week
Both Klivans and Liu are good. I like Klivan gave you rich content but that means you need to navigate your way out. Liu was on the other side guide you through the maze. Textbook was half useless with most of the examples are really abstract.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (1.8 / 5):
Workload: 10 hours/week
The class was simple. The lectures and homework is understandable. The exam was pretty easy as well. But I did not like how optional lectures were needed during the exams.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (5 / 5):
Workload: 30 hours/week
I stopped watching the lectures halfway through the class and managed to do all of the assignments. Like everyone is saying, the assignments can take 30-60 hours. You should likely start each one two weeks in advance, but it will likely take a 16-hour coding bender up to the deadline to cement that lesson in your head. Three labs are in C/C++, one is in Go, and another is in Rust. You also learn about CUDA and Thrust in Lab #2. Lab 2 was easily the most involved for me, and it seemed like it was the same way for everyone else at the time I took it. It seemed like only half of the class submitted a completed project. Many of the lab instructions weren't clear on critical details of the assignment, which could cause confusion on requirements even up until the due date. I think you'll have a great experience having had a semester of students to iron out the details and provide feedback. My guess is that they'll revise Lab 2.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (5 / 5): ★★★★★
Lecture Rating (5 / 5): ★★★★★
Difficulty (3.9 / 5):
Workload: 15 hours/week
Pros:
1. Literally the title - best class to end on if you plan to take all of the ML classes (I will explain why below)
2. Professor was very knowledgeable, explained concepts well, and actually tried to engage on the discussion forum
3. Homeworks have a ton of the boring boilerplate code already done for you, so you can focus on actually applying the NLP concepts
4. You actually are encouraged to use LLMs which was really funny and cool to me.
Cons:
1. I never like classes with final projects and this one was time consuming and took a very long time to actually wrap your mind around and understand what you had to do (but graded very nicely)
2. Having to grade your peers' homeworks is always annoying.
3. It's annoying that you're forced to do all of the problem sets after each module. They're all due at the very end of the class and I think most people naturally just wait till the very end to be done with them. Very much a "came in one ear, came out the other ear" situation.
4. (Slight con) Lectures became hard to follow at the very end of the course, I think both because concepts became more obscure and we were focused more on the final project.
Detailed Review:
Professor does a fantastic job in a very clear and concise way at reviewing quite literally the fundamentals of all the other ML classes in the program (ML/DL/RL) at the very beginning of the class. It did a great job to reinforce everything I have learned and help me really understand what the ultimate motivation of ML actually is. And that was exactly the order I took the classes, with this being the last, so I thought it ended up perfect. I definitely would not take this class first, nor would I take it before DL since you definitely do use neural networks, but you could take it before RL since there's little overlap.
Reiterating the above, professor was great. Definitely very knowledgeable and cares a ton about the class. Definitely came out of here, having a much better understanding of NLP.
I think the hours per week is a little misleading that you see. It's lopsided imo: you do not have something due every week, and some homeworks were pretty easy. But the final project took a lot of time, so it's hard to give an overall average. I did take this class with another class (SIMPL) and it was doable, but not without a lot of questioning my life's decisions, especially when SIMPL had it's big assignment/exams due and when this class had its midterm and final paper due. Looking bad, I still think its doable if anyone is interested in doubling up and trying to finish the program ASAP.
Homeworks were fair, some were easy, I think a couple were a little tough. But overall not too bad. And they were designed very well too to help reinforce the concepts.
Midterm was fair, but definitely had a lot of questions that were tricky. You really need to understand what is going on for the conceptual questions, and really need to understand how to do the math calculations, especially attention.
Final project was personally a big time sink but again that was because it took me a really long time to understand what actually had to be done. I think the professor kept it very open ended on purpose to give us freedom, but most of us really just wanted to do the right amount to get an A. Assuming it doesn't change, hopefully this helps: You are asked to choose some NLP model (four are specifically recommended to you) and then choose some standard dataset (again, a few are recommended to you) and analyze with the model and figure out how to fix its shortcomings. Then you given of a ton of papers that did essentially just that, in many, many different ways. My advice to you is that your grade is ultimately determined by how much effort/how unique your approach was, or well really, how many "twists" you applied to the basic path here: Let's say you pick a model, pick a dataset, find where the model's shortcomings are (there was emphasis here), create a new dataset based on a shortcoming you found, train on that new dataset (you can just an LLM to generate this), then show the results on the old dataset and the new dataset, and analyze and ascertain what happened and why (there is massive emphasis on this final part). That approach is basically what is more or less outlined in the last homework and discussed in class, and would probably get you somewhere in the B range on the project. To get a higher grade comes down to the number of "twists" you apply to this basic path. What if you choose two models instead and follow the same path and then compare them both? What if instead of one dataset, you chose two datasets instead? What if instead of generating one dataset based on one shortcoming, you generate datasets for each shortcoming you found? How could you go above and beyond just doing a basic analysis of the results (a couple papers do this in clever ways)? Really just think about the ways you can enhance the basic path and make it more involved/complex, as the more effort is shown, the better your grade will be. Do that, and make sure to really analyze your results well and you will definitely get an A.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (2.9 / 5):
Workload: 10 hours/week
I really enjoyed the subject matter. Teachers were cool as well. I have pretty heavy experience with C/C++ so the projects were relatively easy compared to the other classes I've taken.
Overall Rating (3.9 / 5): ★★★★☆
Professor Rating (0 / 5): ☆☆☆☆☆
Lecture Rating (0 / 5): ☆☆☆☆☆
Difficulty (3.4 / 5):
Workload: 15 hours/week
The class is taught really well, and the TA (Macke) was extremely attentive and helpful. On weeks projects were due, workload would really ramp up. Especially in the last week with a final and project due. The final exam had a lot of math which would make a minor calculation mistep cost you a lot of points. The programming projects were not extremely difficult, and easy to get full marks on them. But the homeworks can some times be a bit challenging if you're not understanding the text well.