CMPSC 291K Machine Learning

Machine Learning is about developing systems that automatically improve their performance through experience. It has found massive applications in real products. Examples include systems that recommend online videos, automatic translating languages, and autonomous driving vehicles. This course covers the theory, models, and practical algorithms for machine learning from a variety of perspectives.

CMPSC 190I Introduction to Offline Rendering

This course will teach you everything about offline rendering, so you will be able to write a fully functional industry-level renderer (such as Disney's Hyperion and Pixar's RenderMan) that produces stunning graphics. Topics in this course will cover the physics of light, the rendering equation, Monte Carlo integration, path tracing, physically-based reflectance models, participating media, other advanced light transport methods, production rendering approaches, and so on.

CMPSC 292F Machine Learning on Graphs

Machine learning on graphs (static/dynamic, attributed, undirected/directed, single/ensemble) has emerged as an important research topic that finds applications in many domains including social networks, infrastructure design and maintenance, drug discovery, brain networks, and material design. This course will discuss recent advances in machine learning on graphs including neural network architectures and methods to encode graphs into low-dimensional spaces to facilitate machine learning.

CMPSC 190D Introduction to Allolib

This course provides an introduction to digital audio through the lens of the software used by the Allosphere Research Group at UC Santa Barbara. (See: https://github.com/AlloSphere-Research-Group ). We will learn the basics of music synthesis (e.g. Additive Synthesis, Subtractive Synthesis, FM Synthesis, etc.) by exploring these concepts using the software library used to power the Allosphere at UCSB. If time permits, we may also explore some of the graphics capabilities of the software, but the focus will be on sound.

CMPSC 292C Computer-Aided Reasoning for Software

This course is a graduate-level introduction to automated reasoning techniques and their application in tools for the design, analysis, and construction of software. In the first half of the course, we will survey the logical foundations and algorithms behind SAT solvers and SMT solvers. In the second half of the course, we will apply these techniques to automatic bug finding, program verification, and program synthesis. As a student in this course, you will learn how solvers work, and how to use them to build cool programming tools. 

CMPSC 293N ML for Networked Systems

In recent years, we have witnessed the widespread usage of ML tools for various classification, detection, and control problems. More recently, we have witnessed the use of ML for various networking problems as well. However, operationalizing ML solutions for networked systems is more nuanced than simply calibrating existing tools, developed for other domains (image classification, NLP, etc.). More in-depth exploration to develop flexible, scalable, and generalizable ML-based networked systems.

CMPSC 293E Computer Science of Accelerator Design

From Microsoft’s Catapult, to Amazon’s F1 service, to Google’s ASIC cloud, it is clear that to achieve the energy efficiency demanded by computing at enormous scale we will need specialized machines for everything from neural network training and inference to media re-coding and beyond.  The design of such accelerators will require new algorithms more suited to efficient hardware operation, new programming languages that can cleanly and rapidly define computations ready for acceleration, and new software tools for exploring and rapidly prototyping design options.

CMPSC 293C Software Fuzzing for Correctness and Security

Software fuzzing is a testing technique that is heavily used in industry and studied in academia. The basic idea is simple: randomly generate inputs to the system under test and determine if the system executes properly for each input. However, there are many complexities and hard problems that arise when putting this idea into practice. We will study the different types of software fuzzing and the current state of fuzzing research through reading a number of relevant papers.