├── LICENSE.txt ├── README.md ├── environment.yml ├── environment_pinned.yml └── proposal ├── .gitignore ├── makefile └── proposal.md /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Michaël Defferrard 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Learning from Graphs: From Mathematical Principles to Practical Tools 2 | 3 | A hands-on tutorial presented by [Michaël Defferrard](https://deff.ch) at [The Web Conference 2021](https://www2021.thewebconf.org/program/tutorials). 4 | 5 | > A graph encodes relations between objects, such as distances between points or hyperlinks between websites. 6 | > You will learn how to extract information about that relational structure. 7 | > This information is crucial to characterize an object through its local connectivity or an entire graph through its global connectivity. 8 | > On top of that structure, a network may possess data about the objects or the relations, such as a point's color or an hyperlink's click-through rate. 9 | > You will learn how to leverage a graph to analyze this data. 10 | > Leveraging the structure that underlies data is an important concept, from physical symmetries dictating conservation laws to the efficiency of convolutional neural networks. 11 | > The tutorial is built on deep mathematical principles but will walk you from the basics with an emphasis on intuitions and working knowledge. 12 | 13 | **Intended audience**: people with theoretical or practical interests about graphs and data on graphs. Adapted to both researchers and practitioners. 14 | 15 | **Prerequisite knowledge**: scientific python programming, basic linear algebra, no prior knowledge about networks is necessary. 16 | 17 | ## Installation 18 | 19 | [![Binder](https://mybinder.org/badge_logo.svg)][binder] 20 |   Click the binder badge to run code from your browser without installing anything. 21 | 22 | [binder]: https://mybinder.org/v2/gh/mdeff/learning-from-graphs-webconf2021/HEAD?urlpath=lab 23 | 24 | For a local installation, you will need [git], [Python], [Jupyter], and packages from the [Python scientific stack][scipy]. 25 | If you don't know how to install those on your platform, we recommend to install [Miniconda] or [Anaconda], a distribution of the [conda] package and environment manager. 26 | Follow the below instructions to install it and create an environment for the course. 27 | 28 | 1. Download the Python 3.x installer for Windows, macOS, or Linux from and install with default settings. 29 | Skip this step if you have conda already installed (from [Miniconda] or [Anaconda]). 30 | * Windows: double-click on `Miniconda3-latest-Windows-x86_64.exe`. 31 | * macOS: double-click on `Miniconda3-latest-MacOSX-x86_64.pkg` or run `bash Miniconda3-latest-MacOSX-x86_64.sh` in a terminal. 32 | * Linux: run `bash Miniconda3-latest-Linux-x86_64.sh` in a terminal or use your package manager. 33 | 1. Open a terminal. 34 | Windows: open the Anaconda Prompt from the Start menu. 35 | 1. Install git with `conda install git`. 36 | 1. Navigate to the folder where you want to store the material with `cd path/to/folder`. 37 | 1. Download this repository with `git clone https://github.com/mdeff/learning-from-graphs-webconf2021`. 38 | 1. Enter the repository with `cd learning-from-graphs-webconf2021`. 39 | 1. Create an environment containing the required packages with `conda env create -f environment.yml`. 40 | 41 | Every time you want to work, do the following: 42 | 43 | 1. Open a terminal. 44 | Windows: open the Anaconda Prompt from the Start menu. 45 | 1. Activate the environment with `conda activate learning-from-graphs-webconf2021`. 46 | 1. Navigate to the folder where the material is stored with `cd path/to/folder/learning-from-graphs-webconf2021`. 47 | 1. Start Jupyter with `jupyter lab`. 48 | The command should open a new tab in your web browser. 49 | 1. Edit and run the notebooks from your browser. 50 | 1. Once done, you can run `conda deactivate` to leave the environment. 51 | 52 | [git]: https://git-scm.com 53 | [python]: https://www.python.org 54 | [jupyter]: https://jupyter.org 55 | [scipy]: https://www.scipy.org 56 | [anaconda]: https://www.anaconda.com/products/individual 57 | [miniconda]: https://conda.io/miniconda.html 58 | [conda]: https://conda.io 59 | [conda-forge]: https://conda-forge.org 60 | 61 | ## License 62 | 63 | The content is released under the terms of the [MIT License](LICENSE.txt). 64 | -------------------------------------------------------------------------------- /environment.yml: -------------------------------------------------------------------------------- 1 | name: learning-from-graphs-webconf2021 2 | channels: 3 | - conda-forge 4 | dependencies: 5 | - python 6 | - numpy 7 | - scipy 8 | - matplotlib-base 9 | - networkx 10 | - jupyterlab 11 | - pip: 12 | - git+https://github.com/epfl-lts2/pygsp 13 | -------------------------------------------------------------------------------- /environment_pinned.yml: -------------------------------------------------------------------------------- 1 | name: learning-from-graphs-webconf2021 2 | channels: 3 | - conda-forge 4 | dependencies: 5 | - _libgcc_mutex=0.1=conda_forge 6 | - _openmp_mutex=4.5=1_gnu 7 | - anyio=2.2.0=py39hf3d152e_0 8 | - argon2-cffi=20.1.0=py39h3811e60_2 9 | - async_generator=1.10=py_0 10 | - attrs=20.3.0=pyhd3deb0d_0 11 | - babel=2.9.0=pyhd3deb0d_0 12 | - backcall=0.2.0=pyh9f0ad1d_0 13 | - backports=1.0=py_2 14 | - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 15 | - bleach=3.3.0=pyh44b312d_0 16 | - brotlipy=0.7.0=py39h3811e60_1001 17 | - ca-certificates=2020.12.5=ha878542_0 18 | - certifi=2020.12.5=py39hf3d152e_1 19 | - cffi=1.14.5=py39he32792d_0 20 | - chardet=4.0.0=py39hf3d152e_1 21 | - cryptography=3.4.7=py39hbca0aa6_0 22 | - cycler=0.10.0=py_2 23 | - decorator=5.0.7=pyhd8ed1ab_0 24 | - defusedxml=0.7.1=pyhd8ed1ab_0 25 | - deprecation=2.1.0=pyh9f0ad1d_0 26 | - entrypoints=0.3=pyhd8ed1ab_1003 27 | - freetype=2.10.4=h0708190_1 28 | - idna=2.10=pyh9f0ad1d_0 29 | - importlib-metadata=3.10.1=py39hf3d152e_0 30 | - ipykernel=5.5.3=py39hef51801_0 31 | - ipython=7.22.0=py39hef51801_0 32 | - ipython_genutils=0.2.0=py_1 33 | - jedi=0.18.0=py39hf3d152e_2 34 | - jinja2=2.11.3=pyh44b312d_0 35 | - jpeg=9d=h36c2ea0_0 36 | - json5=0.9.5=pyh9f0ad1d_0 37 | - jsonschema=3.2.0=pyhd8ed1ab_3 38 | - jupyter-packaging=0.9.1=pyhd8ed1ab_0 39 | - jupyter_client=6.1.12=pyhd8ed1ab_0 40 | - jupyter_core=4.7.1=py39hf3d152e_0 41 | - jupyter_server=1.6.1=py39hf3d152e_0 42 | - jupyterlab=3.0.14=pyhd8ed1ab_0 43 | - jupyterlab_pygments=0.1.2=pyh9f0ad1d_0 44 | - jupyterlab_server=2.4.0=pyhd8ed1ab_0 45 | - kiwisolver=1.3.1=py39h1a9c180_1 46 | - lcms2=2.12=hddcbb42_0 47 | - ld_impl_linux-64=2.35.1=hea4e1c9_2 48 | - libblas=3.9.0=8_openblas 49 | - libcblas=3.9.0=8_openblas 50 | - libffi=3.3=h58526e2_2 51 | - libgcc-ng=9.3.0=h2828fa1_19 52 | - libgfortran-ng=9.3.0=hff62375_19 53 | - libgfortran5=9.3.0=hff62375_19 54 | - libgomp=9.3.0=h2828fa1_19 55 | - liblapack=3.9.0=8_openblas 56 | - libopenblas=0.3.12=pthreads_h4812303_1 57 | - libpng=1.6.37=h21135ba_2 58 | - libsodium=1.0.18=h36c2ea0_1 59 | - libstdcxx-ng=9.3.0=h6de172a_19 60 | - libtiff=4.2.0=hdc55705_0 61 | - libwebp-base=1.2.0=h7f98852_2 62 | - lz4-c=1.9.3=h9c3ff4c_0 63 | - markupsafe=1.1.1=py39h3811e60_3 64 | - matplotlib-base=3.4.1=py39h2fa2bec_0 65 | - mistune=0.8.4=py39h3811e60_1003 66 | - nbclassic=0.2.7=pyhd8ed1ab_0 67 | - nbclient=0.5.3=pyhd8ed1ab_0 68 | - nbconvert=6.0.7=py39hf3d152e_3 69 | - nbformat=5.1.3=pyhd8ed1ab_0 70 | - ncurses=6.2=h58526e2_4 71 | - nest-asyncio=1.5.1=pyhd8ed1ab_0 72 | - networkx=2.3=py_0 73 | - notebook=6.3.0=pyha770c72_1 74 | - numpy=1.20.2=py39hdbf815f_0 75 | - olefile=0.46=pyh9f0ad1d_1 76 | - openjpeg=2.4.0=hf7af979_0 77 | - openssl=1.1.1k=h7f98852_0 78 | - packaging=20.9=pyh44b312d_0 79 | - pandoc=2.12=h7f98852_0 80 | - pandocfilters=1.4.2=py_1 81 | - parso=0.8.2=pyhd8ed1ab_0 82 | - pexpect=4.8.0=pyh9f0ad1d_2 83 | - pickleshare=0.7.5=py_1003 84 | - pillow=8.1.2=py39hf95b381_1 85 | - pip=21.0.1=pyhd8ed1ab_0 86 | - prometheus_client=0.10.1=pyhd8ed1ab_0 87 | - prompt-toolkit=3.0.18=pyha770c72_0 88 | - ptyprocess=0.7.0=pyhd3deb0d_0 89 | - pycparser=2.20=pyh9f0ad1d_2 90 | - pygments=2.8.1=pyhd8ed1ab_0 91 | - pyopenssl=20.0.1=pyhd8ed1ab_0 92 | - pyparsing=2.4.7=pyh9f0ad1d_0 93 | - pyrsistent=0.17.3=py39h3811e60_2 94 | - pysocks=1.7.1=py39hf3d152e_3 95 | - python=3.9.2=hffdb5ce_0_cpython 96 | - python-dateutil=2.8.1=py_0 97 | - python_abi=3.9=1_cp39 98 | - pytz=2021.1=pyhd8ed1ab_0 99 | - pyzmq=22.0.3=py39h37b5a0c_1 100 | - readline=8.0=he28a2e2_2 101 | - requests=2.25.1=pyhd3deb0d_0 102 | - scipy=1.6.2=py39hee8e79c_0 103 | - send2trash=1.5.0=py_0 104 | - setuptools=49.6.0=py39hf3d152e_3 105 | - six=1.15.0=pyh9f0ad1d_0 106 | - sniffio=1.2.0=py39hf3d152e_1 107 | - sqlite=3.35.4=h74cdb3f_0 108 | - terminado=0.9.4=py39hf3d152e_0 109 | - testpath=0.4.4=py_0 110 | - tk=8.6.10=h21135ba_1 111 | - tomlkit=0.7.0=py39hf3d152e_3 112 | - tornado=6.1=py39h3811e60_1 113 | - traitlets=5.0.5=py_0 114 | - tzdata=2021a=he74cb21_0 115 | - urllib3=1.26.4=pyhd8ed1ab_0 116 | - wcwidth=0.2.5=pyh9f0ad1d_2 117 | - webencodings=0.5.1=py_1 118 | - wheel=0.36.2=pyhd3deb0d_0 119 | - xz=5.2.5=h516909a_1 120 | - zeromq=4.3.4=h9c3ff4c_0 121 | - zipp=3.4.1=pyhd8ed1ab_0 122 | - zlib=1.2.11=h516909a_1010 123 | - zstd=1.4.9=ha95c52a_0 124 | - pip: 125 | - git+https://github.com/epfl-lts2/pygsp 126 | -------------------------------------------------------------------------------- /proposal/.gitignore: -------------------------------------------------------------------------------- 1 | proposal.pdf 2 | -------------------------------------------------------------------------------- /proposal/makefile: -------------------------------------------------------------------------------- 1 | MD = $(wildcard *.md) 2 | PDF = $(MD:.md=.pdf) 3 | 4 | all: $(PDF) 5 | 6 | %.pdf: %.md 7 | pandoc $< -o $@ 8 | 9 | cleanall: 10 | rm -f $(PDF) 11 | 12 | .PHONY: all cleanall 13 | -------------------------------------------------------------------------------- /proposal/proposal.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Learning from Graphs 3 | subtitle: A workshop proposal for The Web Conference (WWW'21) 4 | author: Michaël Defferrard 5 | date: 2020-12-04 6 | numbersections: false 7 | toc: false 8 | lang: en 9 | papersize: a4 10 | geometry: vmargin=3cm, hmargin=3cm 11 | header-includes: 12 | - \hypersetup{colorlinks=true,allcolors=blue} 13 | --- 14 | 15 | # Organizer 16 | 17 | I am a Machine Learning researcher, currently pursuing a PhD at the École Polytechnique Fédérale de Lausanne (EPFL) with Prof. Pierre Vandergheynst. My main research interest is the modeling, analysis, and understanding of structured data. Data structured by networks, such as brain activity supported by neural connections, or manifolds, such as the temperature and wind fields on the Earth. To this end, I am developing Deep Learning to exploit that structure, and thrive to solve real problems. Besides research, I am teaching Data Science and Machine Learning (with graphs). 18 | 19 | More details online: 20 | [website](https://deff.ch), 21 | [CV](https://deff.ch/cv.pdf), 22 | [twitter](https://twitter.com/m_deff), 23 | [google scholar](https://scholar.google.com/citations?user=Ztj2-gUAAAAJ), 24 | [github](https://github.com/mdeff). 25 | 26 | # Abstract 27 | 28 | A graph encodes relations between objects, such as distances between points or hyperlinks between websites. 29 | You will learn how to extract information about that relational structure. 30 | This information is crucial to characterize an object through its local connectivity or an entire graph through its global connectivity. 31 | On top of that structure, a network may possess data about the objects or the relations, such as a point's color or an hyperlink's click-through rate. 32 | You will learn how to leverage a graph to analyze this data. 33 | Leveraging the structure that underlies data is an important concept, from physical symmetries dictating conservation laws to the efficiency of convolutional neural networks. 34 | The tutorial will walk you from the basics to some of the latest developments, with an emphasis on intuitions and working knowledge. 35 | 36 | # Topic and relevance 37 | 38 | Graphs are ubiquitous among topics covered by The Web Conference: 39 | they organize the web both physically and logically, they model social interactions, they power recommender systems. 40 | The theory and tools I will develop in the workshop are however agnostic to the particular application. 41 | They can be used whenever data is structured by some sort of relation, with applications ranging from the design of proteins to the inference of cosmological parameters from sky observations. 42 | 43 | A rich and mature theory with tools has been developed over decades in the fields of Graph Theory and Network Science. 44 | The versatility of graphs to represent relational data and exploit their symmetries has recently caught the attention of the Signal Processing and Machine Learning communities. 45 | This tutorial will walk participants from established knowledge to some of the latest developments, following a logical path that will touch adjacent topics, such as calculus and group theory, to build useful connections. 46 | 47 | # Duration 48 | 49 | A full-day (6-7 hours) is required to cover the breadth of the topic and to allow enough time for the participants to experiment. 50 | 51 | # Interaction style 52 | 53 | Eight periods of 45 minutes made of 15 minutes of theory with slides followed by 30 minutes of practice with Jupyter notebooks. 54 | Q&A and discussions of theoretical or practical aspects anytime. 55 | 56 | # Intended audience and level 57 | 58 | **Intended audience**: people with theoretical or practical interests about graphs and data on graphs. Adapted to both researchers and practitioners. 59 | 60 | **Prerequisite knowledge**: scientific python programming, basic linear algebra, no prior knowledge about networks is necessary. 61 | 62 | **Learning objectives**: 63 | Participants will learn how to identify network data, how to deal with it, and what can be learned from it. 64 | They will know the basics of information processing over networks, and how to devise a machine learning system based on network data. 65 | Finally, the hands-on experience will give them the confidence to apply those tools in practice. 66 | 67 | # Previous editions 68 | 69 | I taught tutorials on similar topics at the Applied Machine Learning Days ([slides](https://doi.org/10.5281/zenodo.2551081), [github](https://github.com/rodrigo-pena/amld2019-graph-workshop), [conference](https://appliedmldays.org/events/amld-epfl-2019/workshops/learning-and-processing-over-networks)) and at the GraphSIP summer school ([github](https://github.com/mdeff/pygsp_tutorial_graphsip), [summer school](https://graphsip.sciencesconf.org)). 70 | I managed and co-taught a course at EPFL for four years ([2019](https://github.com/mdeff/ntds_2019), [2018](https://github.com/mdeff/ntds_2018), [2017](https://github.com/mdeff/ntds_2017), [2016](https://github.com/mdeff/ntds_2016)). 71 | I also maintain the [PyGSP](https://pygsp.rtfd.io/), a python package for graph signal processing, which contains tutorials and examples. 72 | 73 | While topics are similar, the material matures over time and is adapted to the interests of the venue's audience. 74 | 75 | # Tutorial materials 76 | 77 | PDF slides and jupyter notebooks on github (to be run either locally if the computer was prepared with a given [conda](https://conda.io) environment or in the cloud with [binder](https://mybinder.org)). 78 | 79 | # Online format 80 | 81 | * Theory with slides presented live or pre-recorded. 82 | * Continuous instant messaging (I guess there will be a platform for the whole conference). 83 | * One-on-one Q&A and discussions over "break-out rooms". 84 | * Code can be run in the cloud to avoid installation issues. 85 | 86 | # Additional info for hands-on tutorials 87 | 88 | * Tutorial duration: 6 hours. 89 | * OS and tools: any OS with [conda](https://conda.io) or a web browser. 90 | * Software licenses: none. 91 | * Setup instructions: `git clone xxx` (or zip download) then `conda create -f environment.yml`. Can work in the cloud with a browser if that fails. Detailed instructions will be available on the github repository (like [here](https://github.com/rodrigo-pena/amld2019-graph-workshop#installation)). 92 | 93 | # Video snippets 94 | 95 | Not of teaching, but some research talks are on [youtube](https://www.youtube.com/channel/UCUHLTuGMbhn1GZfVmLkeV6g). 96 | --------------------------------------------------------------------------------