I chose this as my first AI-centric course as it’s relatively “easy” (I put this in quotes because easy is in the eye of the beholder) and was entirely project-based allowing me to level up on my Python while also giving me time to explore mathematical concepts that were completely new territory. As I’m taking CS6601 – Aritifical Intelligence in the fall, I wanted a course to provide exposure to the field of study without being overwhelming. I can say pretty definitively that this course did all of those things while being pretty fun at the same time.

First off, however, a critique. The lectures, created by Professor Sebastian Thrun, were unfortunately the worst that I’d encountered at Georgia Tech so far. It’s hard to tell why that is, but my main issue is that they lack depth (many a time it felt like we were hand-waving over some key concepts or insights) and were poorly paced (with quizzes nearly every video, sometimes after just 60 seconds of instruction). That’s not to say the lectures weren’t valuable – they were and are still far beyond many of the “best” lectures that Oregon State University’s online program provided. They just happen to be of lesser quality than GIOS, AOS, and HPCA. Perhaps that speaks more to those courses/professors than to anything else.

Lectures aside, however, I thought the instructor (Jay Summet) and the team of TAs performed admirably given that most of the real work was on their shoulders. As the class is nearly entirely project based (with only 28% of your grade coming from pre-built homeworks that likely haven’t changed from the initial course developement), and both Python version changed and student plagiarism forces these projects to change from year-to-year, most of the burden is on this team to develop, test, support, and maintain new and existing projects. Considering the difficulty of doing this while the lectures remain unchanged, my hat goes off to them.

There were six series of lectures (each accompanied by a problem set done in Python) and five projects. The first three large projects were my favorite, so I’ll just give them a brief recap here:

- Asteroids – required you to implement a Kalman filter to simulate the driving of a spaceship through an asteroid field. Kalman filters are state projectors; given a current state of some environment, use knowns to project that environment into the future and then update your understanding of that environment after the next timestep. In this simulation, our environment was a space filled with asteroids that we could sense with radar. Our job was to use the knowledge of each asteroid’s current position and velocity to guess their velocity and position in the future. By using this guess, we were able to move our ship through the field without hitting any asteroid, safely plotting a path out.
- Mars glider – another simulation wherein you were given a topographic map but without any idea of where on the map you were as you shot into the atmosphere of Mars. The task was to, using a particle filter, develop a belief of where on the map you were before you fell too far into the atmosphere. A particle filter can be thought of as a state estimator in that you create thousands of guesses of an object’s state (in this case our glider’s position and direction). As the simulation progresses, you match the guess with the reality (in this case that would require that we use the topographic map to see if our guess’s height above some area matched that of the real glider) and if the guess is too far away from the reality, you eliminate that guess from the pool of potential guesses. By the end, you only have a few guesses left, and you better hope they’re right!
- Warehouse – here our task was to plot a robot’s path through a fictitious warehouse (using a modified A* search algorithm). To do so, we were given a start point, boxes in the warehouse to pick up, and map that we could traverse one step at a time. The warehouse contained walls and floors that sloped (meaning that they had an additional cost to get out of certain areas if you ventured too far into them) and at each step we could move our robot orthogonally or diagonally. We had to navigate to a box, return it to the start point, and then navigate to the next box, repeating this cycle until all boxes had been returned. In doing so we built up a series of actions (“move left” or “put box down”) that we returned to a controller that tested our plan against the optimal solution.

My qualms with the lectures aside, this was probably one of the most fun college courses I’ve taken. Instead of splicing bits (which is fun, but sometimes tedious) we were dealing with concepts, data structures, and algorithms that felt closer to the things that led me to continue my education to this point. Seeing simple heuristics and mental frameworks combined with mathematical theorems so that we could better explain the world around us (and give that knowledge to software/robots) was incredibly rewarding and thought provoking. In short, 10/10, would do again.

]]>Artificial intelligence is the pinnacle of guessing as it employs practical techniques (like search algorithms) and combines them with statistical tricks based primarily on probability density (usually Gaussian) distributions. The mathematics behind these distributions, in my opinion, can often seek to confuse and distract from what is actually a delightfully simple concept.

Unfortunately, we have to start with the math to provide some concrete foundations (and because it’s not as fun as the heuristics in a search algorithm; gotta have some vegetables before we get to the sugar). You’ve undoubtedly seen a Gaussian distribution. If you’ve been in any course with a curve, the professor has likely put on some slide, a picture that looks something like this:

In this simple chart we see two fundamental concepts:

- A discrete set of scores represented by a histogram
- A continuous line overlaid on top of this histogram in the shape of a bell curve

The bell curve is something we are all familiar with, but may not have much mathematical intuition around. The peak of a bell curve represents the mean (average) value. In terms of probability, we can think of this as the most likely value to be selected were we to randomly choose a score from our set of scores. If we look at the curve in terms of these scores, we can see the majority of scores are clustered around this peak. The density of these scores around that peak (meaning that the peak is higher and the bell is skinnier) represents a higher density or, lower deviation from the mean. This is the second component of the bell curve, the standard deviation, or the amount of variance in the values. The wider the curve, the lower the variance (and lower the standard deviation), while a more broad curve represents more variance (and a higher standard deviation).

When using Gaussian curves in the context of artificial intelligence, we think of them in terms of “belief.” Provided a sensor reading (from a camera, temperature sensor, pressure gauge, etc) how firm is our belief that this value provides knowledge about the state of the world around us. If we plot the range of our beliefs, then it would come out in the shape of a curve, with a skinnier Gaussian representing a stronger belief of a specific value.

It’s important to recognize in this moment that, just like when a processor predicts the direction of a branch, we’re asking the computer to guess based on the likelihood of being correct. The computer is not actively making a decision, rather a human has decided that, given a set of inputs and accepted range of outputs, the computer should take some action. When a computer guesses incorrectly, it’s because a human has decided (explicitly or otherwise) that being incorrect is acceptable or, more likely, highly unlikely.

This is really no different from how we treat guessing in our daily lives, it’s just that we base our guesses on intuition and thousands of hours of experience as opposed to mathematical models and information stored on a hard drive. Every step I take is a game of viewing the world around me, moving, sensing, updating my belief that I am, in fact, in a new location, moving again, and repeating this set of actions. This model is represented in artificial intelligence techniques like Kalman or particle filters where a machine:

- Creates a view of the environment
- Takes an action
- Takes a measurement of the environment
- Updates its view of the environment based on the combination of the action and measurement

In many ways, the work we do with artificial intelligence is to formalize the actions that humans take for granted. This is done through mathematical and algorithmic models, but the end result is very similar.

This is more apparent (and less mathematically rigorous) in search algorithms. The idea behind these sorts of algorithms is that we are given a starting location, end/goal state, and a notion of how we may move about in the environment. You may think of this as setting out for a walk to a park knowing how to identify the park, but perhaps not knowing where exactly it is and certainly not knowing what obstacles are between you and it.

Like a machine, when confronted with this situation humans may try several different guesses in the hopes one of them pans out:

- Walking forward along a path until you reach the park or encounter an obstacle and then backtracking (depth-first search)
- Walking back and forth between all possible paths forward, rejecting paths as they encounter obstacles and expanding new paths that appear (breadth-first search)
- Walking forward along likely paths, using the general knowledge of how far away the park is so that you can reject certain paths earlier so long as they’re not blocked (A* search)

The third heuristic is the choice that is typically used in most software. While it presumes some knowledge and incurs some overheads (primarily space complexity as it requires you initialize a map of the environment in a way the other approaches do not), it typically provides the most optimal solution faster.

All of these concepts certainly merit more discussion than what is given here, but it’s vital to understand and accept the notion that computers are no more omniscient or omnipotent than humans (which is to say not at all). They may perform rigorous calculations in ways that humans cannot, but like us, they are just (really) advanced guessing machines.

]]>