class: center, middle, inverse, title-slide # Deep Learning com o {torch} ## UFPR, 2021 ###
### 2021-09-15 --- # 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`!)] -- <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) ] --- ## 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 - É complementado pelo `{keras}` ] -- .pull-right[ #### Torch - Facebook - Faz **diferenciação automática** - Utiliza GPU - Possui algumas ferramentas para deep learning ] --- ### 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 intermediária 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 ## Vamos ao R! ![](https://acegif.com/wp-content/uploads/cat-typing-2.gif) --- # 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 `{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 Slides: https://jtrecenti.github.io/slides/docs/petufpr2021