Education

Aug 2013 - 2019 (estimated)

Computer Science, PhD

Reykjavik University

My search for a PhD position to study Artificial General Intelligence led me to my current advisor dr. Kristinn R. Thórisson at the Center for Analysis and Design of Intelligent Agents in Reykjavik University's School of Computer Science. My research topic is Artificial Pedagogy: a new area of research for studying how to teach artificial learning systems the knowledge and skills they need to be successful.

Aug 2004 - Aug 2010

Artificial Intelligence, MSc

Radboud University, Nijmegen

As a part of the Faculty of Social Sciences the Artificial Intelligence major in Nijmegen was very multidisciplinary. The obvious computer science and mathematics ties were supplemented with a relatively strong cognitive and neuroscience components. I took many computer science electives to fortify my technical side. During my studies I was consistently at the top of my year and finally graduated with honors (cum laude).

Jul 1998 - Jun 2004

VWO (pre-scientific secondary education)

Elzendaalcollege, Boxmeer

I went to high school in my hometown of Boxmeer. Secondary education in the Netherlands is segregated according to (estimated) learning ability. Approximately 15% of the children in the country go to the highest level (VWO), which is meant to prepare for a career in science. I took the exact sciences course package and electives in computer science and economics. I graduated just short of cum laude with an average grade of 7.9.

University courses

This course covers central tenets of cognitive science such as perception, memory and attention. The student will also be familiarized with the most important problem areas within cognitive science as well as with important experimental techniques for researching human information processing and cognition.

The student is taught the basics of construction, validity and reliability of measurement instruments and methods, as well as several important psychological research methods, with a focus on the various experimental and non-experimental designs, experimental controls and their relation with causality.

This course provides a general introduction to the contemporary field of logic. Students acquire skill in handling logical symbolism, gain insight into model building and learn to test the validity of lines of reasoning.

Encoding knowledge into the language of predicate logic and the analysis of reasoning are central to the course. The course will also cover logic as a system for the representation of knowledge versus logic as a system for reasoning; basic concepts in set theory, validity and proofs, and logical syntax, semantics and pragmatics; the relation between predicate logic and natural language and deduction; and the relationship between provability and validity, decision methods and decidability.

Programming is instructing a computer how to perform a certain task. Because a computer has no notion of your intention, extreme precision is required on the part of the human. This course introduces the the basic constructs that can be used to create a so-called imperative computer program. The course also covers the accurate analysis of problems and the strategies for their solutions. This analysis method is know as "top down refinement": an initial high-level description of the problem's solution is progressively refined into smaller steps. The result of this process is an algorithm that should be easy to convert into a computer program. We use C++ programming language for the implementation of of these algorithms. However, the ins and outs of the programming language itself are far less important than how to use this tool correctly to construct and maintain programs.

The course is intended to give a first impression of the field of AI without going into too much technical detail. Subjects are: what does AI mean; history of AI; the role of and techniques for knowledge representation; the role of and techniques for search; an overview of research topics within AI with their basic problems and techniques.

It is generally acknowledged that for the development of usable interactive systems, knowledge about the user and his perceptive, cognitive, and motor capabilities deserves a prominent treatment in the design process. The past decennia have resulted in numerous research efforts that have tried to systematically pursue the question of how to achieve this goal. The book from Dix et al. (2004) provides a nice introduction to human-computer interaction (HCI), an area that spans the boundaries between technological advancements and cognitive science. Central theme of HCI concerns the question how usable interactive systems can be designed and how the usability of such systems can be assessed. Students following this course will learn the foundations and prominent novel directions in HCI. They will design and implement interactive systems en evaluate their usability in so called human-factors experiments. Besides techniques and paradigms in HCI that have proven their value in the past (like "the desktop" and "the Internet"), new developments will be studied (like multimedia, perceptive interfaces, multimodality and mobile computing), and it will be discussed what consequences these developments have for HCI of the future. For more information, visit the course website at http://www.ai.ru.nl/aicourses/bki114.

This course covers practical skills regarding the recovery and production of scientific literature. Students learn to find scientific literature with university catalog, PsycINFO, Web of Science and other bibliographic methods. This skill is applied when writing a literary survey that obeys the APA norms.

The data structures course teaches students to develop new programs and adapt existing ones in a systematic way. The emphasis in this course is on the representation of data.

Recursive data structures like lists and trees and the associated operations (store, search, sort) and related algorithms (e.g. breadth-first search, depth-first search, backtracking) are the main topics. Abstraction through object orientation is a way to strure programs and build quality software. We use the C++ programming language.

During the lectures we will examine (1) the basic principles of robotics, (2) the three main paradigms (hierarchical, reactive, and hybrid), (3) important examples of influential robotic architectures, (4) the relation between robotics and traditional AI. During the lab sessions, small groups (3-5 students) will design, build and program a simple robot in order to achieve a specific task.

After the course students are able to (1) build and program a simple robot such that it displays the required behavior, (2) indicate the main research views within robotics, (3) explain how perception, cognition and action enable a reasonably successful bodily interaction with an environment, and (4) relate robotics to traditional AI.

Psychology concerns itself with the behavior of people. It is therefor important to verify with our own eyes how it is that those people behave. The problem with this approach is that the variety of human behavior is more than what any person can comprehend. That is why psychology researchers use statistics. Statistics help with systematically collecting and coding observations, organizing and summarizing data, interpreting results and communicating with other researchers.

The course aims to provide participants with insight into a number of specific aspects that play a role in developing knowledge-intensive systems. The focus is on knowledge modelling and problem solving methods, not so much on implementation and programming techniques. The main developments in a number of relevant topics are discussed and where possible exemplified by existing systems.

After a general introduction, the following topics are discussed:
* the meaning of symbols, symbol systems, representations and knowledge;
* analytic approaches to knowledge system development;
* handling aspects of time, space, uncertainty and vagueness;
* formal models of different problem types and examples of classical knowledge systems for those problem types;
* advanced techniques such as bayesian networks, machine learning, truth maintenance systems.

Within the field of cognitive engineering and psychonomics models are used to describe different aspects of behavior. In this course, both the notion 'model'and 'modeling'play a central role.
The first part of the course will concentrate on the function of models in cognitive-psychological research. The discussed models will be classified on content (process models, data describing black box models, on analogy based biological model) as well as on form (verbal, symbolic, rule based computational; sub symbolic, neural networks based computational and mathematical models).
The second part of the course all these aspects will be illustrated by several researchers from the institute,
The role of modeling will be the central ssue in the presentation.

The goal of this course is to familiarize students with the major theories and research methods related to the understanding and production of written and spoken language. Students gain insight into the complex mental processes underlying efficient verbal and written communication between healthy adults, as well as into the neurological basis of such processes. The course will cover basic linguistic concepts, language perception (with an emphasis on word recognition and the mental lexicon), language production, and language in the brain.

Where applicable, recent language processing research in cognitive neuroscience will be discussed.

The processes that occur during the understanding and production of language are not just explained using verbal theories, but als using computational models that simulate these processes on a computer. This course discusses and compares some of these symbolic and subsymbolic (connectionist) models. These models cover the following research areas: auditory word recognition, visual word recognition and learning, parsing, sentence production, lexicalization and phonological encoding. The usefulness and limitations of these different computational models will be discussed.

Students learn to understand and compare the theoretical relevance, limitations and implemetations of the discussed models for computational psycholinguistics. They are also taught to make predictions for these models in example situations.

1) How is the mind related to the body? Are we material machines or does a soul reside within the body? Can machines ever be intelligent and/or conscious?
2) Do recent developments in cognitive science lead to fundamental changes in the human self-understanding. Do, for example, beliefs and desires exist, or are such concepts merely inventions?
3) What are the ethical consequences of research in AI? What are the responsibilities of the designers and developers of autonomous intelligent systems?

These themes will be discussed on the basis of several important papers. Students are required to read these papers before the lectures.

Students will learn to statistically analyze, report and interpret data from studies with multiple groups or multiple variables and gain insight into the purpose and problems of such research. They will also acquire skills in choosing the right method of analysis and working with SPSS.

The course covers analysis of variance (an extension of the t-tests for designs with multiple groups or variables), generalizability theory (detemining the degree of 'agreement' between different observers and measurement instruments), working with SPSS for Windows and choosing the right analysis method, multiple regression (an extension of regression and correlation to designs with multiple variables), GLM/MANOVA (ANOVA for designs with multiple types of independent variables and/or multiple dependent variables, and nonparametric tests (extensions of all previous tests for non-normally distributed variables, including qualitative/categorical and ordinal variables).

Although LISP has been around since the fifties the language has continually adapted to new software genres. LISP has remained suitable for bridging the conceptual distance between programs and the hardware that runs them. Both properties have made the language popular for research and applications in artificial intelligence. LISP contintues to play a role in medium sized applications where development costs are prevalent, large and complex applications where the biggest challenge lies in the conceptualization, and software whose requirements constantly change.

To limit the great freedom that LISP affords the programmer this course will utilize the Scheme language; a variant of LISP that has two properties that computer scientists admire in a programming language: expressive power and simplicity.

Programming is an art and a craft. During the lectures the emphasis will be on the former, while the practical assignments focus on the latter. Examples of practical assignments from the past include the implementation of Eliza (a simulated therapist), the prisoner's dilemma, pattern recognition and genetic programming.

The processes underlying the comprehension and productions of language and speech have not only been verbally described, but have also been simulated by computer models. Some important models of the localist/symbolic and distributed/subsymbolic traditions are discussed and compared. The models are derived from a number of research domains: auditory word recognition, visual word recognition and learning, parsing, sentence production, lexicalisation and phonological encoding. The usefulness and limitations of the various computational models are discussed.

Students must be able describe the theoretical relevance, restrictions, and methods of implementation of prominent models in computational psycholinguistics. They must be able to compare these models on relevant dimensions and make predictions for example situations and thought experiments.

This course introduces important aspects of the symbolic approach to Artificial Intelligence. Students will acquire insight in important issues from the "classic" AI that are relevant to modern developments.
Main themes are constraint satisfaction problems, planning problems, decision making, and machine learning.
After the course, students will be able to apply these techniques to simple practical examples.

The course BKI230 provides students with a thorough understanding of artificial neural network (ANN) models, by exploring fundamental properties like architectural aspects and the processes of information processing, learning, and classification. Among the models covered are feedforward nets (perceptrons, backprop), competitive learning (Grossberg, Kohonen), constraint satisfaction (Hopfield), and modular architectures and recurrent architectures. Furthermore, students will learn more about the practical application of, e.g., multi-layered perceptrons and Kohonen neural networks. The complete pattern recognition pipeline (data acquisition, pre-processing, segmentation, feature extraction, and classification) will be covered. Central theme of the pattern recognition process reads: "How can low-level, sub-symbolic features be transformed into higher-level symbolic features?" In the process of the recognition of handwritten shapes (handwriting, geometrical objects), students will learn about signal processing, feature extraction, data analysis and clustering, and training and testing neural network simulations. Students are required to program feature extraction algorithms and they will participate in a challenge "Who achieves the highest recognition results"! The results of this exploration in feature and classifier space must be documented in an end report, evaluating your findings.

After completion the student is familiar with a number of mathematical methods that are important for various applications in artificial intelligence. This course covers taylor series, multivariate functions, complex numbers, Fourier analysis, Fourier transform (continuous and discrete), information and entropy, Markov processes and Hidden Markov Models.

This course is dedicated to complexity theory. Questions are raised that ask "how fast is my algorithm?", "are faster versions possible?", "can we assign classes of 'difficult' algorithms?", etc. The first part of the course will emphasize the analysis on algorithms and basic concepts like calculation models, pseudocode, resource analysis and recursive algorithms. The second part covers the categorization of algorithms into complexity classes such as P and NP. The final part discisses classical theory including arithmetic complexity, sorting, cryptography and graph algorithms.

In this course students will get a deep understanding of conceptual modeling, and will be able to transform a model into a computational environment in general, and a relational database structure and SQL in particular. This will be related to the Unified Modeling Language UML.

Testing is part of almost any software development project. The course "testing techniques" deals with a number of techniques, methods and tools which may help in the systematic and effective testing of software systems. Established testing techniques as well as some new developments, such as model-based testing, will be presented. Some guest lectures will be given by people from industrial software testing.

The goals of the course "testing techniques" are that students: (1) obtain an overview of, and insight in the importance and the place of structured and systematic testing within the software development cycle; (2) are familiar with standard testing concepts, terms, and nomenclature; (3) know and recognize different kinds, phases, and aspects of structured testing; (4) develop skills in applying some techniques for developing tests; (5) get experience in applying some test tools; (6) have knowledge of, and can apply some of the latest research results in model-based testing.

After this course the student will be able to compare programming concepts and understand the underlying tenets. They will be able to read and write functional programs, as well as reason about them and create correctness proofs.

Is there life after study?
It is smart to think about your future before finishing your study. A realistic view about yourself, your possibilities and restrictions and the choices offered by the job market are the necessary inputs you need to make a sound choice. Questions like ‘what is it what I want?', ‘what is what I am able to do?', ‘what is it what I like?' and ‘where am I heading?' are the core issues that may help you in creating a plan.
The course addresses this process in three sequential parts:
1. self reflection
2. targetting
3. planning

Using self reflection you try to formulate your wishes, which (together with information about the job market) may lead to a clear target. Subsequently you should create a plan to achieve that goal.

In this course the students are asked to:

do a self analysis to determine their strong/weak points

use the analysis and their personal interest to outline a desirable job (duties, colleagues en job environment)

use the job outline to make a sketch of desired company

make a selection out of the present job opportunities

write a standard, and tailor suited resume/job application letter

Contemplate about their career

During the course the following topics will be discussed:

How do determine your strong/weak points, your personality and interests?

Multi-agent systems are systems composed of multiple intelligent, autonomous agents. They are used both for industrial applications as for cognitive sciences. This course introduces the most important aspects of multiagent systems, like: autonomy, beliefs, desires, intentions, goals, reasoning (modal logic), reactivity, and proactivity. The design and simulation of such systems will also be discussed. Emphasis will be given to cooperation and communication between agents.

In this course we use a number of methods and techniques to design and realize administrative information systems in a structured way.
An important aspect in this context is that information systems usually are developed in teamwork; such a situation is simulated as in the project-part of the course you will have to cooperate in teams of 4 or 5 students.

This practical work course follows up on the theoretically oriented course Knowledge systems *, in which the aspect of knowledge acquisition is only briefly discussed.
Knowledge acquisition refers to interviewing and observing a domain expert with the aim of modelling his/her knowledge about a specialized cognitive task in an implementable form. It uses methods and techniques that are often based on psychometric and cognitive psychological theories.
The primary intention of the course is to exercise a number of useful and representative techniques, and a methodical execution of the acquisition process as a whole. In addition, implementing parts of expert knowledge will be exercised.

After successfully finishing the course, a student will:

have an overview of methods and techniques for acquiring, analyzing and formalizing the knowledge of an expert for use in an expert system;

be able to apply a number of such methods and techniques;

have the knowledge and skills to systematically and analytically set up, execute and control the knowledge acquisition process.

The behaviour of modern day enterprises, as well as society, are largely determined rules. Examples of such rules include taxation laws, rules governing the application of mortgages and guidelines guiding doctors in diagnosing patients.

Sometimes these rules reflect laws which one would like to enforce strictly. At other times, they represent best-practices that aim to guide people in performing their work.
Collectively one may refer to these rules as business rules. Business rules constrain/guide the behaviour of businesses/enterprises/, both with regard to operational processes as well as change processes. In this new course we will investigate several aspects of such rules. For example, the modelling processes required to obtain these rules, the languages needed to express the rules, as well as the measurements needed to enforce them. With regards to the process of modelling business rules, we will take the perspective that this involves a specific kind of knowledge engineering since business rules essentially capture organisational knowledge.

Finally, business rules are a means to an end. Some parties must have some reason to regulate the behaviour of/in an enterprise/society. In this need we find the rationalization for business rules and their deployment. We will take a risk management perspective in reasoning about such regulatory need, allowing us to take a cost-benefit perspective on business rules and their deployment.

This course builds on the bachelor course "Introduction in human-computer interaction (BKI114)". Among the topics in this course are the analysis and formal (cognitive) modelling of HCI, perceptive and multimodal interfaces, and other application areas like image retrieval, interactive maps, and conversational dialog systems. Students will study various prominent papers describing current research in these areas. They will design and implement at least two interactive systems that are used for performing human-factors research, i.e., research that sheds a light on how well humans cope with interactive systems and vice versa. They will write and defend a short project proposal describing their own plans to advance the state-of-the-art in HCI.

Computer programs that provide flexible and tailored user support need a diversity of explicitly represented knowledge: about the domain content; about the user, and about educational strategies and techniques. This type of user support is relevant to all kinds of software, but it is most salient in the prototypical context of intelligent tutoring systems.
The course will discuss the following aspects, mainly on the basis of original research papers about existing systems:

the aims (different types of support) for user modelling;

the extra requirements for a computer program to enable tailored user support, illucidated on the basis of the architecture of intelligent tutoring systems;

different types of knowledge about users that can be maintained in a user model, and the corresponding categories of user models that can be used;

problems in initializing and updating a user model: uncertainty in diagnosis, relevance of data (breadth and depth), non-monotonous nature of user models;

a number of specific techniques that may solve some of the above problems, but are usually only applicable in restricted contexts.

Handling uncertain knowledge has been one of the central problems of AIresearch during the past 30 years. In the 1970s and 1980s uncertaintywas handled by means of formalisms that were linked to rule-basedrepresentation and reasoning methods. Since the 1990s probabilisticgraphical models, in particular Bayesian networks, are seen as theprimary formalisms to deal with uncertain knowledge. Both early andnew methods for represensenting uncertainty are studied in the course, where inparticular various aspects of Bayesian networks are covered.

At the end of this course, the student should be able to:

understand the principles of reasoning under uncertainty

understand different numerical models for the representation of uncertainty, such as the CF model, the subjective Bayesian method, Bayesian belief networks, and possibly Dempster-Shafer theory

have insight into model-based approaches to AI

have insight into the pros and cons of learning models versus using expert knowledge

have some experience in experimenting with computational intelligence systems to solve problems involving probability theory

Statistical pattern recognition is the research area that studies and develops methods to teach a computer to recognize relationships in noisy data. This course provides an introduction into this field from the perspective of Bayesian statistics. A number of classical (linear discriminants) and modern methods (neural networks, Bayesian learning) are treated from this viewpoint. The course covers probability density estimation, single and multi-layer perceptrons, parameter optimization, learning and generalization and Bayesian learning.

The course covers principles and objectives of object-oriented design (such as responsible roles and loose coupling), OOD processes, techniques and tools (such as CRC cards and UML), the use of design patterns, and specifics of Java classes.
After having completed the course, students should be able to evaluate the quality of object-oriented designs, to effectively make an object-oriented design for a problem, and to implement an object-oriented design in a suitable OO language.

Traditional cognitive science emphasizes internal information processing. Representations and computational processing are considered as fundamental for the explanation of cognition and behavior. Recently however more attention is paid to the important role bodily interaction with the environment plays in the emergence of intelligent behavior. During the course we will discuss several papers that examine various aspects of the relatively new view of embodied embedded cognition: the (dis)advantages of representations, the empirical evidence for EEC stemming from psychology, robotics and cognitive neuroscience, and the consequences of EEC for views on the nature of explanation within the philosophy of science. During the meetings students will develop their ‘conference skills' (giving presentations, participating in discussions after a talk, getting ‘inside information', etc.).

Recently it has become possible to directly use brain activity to control devices. In the design of these so called Brain Computer Interfaces a large part of the effort goes into building a reliable classification of the signals. In BCI I this will be treated in detail. (in BCI II the focus will be on tasks, plasticity, measurement methods, signatures and markers, output control, user interface aspects and performance).
Topics in BCI I include preprocessing, feature extraction, time-frequency analysis, spatial filtering, classification, and advanced methods.

The student performs research in a limited scope and supervised manner and reports on it in a thesis. The subject of this research can be freely chosen within the field of artificial under the provision that one of the teachers can supervise the endeavor. The research could be literary, experimental or the design and implementation of some technique.

In my bachelor thesis I implemented a technique to prevent catastrophic interference when sequentially learning multiple tasks in neural network. The basic idea was to add "meaningful representation" nodes to the network and train those for each individual task while fixing the weights of the network. This worked on extremely simple toy problems if the network was pre-trained sufficiently well. You can find my thesis, conference article and poster on the "publications" page.

The master internship (training period) is closely tied to the master thesis. During the internship, the student is supposed to do the novel research that they will then describe in their master thesis. Internships can be either internal at the university or external at another university or in the industry.

I did my internship at Philips Research on the topic of brain-computer interfacing (BCI) under the supervision of Gary Garcia Molina (external) and Peter Desain (internal). Aside from doing my own research into the effects of different stimuli needed for a certain type of BCI, I participated in projects about brain responses to errors, emotions and brainwave entrainment.

The student does some kind of novel, publishable research and describes it in a thesis. This is usually the research done during the master internship / training period.

My master thesis was about brain-computer interfaces (BCIs) that utilize a brain signal called the steady-state visual evoked potential (SSVEP) and the effects of choosing different characteristics for the visual stimuli required for such a system. I participated in a systematic review of the field (see publications), created a BCI with cutting-edge performance and did experiments to determine stimuli effects. My thesis and a short article about this research can be found on the publications page.

Compilers are the most important part of a programming development environment. The course defines the function and objective of a compiler. Lexical analysis of programs is discussed in detail, regular expression and finite automatons defined and the use of Lex introduced. Top-down and bottom-up approaches in parsing are discussed precisely and the use of Yacc introduced. Implementation of error handling illustrated, particularly semantic analysis. Finally, code generation is covered. Construction of a compiler will be a large component of the course.

Knowledge •Understand the structure and design of compilers •Understand the role and function of lexical analyzers, parsers and code generators •Be able to get a theoretical foundation necessary for compiler construction Skills •Be able to use regular expressions and finite machines when doing lexical analyzation •Be able to use fragmented grammar and both above- and bottom up parsing methods •Be able to use the software that makes lexical analyzers and parsers Competence •Be able to design and build a simple compiler

This course will provide a comprehensive overview of the field of general game playing. The aim of general game playing is to create intelligent autonomous agents that automatically learn how to play many different games at an expert level without any human intervention, given only a description of the game rules. This requires that the agents learn diverse game-playing strategies without any game-specific knowledge being provided by their developers. A successful realization of this task involves the understanding and application of topics from many artificial-intelligence sub-disciplines, such as knowledge representation, agent-based reasoning, heuristic search, and machine learning. This course provided the students with such a background as well as an introduction to different parallel processing paradigms in the context of game-tree search; but parallel processing is fast becoming increasingly more relevant because of the foreseen development of massively multi-core computers.

On completion of the course students should have gained a thorough hands-on experience in building a complex artificial-intelligence based system, capable of both reasoning and learning from its actions. In particular, students should have learned how to - use logic to describe dynamic environments (games) - use logical reasoning to simulate dynamic environments - use search methods for automatic decision making - use heuristics to guide the search process - implement a stable and reliable system that has to deal with a wide variety of input - implement algorithms that have to obey strict time-constraints - build a game playing program

Online courses

"Introduction to Databases" had a very successful public offering in fall 2011, as one of Stanford's inaugural three massive open online courses. Since then, the course materials have been improved and expanded, and all materials are available for self-study. Students have access to lectures with in-video quizzes, multiple-choice quiz assignments, automatically-checked interactive programming exercises, midterm and final exams, a discussion forum, optional additional exercises with solutions, and pointers to readings and resources. Taught by Professor Jennifer Widom, the curriculum draws from Stanford's popular Introduction to Databases course.

A bold experiment in distributed education, "Introduction to Artificial Intelligence" wax offered free and online to students worldwide from October 10th to December 18th 2011. The course included feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum drew from that used in Stanford's introductory Artificial Intelligence course. The instructors offered similar materials, assignments, and exams.

Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field.

Machine learning is the science of getting computers to act without being explicitly programmed. In the past decade, machine learning has given us self-driving cars, practical speech recognition, effective web search, and a vastly improved understanding of the human genome. Machine learning is so pervasive today that you probably use it dozens of times a day without knowing it. Many researchers also think it is the best way to make progress towards human-level AI. In this class, you will learn about the most effective machine learning techniques, and gain practice implementing them and getting them to work for yourself. More importantly, you'll learn about not only the theoretical underpinnings of learning, but also gain the practical know-how needed to quickly and powerfully apply these techniques to new problems. Finally, you'll learn about some of Silicon Valley's best practices in innovation as it pertains to machine learning and AI.

Note: The link now redirects to the new course, but I took the original "ml-class" in the fall of 2011 where prof. Ng was pioneering the new wave of massive open online courses alongside professors Widom, Thrun and Norvig. This version did not include programming assignments.

This course teaches the fundamentals for engineering long-lasting software using highly-productive Agile techniques to develop Software as a Service (SaaS) using Ruby on Rails. Students will understand the new challenges and opportunities of SaaS versus shrink-wrapped software. They will understand and apply fundamental programming techniques to the design, development, testing, and public cloud deployment of a simple SaaS application. Students will use best-of-breed tools that support modern development techniques including behavior-driven design, user stories, test-driven development, velocity, and pair programming. Students will learn how modern programming language features like metaprogramming and reflection can improve productivity and code maintainability.

Learn how to program all the major systems of a robotic car from the leader of Google and Stanford's autonomous driving teams. This class will teach basic methods in Artificial Intelligence, including: probabilistic inference, planning and search, localization, tracking and control, all with a focus on robotics. Extensive programming examples and assignments will apply these methods in the context of building self-driving cars.

In this course you will learn several fundamental principles of algorithm design. You'll learn the divide-and-conquer design paradigm, with applications to fast sorting, searching, and multiplication. You'll learn several blazingly fast primitives for computing on graphs, such as how to compute connectivity information and shortest paths. Finally, we'll study how allowing the computer to "flip coins" can lead to elegant and practical algorithms and data structures. Learn the answers to questions such as: How do data structures like heaps, hash tables, bloom filters, and balanced search trees actually work, anyway? How come QuickSort runs so fast? What can graph algorithms tell us about the structure of the Web and social networks? Did my 3rd-grade teacher explain only a suboptimal algorithm for multiplying two numbers?

Uncertainty is unavoidable in real-world applications: we can almost never predict with certainty what will happen in the future, and even in the present and the past, many important aspects of the world are not observed with certainty. Probability theory gives us the basic foundation to model our beliefs about the different possible states of the world, and to update these beliefs as new evidence is obtained. These beliefs can be combined with individual preferences to help guide our actions, and even in selecting which observations to make. While probability theory has existed since the 17th century, our ability to use it effectively on large problems involving many inter-related variables is fairly recent, and is due largely to the development of a framework known as Probabilistic Graphical Models (PGMs). This framework, which spans methods such as Bayesian networks and Markov random fields, uses ideas from discrete data structures in computer science to efficiently encode and manipulate probability distributions over high-dimensional spaces, often involving hundreds or even many thousands of variables. These methods have been used in an enormous range of application domains, which include: web search, medical and fault diagnosis, image understanding, reconstruction of biological networks, speech recognition, natural language processing, decoding of messages sent over a noisy communication channel, robot navigation, and many more. The PGM framework provides an essential tool for anyone who wants to learn how to reason coherently from limited and noisy observations.

In this class, you will learn the basics of the PGM representation and how to construct them, using both human knowledge and machine learning techniques; you will also learn algorithms for using a PGM to reach conclusions about the world from limited and noisy evidence, and for making good decisions under uncertainty. The class covers both the theoretical underpinnings of the PGM framework and practical skills needed to apply these techniques to new problems.

We live in a complex world with diverse people, firms, and governments whose behaviors aggregate to produce novel, unexpected phenomena. We see political uprisings, market crashes, and a never ending array of social trends. How do we make sense of it? Models. Evidence shows that people who think with models consistently outperform those who don't. And, moreover people who think with lots of models outperform people who use only one. Why do models make us better thinkers? Models help us to better organize information - to make sense of that fire hose or hairball of data (choose your metaphor) available on the Internet. Models improve our abilities to make accurate forecasts. They help us make better decisions and adopt more effective strategies. They even can improve our ability to design institutions and procedures. In this class, I present a starter kit of models: I start with models of tipping points. I move on to cover models explain the wisdom of crowds, models that show why some countries are rich and some are poor, and models that help unpack the strategic decisions of firm and politicians. The models covered in this class provide a foundation for future social science classes, whether they be in economics, political science, business, or sociology. Mastering this material will give you a huge leg up in advanced courses. They also help you in life. Here's how the course will work. For each model, I present a short, easily digestible overview lecture. Then, I'll dig deeper. I'll go into the technical details of the model. Those technical lectures won't require calculus but be prepared for some algebra. For all the lectures, I'll offer some questions and we'll have quizzes and even a final exam. If you decide to do the deep dive, and take all the quizzes and the exam, you'll receive a certificate of completion. If you just decide to follow along for the introductory lectures to gain some exposure that's fine too. It's all free. And it's all here to help make you a better thinker!

Logic is one of the oldest intellectual disciplines in human history. It dates back to the times of Aristotle; it has been studied through the centuries; and it is still a subject of active investigation today.

This course is a basic introduction to Logic. It shows how to formalize information in form of logical sentences. It shows how to reason systematically with this information to produce all logical conclusions and only logical conclusions. And it examines logic technology and its applications - in mathematics, science, engineering, business, law, and so forth.

The course differs from other introductory courses in Logic in two important ways. First of all, it teaches a novel theory of logic that improves accessibility while preserving rigor. Second, the material is laced with interactive demonstrations and exercises that suggest the many practical applications of the field.

Computer vision seeks to develop algorithms that replicate one of the most amazing capabilities of the human brain - inferring properties of the external world purely by means of the light reflected from various objects to the eyes. We can determine how far away these objects are, how they are oriented with respect to us, and in relationship to various other objects. We reliably guess their colors and textures, and we can recognize them - this is a chair, this is my dog Fido, this is a picture of Bill Clinton smiling. We can segment out regions of space corresponding to particular objects and track them over time, such as a basketball player weaving through the court.

In this course, we will study the concepts and algorithms behind some of the remarkable successes of computer vision - capabilities such as face detection, handwritten digit recognition, reconstructing three-dimensional models of cities, automated monitoring of activities, segmenting out organs or tissues in biological images, and sensing for control of robots. We will build this up from fundamentals - an understanding of the geometry and radiometry of image formation, core image processing operations, as well as tools from statistical machine learning. On completing this course a student would understand the key ideas behind the leading techniques for the main problems of computer vision - reconstruction, recognition and segmentation - and have a sense of what computers today can or cannot do.

Statistics is about extracting meaning from data. In this class, we will introduce techniques for visualizing relationships in data and systematic techniques for understanding the relationships using mathematics.

Statistics One is designed to be a friendly introduction to very simple, very basic, fundamental concepts in statistics. This course is, quite literally, for everyone. If you think you can't learn statistics, this course is for you. If you had a statistics course before but feel like you need a refresher, this course is for you. Statistics One also provides an introduction to the R programming language. All the examples and assignments will involve writing code in R and interpreting R output. R software is free! It is also an open source programming language. What this means is you can download R, take this course, and start programming in R after just a few lectures. Statistics may seem like a foreign language, and in many ways it is. The ultimate goal of Statistics One is to get people all over the world to speak this language. So consider this your first course in a new and exciting universal language!

In this course you will learn how to program in R and how to use R for effective data analysis. You will learn how to install and configure software necessary for a statistical programming environment, discuss generic programming language concepts as they are implemented in a high-level statistical language. The course covers practical issues in statistical computing which includes programming in R, reading data into R, creating informative data graphics, accessing R packages, creating R packages with documentation, writing R functions, debugging, and organizing and commenting R code. Topics in statistical data analysis and optimization will provide working examples.

The goal of the course is to help you develop a valuable mental ability – a powerful way of thinking that our ancestors have developed over three thousand years.

Mathematical thinking is not the same as doing mathematics – at least not as mathematics is typically presented in our school system. School math typically focuses on learning procedures to solve highly stereotyped problems. Professional mathematicians think a certain way to solve real problems, problems that can arise from the everyday world, or from science, or from within mathematics itself. The key to success in school math is to learn to think inside-the-box. In contrast, a key feature of mathematical thinking is thinking outside-the-box – a valuable ability in today’s world. This course helps to develop that crucial way of thinking.

The primary audience is first-year students at college or university who are thinking of majoring in mathematics or a mathematically-dependent subject, or high school seniors who have such a college career in mind. They will need mathematical thinking to succeed in their major. Because mathematical thinking is a valuable life skill, however, anyone over the age of 17 could benefit from taking the course.

This course introduces the cornerstones of functional programming using the Scala programming language. Functional programming has become more and more popular in recent years because it promotes code that’s safe, concise, and elegant. Furthermore, functional programming makes it easier to write parallel code for today’s and tomorrow’s multiprocessors by replacing mutable variables and loops with powerful ways to define and compose functions.

Scala is a language that fuses functional and object-oriented programming in a practical package. It interoperates seamlessly with Java and its tools. Scala is now used in a rapidly increasing number of open source projects and companies. It provides the core infrastructure for sites such as Twitter, LinkedIn, Foursquare, Tumblr, and Klout.

In this course you will discover the elements of the functional programming style and learn how to apply them usefully in your daily programming tasks. You will also develop a solid foundation for reasoning about functional programs, by touching upon proofs of invariants and the tracing of execution symbolically.

The course is hands on; most units introduce short programs that serve as illustrations of important concepts and invite you to play with them, modifying and improving them. The course is complemented by a series of assignments, most of which are also programming projects.

Statistics is a thriving discipline that provides the fundamental language of all empirical research. Biostatistics is simply the field of statistics applied in the biomedical sciences.

This course puts forward key mathematical and statistical topics to help students understand biostatistics at a deeper level. After completing this course, students will have a basic level of understanding of the goals, assumptions, benefits and negatives of probability modeling in the medical sciences. This understanding will be invaluable when approaching new statistical topics and will provide students with a framework and foundation for future self learning.

This course trains scientists to become more effective, efficient, and confident writers. This is a hands-on course that emphasizes interactive examples and practice. In the first four weeks, we will review principles of effective writing, examples of good and bad writing, and tips for making the writing process easier. In the second four weeks, we will examine issues specific to scientific writing, including: authorship, peer review, the format of an original manuscript, and communicating science for lay audiences. Students will complete editing exercises, write two short papers, and edit each others’ work.

The primary audience is undergraduate science majors, graduate students in scientific disciplines, and professional scientists. Students from non-science disciplines can also benefit from the training provided in the first four weeks (on general principles of effective writing).

Neural networks use learning algorithms that are inspired by our understanding of how the brain learns, but they are evaluated by how well they work for practical applications such as speech recognition, object recognition, image retrieval and the ability to recommend products that a user will like. As computers become more powerful, Neural Networks are gradually taking over from simpler Machine Learning methods. They are already at the heart of a new generation of speech recognition devices and they are beginning to outperform earlier systems for recognizing objects in images. The course will explain the new learning procedures that are responsible for these advances, including effective new proceduresr for learning multiple layers of non-linear features, and give you the skills and understanding required to apply these procedures in many other domains.

In this course you will learn several fundamental principles of advanced algorithm design. You'll learn the greedy algorithm design paradigm, with applications to computing good network backbones (i.e., spanning trees) and good codes for data compression. You'll learn the tricky yet widely applicable dynamic programming algorithm design paradigm, with applications to routing in the Internet and sequencing genome fragments. You’ll learn what NP-completeness and the famous “P vs. NP” problem mean for the algorithm designer. Finally, we’ll study several strategies for dealing with hard (i.e., NP-complete problems), including the design and analysis of heuristics. Learn how shortest-path algorithms from the 1950s (i.e., pre-ARPANET!) govern the way that your Internet traffic gets routed today; why efficient algorithms are fundamental to modern genomics; and how to make a million bucks in prize money by “just” solving a math problem!

All computing systems, from mobile to supercomputers, are becoming heterogeneous parallel computers using both multi-core CPUs and many-thread GPUs for higher power efficiency and computation throughput. While the computing community is racing to build tools and libraries to ease the use of these heterogeneous parallel computing systems, effective and confident use of these systems will always require knowledge about the low-level programming interfaces in these systems. This course is designed for students in all disciplines to learn the essence of these programming interfaces (CUDA/OpenCL, OpenMP, and MPI) and how they should orchestrate the use of these interfaces to achieve application goals.

The course is unique in that it is application oriented and only introduces the necessary underlying computer science and computer engineering knowledge needed for understanding. It covers data parallel execution model, memory models for locality, parallel algorithm patterns, overlapping computation with communication, and scalable programming using joint MPI-CUDA in large scale computing clusters. It has been offered as a one-week intensive summer school for the past four years. In the past two years, there have been ten video-linked academic sides with a total of more than two hundred students each year.

AGI’s summer school entered its fourth year, enticing fifty students to Beijing, China for an intensive two weeks of instruction. Hosted by some of the most innovative researchers in the field of AGI including Dr. Pei Wang, Dr. Kristinn R. Thorisson, and Ben Goertzel, AGI’s summer school not only focused on building a theoretical groundwork for interested students but emphasized how to apply these ideas to issues in the field.

AGI’s summer school successfully trained students to use Opencog, open-source software that is widely used to forward AGI’s ultimate goal: thinking machines. The summer school’s hands-on approach encouraged a collaborative learning environment where students were shown the features of Opencog live. After spending weeks learning the tools featured in the software, students had the chance to apply their knowledge to unique problems and present the results to their classmates.