This course uses a project-based learning approach towards the study of web technologies and web programming. Students study the principles of web design and each student builds one or more interactive websites based on content relevant to their scholarly interest in the humanities or social sciences. Not open to graduate Computer Science, Information Systems, Mathematics or Scientific Computing students. For registration, please contact email@example.com.
This course builds directly on the foundation developed in PAC I, covering the essentials of computer organization through the study of assembly language programming and C, as well as introducing the students to the analysis of algorithms. Topics include: (1) Assembly language programming for the Intel chip family, emphasizing computer organization, the Intel x86 instruction set, the logic of machine addressing, registers and the system stack. (2) Programming in the C language, a general-purpose programming language which also has low-level features for systems programming. (3) An introduction to algorithms, including searching, sorting, graph algorithms and asymptotic complexity. Examples and assignments reinforce and refine those first seen in PAC I and often connect directly to topics in the core computer science graduate courses, such as Programming Languages, Fundamental Algorithms, and Operating Systems
Reviews a number of important algorithms, with emphasis on correctness and efficiency. The topics covered include solution of recurrence equations, sorting algorithms, selection, binary search trees and balanced-tree strategies, tree traversal, partitioning, graphs, spanning trees, shortest paths, connectivity, depth-first and breadth-first search, dynamic programming, and divide-and-conquer techniques.
The course covers a wide variety of topics in machine learning, pattern recognition, statistical modeling, and neural computation. It covers the mathematical methods and theoretical aspects, but primarily focuses on algorithmic and practical issues.
Cross-listing for DS-GA 1003.
This course concerns the latest techniques in deep learning and representation learning, focusing on supervised and unsupervised deep learning, embedding methods, metric learning, convolutional net and recurrent nets, with applications to computer vision, natural language understanding, and speech recognition.
An introduction to natural language processing, with an emphasis on methods for creating structured knowledge from text. Basic syntactic structures of English; constituent and dependency representations and parsers. Hidden Markov Models and maximum entropy models for part-of-speech and name tagging. Finite-state grammars and partial parsing. Probabilistic parsing. Lexical semantics. Relation and event extraction. Reference resolution. Machine translation. Supervised, semi-supervised, and active learning of linguistic models. Neural network models. There will be several pencil-and-paper exercises, several computer exercises, a final project, and a final exam.
Social Networks is a specific example of many forms of networks that have become ubiquitous in our modern society. The World Wide Web enables information flows among vast number of humans; Facebook, Orkut, Friendster, diaspora, etc. connect small groups of friends; amazon, eBay, etc. provide opportunities for trading, etc. These networks determine our information, influence our opinions, and shape our political attitudes. They also link us, often through important but weak ties, to other humans. Their origin is biological: going back to quorumsensing, swarming, flocking, social grooming, gossip, etc. Yet, as we have connected our social networks to traditional human institutions (markets, justice systems, education, etc.) through new technologies, the underlying biology has become obscured, but not dormant. Economic markets also look much more like networks than anonymous marketplaces. Firms interact with the suppliers and customers in a Web-like supply chains. Systemic risk in financial markets often results from the counterparty risks created within this financial network. This course will introduce the tools for the study of networks. It will show how certain common principles permeate the functioning of these diverse networks: e.g., issues related to robustness, fragility, and interlinkages etc.
This course introduces and discusses advanced topics in machine learning. The objective is both to present some key topics not covered by basic graduate ML classes such as Foundations of Machine Learning, and to bring up advanced learning problems that can serve as an initiation to research or to the development of new techniques relevant to applications.
This course teaches the security mindset and practical security concepts that are essential for software engineers, software developers, quality assurance testers and IT managers. The course discusses various attack techniques and defenses for real world applications and the security activities in the SDLC. Its main topics include: low-level exploits, web application security, malware, threat modeling, security requirements, secure coding practices, security & penetration testing, human factors and usability, mobile platform security, economics of security and legal and ethical issues. Course project and assignments may require Java, C, and/or scripting languages.
This graduate-level course explores some of the open mathematical challenges arising in the study of Deep learning. In particular, we will focus on three main topics: (i) signal processing principles underpinning convolutional neural networks, (ii) non-convex optimization challenges arising in high-dimensional (or overparametrised) learning problems, and (iii) generalization bounds that apply to realistic models.
The need for floating-point arithmetic, the IEEE floating-point standard, and the importance of numerical computing in a wide variety of scientific applications. Fundamental types of numerical algorithms: direct methods (e.g., for systems of linear equations), iterative methods (e.g., for a nonlinear equation), and discretization methods (e.g., for a differential equation). Numerical errors: can you trust your answers? Uses graphics and software packages such as Matlab. Programming assignments.
An intense hands-on study of practical techniques and methods of software engineering. Topics include advanced object-oriented design, design patterns, refactoring, code optimization, universal modeling language, threading, user interface design, enterprise application development, and development tools. All topics are integrated and applied during the semester long group project. The aim of the project is to prepare students for dynamics in a real workplace. Members of the group meet on a regular basis to discuss the project and to assign individual tasks. Students are judged primarily on the final project presentations.
An introduction to the field of computer vision. Basic concepts will be covered such as edge detection, stereo vision, motion, color, texture and recognition.
Many of the top firms in the technological and financial sectors are using algorithmic problems as interview questions for assessing candidate skill. In this course we take this idea one step further and use algorithmic problem solving as way to hone programming skills. Students will use the material covered in the data structures and algorithms courses and learn new algorithmic techniques to solve challenging problems quickly. Each week will be devoted to a particular type of algorithm. Weekly problem sets will reinforce the lecture, and require students to implement their solutions in Java or C++. Students completing this course will be well prepared to participate in programming competitions such as the ACM Inter-Collegiate Programming Contest, TopCoder, and Google's Code Jam.
There are many courses that can teach you how to use commercial computer graphics packages and APIs. This course, in contrast, will teach you how to build 3D computer graphics from the ground up. This will include 3D modeling, animation, and rendering. At the end of the semester you will have built your own complete working real-time 3D computer graphics systems that run in web browsers.
Natural Language Processing (aka Computational Linguistics) is an inter-disciplinary field applying methodology of computer science and linguistics to the processing of natural languages (English, Chinese, Spanish, Japanese, etc.). Typical applications include: information extraction (automatically finding information from text); information retrieval (web searches and other applications involving the automatic selection of "relevant" documents); sentiment analysis (automatic extraction of opinions about a set of issues); and machine translation (automatically translating one natural language to another). Much of the best work in the field combines two methodologies: (1) automatically acquiring statistical information from one set of "training" documents to use as the basis for probabilistically predicting the distribution of similar information in new documents; and (2) using manually encoded linguistic knowledge. For example, many supervised methods of machine learning require: a corpus of text with manually encoded linguistic knowledge, a set of procedures for acquiring statistical patterns from this data and a transducer for predicting these same distinctions in new text. This class will cover linguistic, statistical and computational aspects of this exciting field.
This course prepares students to become active participants in open source projects. It begins with an overview of the philosophy and brief history of open source development, followed by an in-depth look at different types of open source projects and the study of various tools involved in open source development. In particular, it covers the collaborative nature of open source projects, community structure, version control systems, licensing, intellectual property, types of contributions (programming and non-programming) and the tool-chains that enable such contributions. The students are expected to contribute to existing open source projects.
This course will cover basic principles of computer security and security engineering. To facilitate understanding, this course will consider security both from an attacker's perspective (threat modeling) and the defender's perspective (building and deploying secure systems). Specific topics will include operating system security, network security, web security, and mobile device security. Course projects will focus both on writing secure code and exploiting insecure code.