Hype Dark logo






Searched for

by SS at 6:55 am on Saturday 26th April

I came to the MEng program having worked for three years and travelled for a year before then - essentially four years out of my undergraduate degree in Computer Science. Even then, the last time I studied maths seriously was in the first year of my undergraduate degree, so about seven years before starting the MEng. That being the case, there were a number of subjects I'd wish I'd brushed up on before starting my coursework at UC Berkeley.

The courses I took were Advanced Robotics, Computer Vision, Introduction to Machine Learning and Applications of Parallel Computing. I'll start with general advice and talk about specific tips for each course at the end. These are roughly in order of how important I think they are.

1) Linear Algebra: This is by far the most important area of maths to cover if you study any sort of graphics or AI course. It was heavily used in all four of my courses. There's a great tutorial online here which is actually written by a UC Berkeley professor. Know this well and you'll spend much less time looking up the basics.

2) Statistics: Know your basic probability and distribution rules. Most of AI is heavily statistics based - in particular, Machine Learning is a lot of statistics and most popular successful AI techniques now tend to be probabilistic. Sebastian Thrun has a great overview paper and is the author of the main text on this area.

3) Optimisation: Optimisation is heavily used in the Advanced Robotics course and appears to be crucial for a lot of cutting edge computer science. I had NO idea what this was before starting and this put me at a significant disadvantage. Learn how to formulate basic optimisation problems at the very least. This book by Stephen Boyd is the definitive text on the subject.

4) Matlab: Matlab is a programming language / development environment that is heavily used by academics. As a software engineer, I particularly dislike programming in it - however, most homeworks assume you will be using it and so most examples and starter code is written in Matlab. While you can submit assignments in Python or other languages, the path of least resistance is to use Matlab. Matlab offers a student license but the department should pay for a license for MEng students. In the meantime, you can use the open source Octave software, which is syntactically very similar.

5) C++: If you intend on taking the Applications of Parallel Computing class (highly recommended - it is excellent) or implementing any actual robotics code, you would do well to become familiar with writing and running C++ programs.

6) Linux: It's useful to have some basic ability with the Linux shell and to have a Linux virtual machine set up. You may or may not use this - depending on whether you take systems level classes or not. I recommend installing Linux Mint in Virtualbox.

7) Git / GitHub: Source control will make your life a lot easier. Learn this well and it will make collaborating with peers on homeworks and your capstone project much, much better. Try the brief interactive tutorial on GitHub.

8) Advanced Robotics: Regardless of what it might imply, this course does not rely on the Introduction to Robotics course. Introduction to Robotics is more about robotic manipulators and 'traditional' robotics. Advanced Robotics is more about the theoretical underpinnings of the algorithms to allow planning, localisation and state estimation. It is not practical at all (much to my disappointment) and is very state of the art. I often struggled to understand the motivation for several techniques until the end of the course. However, you'll find that you know most cutting edge techniques by the end of the semester. It also assumes prior coursework similar to the undergraduate Introduction to AI course at UC Berkeley - so I advise taking Sebastian Thrun's Introduction to AI course on Udacity if you haven't taken anything similar before. This is a hard class but thoroughly satisfying once you complete it!

9) Computer Vision: This is a great course taught by a pair of very energetic, enthusiastic professors (Malik and Efros). Highly recommended.

10) Introduction to Machine Learning: Taught by the same professors as Computer Vision, this class suffers from it's large size - being primarily and undergraduate class. The work load is high but the skills learned are very practical. I'd recommend it but it requires a strong stats background.

11) Applications of Parallel Computing: While the course content itself focusses heavily on scientific computing, the homeworks assignments are very practical and very fun. One of my favourite courses so far.

12) Collaborating: Something I realised quickly was that it was very useful to work together on homeworks with my peer group. You'll often find that you can work together to fill in gaps in each other's background - which is essential when you're coming from another country with a different educational background and sometimes lacking pre-requisite coursework. I wasn't able to work with many people for the Advanced Robotics course and this made the experience almost intolerably difficult. On the other hand, working with motivated peers who were also taking Computer Vision made that class much more enjoyable.

I hope this advice helps - feel free to chime in in the comments below!

No comments yet
No comments yet!

Comments have been disabled. You can probably comment on this post on Geek On A Bicycle.


by SS at 9:28 pm on Friday 4th October

The tragedy of studying at Cal is that it's a stunningly beautiful place to study but there's scant time to explore! I've been getting slammed the past couple of weeks - having started the many interviews that are to come, and having struggled on a homework assignment. As soon as that was handed in, another was immediately available and I'm back to square one now with two on my plate.

One of the classes I'm taking, Advanced Robotics, is excellent and is exactly what I was looking for in my Master's degree. That said, I can't help feeling somewhat lost with each class. It's getting better as we've moved away from controls (which is ostensibly part of mechanical engineering, which explains why I had no idea what was happening for the first 6 weeks of class) and moved back towards classic AI. It also wasn't immediately clear to me, particularly without a background in controls, what exactly the relevance of the methods we learnt was. I'm now starting to get an appreciation of how you might be able to use them though, mainly through the homeworks.

In the last homework, we programmed a tetris game AI that uses an approximate linear program to generate a policy for how best to play tetris. We also applied linear quadratic regulators to help stabilise a inverted pendulum (a famous problem, also known as the cartpole problem) and to hover a helicopter. In the first case, we used a convex optimisation library called CVX to solve a linear problem. This approach seems particularly common in courses here at Berkeley.

I helped my teammate Gita out with one his homework assignments to find the shortest path in a graph. Instead of just asking students in his class (CE290i) to implement Dijkstra's, they managed to shoehorn the most horrific Java wrapper of a C linear program solving library into their assignment. Instead of writing a beautiful piece of code that could have solved the shortest path problem in maybe ~ 20 lines of Java code at a stretch, it was necessary to generate a string, pass it via some obfuscated interface to this solver and parse the output (of questionable precision). Yuck.

For the majority of my assignments I've been using MatLab, which presents a nice clear interface for implementing programmatic solutions to mathematical problems. It's not my favourite language though - I like writing clean code and it's easily possible to write unintelligible code in MatLab. Perhaps in the same way that you could in other weakly typed languages like Python or Javascript. MatLab also runs extremely slowly - being an interpreted language. Prof Abbeel mentioned that if you were actually implementing these solutions, you'd use C and see a speedup of ~ 1000 times.

In particular, one of the ideas that came to me during the many bleary eyed hours I spent staring at / trying to do the second homework was to use some of the control policy algorithms from robotics to control thyroid disease. As I've mentioned before - I suffer from Hashimoto's thyroiditis, an autoimmune disorder which effectively means my thyroid gland functions less well over time. The typical approach advocated by mainstream physicians treats it pretty poorly. I feel normally energetic on about 1 in 7 days. The other 6 days of the week I'm sleepy for a good part of the day (hypothyroid). Often I'm unable to focus well (hyperthyroid). It's a difficult condition to live with as a normally productive person. Still, I manage.

Where a control algorithm could come in is by more closely modelling the relationship between the different thyroid 'variables'. The normal treatment assumes that a patient's TSH (thyroid stimulating hormone) level is inversely proportional to their Free T4 (thyroxine) level. i.e., if your TSH is high, you need more synthetic thyroxine. If it is low, you need less. From my reading and shallow understanding of the endocrinological system, that's not an accurate assessment of the situation. There are perhaps five variables, if not more that need to be tracked. A patient's thyroid gland may not adequately convert T4 into T3 (this is the form of thyroxine that is usable by the body). Additionally, this conversion takes its toll on their adrenal system, requiring cortisol to carry out the conversion (I think). Taking supplemental T4 for a significant period of time can deplete these levels.

I'd be interested in trying to work out the actual relationship between these variables and perhaps implementing a control algorithm that could determine the optimal policy for medicating a patient. The only caveat is that collecting this data would be exorbitantly expensive (~ $200 for every data point) and that you'd need a lot of it. This is one of those projects that might have to wait for my one-day startup to go public. Incidentally, this autoimmune disorder is the same that Larry Page suffers from. I'm hoping that having a billionnaire with the same problem means some actual research will be done into it :).

This digression aside, these assignments are tough. I suspect they'd be easier if it hadn't been 4 years since I finished my undergraduate degree (and about 6 years since I last studied any maths). The Advanced Robotics course is tough too because I'm the only Master's student taking the course. I've tried to make friends with PhD students to study with but it's difficult - they have their own offices and are generally smarter than me! Luckily there is a sizeable group of Master's students to work on Computer Vision assignments with and that seems to be going well so far.

The other main activity of the last two weeks has been forming (by way of recruiting MBA students) a team for our application to the Lean Launchpad class at the Haas (business school) run by Steve Blank. This is one of the classes that helped me choose to attend Cal based on the advice of Kevin Yien and a handful of other students. This started with almost getting shot down by Steve Blank after my very first pitch at the information session (thankfully saved by an accurate but witty retort). It continued with a networking session and ended up with us forming a team with three MBA students, myself and my teammate Gita - also an engineering student.

Somehow this class wasn't widely advertised amongst CS graduate students and most MBA students wanted people who could build software for their teams. It was a little sad to take myself off the market of available team members. This class won't fulfil my core requirements next semester which means I'll be taking it in additional to my normal workload. I'm hopeful that there is some crossover between the work in the class and our capstone project. Still, next semester is going to be extremely busy.

I've made a conscious effort this week not to buy granola. That was my comfort food of choice and being high in both sugar and fat, it probably wasn't doing good things for my health in the quantity that I was consuming it. I've also succumbed to the coffee shop culture here and have been consuming caffeine regularly. Hopefully I'll get a chance to reset soon.

No comments yet
No comments yet!

Comments have been disabled. You can probably comment on this post on Geek On A Bicycle.