Top

Graduate Course Descriptions

Updated on November 10, 2023 @ 1:28 PM

Enrollment Notes:

  • Enrolment for graduate CS students will open on July 25, 2023 at 10:00AM ET.

  • Enrolment for non-CS and CS non-degree/undergrad students will open on August 22, 2023 at 10:00AM ET; add/drop forms are not required for graduate students unless it is required by the student’s home department.

  • Fall graduate courses start on Monday, September 11, 2023.

  • Winter graduate courses start on Monday, January 8, 2024.

  • Graduate students must enroll in the Graduate Section of cross-listed courses. The Graduate Section is designated by the 4 digit course code. eg: CSC2209H/458H1.


Program Specific Notes:

  • MSc students must complete 4 graduate level half-courses and cover breadth in 3 methodologies

  • PhD students must complete 4 graduate level half-courses and complete breadth in 4 different research areas.

  • PhD U students must complete 8 graduate level half-courses these must include courses from at least 4 different research areas and 3 different methodologies.

  • MScAC (Computer Science Concentration) students must complete four graduate level half-courses and cover breadth in 3 different research areas.

  • MScAC (Data Science Concentration) students must complete two graduate level half-courses from the Department of Computer Science and cover breadth in two research areas. Students must also complete two graduate level half-courses from the Department of Statistical Science at 2000-level or above.

  • MScAC (Applied Math Concentration) students must complete two graduate level half-courses from the Department of Computer Science and cover breadth in two research areas. Students must also complete two graduate level half-courses from the Department of Mathematics.


CSC2103HF/CSC410HF — Software Architecture and Design

Concepts and state-of-the-art techniques in quality assessment of software engineering; quality attributes, formal specifications and their analysis; testing, verification, and validation.


CSC2104HF/CSC465HF — Formal Met​hods of Program Design

Using mathematics to write error-free programs. Proving each refinement; identifying errors as they are made. Program development to meet specifications; modifications that preserve correctness. Useful for all programming; essential for programs that lives depend on. Basic logic, formal specifications, refinement. Conditional, sequential, parallel, interaction, probabilistic programming, and functional programming.

Prerequisite: CSC236H1/ CSC240H1/ MAT309H1

Recommended Preparation: CSC463H1


CSC2107/CSC488 — Compilers and Interpreters

The structure of compilers, Programming language processing. Scanning based on regular expressions, Parsing using context free grammars, Semantic analysis (type and usage checking), Compiler dictionaries and tables. Runtime organization and storage allocation, code generation, optimization. Use of modern compiler building tools. Course project involves building a complete compiler.


CSC2125HF — ​Topics in Software Engineering: Software engineering for machine learning

The course discusses software engineering challenges and explores state of the art solutions for building software systems with significant machine learning or AI components.  Rather than modeling and learning itself, this course focuses on issues of design, implementation, operation, validation and assurance and how these interact with the ML perspective.  The course is a mix of lectures and student presentations.


CSC2125HF — ​Topics in Software Engineering: Types and Programming Languages

We will study programming languages viewed through the lens of their type structure. Half of the course will cover an introduction to programming language principles, and the other half will be reading group. After taking this course, students will be able to define programming languages via their type system and operational semantics, state and prove their properties, and appreciate the deep philosophical and mathematical underpinnings of programming language design.

Prerequisite: The introductory part has no formal prerequisites, but an exposure of various forms of mathematical induction will be helpful.


CSC2125HS — Topics in Software Engineering: Blockchain Technology and Engineering

This course will be half lecture and half reading group. We will cover techniques and software engineering challenges behind blockchain systems. Through the study of this course, students would learn the overall architecture of blockchain systems. The course would also dive into important sub-topics such as Proof-of-Work, consensus protocol, and smart contract VMs.

Prerequisite: We expect students who take this course have basic understanding of system engineering and system programming experience with C/C++/Go/Rust. Prior experience in distributed systems is strongly preferred.


CSC2130HS/ECE1785 — Empirical Research Methods in Software Engineering

This course provides an overview and hands-on experience with a core of qualitative and quantitative empirical research methods, including interviews, qualitative coding, survey design, and large-scale mining and analysis of data. There will be extensive reading with occasional student presentations about the reading in class, weekly homework assignments, and a semester-long research project for which students must prepare in-class kickoff and final presentations as well as a final report.

We will focus on software-engineering related research questions in readings and assignments. Students will mine and integrate data from and across online software repositories (e.g., GitHub and Stack Overflow) and employ a spectrum of data analysis techniques, ranging from statistical modeling to social network analysis.

For the final research project, we encourage students to come up with a research question of interest to themselves. The delivery will be a research paper, and one or more empirical methods presented in class have to be part of the paper.


CSC2206HS — Computer Systems Modelling

The emphasis of the course is on models for systems with uncertainty. We study the properties of various models and discuss how they can be applied to analyze algorithm and system performance. This course is useful for students interested in the analysis of algorithms and systems with uncertainty that arise in computer systems, artificial intelligence, social networks, online markets etc. Concepts covered include Poisson, renewal, and Markov processes.

Prerequisite: Solid knowledge of basic probability theory.


CSC2208HS/CSC469HS — Advanced Operating Systems

Principles of operating systems. The operating system as a control program and a resource allocator. Comparison of OS types: monolithic, microkernel, etc., as well as virtualization methods. Covers advanced topics in synchronization, mutual exclusion, and deadlock. Additional topics include performance analysis, process scheduling in a multiprocessor context, advanced memory management, file systems design and crash recovery, and protection. Fault tolerance will also be covered in the context of a distributed system.

Prerequisite: Requires advanced C systems programming skills and strong intro OS knowledge.


CSC2209HF/CSC458HF — Computer Networking Systems

Computer networks with an emphasis on network programming and applications. An overview of networking basics: layering, naming, and addressing, packet switching fundamentals, socket programming, protocols, congestion control, routing, network security, wireless networks, multimedia, web 2.0, software-defined networking, and online social networks.

Prerequisite: CSC209H1, CSC258H1, CSC263H1/ CSC265H1, STA247H1/ STA255H1/ STA257H1/ ECO227Y1


CSC2221HF — Introduction to Distributed Computing

This course studies fundamental models and problems in distributed computing with an emphasis on synchronization and fault tolerance. Algorithms and impossibility results will both be considered.

Prerequisite: A course in algorithm design and analysis.


CSC2226HS — Topics in Verification: Theory of Concurrency

The goal of this course will be to build background in intersection of verification and automata theory, and a little bit of program synthesis towards the end. We will do this by covering seminal papers introducing all the key results.

There will be a special focus on:

  • Verification of recursive programs and the literature on visible pushdown languages

  • Verification of concurrent programs, and the literature on trace theory

  • Tree automata and their use in both verification and synthesis

We will assume knowledge of:

  • Basic automata theory

  • Temporal Logics (LTL/CTL), and their corresponding model checking algorithms

  • at least elementary understanding of automata on infinite words (as it related to LTL model checking)

to be able to proceed with building graduate-level knowledge in this course.


CSC2227HS — Topics in the Design and Implementation of Operating Systems

Seminar and discussion of a number of topics in operating system design and implementation, based on a collection of papers as class reading. Emphasis on multiprocessor and distributed operating systems. Case studies of contemporary operating systems. An independent course project and an oral student presentation is required.

Prerequisites: Introductory Operating Systems (CSC369 or equivalent), CSC2208/CSC469 recommended.


CSC2229HS — Topics in Computer Networks: Cloud Computing

Cloud computing underpins today's largest online services. Enabling cloud computing are hyperscale data centers where data is stored, processed, and moved at unprecedented scales. Networks in and between data centers are one of the most fundamental components in clouds---they connect millions of servers to provide computing as a utility. In this seminar course, we first introduce cloud networks and then delve into the design principles and cutting-edge advancements of these networks. Specifically, we will discuss classic papers that have stood the test of time and recent groundbreaking research published in top networking conferences, such as SIGCOMM and NSDI.

Prerequisites: CSC458/2209


CSC2231HF — ​Topics in Computer Systems: Secure Computer Systems and Hardware

In recent years, numerous hardware vulnerabilities have surfaced leaving software systems exposed to exploitation. Notable examples include processor speculation attacks like Spectre and Meltdown, Cache Side-Channel attacks, and Rowhammer attacks. These attacks enable malicious software to extract sensitive data from systems, tamper critical data, and even seize control of entire systems. This course will discuss various aspects of hardware and systems security. Students will gain a thorough understanding of micro-architectural attacks, such as Spectre, Cache Side-Channels, and Rowhammer, while also exploring emerging defense mechanisms designed to thwart these exploits. The course will also cover classic topics in hardware and systems security like trusted execution environments, memory safety and other topics. This course is intended for graduate and advanced undergraduate-level students who have some background in hardware or systems. Students with a software/systems background will gain insights into the influence of micro-architectural designs on system security. Conversely, students with a hardware background will explore the techniques employed by malicious software to reverse-engineer hardware and compromise systems. By bridging these perspectives, students will develop a comprehensive understanding of secure computer architecture. The course lecture material will be derived from the research papers in system security conferences (e.g., IEEE S&P, USENIX Security) and computer architecture conferences (e.g., ISCA, MICRO, HPCA, ASPLOS). The course will also include hands-on assignments where students will learn to construct micro-architectural attacks on real systems. Students will also undertake a mini-research project to hone their expertise in secure computer architecture.

Prerequisites: Undergraduate Computer Organization (e.g., CSC258, CSC385 or equivalent), Introductory Operating Systems (CSC369 or equivalent).


CSC2231HS — ​Topics in Computer Systems: Visual and Mobile Computing Systems

Visual computing encompasses many transformative tasks in a wide range of applications including 2D/3D graphics, image processing, image understanding, and computational photography. These applications have driven many of the latest innovations in the design of computer systems, ranging from smartphones and AR/VR headsets, to autonomous robots and large-scale data centers. 

This course will summarize key concepts in visual computing including image processing, image/video understanding with DNNs, diffusion models, neural implicit representations, and various robotics tasks. This course will then cover key principles, ideas, techniques, and challenges associated with the design of high performance processors and software frameworks that serve to accelerate visual computing applications. This course will cover how these techniques are applied in modern robotics, autonomous vehicles, computational photography, and in architectures such as TPUs, GPUs, and FPGAs. 

This course is intended for graduate and advanced undergraduate-level students, and will start with basic principles and then cover the latest research. For ML, vision, or graphics students, you will gain an understanding of the difference between hardware architectures (e.g., TPUs, GPUs, and FGPAs), the principles behind software frameworks (e.g., TensorFlow, Halide, CUDA), etc. and the tradeoffs/techniques in writing high-performance algorithms for visual computing applications. For systems students, this course will serve as an introduction to cutting-edge vision, graphics, DL, robotics applications and their optimization.

This course will include lectures, interactive discussions of state-of-art research, industry guest lectures, and a research project. 

Prerequisites: No prerequisites required and the course does not assume any prior background on any of the topics being covered.


CSC2233HF — Topics in Storage Systems

Over 90% of all new information produced in the world is being stored on digital storage systems and storage systems are the backbone of many enterprises. In particular in today's data-driven world, the success of many enterprises depends on their ability to efficiently and reliably storage large amounts of data. Storage systems often dominate overall systems performance and the exponentially growing need for data capacity and access speed makes this an important and exciting area of research. In this class you will learn about the foundations as well as the most recent advances in storage systems. You will also perform a cutting-edge mini-research project, where you design, build and/or evaluate a system. This year's offering of the course will pay special attention to how machine learning can be used to build better computer systems.


CSC2305H/CSC466H — Numerical Methods for Optimization Problems

Numerical methods for unconstrained optimization problems, in particular line search methods and trust region methods. Topics include steepest descent, Newton’s method, quasi-Newton methods, conjugate gradient methods and techniques for large problems. This course will normally be offered every other year.


Prerequisites: CSC336H1, MAT221H1/ MAT223H1/ MAT240H1, MAT235Y1/ MAT237Y1/ MAT257Y1


CSC2321HF — Matrix Calculations

Review the basic concepts in the numerical solution of linear systems, introduce state-of-the-art developments in numerical linear algebra/PDEs, develop and study efficient linear solvers, implement the above solvers as software, use existing software (routines and higher level environments), study the performance of methods and software. Topics among basic iterative methods, acceleration, perconditioning, multigrid, domain decomposition, fast Fourier transform linear solvers.

Prerequisites: Calculus, numerical linear algebra, interpolation, some knowledge of PDEs, proficiency in a programming language, preferably MATLAB or FORTRAN


CSC2401HS — Introduction to Computational Complexity

This is a graduate introductory level course in computational complexity theory. It is appropriate for all graduate students in Computer Science. The main part of the course will be an introduction to complexity theory where we will discuss uniform and non-uniform models of computation, time and space complexity classes, complexity hierarchies, reductions and completeness, randomization in computation, approximation algorithms, and lower bound methods.

In the latter part of the course, we will discuss several new results in complexity theory. Such advanced topics may include: Hastad’s famous switching lemma and its applications, including lower bounds for constant-depth circuits, better upper bounds for satisfiability, and connections to learning theory; communication complexity and its applications; NP, coNP and propositional proof complexity.


CSC2412HF — Algorithms for Private Data Analysis

In this course we will study individual privacy in data analysis from a rigorous theoretical perspective. We will focus on Differential Privacy: a recent approach to achieving strong provable privacy protection guarantees in the analysis of sensitive data. Informally, a data analysis algorithm is differentially private if changing the data of a single individual changes the output distribution of the algorithm only slightly. This guarantee ensures that the privacy risk to any individual increases only slightly by participating in data collection. Our focus will be on the design of efficient differentially private algorithms. In the process, we will learn about fascinating connections between differential privacy and game theory, statistics, learning theory, and geometry. While we focus on the algorithms, there will be proofs: it is important to prove formally that an algorithm provides privacy: this is not something that can be verified experimentally. Most proofs are simple, but the course does require mathematical maturity and a background in probability theory, and the design and analysis of algorithms.


CSC2415HS — Advanced Topics in the Theory of Distributed Computing

Advanced course on distributed computing, aimed at students who wish to explore in depth a topic in this area. It will be run largely as a research seminar course. Each student will pick a topic from a list suggested by the instructors or a topic of the student’s own choosing approved by the instructors. The student will then study the relevant literature, and will eventually present the subject to the class in one or more 2-3 hour sessions. A course in theory of distributed computing, such as CSC2221.

People with good backgrounds in complexity theory are welcome to take the course, provided they are willing to do some background reading.


CSC2420HF — Algorithm Design, Analysis and Theory

This course serves as a foundational course, appropriate for students in computer science, computer engineering, and mathematics. However, the course should also be of interest to “theory students” looking for research topics. We will begin with topics normally discussed in undergraduate courses such as our CSC373 using some standard less standard examples and also discussing some precise models for standard algorithmic paradigms such as greedy, local search and dynamic programming algorithms. We will be discussing topics such as algorithmic mechanism design, the random order model and other stochastic optimization models for combinatorial problems, randomized algorthims, LP rounding, primal dual algorithms, and a brief introduction to online convex optimization.


CSC2421HS — Topics in Algorithms: Mathematical Foundations of Algorithmic Fairness

This course will survey the literature on algorithmic fairness within the broader umbrella of ethical algorithm design. Specifically, we will study mathematical definitions of fairness that apply to a wide range of decision-making settings from voting to resource allocation to machine learning, and algorithms and AI systems that provably (often approximately) satisfy such fairness notions. The course will be theoretical in nature and will assume a strong background in algorithm design, formal proof techniques, and probability theory/statistics as well as working knowledge of complexity theory. No prior background in AI or algorithmic fairness will be assumed.


CSC2426HF — Fundamentals of Cryptography

Rigorous definitions of security for pseudo-random generators, shared private-key cryptosystems, public-key cryptosystems, and digital signature schemes. Methods (including number-theoretic conjectures) for constructing secure cryptographic primitives. Methods for using secure primitives to construct secure systems.


CSC2429HF — Topics in Theory of Computation: Introduction to Quantum Information Theory

This course provides a rigorous introduction to quantum information theory designed for graduate students in computer science, physics or mathematics.  The aim of the course is to provide a mathematical understanding of how to quantify information in quantum mechanical systems and to understand the limitations that quantum mechanics places on our abilities to transmit information between parties.  This understanding lays the mathematical foundation for technologies such as quantum cryptography and quantum computing and the foundations of physics.  Topics covered include introduction to quantum states and channels, quantum and classical Shannon theory, bipartite entanglement theory, state and channel distinguishability,  quantum cryptography and two player quantum games such as the CHSH game.  No prior knowledge of quantum physics or computing will be assumed in this course.

Textbook: The theory of quantum information, John Watrous, 2018

Prerequisite: Strong familiarity with linear algebra and formal proof.  CSC2332 is not a prerequisite but may be helpful.


CSC2429HF/MAT1304HF — Topics in Theory of Computation: Finite Fields

This course will cover some important classical and modern themes in the study of finite fields.

There will be an emphasis on explicit constructions of pseudorandom and extremal objects, as well as on algorithmic techniques.

Topics include:

· Solutions of equations

· Pseudorandomness

· Exponential sums and Fourier techniques

· Algebraic curves over finite fields, the Weil theorems

· Additive combinatorics and the sum-product phenomenon

· Applications to combinatorics, theoretical computer science and number theory


CSC2429HS — Topics in Theory of Computation: Derandomization and its connections in complexity theory, interactive proof systems, and cryptography

Randomized algorithms are everywhere in computer science, and they're crucial for areas such as cryptography and learning. Why then do theorists believe that when solving decision problems, random algorithmic choices can always be efficiently replaced by carefully planned deterministic choices? More generally, can we simulate algorithmic randomness in efficient ways, and if so -- how?

In this course we'll dive into the BPP = P conjecture, which is one of the main conjectures in complexity theory. Starting from the definitions and classical results from the 1990s, we'll make our way to very recent research, passing through areas such as circuit complexity, error-correcting codes, interactive proof systems, cryptography, and more. Our goal will be to understand the conjecture and its theoretical basis, to learn about its recent strengthenings and new approaches to studying it, and to get introduced to its broader implications on computer science.

The course will assume basic background in complexity theory, which means that should have studied at least one course that includes complexity content (e.g., CSCC63 or CSC463 or CSC2401). If you're interested in the course but are unsure whether or not you have the necessary prerequisites, you're more than welcome to ask the instructor.


CSC2431HS — Topics in Computational Biology

This course will introduce students to the variety of ways that computational methods are utilized in modern medicine. The topics will include the use of probabilistic and deterministic techniques in the analysis of genomic data, machine learning and NLP to analyze medical texts, HCI considerations for medical software, as well as other topics. While we will not cover any particular CS research area in depth, the students are expected to have a broad computational background to be able to read research literature in a variety of subject areas, as well as the ability to do independent exploration of topics in medicine.


CSC2501HF/CSC485HF — Computational Linguistics​

Computational linguistics and the processing of language by computer. Topics include: language models; context-free grammars; chart parsing, statistical parsing; semantics and semantic interpretation; ambiguity resolution techniques; reference resolution. Emphasis on statistical learning methods for lexical, syntactic, and semantic knowledge.
Prerequisite: STA247H1/ STA255H1/ STA257H1 or familiarity with basic probability theory, including Bayes’s theorem; CSC207H1/ CSC209H1 or proficiency in Python and software development.


CSC2506HS/CSC412HS — Probabilistic Learning and Reasoning

An introduction to probability as a means of representing and reasoning with uncertain knowledge. Qualitative and quantitative specification of probability distributions using probabilistic graphical models. Algorithms for inference and probabilistic reasoning with graphical models. Statistical approaches and algorithms for learning probability models from empirical data. Applications of these models in artificial intelligence and machine learning.
Prerequisite: CSC411H1/STA314H1


CSC2508HF — Advanced Data Systems

This is a graduate topic course that assumes familiarity with database management systems and database internals. The purpose of the course is to expose students in research topics and fundamental techniques at the intersection of Machine Learning and data management. We will cover topics related to storage and indexing of high dimensional data as well as query processing and optimization over large data repositories. We will also cover topics related to data preparation for machine learning tasks and focus on certain advanced applications of machine learning including video query processing and data programming.


CSC2511HS/CSC401H1 — Natural Language Computing

Introduction to techniques involving natural language and speech in applications such as intelligent Web searching; speech recognition and synthesis; and multi-lingual systems including machine translation. N-grams, POS-tagging, semantic distance metrics, neural models of language, corpus analysis. Python and other software.
Prerequisite: CSC207H1/ CSC209H1; STA247H1/ STA255H1/ STA257H1


CSC2512HF — Advanced Propositional Reasoning

Many problems in Computer Science can be represented as instances of propositional reasoning problems. For example, any problem in NP can be represented as a SAT problem (Boolean Satisfiability) since SAT is complete for the class NP. For many problems, their representation in SAT is very natural, and more importantly, can often be effectively solved by a general purpose SAT solver. This means that instead of developing and implementing a problem specific algorithm, we can often solve our problems by the much simpler device of encoding them into SAT and then using a SAT solver. Surprisingly, the SAT solver can often outperform problem specific algorithms.

In this course you will be introduced to the basic algorithms that are used to SAT and other types of propositional reasoning problems. In addition, we will discuss various encoding techniques for translating various problems into SAT–the encoding used can have a dramatic effect on performance. Besides problems that can be encoded into SAT we often need to deal problems that require some form of optimization, or some form of quantification (e.g., to reason about two person games). Such problems can be encoded as MAXSAT problems, or QBF problems. We will also cover algorithms for solving these kinds of propositional problems.

The aim of the course is to provide you with the background needed to exploit modern SAT–MAXSAT–QBF solvers in your own work. Knowledge of the basics of propositional logic; be familiar and comfortable with programming, data structures and algorithms.


CSC2514H/CSC428H1 — Human-Computer Interaction

Understanding human behaviour as it applies to user interfaces: work activity analysis, observational techniques, questionnaire administration, and unobtrusive measures. Operating parameters of the human cognitive system, task analysis and cognitive modelling techniques and their application to designing interfaces. Interface representations and prototyping tools. Cognitive walkthroughs, usability studies and verbal protocol analysis. Case studies of specific user interfaces.
Prerequisites: CSC318H1; STA247H1/ STA255H1/ STA257H1; CSC209H1/ proficiency C++ or Java
Recommended Preparation: A course in PSY; CSC209H1; (STA248H1/ STA250H1/ STA261H1)/(PSY201H1)


CSC2516HS/CSC413H1 — Neural Networks and Deep Learning

It is very hard to hand-design programs to solve many real-world problems, e.g. distinguishing images of cats vs. dogs. Machine learning algorithms allow computers to learn from example data, and produce a program that does the job. Neural networks are a class of machine learning algorithms originally inspired by the brain, but which have recently have seen a lot of success at practical applications. They’re at the heart of production systems at companies like Google and Facebook for image processing, speech-to-text, and language understanding. This course gives an overview of both the foundational ideas and the recent advances in neural net algorithms.


CSC2518HS — Spoken Language Processing

An introduction to working with speech in natural language processing systems. Topics include: articulatory and acoustic phonetics, prosody and information structure, introduction to digital signal processing of speech, automated speech recognition, text-to-speech synthesis, language models, dialogue modelling and dialogue systems.


CSC2521HF — Topics in Computer Graphics: Seminar on Physics-based Animation

This course is designed to introduce students to the field of physics-based animation by exposing them to the underlying mathematical and algorithmic techniques required to understand and develop efficient numerical simulations of physical phenomena such as rigid bodies, deformable bodies and fluids. Students should have a strong background in Linear Algebra and Multivariate Calculus. Familiarity with Convex Optimization and Differential Geometry is a plus, but not required.


In physics-based animation we will learn how to develop algorithms that produce visually compelling representations of physical systems. We will learn the underlying continuous mathematics describing the motion of physical objects, explore how to discretize them and how to solve the resulting discrete equations quickly and robustly. Topics covered include rigid body simulation, elasticity simulation, cloth simulation, collision detection and resolution and fluid simulation. Along the way, we will explore the underlying mathematics of ordinary differential equations, discrete time integration, finite element methods and more. 


CSC2521HF — Topics in Computer Graphics: 3D Facial Modeling and Animation

Human ability to communicate via the subtlest of facial nuance makes animating an engaging anthropomorphic face arguably the most challenging aspect of character animation. The greater the rendered realism, the smaller the margin for animated imperfection before the character irreversibly loses credibility. This course provides instruction on the 3D modeling and animation of faces. The course will be conducted as a mix of instructor and guest lectures, student paper and project presentations. The main pre-requisite for this course is a basic graduate level CS background and a desire to be visually creative. The course will make significant use of Maya and possibly Unreal, so some familiarity working with 3D modeling/animation software and game engines is a plus.


CSC2521HS - Topics in Computer Graphics: Seminar in Geometry and Animation (CANCELLED)

This course will take a deep look at a broad collection of seminal papers in computer graphics, focusing on topics in geometry processing and computer animation. The course is structured around weekly paper readings. All students will read the same paper each week, but each student will have a unique, rotating role. This role defines the lens through which they read the paper and determines what they prepare for the group in-class discussion. Students will obtain a thorough understanding of the chosen papers and will develop their paper reading, literature review and prototyping skills. Prior exposure to computer graphics or geometry processing is suggested but not required. Students should have taken courses in Linear Algebra and Computer Programming.

Recommended but not required: CSC418/CSC2504/CSC2520/CSC419


CSC2524HF — Using LLMs & GPT for Ubiquitous Computing

In this course, we will examine uses of LLMs and GPT in ubiquitous computing applications. This course is targeting students interested in designing and evaluating applications that leverage AI technologies. Student marks will be comprised of their grades for a term project, student presentation and participation in class discussion. Students will conduct weekly readings, with student led presentations and discussions each week. Students will work on a term project which explores novel applications of AI technologies.


CSC2524HS — Topics in Interactive Computing: Large Language Models for Intelligent User Interfaces

In this course we will examine Human Computer Interaction research on the use of Large Language Models (LLMs) for the development of intelligent user interfaces. We will look at how LLMs can enhance interactive systems across three specific usage domains: Education, Human-Robot Interaction, and Creativity Support Tools. This course is targeting students wishing to design new interactive systems that leverage AI technologies, or students interested in conducting studies to explore how LLMs will impact the ways we interact with technology. Students will conduct weekly readings, with student led presentations and discussions each week. A final project will make up most of the grade, while student presentation skills and participation in class and in readings will also be emphasized.


CSC2525H/CSC443H — Research Topics in Database Management: Database System Technology

This course covers the algorithms and data structures that form the bedrock of modern data management systems. We will first discuss modern hardware and how it motivates the design of database systems. We will then delve deeply into buffer pool management, indexing (B-trees, LSM-trees & circular logs), counting sketches, membership filters, query operators, query optimization, concurrency control, transaction management, recovery algorithms, data layouts (row-stores vs. column-stores). Students will implement a mini-database system from the ground up. 


CSC2525 — Research Topics in Database Management: Bigger, Faster, and Stronger Systems

This course covers advanced research topics in the design of big database management systems. We will explore hardware topics including SSDs, non-volatile memory, shingled HDDs, NUMA, CPU pipelining, SIMD, etc. We will discuss the limits of traditional relational database systems and emerging database architectures such as NoSQL, NewSQL, KV-stores, stream processors, and graph databases. We will delve deeply into state-of-the-art data organization techniques such as indexing, compression, data sketching, and especially set-membership filtering. This is a more advanced course than CSC2525H/CSC443H — Research Topics in Database Management: Database System Technology.


CSC2526HF — Topics in Ubiquitous Computing: Seminar on Mobile Health

This course will examine the growing prominence of mobile health over the past twenty years. After briefly discussing various definitions of mobile health, we will focus our attention on how people are using the sensors embedded in ubiquitous and novel devices to capture indicators of physical and mental health. More specifically, we will study how sensors are being used to measure physiological signals, psychomotor function, and disease-specific symptoms. We will also explore the how human factors play an important role in these technologies.

This course requires an undergraduate-level understanding of machine learning and programming, although familiarity with computer vision, signal processing, and human-computer interaction will also be beneficial. Beyond weekly readings and an in-class presentation, students will be expected to complete and present a course project at the end of the term.


CSC2527HS/CSC454H1 — Business of Software​

This course introduces you to the nature, structure, and dynamics of the contemporary software industry. It focuses on the key factors involved in ideating, hypothesizing, validating, and executing a viable and investable/return driven business model to launch a sustainable, scalable and profitable tech-based (software and/or hardware) business venture as a company founder or as an employee of an established company. The course will be a team effort of four students per team. The scope of the course does not include not-for-profit or charity business models.

Course objectives include a meaningful understanding of:

  • The high-technology business environment in general and the software industry in particular.

  • The business concepts and principles behind creating and launching a successful tech venture.

  • How to produce, present, and critique business proposals and plans for ventures, and how to develop business simulation and forecasting models in support of these plans.

  • How to converse with and present to investors, executives, judging panels, incubators and accelerators.

  • Upon successful completion of the course, you will have first-hand experience of the stages, processes, and challenges involved in transforming an idea into an investable and scalable business venture, and will be ideally positioned to begin launching your own tech venture.

In this course, you will learn techniques and methodologies that will give you a distinct career advantage after graduation, whether or not you intend to work in a tech field. It is designed to give you a true-to-life experience of the thought processes behind successful tech business ventures, which apply whether you are planning on creating your own startup or working for an established employer. You and your team will devise a cool, innovative solution to a significant market problem. This will involve researching your customer base, forming and testing hypotheses, and producing a value proposition that will form the basis for your business model. You will investigate your customer base and market by identifying the key activities, resources and partners needed for fulfillment. This process culminates in a business model that both makes sense in a financial context and resonates with a venture capital (VC) or funding audience—the kind of audience who will eventually be visiting the class to critique your final product and business model.

This course sets very high standards for you because the business world demands nothing less. We have an obligation to ensure that your business education is thorough and demanding, and only students who are exceptionally dedicated and committed to developing mastery over the techniques and methodologies in this course will excel. To apply to take the course please follow this link www.dcsil.ca/student-courses.


CSC2529HF — Computational Imaging

Computational imaging systems have a wide range of applications in consumer electronics, scientific imaging, HCI, medical imaging, microscopy, and remote sensing. We discuss digital photography and basic image processing, convolutional neural networks for image processing, denoising, deconvolution, single pixel imaging, inverse problems in imaging, proximal gradient methods, wave optics, time-of-flight imaging, and end-to-end optimization of optics. Emphasis is on applied image processing and solving inverse problems using formal optimization and modern machine learning techniques. Students apply material by implementing and investigating image processing algorithms in Python. Term project. Experience in linear algebra and signal processing will be helpful.


CSC2530HS — Computational Imaging and 3D Sensing

From the advanced depth cameras in today's smartphones to the 3D sensors of next-gen autonomous vehicles, 3D sensing has already began to revolutionize the way we sense the world. This, however, is just the beginning: cameras that can see in pitch-black darkness and around corners, depth sensors with sub-micron accuracy or a range of several kilometers, and cameras that can see under the skin are already becoming a reality. Key to these developments is the rapid convergence of optics, photonics, sensing and computation.
This seminar course will provide an in-depth look at 3D sensing and related technologies, and the computational techniques used to model and exploit them. Specific topics will include "extreme imaging" with single-photon detectors; principles of time-of-flight imaging and LiDAR; structured-light imaging; 3D imaging through scattering media; and imaging around corners. Class format will be discussed based, with approximately one paper covered per week and a term project.
Recommended preparation: Graduate-level exposure to one or more computer vision, computer graphics, sensing or numerical optimization is desirable but not required. Prior enrollment in CSC2529 (Computational Imaging) is not necessary.


CSC2532HS — Statistical Learning Theory

This course covers several topics in classical learning theory. Required background for this course includes probability, linear algebra, and multivariate calculus. Minor coding will be required, i.e., the course will provide guidance for verifying the mathematical concepts using numerical experiments/simulations.

Topics include:

1. Asymptotic statistics

2. Uniform Convergence

3. Generalization and complexity measures

4. Kernel Methods

5. Online Learning

6. Sampling and optimization


CSC2537H/STA2555H — Information Visualization

This course will study techniques and algorithms for creating effective visualizations based on principles from graphic design, visual art, perceptual psychology, and cognitive science. The course is targeted both towards students interested in using visualization in their own work, as well as students interested in learning about cutting edge research in the field. Students will conduct reading and critical analysis of scientific research papers, that will be discussed in class. A final project will make‐up most of the grade, while student presentation and critical analysis skills will also be emphasized.


CSC2541HF — Topics in Machine Learning: Machine Learning for Healthcare

This course will give a broad overview of machine learning for health. We begin with an overview of what makes healthcare unique, and then explore machine learning methods for clinical and healthcare applications through recent papers. We discuss the recent successes of graphical models, deep learning, time series analysis, and transfer learning in the context of health. We also broadly cover concepts of learning, algorithmic fairness, interpretability, and causality. We emphasize the importance of collaboration between technical and non-technical researchers, and consider the implications of machine learning in healthcare governance and policy. Students will choose and complete a course project, and make project presentations at the end of the course. This course requires a background in linear algebra and probability theory, as well as exposure and ideally completion of a machine learning course.


CSC2542HF — Topics in Knowledge Representation and Reasoning: KR and Modern AI

Knowledge representation (KR) is a long-standing subfield of AI which studies symbolic representations of knowledge and associated mechanisms for automated reasoning. In this advanced course, we will overview topics in KR and consider the role they may play in modern AI research and systems, such as large language models and reinforcement learning systems. The course will comprise a mix of lectures and student presentations. Students will read research papers, participate in seminar-style presentations, and complete assignment(s) and a course project. Topics include: commonsense reasoning, logics for KR, probabilistic programming, representing goals and preferences, and the relationship between large language models and knowledge bases.

Prerequisites: an introductory course in formal logic or an introductory course in symbolic AI comparable to CSC384, an introductory course in machine learning, and basic familiarity with reinforcement learning.


CSC2547HF — Topics in Machine Learning: Reinforcement Learning

This is an introductory course on reinforcement learning (RL) and sequential decision-making under uncertainty with an emphasis on understanding the theoretical foundation. We study how dynamic programming methods such as value and policy iteration can be used to solve sequential decision-making problems with known models, and how those approaches can be extended in order to solve reinforcement learning problems, where the model is unknown. Other topics include, but not limited to, function approximation in RL, policy gradient methods, model-based RL, and balancing the exploration-exploitation trade-off.

The course is introductory in the sense that it does not assume prior exposure to RL. It is not, however, focused on describing a collection of algorithms or only providing high-level intuition. Instead, it tries to build the mathematical intuition behind many important ideas and concepts often encountered in RL. We prove many basic, or sometimes not so basic, results in RL.

As the emphasis is on understanding the foundation, you should expect to go through mathematical detail and proofs. You need to have some level of mathematical maturity. Required background for this course includes being comfortable with probability theory and statistics, calculus, linear algebra, optimization, and (supervised) machine learning.

The course will be delivered as a mix of lectures and reading of classical and recent papers assigned to students. The deliverables include homework assignments, quizzes, project, reading assignments, exam, etc.


CSC2547HS — Topics in Machine Learning:  Automated Reasoning with Machine Learning

This course introduces the cutting-edge research on combining reasoning with machine learning. We will first study the logical foundations and algorithms behind many reasoning engines, and then learn how machine learning can be used to improve complicated reasoning systems. This course will cover the following topics: Boolean Satisfiability (SAT), Satisfiability modulo Theories (SMT), program synthesis, statistical approaches for software debugging, inductive logic programming, and neuro-symbolic systems. Extensive paper readings, in-class discussions, and project presentations are expected.


CSC2547HS-S1 — Topics in Machine Learning:  AI Alignment

As AI systems become more capable, it becomes important to ensure that they behave in socially beneficial ways. This course examines techniques for aligning AI systems with human values. We first study alignment in the context of several idealized models of AI agents. We then address current-day issues in large language models, including truthfulness and misuse prevention.


CSC2552HF — Topics in Computational Social Science: AI, Data, and Society

Computational and algorithmic systems are now embedded in all parts of society, which introduces both great opportunities and challenges. This course presents an introduction to computational social science, a rapidly growing interdisciplinary field that studies questions at the intersection of AI, data, and society. We focus on the spectrum of methodologies now available for conducting social research in the digital age, from large-scale observational studies to online experimentation, as well as research skills including reading state-of-the-art papers, writing reviews, and doing a research project. Topics covered will include online misinformation, algorithmic bias, and social media platforms.


CSC2558HS — Topics in Multidisciplinary HCI

This course covers topics in HCI that draw on methods and theories from other subfields of computer science and other scientific disciplines, in developing computational principles for designing user-facing systems. Students will learn how to design experiments to investigate the design of technology by drawing on methodology and theories from social and behavioral sciences, as well as to adapt user technologies using models and algorithms from fields such as statistics, machine learning, and artificial intelligence.


CSC2600HS/CSC491H1 — Topics in Computer Science: Capstone Design

This course is designed and delivered by industry experts form the Software/tech fields. Students will work with teammates from CSC2527H1 to develop a marketable startup on a selected theme. The class will be small and highly interactive. You will work to develop working software industry best practices. You are expected to have experience writing software and be able to learn on the go. For more details, visit our website at https://www.dcsil.ca/student-courses. Not eligible for CR/NCR option.

Students submit a single application for CSC2600H1 and CSC2527H1, describing relevant interests, experience, and skills and general academic history. Application questions are set and assessed by the instructor. Applications are due in summer for the Fall term, and late fall for the Winter term.

Please visit https://q.utoronto.ca/courses/221753/pages/400-level-course-balloting-and-applications for application deadlines and details. A decision on your application will be confirmed approximately 2-3 weeks after the application deadline, so students should enroll in an alternate course until the results of their application are confirmed.
Prerequisite: This course requires permission from the instructor.


CSC2604HF — Topics in Human-Centred and Interdisciplinary Computing: HCI & Intellectual Property

Research seminar on intellectual property issues that arise in protecting and leveraging contemporary human-machine interface innovations both in the academic and commercial arenas.


CSC2611HF — Computational Models of Semantic Change

Words are fundamental components of human language, but their meanings tend to change over time, e.g., face (‘body part’ -> ‘facial expression’), gay (‘happy’-> ‘homosexual’), mouse (‘rodent’ -> ‘device’). Changes like these present challenges for computers to learn accurate representations of word meanings—a task that is crucial to natural language systems. This course explores data-driven computational approaches to word meaning representation and semantic change. Topics include latent models of word meaning (e.g., LSA, word2vec), corpus-based detection of semantic change, probabilistic diachronic models of word meaning, and cognitive mechanisms of word sense extension (e.g., chaining, metaphor). The course involves a strong hands-on component that focuses on large-scale text analyses and seminar-style presentations.


CSC2702HF — Technical Entrepreneurship — MScAC only

The MScAC degree is intended to create technical leaders capable of transferring new technologies from academia to industry. This course introduces fundamental concepts from business and management that are relevant to students thinking about starting their own business or bringing new ideas to fruition within existing ones. This course will also equip students with the experience of presenting and defending their scientific research through various research activities and communications.

Note: This is a mandatory course for students enrolled in the MSc in Applied Computing. At this time non-MScAC students are not eligible to enrol in this course.