Aula 17 – Tensor Flow – Redes Neurais – Rede Neural Convolucional

Aula 17 – Tensor Flow – Redes Neurais – Rede Neural Convolucional

Voltar para página principal do blog

Todas as aulas desse curso

Aula 16                      Aula 18

Meu github:

https://github.com/toticavalcanti

Documentação oficial do TensorFlow:

https://www.tensorflow.org/

Quer aprender python3 de graça e com certificado? Acesse então:

https://workover.com.br/python-codigo-fluente

Python com Tensorflow

Python com Tensorflow

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook

https://digitalinnovation.one/

Link do código fluente no Pinterest

Aproveito para deixar meus link de afiliados:

Hostinger

Digital Ocean

One.com

Toti:

https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA

Backing track / Play-along:

https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA

Código Fluente

https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w

Putz!

https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw

Fiquem a vontade para me adicionar ao linkedin.

Aula 17 – Tensor Flow – Redes Neurais – Rede Neural Convolucional

Rede Neural Convolucional (CNN)

Uma Rede Neural Convolucional (ConvNet / Convolutional Neural Network / CNN) é uma rede neural artificial do tipo feed-forward.

As redes tem o nome de acordo com a forma como as informações fluem através de uma série de operações matemáticas feitas nos nós da rede.

As redes feed-forward permitem que os sinais viajem apenas em uma direção, da entrada para a saída.

As redes de feed-back, ou recorrentes, ou ainda interativas, são bidirecionais, ou seja, podem ter os sinais viajando em ambas as direções, introduzindo loops na rede.

Elas são legais porque tem estado, então por exemplo, a forma como uma rede feed-forward opera é assim, digamos que ela tá fazendo algum reconhecimento em tempo real em um vídeo.

Ela vai recebendo uma imagem após outra, só que ela não lembra de nada das imagens anteriores, ela não guarda as informações das imagens que passaram, porque ela não tem estado, ao contrário das recorrentes.

São interessantes quando temos estrutura temporal nos dados, mas é uma rede difícil de treinar e não é tão utilizada para coisas assim como processamento de imagens, áudios, enfim.

Backpropagation vs. rede neural feed-back

A retropropagação ou em inglês, backpropagation, é o algoritmo usado para encontrar pesos ótimos em uma rede neural por meio da descida de gradiente.

É chamado assim porque os derivados de erro são propagados de volta pela rede e os pesos são atualizados de acordo.

Uma rede neural recorrente (RNN) é um tipo de arquitetura de rede neural na qual existem neurônios na rede que têm pesos que se retroalimentam.

Dessa forma, temos um estado particular da rede em relação ao seu peso em cada ponto no tempo.

Isso permite a modelagem de dados temporais ou sequenciais, como dados de série temporal ou dados de vídeo.

Os RNNs podem ser treinados usando variantes da retropropagação, como retropropagação através do tempo (BPTT – Backpropagation Through Time).

No entanto, RNNs padrão, com neurônios recorrentes simples, normalmente sofrem do problema de desaparecimento de gradiente, uma vez que os derivados de erro não podem ser propagados de volta através da rede em cada etapa de tempo efetivamente sem primeiro morrer desaparecendo para zero ou explodindo para o infinito.

Assim, frequentemente outros tipos de neurônios (células) recorrentes são empregados em arquiteturas RNN para mitigar o efeito desse problema de desaparecimento de gradiente e explosão no infinito.

Os dois tipos de células mais comuns são LSTM e GRU.

A GRU (Gated Recurrent Unit) e a LSTM ( Long Short Term Memory) são voltadas para resolver o problema da dissipação do gradiente que é comum em uma rede neural recorrente padrão.

A GRU pode ser considerada uma variação da LSTM.

Voltando a CNN – Feed-forward

No exemplo do MNIST que iremos explorar, utilizaremos uma Convolutional Neural Network / CNN.

O MNIST o famoso conjunto de dados de dígitos manuscritos.

A CNN que é uma feed-forward, vem sendo aplicada com sucesso no processamento e análise de imagens digitais.

Revisão

Nós vimos como realizar um cálculo em um neurônio

  • w * x + b = z
  • a = σ(z)

O que fazemos é inserir dados de entrada X e a rede vai ajustando os pesos e multiplicando por X e então
adicionamos algum termo tendencioso(viés ou bias) e guardamos a soma dos resultados em Z.

Aí então o Z é passado para a função de ativação.

As funções de ativação introduzem um componente não linear nas redes neurais, que faz com que elas possam aprender mais do que relações lineares entre as variáveis dependentes e independentes.

Funções de ativação

  • Perceptrons
  • Sigmoid
  • Tanh
  • ReLU

Camadas

  • Entrada
  • Ocultas
  • Saída

Quanto mais camadas ocultas, mais abstrações.

Métricas

Para a rede aprender, precisamos de algumas medidas de erro.

Usamos uma função de custo / perda

  • Quadrática
  • Entropia Cruzada

Assim que tivermos a medição do erro, precisamos minimizá-lo escolhendo o peso correto e os valores do bias.

Usamos gradient descent para encontrar os valores ideais.

Podemos então retropropagar a descida do gradiente através de várias camadas.

E da camada de saída, voltar para a camada de entrada.

Também conhecemos camadas densas e mais tarde, vamos ver também a camada softmax.

Novos Tópicos Teóricos

  • Opções de inicialização de pesos
    • Zeros
      • Sem aleatoriedade
      • Não é uma ótima escolha
    • Distribuição Aleatória Quase Zero
      • Não ideal
      • Distorção de funções de ativação

Inicializar tudo com Zero, não é bom porque você não introduz aleatoriedade a rede, e isso é importante para ela ser imparcial.

Podemos optar pela distribuição perto de zero, ou quase zero, para tentar obter alguns desses valores menores, mas, quando você passa essas distribuições aleatórias para uma função de ativação, às vezes, elas podem distorcer para valores muito maiores.

Por isso, não é ideal, mesmo se você tentar fazer uma distribuição uniforme de -1 a 1, ou uma distribuição normal de -1 a 1.

Então o que a gente faz? 🤔

Podemos utilizar a inicialização de Xavier e isso vem em distribuições ou sabores uniformes e normais.

E a ideia básica por trás da inicialização de Xavier é tirar pesos de uma distribuição que tem média zero
e uma variância específica ou essa variância é definida como variância de W igual a 1 sobre n, onde
w é a distribuição de inicialização para o neurônio em questão.

E o n é o número de neurônios que o alimentam.

  • Inicialização de Xavier (Glorot)
    • Uniform / Normal
  • Extrai pesos de uma distribuição com média zero e uma variância específica
    • Var(W) = 1 / n
    • Var(W) = 2 / n(in) + n(out)

Por essa aula é só, nos vemos na próxima, ainda vendo mais teoria, \o/ e até lá.

Voltar para página principal do blog

Todas as aulas desse curso

Aula 16                      Aula 18

Meu github:

https://github.com/toticavalcanti

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook

Link do código fluente no Pinterest

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>