knitr::opts_chunk$set(echo = FALSE)
knitr::include_graphics("figs/goes-earth.jpg")
\tiny GOES-East, 2014-04-22, NASA Goddard Space Flight Center
\textbf{\Huge The data revolution and deep learning aren't sufficient for scientific inference.}
\begin{center} \begin{tikzpicture} \node (states) [par] {States}; \node (parameters) [par, left of=states, xshift=-2cm, yshift=2cm]{Parameters}; \node (observations) [whitebox, right of=states, above of=states, xshift=2cm, yshift=1cm] {Observations}; \draw [arrow] (states) -- (observations); \draw [arrow] (parameters) -- (observations); \draw [arrow] (parameters) -- (states); \end{tikzpicture} \end{center}
\begin{center} \begin{tikzpicture} \node (process) [par] {Occupancy state $z$}; \node (data) [whitebox, right of=process, above of=process, xshift=2cm, yshift=1cm] {Detection data $y$}; \node (p) [par, left of=process, xshift=-2.5cm, yshift=2cm]{$p$}; \node (psi) [par, left of=process, xshift=-2.5cm]{$\psi$}; \draw [arrow] (p) -- (data); \draw [arrow] (process) -- (data); \draw [arrow] (psi) -- (process); \end{tikzpicture} \end{center}
$$y \sim \text{Bernoulli}(z \times p)$$
$$z \sim \text{Bernoulli}(\psi)$$
e.g, $f$ maps covariates $X$ to occupancy probability $\psi$:
$$\psi = f(X; \theta).$$
e.g., linear on the logit scale:
$$\psi = \text{logit}^{-1}(X \beta).$$ $\quad$
\begin{center} \begin{tikzpicture} % linear mapping \tikzstyle{every pin edge}=[<-,shorten <=1pt] \tikzstyle{input neuron}=[neuron, draw=black, fill=white]; \tikzstyle{output neuron}=[neuron, draw=black, fill=AlertOrange!50!white]; \tikzstyle{annot} = [text width=4em, text centered]
% Draw the input layer nodes \foreach \name / \y in {1,...,4} % This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4} \node[input neuron] (I-\name) at (0,-\y) {$x_{\y}$};
% Draw the output layer node \node[output neuron, right of=I-2, above of=I-3, xshift=1cm, yshift=-0.45cm] (O) {$\psi$};
% Connect every node in the hidden layer with the output layer \foreach \source in {1,...,4} \draw (I-\source) edge (O);
\end{tikzpicture} \end{center}
\begin{center} \begin{tikzpicture} \tikzstyle{every pin edge}=[<-,shorten <=1pt] \tikzstyle{input neuron}=[neuron, draw=black, fill=white]; \tikzstyle{output neuron}=[neuron, draw=black, fill=white]; \tikzstyle{hidden neuron}=[neuron, draw=black, fill=UniBlue!50!white]; \tikzstyle{annot} = [text width=4em, text centered]
% Draw the input layer nodes \foreach \name / \y in {1,...,4} % This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4} \node[input neuron] (I-\name) at (0,-\y) {$x_{\y}$};
% Draw the hidden layer nodes \foreach \name / \y in {1,...,5} \path[yshift=0.5cm] node[hidden neuron] (H-\name) at (\layersep,-\y cm) {$h_{\y}$};
% Draw the output layer node \node[output neuron, right of=H-3, xshift=1cm] (O) {$\hat y$};
% Connect every node in the input layer with every node in the % hidden layer. \foreach \source in {1,...,4} \foreach \dest in {1,...,5} \path (I-\source) edge (H-\dest);
% Connect every node in the hidden layer with the output layer \foreach \source in {1,...,5} \path (H-\source) edge (O);
\end{tikzpicture} \end{center}
Neural network predicts parameters
$\;$
\begin{center} \begin{tikzpicture} \tikzstyle{every pin edge}=[<-,shorten <=1pt] \tikzstyle{input neuron}=[neuron, draw=black, fill=white]; \tikzstyle{output neuron}=[neuron, draw=black, fill=AlertOrange!50!white]; \tikzstyle{hidden neuron}=[neuron, draw=black, fill=UniBlue!50!white]; \tikzstyle{annot} = [text width=4em, text centered]
% Draw the input layer nodes \foreach \name / \y in {1,...,4} % This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4} \node[input neuron] (I-\name) at (0,-\y) {$x_{\y}$};
% Draw the hidden layer nodes \foreach \name / \y in {1,...,5} \path[yshift=0.5cm] node[hidden neuron] (H-\name) at (\layersep,-\y cm) {$h_{\y}$};
% Draw the output layer node \node[output neuron, right of=H-3, xshift=1cm] (O) {$\psi$};
% Connect every node in the input layer with every node in the % hidden layer. \foreach \source in {1,...,4} \foreach \dest in {1,...,5} \path (I-\source) edge (H-\dest);
% Connect every node in the hidden layer with the output layer \foreach \source in {1,...,5} \path (H-\source) edge (O);
\end{tikzpicture} \end{center}
Hierarchical model includes a neural network
$\;$
\begin{center} \begin{tikzpicture} \tikzstyle{every pin edge}=[<-,shorten <=1pt] \tikzstyle{input neuron}=[neuron, draw=black, fill=white]; \tikzstyle{output neuron}=[neuron, draw=black, fill=AlertOrange!50!white]; \tikzstyle{hidden neuron}=[neuron, draw=black, fill=UniBlue!50!white]; \tikzstyle{annot} = [text width=4em, text centered]
% Draw the input layer nodes \foreach \name / \y in {1,...,4} % This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4} \node[input neuron] (I-\name) at (0,-\y) {$x_{\y}$};
% Draw the hidden layer nodes \foreach \name / \y in {1,...,5} \path[yshift=0.5cm] node[hidden neuron] (H-\name) at (\layersep,-\y cm) {$h_{\y}$};
% Draw the output layer node \node[output neuron, right of=H-3, xshift=1cm] (O) {$\psi$};
% Draw other hierarchical model components \node[output neuron, above of=O] (p) {$p$}; \node[output neuron,label=below:\tiny Occupancy, right of=O] (z) {$z$}; \node[input neuron,label=above:\tiny Detection data, above of=z, right of=z] (y) {$y$};
\path (O) edge (z); \path (z) edge (y); \path (p) edge (y);
% Connect every node in the input layer with every node in the % hidden layer. \foreach \source in {1,...,4} \foreach \dest in {1,...,5} \path (I-\source) edge (H-\dest);
% Connect every node in the hidden layer with the output layer \foreach \source in {1,...,5} \path (H-\source) edge (O);
\end{tikzpicture} \end{center}
If we observe $y_i$ for $i=1,...,N$:
$$\text{Loss}(\theta) = - \frac{1}{N} \sum_{i=1}^N \underbrace{\ell(y_i, \theta)}_{\substack{\text{Log} \ \text{probability}}}$$
North American Breeding Bird Survey:
\tiny Species encoder extends Chen, Di, et al. "Deep multi-species embedding." arXiv preprint arXiv:1609.09353 (2016) to share information among related species.
knitr::include_graphics("figs/auc_map.pdf")
knitr::include_graphics("figs/ex-assoc.pdf")
\tiny Holt RD, Keitt TH. Alternative causes for range limits: a metapopulation perspective. Ecology Letters. 2000 Jan;3(1):41-7.
e.g., if you know $f$:
$$\text{logit}(\psi) = \underbrace{f(x)}{\text{Known}} + \underbrace{\text{NN}\theta(x)}_{\text{Unknown}}$$
knitr::include_graphics("figs/sketch.jpg")
$$u' = \text{NN}\theta(u, t)$$ where $u$ is a state, and $\text{NN}\theta$ is a neural net.
$$\text{Loss} = \text{Error} + \text{Model complexity} + \text{Physical inconsistency}$$
\small Get in touch: maxwell.b.joseph@colorado.edu, @mxwlj
Funding: University of Colorado Grand Challenge, Earth Lab
Data: North American Breeding Bird Survey & its participants, National Ecological Observation Network
Thanks: Two anonymous reviewers, Justin Kitzes, Carl Boettiger, David Zonana, Roland Knapp, ESIP/NASA AIST programs
\normalsize
https://github.com/mbjoseph/neuralecology
Joseph MB. 2020. Neural hierarchical models of ecological populations. Ecology Letters, 23(4).
Gaussian prior on weights $\rightarrow$ $L_2$ penalty
$$\text{Loss}(\theta) = - \frac{1}{N} \sum_{i=1}^N \ell(y_i, \theta) + L_2(\theta).$$
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.