class: center, middle, inverse, title-slide # Deep Learning com o R ## UFBA, 2020 ###
--- # Agenda * O que são redes neurais profundas e como elas se relacionam com o que já sabemos ? -- * Que programas podemos usar para trainar esses modelos e como eles se relacionam? -- .pull-right[(Spoiler: `torch` e `keras`/`tensorflow`)] -- <br><br> * Como ajustar modelos de deep learning algumas situações específicas? --- # O que preciso saber? * Regressão linear * Regressão logística * R + Pipe! -- ## `%>% %>% %>% %>% %>% %>% %>% %>% %>% %>% %>% %>%` --- # Referências .pull-left[ * [Deep Learning Book](https://www.deeplearningbook.org) * [Deep Learning with R](https://www.manning.com/books/deep-learning-with-r) * [RStudio AI blog](https://blogs.rstudio.com/ai/) ] .pull-right[ ![](https://images-na.ssl-images-amazon.com/images/I/61fim5QqaqL._SX373_BO1,204,203,200_.jpg) ] --- # Por que é importante? * Muito hype em torno do tema. -- * Mercado de trabalho exige cada vez mais. -- * Uma parte considerável dos avanços na estatística atuais ocorrem no contexto de deep learning. --- # Por que *profundo*? * Nós usamos uma composição de operações não lineares, chamadas *camadas*, para aprender uma representação do que estamos estudando * O número de camadas é o que dá a "profundidade" * Hoje em dia temos modelos com centenas de camadas -- ## Nomes alternativos - Aprendizado de representação em camadas - Aprendizado de representação em camadas --- ## Modelos lineares generalizados - Regressão linear: rede neural com uma camada, sem ativação - Regressão logística: rede neural com uma camada, com ativação sigmoide (inversa da função logística) --- # Regressão logística <img src="imgs/glm.png" width="968" style="display: block; margin: auto;" /> --- # Regressão logística Função deviance: equivale à verossimilhança `$$D(y,\hat\mu(x)) = \sum_{i=1}^n 2\left[y_i\log\frac{y_i}{\hat\mu_i(x_i)} + (1-y_i)\log\left(\frac{1-y_i}{1-\hat\mu_i(x_i)}\right)\right]$$` `$$= 2 D_{KL}\left(y||\hat\mu(x)\right),$$` onde `\(D_{KL}(p||q) = \sum_i p_i\log\frac{p_i}{q_i}\)` é a divergência de Kullback-Leibler. --- # Regressão logística Ajuste do modelo: Método de Fisher-Scoring (baseado no Newton-Raphson). `$$\boldsymbol\beta^{(m+1)}=\boldsymbol\beta^{(m)} + \{\mathcal I_{\beta\beta}^{-1} \}^{(m)}\mathbf U_\beta^{(m)}$$` -- Implementação: Em MLG, equivale a um problema de mínimos quadrados ponderados iterados. `$$\boldsymbol\beta^{(m+1)} = (\mathbf X^{\top} \mathbf W^{(m)} \mathbf X)^{-1}\mathbf X^{\top} \mathbf W^{(m)}\mathbf z^{(m)},$$` `$$\mathbf z = \mathbf X \boldsymbol\beta + \mathbf W^{-1/2}\mathbf V^{-1/2}(\mathbf y -\boldsymbol\mu)$$` --- class: center ## Rede neural: como funciona? ![](https://user-images.githubusercontent.com/4706822/48164527-e4d0e780-e2c9-11e8-91b5-1490cd3eca92.png) --- # Rede neural 1 camada <img src="imgs/y1.png" width="100%" style="display: block; margin: auto;" /> - Linear transformation of `\(x\)`, add bias and add some nonlinear activation. `$$f(x) = \sigma(wx + b)$$` --- ## Rede neural 1 camada Função de perda: `$$D_{KL}(p(x)||q(x))$$` -- <img src="imgs/thinking.png" width="20%" style="display: block; margin: auto;" /> --- # Rede neural 1 camada Ajuste do modelo: Descida de gradiente `$$\boldsymbol\beta^{(m+1)}=\boldsymbol\beta^{(m)} - \alpha\mathbf U_\beta^{(m)}$$` -- Implementação super simples: ``` for(i in 1:num_epochs) { grads <- compute_gradient(data, params) params <- params - learning_rate * grads } ``` --- ## Descida estocástica <img src="https://user-images.githubusercontent.com/4706822/48280375-870fdd00-e43a-11e8-868d-c5afa9e7c257.png" style="width: 90%"> --- ## Bibliotecas computacionais .pull-left[ #### Tensorflow - Google - Faz **diferenciação automática** - Utiliza GPU ] -- .pull-right[ #### Torch - Facebook - Faz **diferenciação automática** - Utiliza GPU - Possui algumas ferramentas para deep learning ] --- # Keras * Especifica modelos deep learning de forma intuitiva. * Utiliza o TensorFlow como backend. * Implementada originalmente em `python`. * Muito utilizada nos dias de hoje ![](https://files.slack.com/files-pri/T65A3BF9R-F01D079V50S/image.png?pub_secret=cdb50d1f12) --- ### Keras + R * Pacote: [`keras`](https://github.com/rstudio/keras). * Baseado em [reticulate](https://github.com/rstudio/reticulate). * Mantido por um brasileiro (Daniel Falbel, @dfalbel). * sintaxe tidy, usando o `%>%`. -- ### Torch + R * Pacote: [`torch`](https://github.com/mlverse/torch). * Baseado inteiramente na libtorch, em C e C++. Sem dependência do python. * Mantido por um brasileiro (Daniel Falbel, @dfalbel). * Em fase inicial de desenvolvimento. --- # GPU Graphical Processing Unit - Com ela, paralelizamos as computações em maior volume do que é possível com um processador. - Resultados 50x, 100x mais rápidos. ![](imgs/nvidia.gif) --- ## Vantagens e desvantagens ### R e python - Python está mais avançado e tem comunidade maior. - Desenvolver em R traz mais aprendizado sobre o tema. ### keras e torch - `{keras}` tem mais recursos, mas depende do python. - `{torch}` tem muito potencial, mas está no começo. ![](imgs/pngwing.com.png) --- class: center ## Exemplo 01: Regressão linear ![](https://acegif.com/wp-content/uploads/cat-typing-2.gif) --- class: center ## Exemplo 02: MLP ![](https://acegif.com/wp-content/uploads/cat-typing-7.gif) --- class: center # Ativação ![](https://user-images.githubusercontent.com/4706822/48278301-48772400-e434-11e8-9487-641d2a79c2f8.png) --- class: center ## Exemplo 03: Convolucionais ![](https://acegif.com/wp-content/uploads/cat-typing-4.gif) --- # Convoluções <img src="https://user-images.githubusercontent.com/4706822/48281225-10281380-e43d-11e8-9879-6a7e1b51df15.gif" style="position: fixed; top: 200px; left: 50px; width: 30%"> -- <img src="https://user-images.githubusercontent.com/4706822/48281225-10281380-e43d-11e8-9879-6a7e1b51df15.gif" style="position: fixed; top: 200px; left: 300px; width: 30%"> <img src="https://user-images.githubusercontent.com/4706822/48281225-10281380-e43d-11e8-9879-6a7e1b51df15.gif" style="position: fixed; top: 200px; left: 600px; width: 30%"> --- class: center # Max Pooling ![](https://user-images.githubusercontent.com/4706822/48281479-df94a980-e43d-11e8-9dcf-e67d7ba053e4.png) --- # Resumo - Deep learning é como uma regressão não linear estruturada. -- - Os modelos são flexíveis e a arquitetura é transparente. -- - GPU ajuda muito no ajuste dos modelos. -- - Podemos usar `{keras}` e `{torch}` para ajustar os modelos. --- class: center, inverse ## Curso completo https://www.curso-r.com/cursos/deep-learning/ ## Links https://curso-r.com https://curso-r.com/blog https://github.com/curso-r Email: [jtrecenti@curso-r.com](mailto:jtrecenti@curso-r.com) Telegram/github/twitter: @jtrecenti Código: https://github.com/jtrecenti/slides Apresentação: https://jtrecenti.github.io/slides/ufba2020