Matlab - Neural Networw Toolbox Ana Lı́via Soares Silva de Almeida 27 de maio de 2014 Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox O que é a Neural Networw Toolbox? A Neural Network Toolbox fornece funções e aplicativos para a modelagem de sistemas não-lineares complexos que não são facilmente modelados com uma equação de forma fechada. Suporta aprendizado supervisionado com feedforward, base radial e redes dinâmicas, além de aprendizado não supervisionado com mapas auto-organizáveis e camadas competitivos. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox O que é a Neural Networw Toolbox? Com ela é possı́vel projetar, treinar, visualizar e simular redes neurais. Pode ser usada para aplicações tais como montagem de dados, reconhecimento de padrões, clustering, a previsão de séries temporais e modelagem do sistema dinâmico e controle. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Objetivo deste curso O objeto desse curso é fazer uma breve panorama da toolbox e apresentar algumas formas de manipular algumas das ferramentas disponı́veis. Serão apresentadas funcionalidades para redes do tipo Perceptron Multicamadas (Multilayer Perceptron) e para a rede de base radial (radial basis), iterfaces gráficas disponı́veis e algumas particularidades em relação às versões mais recentes do Matlab uma vez que a versão utilizada para este curso é do ano de 2008. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Perceptron Multicamadas Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Passos para implementação da rede: ⇒ coleta e preparação dos dados ⇒ criação da rede ⇒ configuração da rede ⇒ inicialização dos pesos e biases ⇒ treinamento da rede ⇒ validação da rede Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Criação a rede O comando nome da rede = network cria uma rede e suas propriedades Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Definindo as propriedades de Arquitetura As primeiras propriedades que aparecem da rede são as chamadas propriedades de arquitetura: número de entradas (Inputs) número de camdadas (Layers) pesos entre de entradas e entre camadas conexões de saı́da e tragets (outputs e targets) Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox número de inputs e camdas Definimos a quantidade de camadas de entrada que a rede terá Atenção: não estamos definindo ainda a quantidade de tipos de entrada (x1, x2,...xn) que a rede terá (tamanho do vetor de entradas) nome da rede.numInputs = x Definimos a quantidade de camadas que a rede terá nome da rede.numLayers = y Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Bias Definimos agora, as camadas que terão bias associado. Essa atribuição pode ser feita através do comando: nome da rede.biasConnect(camada) = 1 ou na forma de matriz, atribuido 1 às camadas que tiverem bias e 0 às que não tiverem. Por exemplo: net.biasConnect(1) = 1 net.biasConnect(1) = 3 ou nome da rede.biasConnect = [1; 0; 1] Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Conexões entre entradas e camadas Agora, vamos conectar as entradas às camdadas da rede. De maneira análoga aos biases, podemos especificar essas conexões através do comando nome da rede.inputConnect(i,j) = 1 que representa uma conexão de pesos entre a entrada j e a camada i Essa atrabuição também pode ser feita através de uma matriz n X m, onde onde n é o número de entradas e m é o número de camadas as camdadas. Por exemplo: net.inputConnect(1,1) = 1 net.inputConnect(2,1) = 1 net.inputConnect(2,2) = 1 ou net.biasConnect = [1 0; 1 1; 0 0] Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Conexões de outputs e targets Definimos aqui as camadas que possuem saı́da (outputs) e a camada que terá os targets. Isso pode ser feito através da matriz 1xn, onde são as camadas da rede: net.outputConnect = [0 1 1] net.targetConnect = [0 0 1] Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Inputs Agora, definiremos as caracterı́sticas das entradas da rede. Para cada input que criamos, deve ser passado um vetor definindo os valores mı́nimo q máximo de cada tipo pode assumir. Passamos então, uma matriz 2xm onde m é o número de entradas da rede. nome da rede.inputs{entrada}.range = [x y; x y; ....;x y] Por exemplo: net.inputs{1}.range = [0 10; 0 10] net.inputs{2}.range = [-2 2; -2 2; -2 2; -2 2; -2 2] Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Camadas Quando definimos o número de camadas da rede, para cada camada algumas propriedades já são setadas por default. Se for necessário, podemos alterar algumas delas, como por exemplo o tamanho (quantidade de neurônios), a função de transição e a função de inicilização com os comandos abaixo: nome da rede.layers{camada}.size = x; nome da rede.layers{camada}.transferFcn = h’função’i nome da rede.layers{camada}.initFcn = h’função’i Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Camadas As funções disponı́veis no Matlab para função de transição são: •tansig (tangente hiperbólica) •logsig (sigmóide) •purelin (linear) •satlin () A função de inicilização mais comum é ’initnw’ Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Funções da rede: inicialização O comando nome da rede.initFcn = ’initnw’; A função initnw inicializa pesos e desvios de uma camada de acordo com o algoritmo de inicialização Nguyen-Widrow. Este algoritmo escolhe valores, a fim de distribuir a região ativa de cada neurônio na camada de maneira uniforme ao longo do espaço de entrada da camada. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Funções da rede: performance e treinamento Definimos a performance como erro quadrático médio (mse) e o treinamento por retropropagação (backpropagation) nome da rede.performFcn = ’mse’; nome da rede.trainFcn = ’...’; Algumas opções para função de treinamento: •trainlm :Levemberg-Marquardt (default) •traingd : gradiente descendente •traingdm : gradiente descendente com momentum •traingda : gradiente descendente adaptativo) •traingdx : gradiente descendente com taxa de aprendizagem variável •trainrp : reslient backpropagation Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Inicialização da rede Inicializamos a rede setando os valores devidos de acordo com as propriedades. Os pesos iniciais tem valor zero. nome da rede = init(nome da rede); Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Treinamento É necessário separar o conjunto de dados em dois grupos básicos: uma parte das amostras será usada para o treinamento e outra para a validação. Da parte que será usada como treinamento, temos os valores de entrada (inputs) e os correspondentes resultados esperados (targets). Podemos armazenar os inputs na variável P e os targets na variável T, por exemplo. Dessa forma, podemos chamar a função de treinamento passando a rede criada, P e T como parâmetros: [nome da rede,tr] = train(nome da rede,P,T); onde tr é uma matriz que contém todos as informações a cerca do treinamento da rede Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Paramêtros de treinamento É possı́vel definir as condições de parada do treinamento (nome da rede.trainParam.¡condição¿ = z;) : •ming rad : magnitudemáximadogradiente •maxf ail : númeromáximodevalidaç ões •time : tempo máximo de treinamento •goal: valor mı́nimo de performance •epochs : número máximo de épocas Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Análise de desempenho pós-treino Pode-se plotar gráficos para analisar o desempenho da rede. Os gráficos podem ser plotados por linhas no código ou através da janela que surge quando a rede é treinada. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Simulação da rede (validação) Após o treinamento, a parte restante dos dados de entrada que ainda não foi utilizada, é passada para a função de simulação. A saı́da da rede é então gerada (outputs) e pode ser comparada com os valores esperados para essas amostras. Y = sim(nome da rede, Pt); onde Pt é o conjunto de amostras restantes. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Outras formas de criar e manipular RNAs em Matlab Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox nntool Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Nas versões mais recentes... A partir da versão (...) do Matlab, a clássica função newff ficou obsoleta e foi substituı́da. Para criação de redes do tipo Perceptron Multicamadas, uma alternativa é usar para criar a rede a função feedforwardnet Para esta função, caso não sejam passados parâmetros, será aplicado o default: - uma rede com 1 camada escondida composta de 10 neurônios, e uma camada de saı́da com apenas 1 neurônio. Além disso, já são definidos o método de Levemberg-Marquardt para treinamento e as funções de ativação tansig e purelin para a camada escondida e para a de saı́da respectivamente. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Rede de Base Radial Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Redes de base radial podem ser usadas para aproximar funções. A função newrb acrescenta neurônios para a camada escondida de uma rede de base radial até encontrar a meta de erro quadrado médio especificado. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox nome da rede = newrb(P,T,goal,spread,MN,DF) onde: P é a matriz com os dados de entrada T é a matriz com os targets goal é o mse (default mse = 0) spread disseminação de funções de base radial MN número máximo de neurônios (default quantidade de amostras na entrada) DF número de neurônios para adicionar entre ... (default 25) Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox Nas versões mais recentes... É possı́vel também alterar essa configuração passando como primeiro argumento para a função o número de neurônios desejado na camada escondida, e como segundo argumento, o tipo de treinamento. A vantagem de usar a feedforwardnet é que não é necessário seguir todos esses passos para configurar a rede, e as modificações desejadas (como alterar as funções de ativação, por exemplo) podem ser feita apenas acrescentando os comandos apresentados anteriormente para definir as propriedades ao código. Ana Lı́via Soares Silva de Almeida Matlab - Neural Networw Toolbox