Finally I finished semester I doing CS master's degree in Warsaw University of Technology (or known as Politechnika Warszawska for Poles) and I am quite satisfied with this semester result: 4.8/5. Not bad after 4 years off from academics.
Perhaps I need to tell a few stories why I ended up here first. Since 2014, I was actively looking for an opportunity to continue my studies. In late 2014, I was accepted in TU Delft, but until May 2015, I didn't secure any scholarships. There were some other options such as loans or doing a contract with company, but after some considerations I decided to let it go.
A few days after accepting the fact that I am not continuing studies that year, a friend of mine told me about a scholarship from Poland's government. I checked the requirement of the scholarship and I didn't really need to prepare anything tedious. The only thing I wasn't sure is which university I want to go to (this was asked in the application form). At that time, I knew nothing about universities in Poland. Most of my friends usually go to UK, Australia, The Netherlands (TU Delft is somehow like a sister university with my almamater. It's so common for ITB graduates to go there that in an interview for a scholarship I was asked if I was just following others), or US for those who want to give some more efforts preparing GRE/GMAT. Needless to say, I had no one to ask how good the universities in Poland are. The only thing I know is that they are good in competitive programming. That reason was enough for me to check the universities in Poland offering Computer Science/Informatics.
Checking solely based on the rank and the courses that they offer, my options were between PW and PWr (Politechnika Wrocławska). After some thought I decided to choose PW since the courses are more theoretical than those offered in PWr. I have never had problem learning new languages or stacks by myself, so learning practical things in university would not be the most effective way to learn something new. It would also be easier if I am interested to get PhD later. So I applied for this scholarship and chose PW. It was 3 months later if I remember correctly that I got an email saying that I was selected as an awardee. I resigned from my job and decided to take the scholarship.
But before I went to PW, I had to take Polish course for a year in PWr. Besides learning Polish, I also got Math, Physics, and Informatics. Other than Polish, the courses were pretty much useless. We were taught high school level Math and Physics. I never had to study to get perfect score in every Math's exam. I even got 5.5/5 for Physics. I didn't understand why they make this preparatory year as an obligation. During that time I often asked myself if I was wasting my time. But finally one year passed and I could start the master's degree itself. Exciting!
It was hard for me to find a personal review of the CS MSc programme in PW and as we know that an institute might have a very different system than the others, so after each semester, I will write a review with hope that it could be of any use for others. I will describe it into 3 aspects: course activities, grading system, and the courses itself.
In general, there are 4 activities in a course: lectures, lab, project, and exercise. Lecture is the obligatory part and the other 3 depend on the lecturer itself. For example in Pattern Recognition there are only lectures and labs. In Evolutionary Algorithm course, there are lectures, labs, and projects. For Image and Speech Recognition, there are lectures, project, and exercise.
I think it's common everywhere for lectures, labs, and projects. But for exercise, it is the part where the lecturer will solve a theoretical problem. To give you a clear picture, this is the exercise for Image and Speech Recognition. In my bachelor, this kind of problems is usually a homework. Oh right, there is no homework here! But you should really pay attention to exercise. The lecturer with a very high chance (I am talking about 90%-ish chance) will use it as exam questions.
In Poland, grades are scaled from 2-5 with < 3 considered as not passed and 5 is the highest grade we usually could earn. In some cases, a lecturer might give you 5.5. The grades are converted from the final marks that you earn over the semester.
In CS, usually most courses require > 90% to get a 5 with strict ranges (not distributional). But don't worry. I was surprised at first to know that I need at least 91 to get a 5 in Pattern Recognition. I had Machine Learning and Artificial Intelligence in Bachelor's and I know how hard the exams could be. You need to understand every bits of the course AND really good in problem solving to be able to get > 90%. So at the first lecture, I was like "is everyone here a genius?", but hey I scored 98. The exams were mostly the same from last year and quite obvious. For Evolutionary Algorithm, my final score was also 98.5.
With strict ranges (e.g 81-90: 4.5, and 91-100: 5), I think the lecturer couldn't throw some "interesting" problems on exams, otherwise many students will fail. So that's why they just give exercise or last year's problems as the exam questions. I was surprised that some Polish students are still able to work. But knowing how it really works, it is usually enough to be able to solve last year problems/exercises and pass the course. So they could just skip the class and study one week before the exam.
I personally prefer distributional score. That way, the lecturer could give some interesting problems. And I actually hate converting final score to a grade. For example, my final score for Image and Speech Recognition was 80 (4.5), and you know how many points I need to get a 5? Just 1. I am not sure why I very often become a victim of this conversion. As you see that 1/100 is not fairly translated into 0.5/5. I have been watching a Youtube channel Cambridge Compsci lately and just knew that in Cambridge, they don't convert the final score into grades, but rather use it to rank and classify the degree: "first", "upper second" (2.i), "lower second" (2.ii), "third", "pass" or "fail". This is what makes Cambridge a very competitive environment.
This semester I had 5 core courses: Pattern Recognition, Evolutionary Algorithm, Image and Speech Recognition, Discrete Random Processes, and Digital Signal Processing. I will explain one by one below.
In this course, I learned about nearest neighbour, bayes, linear classification, dimensionality reduction, clustering, ANN, HMM, string matching, decision trees, recognition quality enhancement (mostly meta-classifiers), and some pattern transformations (e.g PCA). I am not sure why the string matching is taught in this course. In my bachelor's, I had that topic in Algorithmic Strategy.
I actually could transfer this course from my bachelor's. But taking this course just reminds me how much I love this kind of topics related to AI and Machine Learning. And the lecturer is super cool. He is really articulate and structured when explaining things. Most of the time I only studied for 15 minutes/week (when I was in the metro on the way to the class). He also likes to ask the students to ensure that we understand what he explained. I remembered one funny occasion in a lab session. He asked a question (I was busy with something else) and no one answered him. The whole lab was in silence for quite long and I was curious what we're doing and asked him "Are you waiting for answer?" I thought it was a hypothetical question :)
Another cool thing with this course is that, for the labs you will implement some classification algorithms from scratch using Octave (kNN, bayes, linear classification, ANN, and improving a meta-classifier). The lab is 4 hours and single-handedly run by the lecturer himself. I really enjoyed every labs taught by him. I couldn't remember any other lecturers that would run the labs and code in front of their students. For that reason, I asked the lecturer if he has some topics for my thesis. He gave me some papers about Probabilistic Topic Models. I haven't finished reading it yet, but I think it will be fun working with him. After the labs, we were only asked to do a few tasks and write the report. I usually finished it in a few hours on weekend except for a lab about linear classification. I tried many things until I finally found a way to improve the recognition result.
For the exam part, if you know how to solve last year's problems, you'll be fine. But, the lecturer provides some questions called "problems to think through before the exam". The questions are much more interesting there. It will make you open some books.
This course is the best course that I had this semester. If you're an Erasmus student, I would really suggest you taking this. Usually Image and Speech Recognition is more famous for Erasmus students. But trust me, you will learn much more from this course.
In this course, I learned about global and local optimizations (unconstrained or constrained), ANN, and genetic algorithms. Each topic has one lecturer. One for global and local optimizations, one for ANN, and one for genetic algorithms. There are also labs and projects for this course.
For the labs and projects, we used Matlab. The labs were very easy since most of the things we needed are already implemented in Matlab. For each lab, we probably were asked to write 5-10 lines of code. There were 3 projects, one for each topic. It's also pretty simple. I finished each project in just one weekend.
I would say this is the 2nd best course for this semester. Everything is run well. Two things that I would complain is how the courses activities were organized and the exam. The main lecturer decided for this semester that we would finish all the lectures in 2 months, and after finishing all the lectures, the labs and projects would be given. This is not good at all. All the workloads were done in December. It would be better if after finishing one topic, we do the lab and the project related to that topic (like Pattern Recognition).
The exam was quite disappointing. It was only 45 minutes with 10 questions that need us to summarize the whole topic. An example of the question is something like this: "Formulate general non-constraint optimization task. Give definition of the f(x) function gradient in the point x. Describe a chosen algorithm of gradient minimization and draw its flow diagram." I complained at first that it would be impossible to answer all of them within 45 minutes. But the Professor answered with a smile and said "It's a natural selection". I remember what I was thinking at that time: "OK. It's his game. There's nothing I could do except to play his game." I answered as fast as I can writing all the things that I know. The last 4 questions about ANN were multiple choice and made much more sense. I answered 4 of them in just the last 1 minute. I had no time at all to check my answer. I was surprised that I got 33.5/40 (it was the highest score).
Image and Speech Recognition
In general, the lectures contain topics related to image recognition (including preprocessing, iconic processing, and object recognition), speech recognition, pattern recognition (yes, you will learn again all the classification/clustering algorithm here. But not as much as in the Pattern Recognition course), and HMM (again).
There is no labs for this course. But in the beginning of the semester, I got a project that I need to finish in one semester. The project part is something that I was struggling in this course. I got a project to recognize a palm with iterative map estimation and the iterative map estimation was explained at the very end of the lectures. I asked the assistant many times if he has some other material about this, but he always pointed me to the lectures slide (I read the lectures slide many times and could not understand how to apply it). I understand the iterative map estimation, but I couldn't understand how it could solve the problem. Since projects or labs from other courses are fairly easy (except for Discrete Random Processes), and I always do something easier first, I abandoned this project until I realized that it was already December. So I implemented it with other methods. On Christmas holiday, I locked myself working 16 hours/day for a week on this project. I also missed prototype day because there was no written announcement that it was moved. I had a feeling that the lecturer announced it on the retake days (for those who were not doing well on the first exam, they needed to attend the class and finish some tasks from the lecturer). I didn't have to go to those 2 days, so I probably missed the information. It was also moved quite far from January to December. When I emailed the assistant if I could show the prototype on another day, the answer was that there's nothing I could do. So I just let it go. But in the end, I actually got 36/40 for the project. I guess the assistant is kind when it comes to giving marks.
My final score for this course was 80 (4.5). Since the lecturer lowered the grades, to get 5, we need to get at least 81. So close! I asked the lecturer if I can retake test 1, but the answer was that it's not possible for me to improve my grade. I messed up on test 1 and only got 14/30 (with that score, it was already considered OK by the lecturer - the mean was 7/30). My thought was that, even if I got 5/30 if I retake test 1, I would still get the same 4.5 for the final grade. But there is nothing I could do. If only I could transfer 20.5 points that I earned more from Pattern Recognition and Evolutionary Algorithm :)
Compared to Pattern Recognition, I am quite disappointed with this course. I think giving labs every 2 weeks would be much better than giving a project for one semester. With labs, we would learn to implement more stuffs than just those that were asked in the project.
Digital Signal Processor
I have zero interest on this course. The lectures contain a bunch of information that we could google. There is nothing to 'learn' there. This course is pretty much useless for me (I still attended every single lecture though). But to be fair, it's organized very well. The labs are easy to follow and the instructions are clear. The exams questions were just trivias with only short answers. And 90% of the questions are the same with last year's exam. I got the lowest score actually (26/30), but in the end I still got 5. Yes, everyone gets a 5 :)
Discrete Random Processes
This course is really interesting but at the same time the most demotivating and time consuming one for me. The main topics of this course are branching process, poisson process, queue theory (M/M/C blocking and delay), and renewal theory. There is one exam and 5 labs.
The lab is the hardest part and it made me stressful. Every week, I spent my time mostly finishing the labs for this course (See here for an example of the lab). I used Pomodoro Timer to keep me focused on doing just one thing. For one lab, I spent 10-15 hours to finish it despite the fact that the lab slot is only 2 hours. It requires you to understand the theory, write the code, run the simulation, and write the report. The lecturer will also find every single mistake that you do. On the first and second lab, I only got 3 out of 4. After that, before submitting the report, I always asked the Professor to confirm my solution.
How the lab is run is like this: The lecturer will come to the lab but won't explain anything, but he will answer anyone who asks. In the first lab most of the students came to the lab. The lab tasks have been the same for years and we could get easily reports from students who already took this course. Knowing how it works, by the 3rd lab, there were only 3 students. On the 4th lab, there were only 2 students. On the last lab, I was the only one coming to the lab. No one really cares! I am not religious person at all, but cheating is something immoral for me and I know that it would destroy my confidence. When I finished the last lab, I was really glad that I could go through all the labs by myself (even when someone already sent me some reports from previous year).
But in the end I got 4.5, which I am quite satisfied considering that I didn't write strong solution on the exam. This is probably the first Math-related subject ever that I don't get an A over the course of my life :)
At one time, I hated the Professor. But realizing that he still came to the lab knowing that I would be the only one coming, I started to respect him. He is also very responsive and always answers my email (in every lab, I always asked him questions. Only math genius who are able to solve all the tasks without asking or confirming :p). I am sure that he is a well-respected mathematician in Poland. He's been a professor since 70's. I once came to his room and there are so many awards on the wall!
Overall, I am satisfied with this semester. Now, I could also see myself taking PhD. That was something that I never considered.
I think I have written a very long blog post. If you make it to this sentence, I assume that you are interested on this MSc programme? :)