CNTK - Conceitos de Rede Neural (NN)
Este capítulo trata de conceitos de Rede Neural em relação ao CNTK.
Como sabemos, várias camadas de neurônios são usadas para fazer uma rede neural. Mas, surge a pergunta que no CNTK como podemos modelar as camadas de um NN? Isso pode ser feito com a ajuda de funções de camada definidas no módulo de camada.
Função de camada
Na verdade, no CNTK, trabalhar com as camadas tem uma sensação de programação funcional distinta. A função de camada se parece com uma função regular e produz uma função matemática com um conjunto de parâmetros predefinidos. Vamos ver como podemos criar o tipo de camada mais básico, Denso, com a ajuda da função de camada.
Exemplo
Com a ajuda das etapas básicas a seguir, podemos criar o tipo de camada mais básico -
Step 1 - Primeiro, precisamos importar a função de camada Densa do pacote de camadas do CNTK.
from cntk.layers import Dense
Step 2 - Em seguida, do pacote raiz CNTK, precisamos importar a função input_variable.
from cntk import input_variable
Step 3- Agora, precisamos criar uma nova variável de entrada usando a função input_variable. Também precisamos fornecer o seu tamanho.
feature = input_variable(100)
Step 4 - Por fim, vamos criar uma nova camada usando a função Densi juntamente com o número de neurônios que queremos.
layer = Dense(40)(feature)
Agora, podemos invocar a função de camada Densa configurada para conectar a camada Densa à entrada.
Exemplo de implementação completo
from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)
Personalização de camadas
Como vimos, o CNTK nos fornece um bom conjunto de padrões para a construção de NNs. Baseado emactivationfunção e outras configurações que escolhermos, o comportamento, bem como o desempenho do NN é diferente. É outro algoritmo de lematização muito útil. Por isso, é bom entender o que podemos configurar.
Etapas para configurar uma camada densa
Cada camada no NN tem suas opções de configuração exclusivas e quando falamos sobre a camada Densa, temos as seguintes configurações importantes para definir -
shape - Como o nome indica, ele define a forma de saída da camada que determina ainda mais o número de neurônios nessa camada.
activation - Define a função de ativação dessa camada, para que possa transformar os dados de entrada.
init- Define a função de inicialização dessa camada. Ele inicializará os parâmetros da camada quando começarmos a treinar o NN.
Vamos ver as etapas com a ajuda das quais podemos configurar um Dense camada -
Step1 - Primeiro, precisamos importar o Dense função de camada do pacote de camadas do CNTK.
from cntk.layers import Dense
Step2 - Em seguida, do pacote de operações CNTK, precisamos importar o sigmoid operator. Ele será usado para configurar como uma função de ativação.
from cntk.ops import sigmoid
Step3 - Agora, do pacote inicializador, precisamos importar o glorot_uniform inicializador.
from cntk.initializer import glorot_uniform
Step4 - Por fim, vamos criar uma nova camada usando a função Densi juntamente com o número de neurônios como primeiro argumento. Além disso, forneça osigmoid operador como activation função e o glorot_uniform Enquanto o init função para a camada.
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
Exemplo de implementação completo -
from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
Otimizando os parâmetros
Até agora, vimos como criar a estrutura de um NN e como definir várias configurações. Aqui, veremos como podemos otimizar os parâmetros de um NN. Com a ajuda da combinação de dois componentes, a saberlearners e trainers, podemos otimizar os parâmetros de um NN.
componente de treinador
O primeiro componente que é usado para otimizar os parâmetros de um NN é trainercomponente. Basicamente, ele implementa o processo de retropropagação. Se falamos sobre seu funcionamento, ele passa os dados pelo NN para obter uma previsão.
Em seguida, ele usa outro componente denominado learner para obter os novos valores para os parâmetros de uma NN. Depois de obter os novos valores, ele aplica esses novos valores e repete o processo até que um critério de saída seja atendido.
componente do aluno
O segundo componente que é usado para otimizar os parâmetros de um NN é learner componente, basicamente responsável pela execução do algoritmo de descida gradiente.
Alunos incluídos na biblioteca CNTK
A seguir está a lista de alguns dos alunos interessantes incluídos na biblioteca CNTK -
Stochastic Gradient Descent (SGD) - Este aluno representa a descida gradiente estocástica básica, sem quaisquer extras.
Momentum Stochastic Gradient Descent (MomentumSGD) - Com SGD, esse aluno aplica o momento para superar o problema dos máximos locais.
RMSProp - Este aluno, para controlar a taxa de descida, usa taxas de aprendizagem decrescentes.
Adam - Esse aluno, para diminuir a taxa de descida ao longo do tempo, usa o momento de decadência.
Adagrad - Este aluno, para recursos de ocorrência frequente ou infrequente, usa taxas de aprendizagem diferentes.