Hacker News new | ask | show | jobs
by zumda 5079 days ago
I took the Machine Learning course by Andrew Ng some time ago. And it was a really great experience.

The lessons are interesting, and I really like their concept of quizzes in the middle of the lessons. They just show the question on the video, he explains it, and they stop the video and you can choose which one is right, or type in the number.

The homework is also well done and enhances the knowledge from the course. I had a lot of fun doing the lectures each and every week. You probably want to put aside a set day and time when you will do it, though, or else it is easy to do other things and "do the lectures later".

If they continue like this, there is soon no reason to go to a university anymore. :) (which is a catch-22 since the lecturers are payed by universities...)

3 comments

Prof. Ng's ML course was a real eye opener. It wasn't hard but was very practical. Then when you need more theoretical background you can watch recordings of his stanford ML class.
I've been watching the lectures for the same course. Having them split into short self-contained videos (~5-15mins) has made it very easy to fit in around university and a toddler.

For example, whenever I do the washing up I put my tablet on the windowsill and watch a video. I've also been watching them instead of browsing the web as a more structured break when studying. The fixed length of a video makes it much easier to be disciplined with the length of my breaks. The subject matter is different enough and presented in such a digestible way that it really is a good break.

I didn't like the homeworks on the ML course. The programming exercises were child's play for someone who already knows how to program, you just had to translate math equations to code. I hardly learned anything by doing them.
You were taking the wrong course, I would argue. You should do the one on AcademicEarth (CS 229). The online course was CS229A Applications of ML.
You thought that figuring out how to vectorize the solutions was "child's play"? Sure, coming up with any-ol' working solution was child's play, but figuring how how to get the solutions to be one or two lines of code containing only matrix operations wasn't child's play. It wasn't rocket science either, but I had to put on my thinking cap a bit.
One thing I've noticed in most of the online classes is a tendency among a vocal subgroup to talk about how easy the material is, even when it's not.

It's just alpha nerding, same as any other venue. And if it's really that easy, then as you say, why not impress us with how you've gone beyond it. Anyone who can type can say it's easy. Show us something.

Why can't we have a real discussion here on HN, without our egos being hurt and without throwing around such subtle insults as "alpha nerding"?!?

I was just being honest. The exercises were easy for me. I'm sure they were not for many people. I don't care, because I don't compare myself to others in this way. In comparison to other people around me, I know I'm very smart/capable for some things, and suck at others. I'm not saying this to feel better or so that you would respect me more. I'm saying this because it's fact. The way I see it (without having to compare myself to other people), I'm capable enough to reach many goals in my life, but I would like to improve myself in many areas still.

But anyhow, you've completely missed my point.

As you say, not child's play, not rocket science. But, that's besides the point. That has nothing to do with programming ML, but everything with programming Matlab. As I said, the programming exercises would be more suitable for a programming course, not a ML course.

In addition, vectorization wasn't even necessary to solve the problems. Yes, that's how I too made the exercises more interesting, but that could be done with almost any kind of programming exercise in Matlab.

I think there's some benefit in figuring out the math well-enough so that you can translate each formula into a small number of linear algebra operations without any loops. They weren't always expressed that way. If they had been, then the homeworks truly would have been child's play.

If it's concentrating more on the math than on applying the stuff to real-world problems that bothered you, then you wouldn't want to take the real full-blown Stanford class. That class is largely doing rather difficult math proofs and the like.

I'm not sure I understand the argument that you could have solved the problems in a lazy fashion, however. Such lazy solutions aren't good for the real-world, as they don't perform well-enough. Part of the insight taught in the class is that you have to look for these sorts of performance optimizations in order for the solution to be feasible to use in the real world.

If the problem is that other students could pass the class without having put in the same effort as you and I did, who cares about that!

I don't want this to develop into a flame war, so this will probably be my last reply in this thread...

I studied math. I love math proofs. It's just not what I would expect if I would sign up for a ML class. Note, however, that I'm not complaining about the contents of the ML class, which I think were awesome, a really nice broad overview of the ML techniques. I really think I learned a lot. I'm just complaining about the homeworks, nothing else. They were not ML homeworks, they were CS homeworks (particularly, Matlab class homeworks). I don't know the contents of the real Stanford class, but believing your description, the same kind complaint applies.

You're wrong when you say that "lazy solutions" don't perform well in the real world. In the real world, robots aren't programmed in Matlab (I hope). In compiled languages, loops are just as fast as vectorized code (which is implemented using loops). Vectorized code having better performance than imperative looping code is just an artifact of the fact that Matlab (and e.g. R) are interpreted languages. (Sure, there might be some additional optimizations possible on vectorized code, like SIMD instructions, cache locality, special algorithms for sparse vectors/matrices, but this is in most situations premature optimization. Being able to write correct code and read it later beats 2% gain in performance!)

The reason for all the math proofs in the real Stanford class is, I assume, because it is training you to have a deep understanding of Machine Learning, and perhaps even to become a Machine Learning researcher. This is the type of education that I received at MIT, and there's much to value in it. If you can do all these proofs, then you probably really understand things. On the other hand, it can be brutally difficult, and I still have stressmares when I sleep to this day over this brutally difficult style of learning.

If you really want to understand ML, you should do the real class. All the material is online, so you could do it at your own pace.

The online class, however, was a watered-down version of this, and designed to give you a taste of the real class without being brutally difficult. Perhaps it will inspire some people to do the work of the full-blown class.

On the other hand, sometimes you just want to know how to apply some technology to real-world problems without having to understand all the gory details. I think the online AI class is more along these lines. They had a final project, for instance, that was structured as a contest to see whose solution worked the best. I think they used canned ML packages instead of coding them on their own, but then wrote their own code to apply the canned ML software to some sort of open problem. Perhaps you would enjoy that class more.

As to getting only a 2% performance gain from vectorizing your code, I'm skeptical of this claim. I know that highly respected people (e.g., Guy Steele) have claimed that people still use Fortran, despite its drawbacks, in part because of it superior performance over C in being able to vectorize code and getting substantial performance gains. Furthermore, a vectorized algorithm is more easily adaptable to a Hadoop cluster, or a GPU, and both of these can lead to huge performance gains.

In higher-level languages, such as Java, vectorized solutions can also lead to much higher performance, as you can use a native linear algebra library, which will, no doubt, perform better than Java loops.

Furthermore, if you can turn an algorithm into linear algebra, you will have a much more maintainable solution, as you can turn a program that is several pages long into one that is several lines long. That is surely going to be easier to maintain!