I teach a variety of courses both in a traditional face-to-face setting (at MSU) and in a fully online setting (through the Johns Hopkins Engineering for Professionals graduate program). Most of my courses fall in the general area of artificial intelligence (AI) with an emphasis placed on topics in machine learning (ML). Philosophically, I believe artificial intelligence is just a sexy name for advanced algorithms in that AI is focused on solving very difficult problems, often whose solution has been regarded as unique to human reasoning. This is the reason why I also teach courses in discrete mathematics and algorithms as I view these as essential building blocks for AI and ML.
As a general goal in teaching these courses, I seek to expose students to the fundamentals of advanced problem solving, as well as recent developments in the field. My teaching approach is highly research-focused, so I also seek to show students how to conduct research (fundamental and applied) in these exciting fields.
The following is a list of the courses I teach, together with the catalog descriptions for each.
Artificial Intelligence
- MSU: CSCI 446 -- Artificial Intelligence
- MSU: CSCI 548 -- Reasoning Under Uncertainty
The fundamental bases of artificial intelligence: knowledge representation, search, and learning. Applications include game playing, neural networks, and expert systems.
An exploration of problem solving using structured probabilistic models. Topics in probabilistic representations, inference algorithms, and learning such models from data will be explored.
Machine Learning
- MSU: CSCI 447 -- Machine Learning (Soft Computing)
- MSU: CSCI 547 -- Machine Learning
- JHU: 605.649 -- Introduction to Machine Learning (online)
- JHU: 605.746 -- Advanced Machine Learning (online)
- JHU: 605.747 -- Evolutionary Computation (online)
An exploration of biologically inspired machine learning models and algorithms, including evolutionary algorithms, neural networks, swarm intelligence, and fuzzy systems. An emphasis is placed on results from current research in computational intelligence. Students engage in class discussions and team projects.
An exposure to advanced topics from the field of artificial intelligence with an emphasis on machine learning. Example topics include Bayesian learning, evolutionary computation, and cognitive science.
Analyzing large data sets ("Big Data"), is an increasingly important skill set. One of the disciplines being relied upon for such analysis is machine learning. In this course, we will approach machine learning from a practitioner's perspective. We will examine the issues that impact our ability to learn good models (e.g., the curse of dimensionality, the bias-variance dilemma, and no free lunch). We will then examine a variety of approaches to learning models, covering the spectrum from unsupervised to supervised learning, as well as parametric versus non-parametric methods. Students will explore and implement several learning methods, including logistic regression, Bayesian classification, decision trees, and feed-forward neural networks, and will incorporate strategies for addressing the issues impacting performance (e.g., regularization, clustering, and dimensionality reduction). In addition, students will engage in online discussions, focusing on the key questions in developing learning systems. At the end of this course, students will be able to implement and apply a variety of machine learning methods to real-world problems, as well as be able to assess the performance of these algorithms on different types of data sets.
This course focuses on recent advances in machine learning and on developing skills for performing research to advance the state of knowledge in machine learning. The material integrates multiple ideas from basic machine learning and assumes familiarity with concepts such as inductive bias, the bias-variance trade-off, the curse of dimensionality, and no free lunch. Topics range from determining appropriate data representations and models for learning, understanding different algorithms for knowledge and model discovery, and using sound theoretical and experimental techniques in assessing learning performance. Specific approaches discussed cover nonparametric and parametric learning; supervised, unsupervised, and semi-supervised learning; graphical models; ensemble methods; and reinforcement learning. Topics will be discussed in the context of research reported in the literature within the previous three years. Students will participate in seminar discussions and will present the results of their individual research project.
Recently, principles from the biological sciences have motivated the study of alternative computational models and approaches to problem solving. This course explores how principles from theories of evolution and natural selection can be used to construct machines that exhibit nontrivial behavior. In particular, the course covers techniques from genetic algorithms, genetic programming, and artificial life for developing software agents capable of solving problems as individuals and as members of a larger community of agents. Specific topics addressed include representation and schemata; selection, reproduction, and recombination; theoretical models of evolutionary computation; optimal allocation of trials (i.e., bandit problems); search, optimization, and machine learning; evolution of programs; population dynamics; and emergent behavior. Students will participate in seminar discussions and will complete and present the results of an individual project.
Theory
- MSU: CSCI 246 -- Discrete Structures
This course covers logic, discrete probability, recurrence relations, Boolean algebra, sets, relations, counting, functions, maps, Big-O notation, proof techniques including induction, and proof by contradiction.
- JHU: 605.621 -- Foundations of Algorithms (online)
This follow-on course to data structures (e.g., 605.202) provides a survey of computer algorithms, examines fundamental techniques in algorithm design and analysis, and develops problem-solving skills required in all programs of study involving computer science. Topics include advanced data structures (red-black and 2-3-4 trees, union-find), recursion and mathematical induction, algorithm analysis and computational complexity (recurrence relations, big-O notation, NP-completeness), sorting and searching, design paradigms (divide and conquer, greedy heuristic, dynamic programming, amortized analysis), and graph algorithms (depth-first and breadth-first search, connectivity, minimum spanning trees, network flow). Advanced topics are selected from among the following: randomized algorithms, information retrieval, string and pattern matching, and computational geometry.
Contact me directly if you have questions about any of these courses or wish to see the syllabus.