Você está na página 1de 75

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA

CATARINENSE - CAMPUS CAMBORI


CURSO DE SISTEMAS DE INFORMAO
(BACHARELADO)

BRUNO AZEVEDO COSTA

PROTTIPO PARA RECONHECIMENTO DE FOTOS ADEQUADAS


PARA O PERFIL DO LINKEDIN BASEADO EM REDES NEURAIS
ARTIFICIAIS

CAMBORI (SC)
2014

BRUNO AZEVEDO COSTA

PROTTIPO PARA RECONHECIMENTO DE FOTOS ADEQUADAS


PARA O PERFIL DO LINKEDIN BASEADO EM REDES NEURAIS
ARTIFICIAIS

Trabalho de Concluso de Curso


submetido ao Instituto Federal
Catarinense Campus Cambori
para obteno dos crditos de
disciplina com nome equivalente no
curso de Sistemas de Informao Bacharelado.

Orientador: Nildo Carlos da Silva, Dr.

CAMBORI (SC)
2014

BRUNO AZEVEDO COSTA


PROTTIPO PARA RECONHECIMENTO DE FOTOS ADEQUADAS PARA O
PERFIL DO LINKEDIN BASEADO EM REDES NEURAIS ARTIFICIAIS
ESTE RELATRIO, DO TRABALHO DE
CONCLUSO
DE
CURSO,
FOI
JULGADO
ADEQUADO
PARA
OBTENO DOS CRDITOS DA
DISCIPLINA DE TRABALHO DE
CONCLUSO DE CURSO, DO 8.
SEMESTRE, OBRIGATRIA PARA
OBTENO DO TTULO DE:
BACHAREL EM
INFORMAO

SISTEMAS

DE

Cambori (SC), 01 de Dezembro de 2014

Prof. Nildo Carlos da Silva, Dr.


Orientador

BANCA EXAMINADORA:

Prof. Nildo Carlos da Silva, Dr.


IFC- Cmpus Cambori

Prof. Ctia dos Reis Machado, Dra.


IFC - Cmpus Cambori

Prof. Lo Serpa, Dr.


IFC- Cmpus Cambori

Prof. Snia Regina Lamego Lino, Dra.


IFC- Cmpus Cambori

LISTA DE FIGURAS

FIGURA 1 - PARTES DE UM NEURNIO. ....................................................................... 17


FIGURA 2 - MODELO DO NEURNIO APRESENTADO POR MCCULLOCH E PITTS. ......... 18
FIGURA 3 - REDE MLP COM UMA NICA CAMADA OCULTA. ....................................... 20
FIGURA 4 - FUNO SIGMIDE REPRESENTADA POR 11 + E X. ............................... 21
FIGURA 5 - O BIAS, OU VIS, EM UMA REDE NEURAL. ............................................. 22
FIGURA 6 - EFEITO DO ALGORITMO DECLNIO DE GRADIENTE. ................................... 26
FIGURA 7 - BACKPROPAGATION EM UMA REDE NEURAL. ............................................ 27
FIGURA 8 - EXEMPLO DE MATRIZ TRANSPOSTA........................................................... 28
FIGURA 9 - RNA UTILIZADA COMO EXEMPLO PARA CALCULAR A ETAPA DE
ALIMENTAO DIRETA DA REDE. .................................................................................... 29
FIGURA 10 - EXEMPLO DE MULTIPLICAO DE MATRIZES ELEMENTO POR
ELEMENTO. ..................................................................................................................... 32
FIGURA 11 - O EFEITO DO OVERFITTING. .................................................................... 37
FIGURA 12 - O CONJUNTO DE DADOS DIVIDIDO EM CONJUNTO DE
TREINAMENTO, TESTE E VALIDAO. ............................................................................. 40
FIGURA 13 - EXEMPLO DE CURVA DE APRENDIZADO................................................... 42
FIGURA 14 - SEGUNDO EXEMPLO DE CURVA DE APRENDIZADO. ................................. 43
FIGURA 15 - INTERFACE DE LINHA DE COMANDO DO OCTAVE. ................................... 44
FIGURA 16 - EXEMPLO DE MULTIPLICAO DE MATRIZES. ......................................... 49
FIGURA 17 - TELA INICIAL DO PROTTIPO .................................................................. 51
FIGURA 18 - EXEMPLOS DE FOTOS UTILIZADAS EM PERFIS DO LINKEDIN .................. 52
FIGURA 19 - DIREITA, O EFEITO CAUSADO PELA FUNO ADJUSTIMAGE.M. ........... 54
FIGURA 20 - APRESENTAO DE PARTE DOS DADOS DE ENTRADA DA REDE. .............. 55
FIGURA 21 - ARQUITETURA INICIAL DA RNA DO PROJETO. ........................................ 56
FIGURA 22 - COMANDO WHOS EXECUTADO APS INICIALIZAO DO ALGORITMO. ... 57
FIGURA 23 - EXEMPLO DE CURVA DE APRENDIZADO GERADO NO OCTAVE ................. 66

LISTA DE QUADROS

QUADRO 1 - EXEMPLO DE IMPLEMENTAO DA FASE DE ALIMENTAO DIRETA


DA REDE. ........................................................................................................................ 29
QUADRO 2 - IMPLEMENTAO VETORIZADA DO ALGORITMO DE ALIMENTAO
DIRETA DA REDE ............................................................................................................. 30
QUADRO 3 - ALGORITMO BACKPROPAGTION ............................................................. 32
QUADRO 4 - EXPRESSES ARITMTICAS NO OCTAVE ................................................. 45
QUADRO 5 - OPERADORES LGICOS NO OCTAVE........................................................ 46
QUADRO 6 - DECLARAO DE VARIVEIS NO OCTAVE. .............................................. 46
QUADRO 7 - EXEMPLO DE COMANDOS FOR, WHILE E IF NO OCTAVE...................... 47
QUADRO 8 - EXEMPLO DE FUNO QUE CALCULA O QUADRADO DE UM NMERO. .... 47
QUADRO 9 - EXEMPLO DE CHAMADA DE FUNO. ..................................................... 48
QUADRO 10 - FUNO QUE RETORNA MAIS DE UMA VARIVEL. ................................ 48
QUADRO 11 - EXEMPLO DE IMPLEMENTAO NO VETORIZADA. .............................. 48
QUADRO 12 - EXEMPLO DE IMPLEMENTAO VETORIZADA....................................... 49
QUADRO 13 - OBTENDO A TRANSPOSTA DE UMA MATRIZ. .......................................... 49
QUADRO 14 - PARTE DA FUNO CREATEDATASET.M. ............................................... 53
QUADRO 15 - FUNO ADJUSTIMAGE.M. ................................................................... 54
QUADRO 16 - INICIALIZAO DO ALGORITMO DE TREINAMENTO. ............................. 57
QUADRO 17 - FUNO DE INICIALIZAO DOS PARMETROS DA RNA ..................... 58
QUADRO 18 - PARTE I DA FUNO NNCOSTFUNCTION.M........................................... 59
QUADRO 19 - IMPLEMENTAO DO BACKPROPAGATION ........................................... 59
QUADRO 20 - CLCULO DA FUNO DE CUSTO E GRADIENTES DOS PARMETROS
THETA1 E THETA2 COM REGULARIZAO. .................................................................... 60
QUADRO 21 - CHAMADA DA FUNO FMINCG.M. ....................................................... 61
QUADRO 22 - EXIBINDO OS RESULTADOS DE DESEMPENHO DO TREINAMENTO .......... 62
QUADRO 23 - FUNO PREDICT.M.............................................................................. 63
QUADRO 24 - CDIGO DE GERAO DA CURVA DE APRENDIZADO ............................. 64

LISTA DE TABELAS

TABELA 1 - EXEMPLO DE UM CONJUNTO DE TREINAMENTO NO NORMALIZADO. ..... 34


TABELA 2 - TABELA COM VALORES ESCALONADOS APS USO DO MEAN
NORMALIZATION ............................................................................................................ 34
TABELA 3 - DEZ MELHORES RESULTADOS OBTIDOS. ................................................... 67

LISTA DE ABREVIATURAS E SIGLAS

GPL
IA
MCP
MLP
RAM
RNA

- General Public License


- Inteligncia Artificial
- McCulloch e Pitts
- Multilayer Perceptron
- Random Access Memory
- Redes Neurais Artificiais

RESUMO

O presente trabalho exibe um estudo sobre os passos para criao de um sistema de


aprendizado de mquina baseado em redes neurais artificiais do tipo MLP
(Multilayer Perceptron). Os aspectos abordados so: aprendizado supervisionado,
gerao e diviso do conjunto de dados, normalizao de atributos, treinamento de
redes MLP por meio do algoritmo backpropagation e avaliao de resultados. Todos
esses aspectos se relacionam com o objetivo do trabalho que , por intermdio do
backpropagation, desenvolver um sistema capaz de aprender a classificar uma foto
como adequada ou no para uso no perfil da rede social profissional LinkedIn. Isso
porque a foto utilizada neste tipo de rede social faz parte da marca profissional
online do usurio e, portanto, precisa ser escolhida de maneira cuidadosa. Dessa
forma, durante este trabalho gerado um prottipo de software que utiliza uma rede
neural de mltiplas camadas para aprender a classificar uma determinada imagem
como apropriada ou no para o perfil do LinkedIn. Para concepo do prottipo e
implementao da RNA (Rede Neural Artificial), foram desenvolvidos algoritmos
sobre a ferramenta de distribuio livre GNU Octave verso 3.2.4, prpria para
soluo de problemas lineares e no lineares. Os dados (ou exemplos) utilizados no
projeto foram fotos coletadas manualmente atravs do download de imagens
disponveis na internet. Ao incio, foram coletadas cerca de duas mil fotos e esse
valor chegou a pouco mais de dez mil exemplos no fim do projeto. As
configuraes utilizadas durante a etapa de treinamento, bem como os resultados
obtidos a partir do processo de generalizao do modelo criado, so demonstradas
por meio dos experimentos e testes realizados sobre o conjunto reservado para esse
fim. Ao final, possvel observar o prottipo produzido utilizando esse mtodo de
aprendizado de mquina obteve 88% de preciso na sua capacidade de
generalizao para novos exemplos.

Palavras-chave:
Redes Neurais Artificiais, Backpropagation, Prottipo, Aprendizado de mquina.

SUMRIO

INTRODUO ......................................................................................... 9

1.1 Apresentao ......................................................................................... 9


1.2 Descrio do problema ........................................................................ 10
1.3 Justificativa .......................................................................................... 11
1.4 Objetivo geral ...................................................................................... 13
1.5 Objetivos especficos ........................................................................... 14
1.6 Metodologia ......................................................................................... 14
2 FUNDAMENTAO TERICA .......................................................... 16
2.1 Redes Neurais Artificiais ..................................................................... 16
2.1.1 Componentes bsicos .................................................................... 20
2.2 Aprendizado supervisionado em RNAs .............................................. 22
2.3 Backpropagation .................................................................................. 24
2.3.1 Motivao ..................................................................................... 24
2.3.2 Notaes utilizadas ....................................................................... 27
2.3.3 Fase FeedForward........................................................................ 28
2.3.4 Fase Backward.............................................................................. 30
2.4 Detalhes para implementao de RNAs .............................................. 33
2.4.1 Preparao dos dados .................................................................. 33
2.4.2 Quantidade de dados para treinamento ....................................... 34
2.4.3 Arquitetura .................................................................................... 35
2.4.4 Underfitting e Overfitting ............................................................. 36
2.4.5 Conjuntos de treinamento, validao e teste ................................ 39
2.4.6 Avaliao de resultados ................................................................ 40
2.4.7 Curva de aprendizado ................................................................... 41
2.5 Octave .................................................................................................. 43
2.5.1 Operaes bsicas ........................................................................ 45
2.5.2 Funes ......................................................................................... 47
2.5.3 Vetorizao.................................................................................... 48
3 DESENVOLVIMENTO .......................................................................... 50
3.1 Funcionamento do sistema .................................................................. 50
3.1.1 Criao do conjunto de dados ...................................................... 51
3.1.2 Arquitetura da RNA ...................................................................... 55
3.1.3 Treinamento da RNA ..................................................................... 56
3.1.4 Avaliao do treinamento ............................................................. 62
3.1.5 Curva de aprendizado ................................................................... 63
3.2 Testes e Resultados .............................................................................. 64
3.3 Concluso ............................................................................................ 67
4 CONSIDERAES FINAIS.................................................................. 69
REFERNCIAS BIBLIOGRFICAS ............................................................. 71

INTRODUO

1.1

Apresentao
Com o avano tecnolgico e consequente surgimento da internet e das

redes e mdias sociais, muitas atividades ganharam novas maneiras, muitas vezes
mais eficientes, de serem executadas. Entre elas pode-se citar a comunicao entre
pessoas (mensagens entregues instantaneamente), o marketing e publicidade de
produtos e, para propsito desse trabalho, destacam-se a procura por emprego e o
recrutamento e seleo.
Conforme a pesquisa Tendncias globais em recrutamento para 2013,
realizada pela empresa LinkedIn, as redes sociais profissionais se tornaram, no ano
de 2013, a principal fonte para as contrataes de qualidade no Brasil. Representada
por 44%, a utilizao dessas ferramentas como meio de realizar contrataes de
qualidade1 dentro das empresas obteve um crescimento de 28% em apenas dois
anos (LINKEDIN, 2013).
Outra pesquisa, tambm realizada em 2013 e publicada pela Aberdeen
Group (2013), mostra que as redes sociais se tornaram a segunda fonte mais efetiva
no contexto geral de contrataes, ficando frente das pginas de carreiras de sites
empresariais e atrs apenas dos programas de recrutamento interno. Entre as
diferentes empresas que fornecem esses servios, a rede social profissional
LinkedIn, contando com mais de 300 milhes de usurios ao redor do mundo, se
tornou a principal ferramenta para desempenhar os papis de recrutamento
1

De acordo com Mahoney e Lermusi (2010), as trs principais mtricas para


mensurar a qualidade da contratao so: turnover (rotatividade de pessoal),
avaliao de desempenho e a satisfao do gerente de recrutamento.

10

profissional atravs da web (JOBVITE, 2013).


O LinkedIn, alm de possibilitar aos seus usurios novas oportunidades de
trabalho, tambm serve como uma forma de recolocao profissional, busca por
notcias sobre a indstria e conexo com outros profissionais. Com isso, ao criar
uma conta dentro da rede, o usurio d incio a um contato rpido e direto com o
mercado de trabalho.
Diferente de outras redes sociais, como por exemplo, o Facebook2, o perfil
no LinkedIn extremamente profissional, havendo poucas informaes sobre
hobbies, interesses religiosos ou polticos, e msicas ou filmes favoritos (SKEELS;
GRUDIN, 2009). Conforme apresentado por Skeels e Grudin (2009), o LinkedIn se
concentra na informao profissional, e por conseguinte, entende-se que a foto
exposta neste perfil tambm necessita ser profissional.
Visto que recrutadores ao visualizar um perfil do LinkedIn, passam mais
tempo (19% do tempo) olhando para a foto do que para outras informaes vitais
dos candidatos (THE LADDERS, 2012), como por exemplo, as suas habilidades e
conhecimentos, e que a primeira impresso pode ser decisiva para uma nova e
grande oportunidade na sua carreira (CALDEIRA, 2014), a foto se torna o ponto
nevrlgico e foco deste trabalho.
A partir dessa fundamentao, este trabalho busca o desenvolvimento de
um prottipo que possibilite, por meio do aprendizado de mquina, o
reconhecimento de fotos que sejam adequadas para o perfil do LinkedIn. Para isso,
foi determinada a utilizao de redes neurais artificiais que, de acordo com Russell
e Norvig (2004, p.714), uma das formas mais populares e efetivas de sistemas de
aprendizagem.

1.2

Descrio do problema
O LinkedIn se tornou uma tima ferramenta para manter profissionais

O Facebook uma rede social que possibilita uma maior proximidade entre as
pessoas, tendo como uma das caractersticas o compartilhamento de vdeos, fotos
e jogos (PARENZA et al., 2013).

11

conectados ao mercado de trabalho, tanto de forma ativa quanto passiva (o usurio


no est atrs de um emprego mas pode receber propostas) (IDOETA, 2013). Ao se
criar uma conta nessa rede preciso compreender a importncia em analisar o que
est sendo exposto atravs dela. O usurio necessita ter a conscincia de que tudo
ali remete a sua imagem profissional, podendo afet-la de maneira positiva ou
negativa.
A problemtica deste trabalho se d no momento em que uma pessoa cria
sua conta no LinkedIn e necessita definir a foto para o seu perfil. A foto um dos
primeiros itens que aparece ao acessar uma conta no LinkedIn e um perfil sem foto
diminui 14 vezes a sua chance de visualizao (KLINE, 2014). Alm disso, de
acordo com Kline (2014), a foto pode ser um fator decisivo para que um recrutador
continue a ler o restante do perfil. Logo, como definir uma foto de perfil que passe
uma boa primeira impresso e atenda aos padres profissionais desse tipo de rede
social?

1.3

Justificativa
As redes sociais esto definitivamente transformando e facilitando os

processos de recrutamento profissional. Enquanto h algum tempo atrs a maneira


mais comum de anunciar e procurar empregos era atravs dos classificados de
jornais, nos Estados Unidos, 79% das vagas de trabalho j so divulgadas em stios
de mdias sociais, sendo que 77% delas so postadas no LinkedIn (BULLHORN,
2012).
Segundo Milton Beck - diretor de solues de talento do LinkedIn - em
conversa com a BBC Brasil, as redes sociais quebraram os paradigmas dentro do
cenrio das contrataes (IDOETA, 2013). Marcelo Miguel Raffaelli Filho, diretor
da consultoria Great Place to Work, considera que a utilizao dessas ferramentas
possibilitou uma maior rapidez e padronizao nessas atividades (IDOETA, 2013):
[...] a informao de vagas disponveis e de candidatos interessados fica
mais rpida. [...] A padronizao dos currculos tambm facilita a
comparao dos candidatos; e temos mais qualidade e quantidade de

12

informaes disponveis sobre eles, como cursos, conquistas profissionais


e habilidades que muitas vezes no esto no CV impresso. uma via de
mo dupla: o candidato passa a ter (acesso) a mais contedo sobre as
empresas.

Apesar de muitas vezes as pesquisas tratarem as mdias sociais de forma


generalizada, o grande destaque entre elas , de fato, o LinkedIn. Em publicao
feita na revista americana Fortune, Hempel (2010) declara que se voc est
realmente querendo gerenciar sua carreira, o nico site social que interessa o
LinkedIn.
Embora existam muitos aspectos imprescindveis a serem analisados
durante a criao de um perfil dentro do LinkedIn, uma das partes mais importantes
a foto (DOYLE, 2014). A opo de adicionar foto ao perfil surgiu para facilitar as
pessoas na formao de conexes profissionais online mais ricas (NASH, 2007).
Entretanto, desde sua criao, j foi salientada a esperana da empresa sobre a
qualidade das fotos utilizadas.
Conscientes de que os usurios se importem com sua reputao
profissional, a expectativa por parte do LinkedIn, desde o momento em que a
funcionalidade de adicionar foto ao perfil foi desenvolvida, j era de que essas fotos
fossem profissionais por natureza (NASH, 2007). Porm, visto que muitas pessoas
ainda no se atentam a esse aspecto crucial.
O headhunter Andr Caldeira (2014) constata a displicncia de muitos
usurios quanto a essa questo: [...] Quase todos os dias me deparo com imagens
que parecem vir diretamente da turma de colegas do 3 ano fundamental da minha
filha de 8 anos. Alm disso, Caldeira adverte que a primeira impresso pode ser
decisiva para o usurio ser considerado para uma nova e grande oportunidade de
trabalho.
Para compreender os aspectos que contribuem para uma boa foto de perfil
no LinkedIn, pode-se considerar algumas das recomendaes dada por Alison
Doyle3 (DOYLE, 2013):
Selecione uma foto de rosto: a foto deve conter apenas a cabea,
3

Alison Doyle uma expert em recursos humanos e buscas de emprego. Desde


1998 dirige o site de busca por empregos da About.com.

13

pescoo e um pouco dos ombros;


Vista-se profissionalmente: tenha certeza que sua foto apresente voc
de forma apropriada para sua rea. Vestir-se profissionalmente
tambm significa se vestir de maneira limpa e simples.
Mantenha a simplicidade: no inclua objetos, animais de estimao,
crianas ou outras pessoas. Evite fundos visualmente poludos
posicionar-se na frente de um fundo de cor slida e leve a melhor
escolha;
Levando em considerao o que foi descrito nos ltimos pargrafos,
conclui-se a viabilidade de desenvolver um sistema inteligente que possa identificar
se determinadas imagens so irregulares de acordo com o propsito da rede. Um
dos meios possveis para se conseguir isso atravs da utilizao de redes neurais
artificiais (RNAs). Essas redes proporcionam solues apropriadas para problemas
de classificao caracterizados por relaes no lineares, dados complexos,
imperfeitos ou propcios a erros sensoriais e que no possuem solues matemticas
ou algoritmos claros (SEETHA et al., 2008).
Para Seetha et al. (2008), o grande diferencial das RNAs est na sua
capacidade de melhorar a preciso do treinamento, e o seu benefcio principal a
possibilidade de construir o modelo do sistema a partir dos dados disponibilizados.
Alm disso, as RNAs tm sido utilizadas em vrias aplicaes dentro desse contexto
(THAY et al., 2012) e, de acordo com Luger (2009, p.680), sendo corretamente
treinadas, podem efetivamente categorizar novos exemplos apresentando a
percepo humana de similaridade.

1.4

Objetivo geral
O objetivo deste trabalho produzir um prottipo que seja capaz de,

atravs do uso de redes neurais artificiais, aprender a classificar imagens a partir de


dados j conhecidos e classes pr-estabelecidas, a fim de solucionar o problema
levantado neste trabalho.

14

1.5

Objetivos especficos
Para este trabalho, tm-se como objetivos especficos:
a)

Identificar as caractersticas e atributos de fotos consideradas

adequadas e inadequadas para utilizao em redes sociais profissionais;


b)

Realizar a coleta dos exemplos para composio do conjunto de

dados a ser utilizado na aplicao;


c)

Criar funes na linguagem Octave para pr-processamento dos

dados, implementao da RNA e testes de preciso.


d)

Demonstrar a qualidade do conhecimento adquirido pelas RNAs

para soluo do problema deste trabalho.

1.6

Metodologia
O presente trabalho parte de uma pesquisa experimental, que segundo

Best (1972, apud LAKATOS; MARCONI, 2008), acontece quando existe controle
sobre determinados fatores e sua importncia est nas relaes de causa e efeito.
Outra definio para esse tipo de pesquisa dada por Hymann (1967, apud
LAKATOS; MARCONI, 2008): Levantamentos explicativos, avaliativos e
interpretativos, que tm como objetivos a aplicao, a modificao e/ou a mudana
de alguma situao ou fenmeno.
Em relao aos objetivos, a pesquisa utilizada foi a exploratria, mais
precisamente, estudos de manipulao experimental. A determinao desse tipo de
pesquisa pode ser compreendida a partir da conceituao dada por Lakatos e
Marconi (2008):
[...] consistem naqueles estudos exploratrios que tm por finalidade
manipular uma varivel independente, a fim de localizar variveis
dependentes que potencialmente estejam associadas a ela, estudando-se o
fenmeno em seu meio natural. O propsito desses estudos geralmente
demonstrar a viabilidade de determinada tcnica ou programa como uma
soluo, potencial e vivel, para determinados programas prticos. Os

15

procedimentos de coleta de dados variam bastante e tcnicas de


observao podem ser desenvolvidas durante a realizao da pesquisa.

As etapas iniciais deste trabalho foram estabelecidas de acordo com os


procedimentos usualmente adotados na maioria dos processos de aprendizado de
mquina. Portanto, na parte preliminar do projeto foi realizada a identificao das
caractersticas decorrentes de uma foto declarada como sendo de qualidade
profissional e ideal para o perfil do LinkedIn. A partir dos atributos identificados
nesse levantamento, iniciou-se a fase de criao do conjunto de dados, que constitui
parte fundamental para qualquer algoritmo de aprendizado de mquina.
A criao do conjunto de dados que foram utilizados como entradas para o
algoritmo desenvolvido foi feita atravs da seleo manual e download de imagens
disponveis na internet. Para melhor preciso do treinamento das RNAs, foram
coletadas quantidades significativas de imagens que representavam fotos
inadequadas e adequadas para uso no perfil da rede social. A necessidade de
aumentar o tamanho do conjunto de dados surgiu a partir de anlises feitas durante
o projeto.
Aps a coleta dos dados, a prxima etapa constituiu-se no carregamento e
tratamento desses dados dentro do Octave, onde foi realizado o redimensionamento
das imagens para dimenses padres, converso para escala de cinza, e por fim,
foram normalizados os valores dos pixels para valores prximos a zero. Alm disso,
o conjunto de dados foi separado em dois grupos: training set (conjunto de
treinamento) e test set (conjunto reservado para execuo de testes).
As etapas finais se destinaram ao desenho da arquitetura da rede neural a
ser utilizada, realizao do treinamento da rede com o algoritmo backpropagation e
avaliao dos resultados por meio da generalizao no conjunto de teste. Durante
todo o projeto foram realizados ajustes e revalidao do modelo desenvolvido a fim
de se obter melhor desempenho e preciso.

16

FUNDAMENTAO TERICA

Como visto anteriormente, o problema do presente trabalho consiste na


tarefa de classificar imagens como ideais ou no para o perfil do LinkedIn. O
problema de classificao de imagem um dos clssicos problemas relacionados a
processamento de imagem, tendo como objetivo predizer as categorias de novas
imagens utilizando seus prprios atributos (THAY et al., 2012).
Dentre as variadas abordagens existentes para resolver problemas de
classificao de imagem, a escolhida para este projeto foi a tcnica de redes neurais
artificiais. Ao se trabalhar com classificao de imagens, a quantidade de atributos
que compe o conjunto de entrada, representado por pixels, pode ser muito grande,
constituindo assim problemas extremamente complexos. Com isso, as redes neurais
artificiais so uma alternativa para que algoritmos dentro desse ambiente tenham
um bom desempenho, j que elas so capazes de trabalhar com modelos no
lineares (NG, 2014).
Este captulo destina-se fundamentao terica do presente trabalho,
com o objetivo de apresentar definies, conceitos e conhecimentos necessrios
para entendimento do funcionamento do prottipo desenvolvido.

2.1

Redes Neurais Artificiais


A neurocincia, apresentada por Russell e Norvig (2004, p.12), o estudo

do sistema nervoso, particularmente o crebro, e, de acordo com os autores, foi uma


das disciplinas que teve importantssima contribuio para o campo da IA
(Inteligncia Artificial) e consequentemente para o surgimento das RNAs.

17

Em 1861, um estudo da afasia feito por Paul Broca com pacientes cujos
crebros foram danificados permitiu o conhecimento da existncia de reas
localizadas do crebro responsveis por funes cognitivas especficas; mas
somente em 1873 foi possvel observar os neurnios do crebro individualmente
(RUSSELL; NORVIG, 2004, p.12). Por fim, a concluso alcanada por Searle
(1992 apud RUSSELL e NORVIG, 2004, p.13), foi de que uma coleo de clulas
simples pode levar ao pensamento, ao e conscincia.

Figura 1 Partes de um neurnio.


Fonte: Russell e Norvig (2004, p.13)

Atualmente sabe-se, conforme explicitado por Marsland (2009, p.11), que


o crebro um sistema poderoso e complexo capaz de lidar com dados distorcidos e
muitas vezes inconsistentes, e produz respostas rpidas e geralmente corretas sobre
esses dados. Este rgo composto por clulas nervosas, unidades processadoras do
crebro, chamadas neurnios (Figura 1), e cada um deles pode ser visto como um
processador separado (MARSLAND, 2009, p.11-12). As RNAs, por sua vez,
baseiam-se nesse modelo para tentar reproduzir com fidelidade vrias funes
cognitivas e motoras dos seres humanos (BRAGA et al., 2007, p.6).
De acordo com Russell e Norvig (2004, p.18), o primeiro trabalho
desenvolvido reconhecido como IA foi realizado por Warren McCulloch e Walter
Pitts, em 1943, onde ambos propuseram um modelo de neurnios artificiais
caracterizados por status ligado ou desligado, ocorrendo a troca de status para

18

ligado em resposta estimulao por um nmero suficiente de neurnios


vizinhos.

Figura 2 Modelo do neurnio apresentado por McCulloch e Pitts.


Fonte: Marsland (2009, p.14)

Nesse modelo, apresentado na Figura 2, McCulloch e Pitts provaram que


qualquer funo computvel podia ser calculada por certa rede de neurnios
conectados, e que todos conectivos lgicos podiam ser implementados por
estruturas de redes simples. Por fim, eles sugeriram que se definidas
adequadamente, essas redes seriam capazes de aprender.
Considerando outros trabalhos importantes para histria e evoluo das
RNAs, tem-se o trabalho desenvolvido por Rosenblatt, o perceptron (BRAGA et al.,
2007, p. 4). A partir desse novo modelo, Rosenblatt demonstrou que se fossem
acrescidas sinapses ajustveis as RNAs com neurnios MCP poderiam ser treinadas
para classificar certos tipos de padres (BRAGA et al., 2007, p. 4). Seu objetivo,
conforme descrito por Braga et al. (2007, p.4), era desenvolver RNAs que fossem
capazes de fazer descobertas interessantes sem a necessidade de seres humanos
estabelecendo regras explcitas para isso.
Segundo Braga et al. (2007, p.4-5), os estudos sobre RNAs desapareceram
durante os anos de 1970, e ressurgiram na dcada de 1980, com a descrio do
algoritmo backpropagation (algoritmo utilizado neste trabalho e detalhado no item
2.3). A partir desse momento, foi possvel provar que RNAs com mltiplas camadas
eram capazes de resolver problemas complexos, anteriormente impossveis de se
resolver atravs dos modelos com uma nica camada, e desde ento, pesquisas e
estudos voltados para RNAs ganharam bastante ateno permanecendo forte at os

19

dias atuais (BRAGA et al., 2007, p.5).


As RNAs, consoante com Braga et al. (2007, p.18), so normalmente
aplicadas a situaes em que existem dados, experimentais ou gerados por meio de
modelos, por meio dos quais a rede adaptar os seus pesos visando execuo de
uma determinada tarefa. Braga et al. (2007, p.18) ainda descrevem que as
principais tarefas em que as RNAs se aplicam so: classificao, categorizao
(clustering), aproximao, previso e otimizao. Devido sua importncia para
desenvolvimento do corrente trabalho, observa-se a seguir, de forma minuciosa, no
que consistem as tarefas de classificao:
Problemas de classificao envolvem a tarefa de atribuir a um padro
desconhecido uma entre vrias classes conhecidas. A resoluo de
problemas de classificao por meio de RNAs se caracteriza basicamente
por aprendizado supervisionado, em que exemplos, de padres so
apresentados s entradas e as classes correspondentes so apresentadas s
sadas da rede durante o processo de aprendizado. A rede dever, ento,
adaptar os seus pesos de forma a mapear as relaes entre padres de
entrada e classes correspondentes de sada, tendo por base os dados do
conjunto de treinamento. Assim, a classificao envolve, aps o
treinamento, atribuir uma das classes conhecidas a um padro qualquer de
entrada (BRAGA et al., 2007, p.18).

Em conformidade com o que foi exposto por Braga et al. (2007, p.18),
constata-se que a aprendizagem uma etapa essencial para que seja possvel
realizar as tarefas de classificao. De forma geral, essa etapa se resume em
apresentar um conjunto de exemplos para a rede, possibilitando a ela extrair as
caractersticas necessrias para representar a informao recebida e para
posteriormente gerar respostas para o problema (BRAGA et al., 2007, p.3). Essa
capacidade das RNAs em aprender com dados existentes e fornecer respostas
coerentes a dados ainda no conhecidos (generalizao), extraindo informaes
implcitas, sem dvida, segundo Braga et al. (2007, p.3), o seu principal atrativo.

20

Figura 3 Rede MLP com uma nica camada oculta.


Fonte: Adaptado de Marsland (2009, p.48)

A importncia das RNAs no contexto de reconhecimento de padres


tambm ressaltada por Bishop (2006, p.226) que considera a arquitetura
Perceptron de Mltiplas Camadas (MLP), visto na Figura 3, como soluo para
problemas de larga escala, o modelo de maior sucesso.
Dado o exposto, pode-se observar que as RNAs representaram os
trabalhos iniciais de IA e tiveram um grande papel no nascimento e evoluo desse
campo. Alm disso, conclui-se que as RNAs so timas ferramentas para soluo de
problemas complexos e no lineares.
2.1.1

Componentes bsicos
possvel destacar como componentes bsicos da estrutura e processo de

aprendizagem em redes neurais, unindo a notao utilizada por Marsland (2009,


p.18-19) em seu livro Machine Learning An Algorithmic Perspective com a
abordagem de Russell e Norvig (2004, p.714-718), os seguintes itens:
Unidades: As unidades, ou ns, compem a estrutura da rede neural e so
conectadas por vnculos orientados. Uma unidade i vinculada a uma unidade j
propagando a ativao de , desde i at j;
Camadas (layers): As camadas fazem parte da organizao de uma rede
neural e podem ser entendidas como um conjunto de unidades, ou ns. Em uma

21

rede de alimentao direta, cada unidade de uma camada s pode receber a entrada
de unidades que fazem parte de camadas precedentes. Em relao ao nmero de
camadas contidas em uma rede neural, isso poder variar de acordo com o tipo de
rede. As redes MCP tm apenas duas camadas, sendo elas a camada de entrada e a
camada de sada. As redes MLP, alm de possurem camadas de entrada e de sada,
tambm possuem as chamadas camadas ocultas, ou intermedirias.
Entradas (inputs): Um vetor de entrada o dado que serve como entrada
para a rede neural. Normalmente escrito como x, com elementos , onde i inicia-se
em um e segue at o nmero correspondente s dimenses da entrada;
Pesos (ou parmetros): So representados por uma matriz W contendo
elementos , que determinam os pesos associados s conexes entre os ns i e j.
Esses pesos so equivalentes s sinapses do crebro e a dimenso da matriz W ser
estabelecida de acordo com o tamanho de unidades entre as camadas conectadas
correspondentes;
Funo de Ativao: Uma funo de ativao uma funo matemtica
que determina a sada de um neurnio de acordo com o resultado da soma
ponderada de suas entradas. Essa funo possibilita que, como descrito por Russell
e Norvig (2004, p.714), a unidade seja ativa (prxima de +1) quando as entradas
corretas forem recebidas e inativa (prxima a 0) quando as entradas erradas
forem recebidas. A frmula de ativao de um neurnio definida por =
(=1 ) e uma eventual escolha para vista na Figura 4.

Figura 4 Funo sigmide representada por

.
+

Fonte: Russell e Norvig (2009, p.726)

Sadas (outputs): As sadas de uma rede neural so os valores encontrados

22

nas unidades da ltima camada desta rede. O tamanho do vetor de sada


corresponder quantidade de unidades na camada de sada da rede, sendo
representado por e calculado por uma hiptese h.
Alvo (target): O alvo em uma rede neural um dado extra, necessrio
para a aprendizagem supervisionada. Neste tipo de aprendizagem, durante o
treinamento da rede, no basta fornecer apenas as entradas , preciso tambm
fornecer a resposta correta que dever ser aprendida. Por esse motivo deve existir
um vetor alvo , onde j inicia-se em um e percorre o nmero correspondente
quantidade de unidades na camada de sada.
Erro: O erro uma funo que calcula a impreciso da rede de acordo
com os alvos fornecidos e as sadas calculadas .
Bias: O bias, ou vis, uma unidade extra de entrada para cada
neurnio configurada com um valor fixo igual a um. De acordo com Conceio
(2009, p.24) ele representa um peso sinptico atribudo ao prprio neurnio. Na
Figura 5 possvel verificar como o vis aplicado em uma rede MCP.

Figura 5 O bias, ou vis, em uma rede neural.


Fonte: Adaptado de Ng (2014)

2.2

Aprendizado supervisionado em RNAs


Como visto na descrio sobre a aplicabilidade das RNAs a problemas de

classificao, no item 2.1, pode-se concluir que a resoluo do problema inerente a


este trabalho est inserida no contexto de aprendizado supervisionado. Porm, antes
de compreender o que significa aprendizado supervisionado, imprescindvel

23

considerar a definio geral do que vem a ser aprendizado.


Simon (1983, apud LUGER, 2009, p.388) descreve, de maneira sucinta,
que aprendizado pode ser compreendido como qualquer mudana em um sistema
que o permita ter um desempenho melhor na segunda vez em que se repete a mesma
tarefa. Mesmo que breve essa descrio resume muito do que acontece no
desenvolvimento de programas com capacidade de aprender (LUGER, 2009,
p.388).
Uma definio um pouco mais tcnica, partindo para o conceito de
aprendizado de mquina, dada por Mitchell (1997, p.2) e determina que Um
computador aprende a partir de uma experincia E de acordo com alguma tarefa T e
algum desempenho mensurado P, se seu desempenho em T, medido por P, melhora
atravs da experincia E. Contudo, possvel observar que, apesar de apresentado
de forma diferente, o conceito explorado por Mitchell sobre aprendizado similar
ao abordado por Simon.
Outra viso sobre aprendizado, desta vez inserida no cenrio das RNAs,
apresentada a seguir:
Aprendizado o processo pelo qual os parmetros livres de uma rede
neural so ajustados por meio de uma forma continuada de estmulo pelo
ambiente externo, sendo o tipo especfico de aprendizado definido pela
maneira particular como ocorrem os ajustes dos parmetros livres
(MENDEL; MCLAREN, 1970, apud BRAGA et al., 2007, p.12).

Logo, conforme a citao de Mendel e McLaren, o tipo de aprendizado


est ligado maneira como as mudanas so feitas no sistema, ou mais
tecnicamente falando, maneira como os parmetros desses sistemas so ajustados
para melhorar a preciso em sua generalizao (BRAGA et al., 2007, p.12).
Uma das maneiras de se compreender o que foi descrito por Mendel e
McLaren analisar a seguinte frmula apresentada por Braga et al. (2007, p.12):
( + 1) = ( ) + (). Com essa frmula, o autor descreve o processo de
aprendizagem, onde ( ) e ( + 1) representam os valores dos pesos nos
instantes e + 1, respectivamente, e () o ajuste aplicado aos pesos. Com
isso, o paradigma no qual se enquadra determinado algoritmo de aprendizado

24

estabelecido pela forma como ( ) calculado (BRAGA et al., 2007, p.12).


Entre os principais paradigmas de aprendizado mencionados por Braga et
al. (2007, p.13) est o aprendizado supervisionado. Para detalhar esse tipo de
aprendizado, Russell e Norvig (2004, p.630) descrevem que o problema da
aprendizagem supervisionada envolve a aprendizagem de uma funo a partir de
exemplos de suas entradas e sadas.
Corroborando as ideias de Russell e Norvig sobre aprendizado
supervisionado, Braga et al. (2007, p.13) consideram a necessidade da figura de um
supervisor, que ser responsvel por observar a sada calculada pelo algoritmo e
comparar o resultado com o valor de sada desejado. Levando em considerao a
frmula

apresentada

anteriormente,

pelo

mesmo

autor,

aprendizado

supervisionado pode ser caracterizado como os ajustes do conjunto de pesos de


maneira a aproximar a sada calculada com a sada desejada. Logo, a cada etapa de
treinamento desse tipo de sistema, esperado minimizar essa diferena a fim de se
chegar a uma possvel soluo (BRAGA et al., 2007, p.13).
Para realizar os clculos anteriormente abordados, o aprendizado
supervisionado composto por diversos tipos de algoritmos, que visam obter um
mapeamento dos padres de entrada e sada. Entre eles, um dos mais conhecidos,
aplicado a redes de mltiplas camadas, o algoritmo backpropagation, que ser
tratado a seguir (BRAGA et al., 2007, p.13).

2.3

Backpropagation

2.3.1

Motivao
Em redes de uma nica camada, o treinamento e o aprendizado da rede

so realizados atravs da correo de erros, que busca minimizar o erro da resposta


atual da rede em relao sada desejada (BRAGA et al., 2007, p.13). De acordo
com Ng (2014), a frmula ideal para calcular esse erro, em tarefas de classificao,
representada pela seguinte funo :

25

( (), ) = log () (1 ) log(1 ())

(1)

, onde () representa a hiptese (sada do neurnio) para um dado exemplo x e


simboliza o valor da sada verdadeira (a resposta correta) deste exemplo.
A hiptese (), nesse contexto, probabilidade de y (a sada) ser igual
a 1, dado x, parametrizado pelos pesos W (NG, 2014). A mesma calculada
aplicando uma funo de ativao soma ponderada da entrada , como pode ser
visto a seguir (RUSSELL; NORVIG, 2004, p.717-718):

() = ( )

(2)

=1

Uma funo de custo utiliza os erros de todos os m exemplos do


conjunto de treinamento para calcular o custo associado ao aprendizado. De certo
modo, pode-se dizer que essa funo (Equao 3) determina quo bem a rede neural
est adaptada para predizer o exemplo i.

1
( ) = [ log ( ) + (1 ) log(1 ( ))]

(3)

=1

Uma das maneiras existentes para minimizar o erro associado RNA


utilizar o algoritmo de declnio de gradiente, que calcula a derivada parcial da
funo em relao a cada peso (RUSSELL; NORVIG, 2004, p.718). Dessa forma,
os pesos da rede so atualizados da seguinte maneira:
=

( )

(4)

, em que simboliza a taxa de aprendizagem4.


O algoritmo completo do declnio de gradiente consiste em repetir a
atualizao dos pesos , todos simultaneamente, at sua convergncia,
minimizando a funo (NG, 2014).

A taxa de aprendizagem, uma constante , reflete no quanto os valores dos


pesos so modificados, sendo que, quanto maior o seu valor, mais rpido os
pesos se aproximam de um valor timo (LUGER, 2009, p.467).

26

Figura 6 Efeito do algoritmo declnio de gradiente.


Fonte: Marsland (2009, p.51)

O efeito do algoritmo de declnio de gradiente em uma funo no


convexa ilustrado na Figura 6. Na figura, Marsland (2009, p.51) prope a ideia de
uma bola rolando sobre uma superfcie e, conforme a fora da gravidade, descendo
at atingir uma das cavidades dessa superfcie. Neste momento, dito que o
algoritmo encontrou um local mnimo.
importante salientar que para funes convexas no existem locais
mnimos. Nesse caso, existe apenas um mnimo global, e por esse motivo, ao
executar o algoritmo de declnio de gradiente no h riscos de o algoritmo ficar
parado em um local mnimo e no encontrar o ponto timo global (NG, 2014).
A utilizao da funo em conjunto com o algoritmo de declnio de
gradiente, indicado previamente, satisfatria para o aprendizado em redes de uma
nica camada. Todavia, para redes de mltiplas camadas, apenas essas duas
abordagens no so o suficiente, conforme pode ser observado a seguir:
[...] Para redes de uma nica camada, o erro obtido diretamente atravs
da diferena entre a sada desejada e a sada corrente da rede. No entanto
para mltiplas camadas esse procedimento pode ser aplicado somente
para a camada de sada, j que no existem sadas desejadas definidas
para as camadas intermedirias. Assim, o problema passa a ser ento,
como calcular ou estimar o erro das camadas intermedirias (BRAGA et
al., 2007, p.67).

De acordo com Braga et al. (2007, p.67), possvel identificar a existncia


de um problema relacionado s redes de mltiplas camadas. Braga et al. (2007,
p.67) destacam que o erro nas camadas ocultas (intermedirias), necessita ser
estimado, entretanto, no pode ser calculado da mesma maneira como se feito nas

27

redes de uma nica camada. Dessa forma, para contornar esse impasse, no ano de
1986, foi descrito o algoritmo backpropagation, que em sua fase backward (fase de
retorno) possibilita computar os erros associados a essas camadas.

Figura 7 Backpropagation em uma rede neural.


Fonte: Luger (2008, p.468)

O algoritmo backpropagation, conforme representado na Figura 7, possui


duas etapas. A primeira etapa a compreendida como a alimentao direta da rede
(Forward Network Activation) e a segunda, conhecida como propagao de
retorno (Backwards Error Propagation), ou retropropagao, que responsvel por
estimar os erros associados s camadas ocultas (RUSSELL; NORVIG, 2004, p.721).
Essas duas fases sero analisadas na sequncia, e por fim, ser
apresentado o algoritmo final que corresponde aprendizagem supervisionada por
meio de redes neurais artificiais de mltiplas camadas.
2.3.2

Notaes utilizadas
Para a descrio do algoritmo backpropagation sero adotadas as

seguintes notaes:
- L: o nmero total de camadas que compem a rede;
- : nmero de unidades (desconsiderando a unidade bias) na camada l.
()

- : ativao da unidade j na camada l;


- () : matriz de parmetros, ou pesos, que controla a funo de
mapeamento da camada l at a camada l +1, com dimenses +1

28

( + 1).

- ( () ) : matriz transposta de () .

Figura 8 Exemplo de matriz transposta.


Fonte: Elaborado pelo autor

2.3.3

Fase FeedForward
O algoritmo backpropagation iniciado pela fase de alimentao direta da

rede (feedforward). Nesta parte do algoritmo, o processo similar ao descrito no


incio deste captulo, em que os sinais so recebidos nas camadas de entrada e so
propagados at a camada de sada. Contudo, a nica diferena que, nas redes de
mltiplas camadas, essa propagao exigir mais clculos e mais do que um nico
conjunto de pesos para encontrar o valor final correspondente sada da rede.
Para reforar o entendimento dessa etapa, considerando uma arquitetura
MLP com uma nica camada oculta, Marsland (2009, p.54) descreve o seguinte
processo: um vetor de entrada colocado nas unidades de entrada da rede neural; as
unidades de entrada e a primeira camada de pesos so usadas para definir a ativao
dos neurnios da camada oculta, aplicando a funo sigmoide; as sadas dos
neurnios da camada oculta so usadas juntamente com a segunda camada de pesos
para determinar a ativao dos neurnios da camada de sada da rede.
No intuito de deixar mais claro o que ocorre na etapa de alimentao
direta da rede, o Quadro 1 apresenta um exemplo do algoritmo, considerando uma
RNA com arquitetura correspondente Figura 9 e um nico exemplo x.

29

Figura 9 RNA utilizada como exemplo para calcular a etapa de


alimentao direta da rede.
Fonte: Adaptado de Ng (2014)
Quadro 1 Exemplo de implementao da fase de alimentao direta da rede.

Inicializao
- Inicialize todos os pesos com valores baixos (positivos e
negativos).
Treinamento
Fase forward

Calcule a ativao de todos os neurnios () :


(2)

(1)

(1)

(1)

(1)

1 = 10 0 + 11 1 + 12 2 + 13 3

(2)

(2)

1 = (1 )
(2)

(1)

(1)

(1)

(1)

(1)

(1)

(1)

2 = 20 0 + 21 1 + 22 2 + 23 3
(2)

(2)

2 = (2 )
(2)

(1)

3 = 30 0 + 31 1 + 32 2 + 33 3
(2)

(2)

3 = (3 )
(2)

(2)

(2) (2)

(2) (2)

(2) (2)

(3) = 10
0 + 11 1 + 12 2 + 13 3

() = (3) = ( (3) )
Fase backward
...
Fonte: elaborado pelo autor

importante observar que a parte de inicializao do algoritmo consiste


na configurao dos valores dos parmetros a serem utilizados. A inicializao

30

desses parmetros deve acontecer de forma aleatria, objetivando solucionar o


problema de pesos simtricos (problem of symmetric weights). Alm disso, de
acordo com Ng (2014), esses valores devem ser baixos, positivos e negativos,
()

compreendendo uma faixa entre e ( ) (NG, 2014).


O Quadro 2 apresenta outro cdigo para implementao da etapa de
alimentao da rede, que corresponde verso vetorizada5 do cdigo descrito no
Quadro 1.
Quadro 2 Implementao vetorizada do algoritmo de alimentao direta da rede

Fase forward
Calcule a ativao dos neurnios (2) e (3) :
(1) =
(2) = (1) (1)
(2) = ( (2) )
(3) = (2) (2)
() = (3) = ( (3) )
Fase backward
...
Fonte: elaborado pelo autor

2.3.4

Fase Backward
Na fase backward do algoritmo backpropagation, o objetivo calcular os

erros associados a cada uma das camadas da rede neural. Ou seja, alm de calcular o
erro na camada de sada, necessrio tambm calcular os erros associados s
camadas ocultas. Segundo Russell e Norvig (2004, p.721), o erro nas camadas
ocultas parece misterioso, porque os dados de treinamento no informam que valor
os ns ocultos devem ter.
5

Ng (2014) destaca que a vetorizao possibilita cdigos mais eficientes e


capazes de serem executados com mais rapidez. No item 3.1 esse conceito
abordado mais detalhadamente.

31

Nessa etapa do algoritmo, o objetivo descobrir o erro pertencente s


camadas ocultas da rede. Para isso, necessrio efetuar a propagao de retorno da
camada de sada para as camadas ocultas (RUSSEL; NORVIG, 2004, p.721).
Segundo Russell e Norvig (2004, p.721), esse processo emerge diretamente de
uma derivao do gradiente de erro global.
Consoante com Ng (2014), a intuio do algoritmo backpropagation que
()

para cada unidade da rede, dever ser calculado o termo , que representa o erro
do n j na camada l, para 2. Com isso, ainda considerando o exemplo da Figura
8, a unidade na camada de sada tem seu erro calculado por (3) = (3) , onde
(3) corresponde ao valor da hiptese de sada do neurnio da camada de sada
(camada 3) e t representa a sada desejada.
Como descrito por Russell e Norvig (2004, p.721), o erro encontrado na
camada de sada propagado para as camadas anteriores, a fim de possibilitar
()

calcular o erro nas unidades dessas camadas. Portanto, o clculo do termo

dado pela seguinte equao (NG, 2014):


()

()
()
( )
=1

(+1)

(5)

, onde o termo significa a derivada da funo de ativao avaliada nas entradas


()

()

()

dadas por . O clculo dessa derivada resulta em (1 ) (NG, 2014).


Em redes neurais MLP, a derivao da funo (Equao 3)
()

compreendida como sendo a multiplicao das ativaes


(+1)

encontrados

pelos erros

. Dessa forma, tem-se que:

()

() (+1)

( ) =

(6)

Como foi visto anteriormente, na etapa de alimentao da rede, tambm


possvel escrever o clculo do termo para qualquer unidade de uma camada
intermediria l, de forma vetorizada. Portanto, sua verso vetorizada dada pela

equao () = ( () ) (+1) . ( () ), onde o operador . representa uma

32

multiplicao entre matrizes, elemento por elemento. Essa multiplicao


apresentada na Figura 10 abaixo, e pode-se observar que multiplicado por .

Figura 10 Exemplo de multiplicao de matrizes elemento por elemento.


Fonte: Elaborado pelo autor

O algoritmo backpropagation, conforme descrito por Ng (2014),


apresentado no Quadro 3. Neste algoritmo, a letra delta maiscula () utilizada
para calcular a derivada parcial da funo , expressa pela Equao 6. Essa matriz
configurada inicialmente com o valor zero para todos seus elementos.
Quadro 3 Algoritmo Backpropagtion

Conjunto de dados {( (1) , (1) ), , ( () , () )} ;


()

= 0 (para todo , , );
Para = 1 at
(1) = (1) ;
Calcular () para = 2, 3, ; (forward propagation)
Utilizando () , calcule () = () () ;
Calcule (1) , (2) , , (2) ;

()
()
(+1)

(() ) ;
= +
()

( )
()

()

= ;
Fonte: elaborado pelo autor

Para calcular o gradiente de um nico exemplo ( (1) , (1) ), em


consonncia com o que foi apresentado no Quadro 3, deve-se ento seguir os
seguintes passos: realizar a etapa de alimentao da rede usando o vetor (1) ; em
seguida, realizar a propagao de retorno usando (1) .

33

Aps a finalizao de execuo do algoritmo backpropagation, o termo


()

pode ser aplicado ao algoritmo de declnio de gradiente para realizar a


()

atualizao de todos os pesos . Dessa forma, concretiza-se o aprendizado em


redes MLP atravs do backpropagation.

2.4

Detalhes para implementao de RNAs

2.4.1

Preparao dos dados


Conforme destacado por Marsland (2009, p.63), no s as redes MLP

como tambm a maioria dos algoritmos de aprendizado de mquina tendem a


aprender mais efetivamente quando algum pr-processamento desempenhado nas
variveis de entrada. Esse pr-processamento evita que os pesos sejam ajustados
para valores altos sem necessidade.
Uma forma de pr-processamento realizado nas variveis de entrada o
escalonamento de seus respectivos valores. A abordagem mais comum para essa
tarefa conhecida como Mean Normalization, e seu objetivo fazer com que todos
os valores sejam normalizados para valores que correspondam faixa entre -1 e 1
(prximos zero).
A frmula para aplicar essa tcnica de padronizao de variveis,
considerando a normalizao da primeira varivel de entrada (1 ), apresentada por
Ng (2014) na Equao 7. Na equao, o termo 1 refere-se ao valor mdio do
atributo 1 no conjunto de treinamento e o termo 1 pode representar o intervalo
entre o maior e o menor valor de 1 , tambm condizente com o conjunto de
treinamento.
1 =

1 1
1

(7)

A Tabela 1 apresenta um simples conjunto de treinamento, apenas para


exemplificao, composto de trs exemplos, cada um com duas variveis. A
primeira varivel simboliza o preo de certa compra e a segunda a quantidade de

34

produtos adquirida. Nesta tabela, os valores so apresentados na sua forma pura e


sua ltima linha corresponde aos clculos dos termos e de cada atributo i.
Tabela 1 Exemplo de um conjunto de treinamento no normalizado.

(preo)

(quantidade)

359,00

289,00

160,00

1 = 269,33

1 = 199

1 = 3

1 = 4

Fonte: elaborado pelo autor.

Calculados os termos e , possvel realizar o escalonamento das


variveis dos trs exemplos, fazendo com que todas fiquem com o mesmo padro.
A Tabela 2 apresenta as variveis depois de realizados os clculos de normalizao,
e como se pode observar, todas compreendem valores entre -1 e 1.
Tabela 2 Tabela com valores escalonados aps uso do Mean Normalization

(preo)

(quantidade)

0,45

0.50

0,09

0.00

-0,54

-0.50
Fonte: elaborado pelo autor

A aplicao dessa tcnica de escalonamento contribui fazendo com que o


algoritmo de declnio de gradiente convirja com menos iteraes (NG, 2014). Dessa
forma, a aprendizagem ocorre de forma mais rpida e eficiente.
2.4.2

Quantidade de dados para treinamento


A definio da quantidade de dados necessrios para compor o conjunto

de treinamento, como tambm ser visto no prximo item, uma questo que faz
parte do contexto da aplicao. Por esse motivo, Marsland (2009, p.64) evidencia
que no existe maneira alguma de se calcular qual a quantidade mnima de dados
requeridos para determinado problema.

35

Uma regra que tem sido utilizada por muito tempo e que pode ser
considerada, de acordo com Marsland (2009, p.64), de que o conjunto de dados
deve ter o tamanho equivalente a, no mnimo, dez vezes o tamanho dos parmetros.
Com isso, Marsland (2009, p.64) conclui que provavelmente a quantidade de
exemplos ser grande demais, e consequentemente, o treinamento da rede se tornar
uma operao dispendiosa.
Mesmo no existindo uma frmula matemtica que auxilie na
determinao do tamanho do conjunto de dados, Marsland (2009, p.64) descreve
que quanto mais dados, melhor o aprendizado. Entretanto, valido novamente
salientar que quanto maior a quantidade de dados, maior tambm ser o tempo gasto
para realizar o treinamento da rede.
2.4.3

Arquitetura
Segundo Braga et al. (2004, p.83), uma das maiores dificuldades em se

definir a estrutura de uma RNA o fiel dimensionamento de sua topologia. De


acordo com os autores, necessria uma anlise prvia no conjunto de dados e no
problema em questo, para que assim seja considerado o nmero de camadas da
rede e a quantidade de neurnios existentes em cada uma delas.
Com relao escolha do nmero de camadas ocultas, Braga et al. (2004,
p.70) relatam que a grande maioria dos problemas prticos raramente necessita de
mais de uma camada intermediria. Alm disso, Braga et al. (2004, p.70) alertam
sobre a seleo de um nmero de camadas maior que o necessrio:
A utilizao de um nmero maior de camadas do que o necessrio
pode levar a problemas de convergncia da rede, j que as camadas
intermedirias trabalham com estimativas de erro, as quais, quando
em maior quantidade, podem dificultar a convergncia global da
rede.

Alm de se estabelecer o nmero de camadas que vai compor a RNA,


tambm necessrio definir o nmero de neurnios que sero atribudos a cada
camada. Essa definio extremamente importante para o desempenho da rede,
principalmente no que se refere sua capacidade de generalizao, e consiste no

36

problema mais fundamental em aprendizado de redes neurais. (BRAGA et al., 2004,


p.71).
Em conformidade com Braga et al. (2004, p.71), o nmero de neurnios
est diretamente ligado com a capacidade da rede em solucionar problemas de
determinada complexidade. A relao feita por esses autores de que quanto maior
o nmero de neurnios, maior a complexidade da rede e maior sua abrangncia em
termos de solues possveis.
A melhor escolha do tamanho da rede a ser utilizada corresponder a RNA
que, segundo Braga et al. (2004, p.83), seja capaz de modelar os dados sem
modelar o rudo contido neles. Dessa forma, pretende-se que o modelo no seja
muito rgido, a ponto de no modelar fielmente os dados, e tambm que no seja
excessivamente flexvel, a ponto de modelar tambm o rudo (BRAGA et al., 2004,
p.83).
Mesmo havendo inmeras abordagens destinadas determinao do
tamanho da rede, Braga et al. (2004, p.71) constatam que no existe uma
abordagem que tenha encontrado, formalmente, uma resposta geral para essa
questo fundamental no projeto de redes neurais. Entretanto, Alpaydin (2010,
p.263) sugere que uma boa ideia para essa escolha tentar diferentes arquiteturas,
treinar todas elas no conjunto de treinamento, e escolher a que melhor generalizar
no conjunto de validao6.
2.4.4

Underfitting e Overfitting
Apesar da boa capacidade das RNAs em solucionar problemas complexos

e no lineares, a configurao no adequada de sua estrutura pode resultar em


problemas na sua generalizao:
[...] uma das maiores dificuldades em se definir a estrutura de uma RNA
o fiel dimensionamento de sua topologia. Normalmente, o nmero de
camadas e o nmero de neurnios em cada camada so definidos em
funo de uma inspeo prvia nos dados e da complexidade do
6

Os conceitos sobre a separao dos dados em conjuntos de treinamento,


validao e teste, so abordados no item 2.4.1.5.

37

problema. Sabe-se, no entanto, que o ajuste inadequado da complexidade


da rede pode levar a efeitos indesejveis na resposta final do modelo
(BRAGA et al., 2004, p.83).

Os efeitos indesejveis na generalizao da rede, na citao de Braga et al.


(2004, p.83), podem ser compreendidos como as consequncias de uma rede que
sofre de problemas de overfitting (superdimensionamento) ou underfitting
(subdimensionamento) (BRAGA et al., 2004, p.83).
Para que uma rede no sofra de overfitting ou underfitting, necessrio
haver um equilbrio entre o vis (bias) e a varincia (flexibilidade7), obtido atravs
de seu dimensionamento (BRAGA et al., 2004, p.83). No caso de uma rede
sofrendo de underfitting, o problema est associado ao vis (alta rigidez), por outro
lado, se a rede estiver sofrendo de overfitting, isso simboliza a existncia de um
problema de alta varincia (NG, 2014).
Outra maneira de compreender a ocorrncia desses dois dilemas, expostos
anteriormente, atravs da conceituao dada por Alpaydin (2010, p.39). O autor
explica que uma ocorrncia de underfitting na rede se d quando a hiptese ()
menos complexa do que a funo subjacente aos dados. E, em um segundo caso, se
a hiptese () for muito complexa, os dados no so suficientes para satisfazla, resultando em uma hiptese ruim.

Figura 11 O efeito do overfitting.


Fonte: Marsland (2009, p.66)

Imaginando a situao em que uma hiptese muito complexa, o


overfitting ocorrer porque essa hiptese no s aprender a funo subjacente aos
7

Quanto maior a sua estrutura, maior o nmero de parmetros livres ajustveis


e, consequentemente, maior sua flexibilidade (BRAGA et al., 2004, p.83).

38

dados como tambm o rudo existente neles (ALPAYDIN, 2010, p.39). Esse
exemplo pode ser observado na Figura 11, onde so apresentados dois grficos de
diferentes hipteses para um mesmo conjunto de dados. Na imagem esquerda, a
linha traada prope a hiptese ideal para o problema, e a imagem direita ilustra o
efeito do problema de superdimensionamento, onde os dados so modelados
perfeitamente, incluindo o rudo; e o resultado disso uma rede com pouca
capacidade de generalizao para novos exemplos.
Quando se tem disponvel um conjunto de treinamento muito grande, uma
das formas de contornar o problema de overfitting separar o conjunto de dados em
dados de treinamento e validao. Dessa forma, possvel utilizar o conjunto de
treinamento para atualizao dos parmetros, e o conjunto de validao para estimar
a capacidade de generalizao do modelo. Assim, o treinamento pode ser
interrompido quando o erro no conjunto de validao comear a subir (BRAGA et
al., 2004, p.83).
Outra tcnica conhecida para evitar overfitting conhecida como poda
(pruning). Essa tcnica visa a retirada de pesos e neurnios irrelevantes para a
hiptese calculada pela rede, porm, ela apresenta a desvantagem de no considerar
a correlao entre eles. Dessa maneira, pode ocorrer que alguma informao
importante para o problema seja retirada de forma errnea (BRAGA et al., 2004,
p.84).
A regularizao tambm tem um papel importante na preveno de
overfitting e underfitting. Braga et al. (2004, p.84) explicam que esse mtodo
envolve a modificao da funo de custo atravs da adio de termos de
regularizao. Com isso, pretende-se, de acordo com Braga et al. (2004, p.84), obter
solues com pesos de norma mnima.

1 +1

() 2
[ log ( ) + (1 ) log(1 ( ))] +
( )

2
=1
=1 =1 =1

(8)

A Equao 8 apresenta a adio do termo de regularizao funo de


custo apresentada no item 2.3.1. Com ela, esperado que uma soluo com um fiel

39

equilbrio entre a rigidez e a varincia da rede seja obtida, e isso depender do


ajuste do parmetro de regularizao . Braga et al. (2004, p.84) constatam que
quando o valor de muito alto a soluo para o vetor de pesos tende para w = 0,
e por isso, um valor satisfatrio intermedirio deve ser encontrado.
2.4.5

Conjuntos de treinamento, validao e teste


Toda vez que uma rede MLP treinada, deve ser testado o quo precisa

ela na predio de novos exemplos. Para isso, deve ser definido um conjunto
prprio destinado apenas para testes. E por que isso? Marsland (2009, p.67) explica
que testar a rede utilizando os mesmos dados utilizados para treinamento no
possibilitar saber se, por exemplo, um problema de overfitting est ocorrendo, nem
mesmo determinar a sua capacidade de generalizao.
Conforme visto no pargrafo anterior, existe a necessidade de reservar
parte do conjunto de dados para realizao de testes, certificando de que eles no
foram usados para treinamento. A grande desvantagem nesse processo, de acordo
com Marsland (2009, p.67), de que o conjunto de dados disponvel para
treinamento ser reduzido, e o autor afirma que no h como escapar disso.
Muitas vezes, alm de dividir os dados entre conjunto de treinamento e
conjunto de teste, necessrio tambm separ-lo em um terceiro conjunto, chamado
de conjunto de validao8. Esse conjunto utilizado para verificar quo bem a rede
est aprendendo durante o treinamento (MARSLAND, 2009, p.67).
A proporo de dados utilizados para treinamento, teste e validao
definida pelo desenvolvedor do projeto. Porm, Marsland (2009, p.67) considera
que na existncia de um grande conjunto de dados, a proporo comumente
escolhida de 50:25:25, e 60:20:20 quando no se possui um conjunto de dados
volumoso.

Conhecido como validao cruzada em estatstica (MARSLAND, 2009, p.67)

40

Figura 12 O conjunto de dados dividido em conjunto de


treinamento, teste e validao.
Fonte: adaptado de Marsland (2009, p.67)

Ao realizar a separao dos dados, necessrio se atentar seguinte


situao descrita por Marsland (2009, p.67):
[...] Como voc realiza a diviso tambm importante. Muitos conjuntos
de dados so apresentados com o primeiro conjunto de dados pertencendo
a classe 1, o prximo classe 2, e assim por diante. Se voc escolher os
primeiros dados para o conjunto de treinamento, os prximos para o
conjunto de teste, etc. os resultados sero muito ruins, j que o
treinamento no conhecer todas as classes. (MARSLAND, 2009, p.67).

Para contornar o problema descrito no pargrafo anterior, o prprio autor


recomenda que, ou primeiramente o conjunto de dados seja aleatoriamente
reordenado, ou que seja atribudo cada par (, ) aleatoriamente para cada um dos
conjuntos (MARSLAND, 2009, p.67). Essa segunda proposta de diviso dada por
Marsland (2009, p.67) ilustrada na Figura 12.
2.4.6

Avaliao de resultados
O treinamento de redes neurais MLP requer que o algoritmo seja

executado sobre o todo o conjunto de dados muitas vezes, modificando os pesos da


rede de acordo com os erros cometidos pela rede a cada iterao (MARSLAND,
2009, p. 68). Finalizado o treinamento, necessrio avaliar e analisar os resultados
correspondentes ao desempenho da rede, e para isso, deve ser utilizado o conjunto
de teste.

41

O desempenho da rede pode ser avaliado atravs da comparao entre a


predio realizada pela rede e os seus alvos correspondentes. Para o problema de
classificao, possvel calcular a quantidade de vezes que a rede conseguiu
predizer corretamente cada classe, e assim, determinar a preciso de predio da
rede (MARSLAND, 2009, p.69).
Para exemplificar o clculo de preciso de uma rede MLP configurada
para um problema de classificao, imagina-se que um teste seja realizado em um
conjunto com 1200 exemplos. Depois de realizado esse teste e, caso constatado que
1089 predies foram bem sucedidas, possvel determinar atravs da Equao 9
que a rede tem uma preciso de 90,75%.

100

(9)

Concludo os testes na RNA desenvolvida, o prximo passo avaliar


possveis melhorias a serem implementadas para aumentar a preciso de predio da
rede. De acordo com Ng (2014), algumas das medidas que podem ser tomadas nessa
etapa, em qualquer sistema de aprendizado de mquina, so listadas a seguir:
Coletar mais exemplos para treinamento;
Tentar utilizar uma menor quantidade de atributos;
Tentar adicionar mais atributos;
Tentar aumentar o valor do parmetro de regularizao ;
Tentar diminuir o valor de ;
Com exceo do primeiro item, todos os outros podem ser melhores
determinados utilizando algoritmos de seleo de modelo. Esse mtodo o mesmo
recomendado por Alpaydin (2010, p.263) na escolha da arquitetura da RNA,
fazendo-se necessrio a existncia do conjunto de validao.

2.4.7

Curva de aprendizado
Uma das medidas apresentadas por Ng (2014) que pode influenciar

positivamente nos resultados de um sistema de aprendizado de mquina adquirir

42

mais dados para treinamento da rede. Porm, essa tarefa s ir ajudar caso o
algoritmo no esteja sofrendo com problemas de alta rigidez (NG, 2014).
A maneira de verificar se a coleta de mais dados auxiliar no desempenho
da rede gerar um grfico conhecido como curva de aprendizado. Nesse grfico,
uma curva apresentada mostrando a variao do erro da rede de acordo com o
aumento do nmero de exemplos utilizados no treinamento. Com isso possvel
identificar se a coleta de mais dados ser vivel ou no.

Figura 13 Exemplo de curva de aprendizado.


Fonte: Adaptado de Ng (2014)

Um exemplo de curva de aprendizado, descrita por Ng (2014),


apresentada na Figura 13, onde o eixo y corresponde ao erro calculado pela rede e o
eixo x corresponde ao tamanho do conjunto de dados utilizado para o treinamento.
Nessa figura, possvel observar que quanto maior a quantidade de exemplos
utilizado no treinamento, maior o erro calculado pela funo de custo no conjunto
de treinamento, e menor o valor do erro calculado pela funo de custo no conjunto
de validao, o que simboliza que coletar mais dados de treinamento pode melhorar
os resultados.

43

Figura 14 Segundo exemplo de curva de aprendizado.


Fonte: Russell e Norvig (2009, p.703)

Os autores Russell e Norvig (2009, p.703) apresentam na Figura 14 outra


proposta de curva de aprendizado, onde o grfico representa a relao de preciso
da rede x nmero de exemplos utilizados para treinamento. Neste caso, a rede
treinada utilizando o conjunto de treinamento, e sua preciso avaliada no conjunto
de teste.
Atravs da curva de aprendizado de Russell e Norvig, possvel observar
que quanto maior o tamanho do conjunto de treinamento, maior a preciso da rede
calculada no conjunto de teste. Logo, se o conjunto de treinamento fosse composto
apenas de 20 exemplos, atravs dessa curva poderia constatar o efeito positivo de
coletar mais exemplos, a fim de atingir quase 100% de preciso.
Apesar de abordarem relaes diferentes, as curvas de aprendizado
apresentadas anteriormente, tanto na Figura 13 quanto na Figura 14, so boas
ferramentas para auxiliar a detectar se existe a necessidade ou no de coletar mais
dados de treinamento.

2.5

Octave
As linguagens de prototipao mais comuns, utilizadas no contexto de

aprendizado de mquina, so: Octave, MATLAB, Python, NumPy e R (NG, 2014).

44

Dentre essas, a escolhida para prototipao do sistema foi o Octave, que alm de ser
considerada uma tima ferramenta para esse propsito (NG, 2014), um software
gratuito e de cdigo aberto (Open Source).

Figura 15 Interface de linha de comando do Octave.


Fonte: print screen do software no sistema operacional Windows 8

O GNU Octave uma linguagem de alto nvel, escrito inicialmente por


John W. Eaton, destinado principalmente para computao numrica. Possui uma
interface de linha de comando (Figura 15) para soluo de problemas
numericamente lineares e no lineares, e para execuo de experimentos numricos.
Alm disso, ele livremente redistribudo, sendo um software livre sob os termos
da licena GNU General Public License (GPL) (EATON, 2013).
O Octave compatvel com o MATLAB, possuindo a sintaxe e um grande
nmero de funes semelhantes. Tambm possui ferramentas extensivas para
resoluo de problemas lineares numricos comuns em lgebra, clculo aproximado
de razes de equaes no lineares, funes ordinrias, polinmios, clculo de
integrais, entre outros; visto que sua expanso e customizao algo que pode ser
facilmente realizado atravs de funes definidas pelo utilizador na prpria
linguagem Octave, ou fazendo uso de mdulos dinamicamente carregados escritos
em C++, C, Fortran, ou outras linguagens (EATON, 2013).
Outra grande vantagem pertinente a linguagens de prototipao, como por
exemplo, o Octave, de que elas possuem diferentes bibliotecas de lgebra linear
numrica. O uso dessas bibliotecas possibilitam cdigos mais eficientes e mais

45

rpidos de serem executados, alm de reduzir o cdigo necessrio para escrita,


tornando-o mais simples. Por exemplo, ao invs de escrever um cdigo com laos
(loops) para realizar uma multiplicao entre duas matrizes A e B, basta
simplesmente utilizar o comando A*B na linha de comando do Octave e o
resultado esperado ser apresentado (NG, 2014).
2.5.1

Operaes bsicas
Com o objetivo de facilitar a compreenso dos cdigos que sero vistos

posteriormente no item 3.2, importante apresentar a forma como algumas


operaes se comportam na sintaxe do Octave. O Quadro 4 apresenta a forma como
expresses aritmticas so escritas nessa linguagem, exemplificando a sintaxe para
as operaes de soma, subtrao, multiplicao, diviso e potenciao.
Quadro 4 Expresses aritmticas no Octave

Expresso

Resultado

5+6

11

32

58

40

1/2

0.5

2^6

11

Fonte: elaborado pelo autor

O Quadro 5 lista os principais operadores responsveis pela construo de


expresses lgicas dentro do Octave. Essas expresses lgicas sempre retornaro os
valores um ou zero, que respectivamente significam verdadeiro ou falso. No
Octave, o operador que verifica se uma varivel diferente de outra, tambm pode
ser representado pelo sinal !=, normalmente utilizado em outras linguagens, como
por exemplo, o Java.

46

Quadro 5 Operadores lgicos no Octave

Operador

Descrio

==

Igualdade

~=

Diferente

>

Maior

<

Menor

&&

E lgico

||

OU lgico

Fonte: elaborado pelo autor

Para compreender a maneira como se declara variveis no Octave (vetores


e matrizes) utilizado o Quadro 6, que simula a interface fornecida pelo programa.
Observa-se que, na declarao da matriz A, os valores so digitados de forma
sequencial e utilizado o ponto e vrgula (;) quando existe a necessidade de definir
uma nova linha na matriz. Pode-se analisar tambm que, ao suprimir o ponto e
vrgula aps a declarao ou atribuio de uma varivel, a sua sada apresentada.
Quadro 6 Declarao de variveis no Octave.

>> a =
>> b =
>> c =
c = 1
>>
>> v =
>>
>> A =
A =
1
3
5

3;
'hi';
3>=1
[1 2 3];
[1 2; 3 4; 5 6]
2
4
6
Fonte: elaborado pelo autor

Os comandos IF, FOR, e WHILE (controle de fluxo dos algoritmos) so


similares s sintaxes utilizadas em outras linguagens como C ou Pascal (Quadro 7).

47

Quadro 7 Exemplo de comandos FOR, WHILE e IF no Octave

>>
>>
>
>
>>
>>
>>
>
>
>
>>
>>
>
>
>
>
>
>

v = [1 2 3 4 5];
for i=1:5
v(i) = v(i)^2;
end
i = 1;
while i <= 5
v(i) = 100;
i = i+1;
end
if v(1)==1
disp('valor igual a 1');
elseif v(1)==2
disp('valor igual a 2');
else
disp('valor diferente de 1 e 2!');
end
Fonte: elaborado pelo autor

2.5.2

Funes
Para criar uma funo, escreve-se a funo em qualquer editor de texto,

como por exemplo, gedit ou notepad, e salvar o arquivo como nomedafuncao.m.


Uma peculiaridade das funes do Octave que elas podem retornar mais do que
um valor (Quadro 10), diferentemente de outras linguagens de programao.
Quadro 8 Exemplo de funo que calcula o quadrado de um nmero.

function resultado = quadrado(x)


resultado = x^2;
Fonte: elaborado pelo autor

Para chamar a funo criada, utiliza-se o comando cd seguido do caminho


onde a funo est localizada, e digitar o seu nome passando o parmetro desejado
entre os parnteses (Quadro 9).

48

Quadro 9 Exemplo de chamada de funo.

>> cd /Users/Bruno/Octave/Funcoes
>> quadrado(2)
ans = 4
Fonte: elaborado pelo autor
Quadro 10 Funo que retorna mais de uma varivel.

function [a, b] = quadradoeCubo(x)


a = x^2;
b = x^3;
end
Fonte: elaborado pelo autor

2.5.3

Vetorizao
Conforme observado no incio desse captulo, o Octave possui bibliotecas

especiais para que o conceito de vetorizao possa ser aplicado (NG, 2014). O
processo de vetorizao consiste basicamente em converter cdigos compostos por
loops atravs de operaes de matrizes.
Para exemplificar esse processo, o Quadro 11 apresenta a forma no
vetorizada de se calcular a hiptese () = =0 , onde e so vetores.
Neste caso, o cdigo desenvolvido utilizando um lao de repetio para realizar o
clculo. O mesmo clculo implementado de maneira diferente no Quadro 12, e
representa a verso vetorizada, com apenas uma linha de cdigo.
Quadro 11 Exemplo de implementao no vetorizada.

>> hipotese = 0.0;


>>
>> for j = 1:n+1,
>>
hipotese += theta(j) * x(j);
>> end;
>>
Fonte: elaborado pelo autor

49

Quadro 12 Exemplo de implementao vetorizada

>> hipotese = theta' * x;


>>
Fonte: elaborado pelo autor

O apstrofo utilizado para obter a transposta de uma matriz. Essa


operao demonstrada de forma detalhada no Quadro 13, onde a matriz B recebe a
transposta da matriz A.
Quadro 13 Obtendo a transposta de uma matriz.

>> A = [1 2; 3 4; 5 6]
A =
1
2
3
4
5
6
>>
>> B = A'
B =
1
3
5
2
4
6
Fonte: elaborado pelo autor

Figura 16 Exemplo de multiplicao de matrizes.


Fonte: Ribeiro (2014)

Considerando a definio de multiplicao de matrizes (Figura 16),


possvel verificar que a verso vetorizada do clculo da hiptese () realiza o
somatrio da multiplicao de elemento por elemento, entre e , com uma
notao muito concisa. Para fazer isso, essa nica linha de cdigo utiliza rotinas de
lgebra linear numrica do Octave altamente otimizadas (NG, 2014).

50

DESENVOLVIMENTO

Neste captulo so apresentados a maneira como foi construdo o conjunto


de dados, os cdigos desenvolvidos para implementao da RNA e os resultados e
concluses obtidas. A aplicao desenvolvida faz uso do algoritmo backpropagation
para realizar o treinamento da rede e, posteriormente, utiliza os parmetros
ajustados para predizer, em uma seleo de imagens, quais so adequadas para uso
no perfil do LinkedIn.
Os algoritmos desenvolvidos em Octave, na sua verso 3.2.4, foram
executados em um computador Intel Core i5 M460 com processador de 2.53GHz e
4GB de memria RAM (Random Access Memory). O desenvolvimento foi
sequenciado da seguinte maneira:
1. Selecionar os vetores de entrada e alvo para o problema;
2. Normalizar as variveis de entrada;
3. Dividir os dados em conjunto de treinamento, validao e teste;
4. Selecionar a arquitetura da rede;
5. Treinar a rede;
6. Testar a rede;

3.1

Funcionamento do sistema
O prottipo foi desenvolvido sobre a ferramenta GNU Octave verso 3.2.4

e por esse motivo, todas suas funcionalidades so acessadas atravs de uma


interface de linha de comando. Um menu foi criado para auxiliar a execuo das
seguintes tarefas implementadas no software: criao do conjunto de dados,

51

treinamento da rede neural artificial, avaliao da preciso da rede na generalizao


de novos exemplos e classificao de fotos especficas.

Figura 17 Tela inicial do prottipo


Fonte: print screen do software no sistema operacional Windows 8

O processo de desenvolvimento do prottipo, a explanao do

seu

funcionamento e os cdigos utilizados so apresentados nos pargrafos seguintes.


No item 3.5 so abordados os testes e resultados obtidos com o prottipo
construdo.
3.1.1

Criao do conjunto de dados


Para criao do conjunto de dados a ser utilizado no projeto, foi realizada

uma seleo manual de fotos disponveis na internet. Depois de baixadas, as fotos


foram separadas em dois diretrios diferentes, levando em considerao os aspectos
condizentes com uma foto adequada para exibio no perfil do LinkedIn, listados no
item 1.3. As fotos consideradas boas foram movidas para a pasta nomeada por
Fotos vlidas, e as que representavam exemplos de fotos ruins, foram colocadas
na pasta Fotos invlidas.

52

Figura 18 Exemplos de fotos utilizadas em perfis do LinkedIn


Fonte: Elaborada pelo autor

Para iniciar a implementao da RNA, foram coletadas cerca de 2.500


imagens, e ao fim do projeto essa quantidade totalizou pouco mais de 10.000 fotos.
Na Figura 18 possvel observar alguns exemplos de fotos utilizadas no perfil do
LinkedIn. As fotos (a) e (b) no so apropriadas pelo fato de no ser possvel
visualizar o rosto dos usurios, ao contrrio do que pode ser observado nas fotos (b)
e (c).
Aps a concepo das duas pastas contendo centenas de exemplos de
fotos, o prximo passo foi transformar essas imagens em dados possveis de serem
trabalhados dentro do Octave. Para isso, criou-se uma funo chamada
createDataset.m que, de forma geral, gera um arquivo contendo uma matriz X e
um vetor y com os exemplos e alvos respectivos (0 - fotos invlidas; 1 - fotos
vlidas). Portanto, concluda essa etapa, o conjunto de dados para alimentar a rede
neural estar configurado.
O comando utilizado no Octave para realizar a leitura em pixels de
determinada imagem o imread (linha 8). No Quadro 14 possvel analisar parte
do cdigo da funo createDataset.m. Neste trecho de cdigo realizada a leitura
de todas as imagens contidas no diretrio Fotos vlidas atravs de um lao de

53

repetio.
Quadro 14 Parte da funo createDataset.m.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

cd 'Dados/Fotos vlidas';
X = ones(1,dimension);

images = dir ("*");


for i = 3:length (images)
try
photos = [photos; images(i).name];
img = imread(images(i).name);
img = adjustImage(img,width,height);
img = double(img);
X = [X; img];
catch
fprintf(images(i).name);
lasterror.message
fflush(stdout);
end_try_catch
end
X = X(2:size(X,1),:);
y = ones(size(X,1),1);
Fonte: elaborado pelo autor

A linha 9 faz a chamada da funo responsvel por fazer o prprocessamento da imagem. Feito esse processo, a imagem adicionada a matriz X
como um novo exemplo a ser utilizado. A linha 18 serve para retirar a primeira linha
da matriz X, que contm todos os valores igual a 1 e serviu apenas para inicializao
da varivel. A linha 19 cria um vetor com todos os elementos igual a 1, que
corresponde s sadas desejadas para cada exemplo vlido adicionado na matriz
X.
O Quadro 15 apresenta a funo adjustImage.m, onde a linha 5
corresponde converso para a escala de cinza9, a linha 2 ao redimensionamento
para dimenses padro e a linha 8 ao redesenho da matriz de pixel em uma nica
linha10. Feito isso, retornado o vetor com os valores dos atributos do exemplo
9

Na linha 4 verificado primeiramente se a imagem no est na escala de cinza,


para que assim possa ser feita a converso.
10
A funo reshape, como apresentada no Quadro 15, transforma a matriz em
um vetor. Se a matriz tem dimenses 25x25, ela ser transformada em um vetor
de tamanho 1x625.

54

atual.

Quadro 15 Funo adjustImage.m.


1 function img = adjustImage(image,width,height)
2
img = imresize(image,[width height]);
3
4
if (size (img, 3) == 3)
5
img = rgb2gray(img);
6
endif
7
8
img = reshape(img,[1 width*height]);
9 end
Fonte: elaborado pelo autor

Figura 19 direita, o efeito causado pela funo adjustImage.m.


Fonte: print screen do Octave no sistema operacional Windows 8

Para realizar o carregamento das fotos invlidas, o mesmo processo


repetido. Entretanto, desta vez adicionado ao vetor y uma quantidade n de
elementos com valor igual a zero. Essa quantidade n equivale ao nmero de fotos
invlidas existente na pasta Fotos invlidas e consequentemente adicionadas a
matriz X.
Depois que a matriz X recebe todos os exemplos das duas pastas de dados
e o vetor y configurado com o valor alvo de cada elemento xi , realizado o
procedimento de escalonamento dos atributos, utilizando Mean Normalization.
Normalizados os atributos, a matriz X e o vetor y so divididos entre os conjuntos

55

de treinamento, validao e teste (X, Xval, Xtest, y, yval, ytest), de acordo com a
proporo desejada.
As variveis definidas nessa funo so gravadas em um arquivo nomeado
por dataset.mat. Esse tipo de arquivo (.mat) armazena dados em binrio (no
legveis por humanos) e um formato interno do MATLAB (THE MATHWORKS
INC, 2014). Dessa forma, em qualquer momento pode ser utilizado o comando load
para carregar as variveis desse arquivo para o ambiente do Octave.

Figura 20 Apresentao de parte dos dados de entrada da rede.


Fonte: print screen do Octave no sistema operacional Windows 8

A Figura 20 ilustra o carregamento do arquivo dataset.mat e depois, para


facilitar a visualizao, apresenta apenas os cinco primeiros atributos dos cinco
primeiros exemplos do conjunto de treinamento, representado pela matriz X. Em
seguida so apresentados os valores alvo desses cinco exemplos que, conforme
observado, correspondem a fotos adequadas.
3.1.2

Arquitetura da RNA
Conforme descrito no item 2.4.3, a definio da arquitetura da rede MLP

uma das partes mais difceis no desenvolvimento de um sistema de aprendizado de


mquina utilizando essa tcnica. As camadas de entrada e de sada so facilmente
determinadas atravs da quantidade de atributos que compem cada elemento xi e
quantidade de classes existentes yi para o problema; todavia, projetar as camadas

56

ocultas da rede considerado uma arte (NIELSEN, 2014).

Figura 21 Arquitetura inicial da RNA do projeto.


Fonte: Elaborada pelo autor

De acordo com Ng (2014), utilizar apenas uma camada oculta um


padro razovel e mais comumente aplicado. Por conseguinte, a arquitetura da RNA
do projeto, definida inicialmente, foi projetada conforme ilustrada na Figura 2011. A
camada oculta foi composta por 25 neurnios, enquanto a camada de sada possuiu
apenas uma unidade (classificao binria).
O algoritmo de seleo de modelos, para tentar encontrar o tamanho ideal
de ns para a camada oculta, foi desenvolvido, porm, pela quantidade razovel de
dados coletados, no se obteve um desempenho relevante para seu uso no
treinamento. Por esse motivo, foi adotado o mtodo de tentativas com diferentes
arquiteturas, realizando o treinamento com a unio do conjunto de treinamento e de
validao criados, e fazendo os testes no conjunto de teste. Os resultados so
apresentados no item 3.2.4.
3.1.3

Treinamento da RNA
Definidos o conjunto de dados para treinamento e a arquitetura da rede,

possvel dar incio ao desenvolvimento do algoritmo de treinamento da RNA. O


11

Neste desenho, o vis foi desconsiderado, porm adicionado no treinamento.

57

treinamento baseou-se no algoritmo backpropagation, utilizado para resoluo de


problemas no lineares atravs de redes MLP.
Quadro 16 Inicializao do algoritmo de treinamento.
1

% Inicializao

clear ; close all; clc

3
4
5

fprintf('Carregando e visualizando os
dados...\n')
fflush(stdout);

load dataset.mat;

7
8

% Variaveis

input_layer_size = size(X,2);

% Camada de entrada

10 hidden_layer_size = 25;

% Camada intermediria

11 output_layer_size = 1;

% Camada de sada

12 image_height = image_width =
sqrt(input_layer_size);
13 lambda = 0.16;

% largura e altura da imagem


% parmetro de regularizao

14
15 X = [X; Xval];
16 y = [y; yval];
Fonte: elaborado pelo autor

Figura 22 Comando whos executado aps inicializao do algoritmo.


Fonte: print screen do Octave no sistema operacional Windows 8

58

A parte de inicializao do algoritmo apresentada no Quadro 16, onde as


variveis necessrias so declaradas e os dados so carregados no sistema. Como a
quantidade de dados coletados no suficiente para utilizao de algoritmos de
seleo de modelo, o conjunto de validao agregado ao conjunto de treinamento
(linhas 15 e 16) para melhorar a preciso dos resultados. Com o comando whos
possvel identificar, de forma detalhada, as informaes das variveis definidas no
escopo atual. A Figura 21 mostra todas as variveis que foram carregadas aps a
inicializao do algoritmo.
Depois de inicializadas as variveis essenciais para execuo do
treinamento da rede, a funo que realiza esse treinamento chamada. Nesta
funo, os parmetros da primeira e segunda camada da rede so declarados e
inicializados (Theta1 e Theta2). Como visto no item 2.3.3, esses parmetros so
inicializados com valores aleatrios na faixa entre e , e o Quadro 17
demonstra a funo utilizada para essa tarefa. Dessa forma, assegura-se que os
parmetros tenham baixos valores, aumentando a eficincia do aprendizado.
Quadro 17 Funo de inicializao dos parmetros da RNA
1

function W = randInitializeWeights(L_in, L_out)

epsilon_init = 0.12;

W = rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init;

4
5

end
Fonte: elaborado pelo autor

O backpropagation implementado na funo nnCostFunction.m, que


alm de calcular os gradientes dos parmetros Theta1 e Theta2, tambm calcula o
custo J em relao a esses parmetros. Essa funo (Quadro 18) recebe duas
matrizes correspondentes aos parmetros Theta1 e Theta2 rearranjadas12 em um
nico vetor. E por esse motivo, as linhas 2 e 4 executam o comando reshape para
que os parmetros possam voltar para sua forma original.
As linhas de 6 a 9 fazem a inicializao de algumas variveis teis e a
12

O rearranjo das matrizes de parmetros para um nico vetor, atravs do


comando reshape, realizado por causa da forma como os algoritmos de
otimizao avanados trabalham para minimizar a funo de custo.

59

linha 10 adiciona uma coluna com valor 1 a cada exemplo do conjunto de


treinamento, correspondente ao vis (bias input). O restante do algoritmo
apresentado no Quadro 19, com a implementao das fases forward e backward,
alm do clculo do custo J para cada exemplo x.
Quadro 18 Parte I da funo nnCostFunction.m.
1

Function [J grad] = nnCostFunction(nn_params,input_layer_size, ...


hidden_layer_size, ...
num_labels, X, y, lambda)

Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)),


hidden_layer_size, (input_layer_size + 1));

3
4

Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size +


1))):end), num_labels, (hidden_layer_size + 1));

5
6

m = size(X, 1);

J = 0;

Theta1_grad = zeros(size(Theta1));

Theta2_grad = zeros(size(Theta2));

10 X = [ones(m, 1) X];
11 % continuao no Quadro 19
Fonte: elaborado pelo autor

Com exceo do lao de repetio utilizado para iterar sobre o conjunto de


treinamento, todo o resto do cdigo desenvolvido de forma vetorizada. Para cada
exemplo x nos m exemplos, executa-se a etapa de propagao das entradas,
descritas entre as linhas 20 a 23.
Quadro 19 Implementao do Backpropagation
19 for i = 1:m
20
a1 = X(i,:);
21
z2 = a1 * Theta1';
22
a2 = [ones(1) sigmoid(z2)];
23
h = sigmoid(a2 * Theta2');
24
d3 = (h - y(i));
25
d2 = (Theta2' * d3')';
26
d2 = d2(:,2:end) .* sigmoidGradient(z2);
27
Theta1_grad = Theta1_grad + d2' * a1;
28
Theta2_grad = Theta2_grad + d3' * a2;
29
J = J + sum(-y(i) * log(h)'- (1-y(i)) * log(1-h)');
30 end
31 % continua no Quadro 20
Fonte: elaborado pelo autor

60

Na linha 22, observa-se que adicionado uma coluna de 1 na camada


oculta, que simboliza o vis dessa camada. Por conseguinte, a linha 23 calcula a
hiptese h do exemplo atual, que em seguida utilizada para calcular o erro em
relao sada desejada y.
Depois de executada a propagao, a linha 24 computa o erro na ltima
camada atravs de d3, e ento retropropagado o erro para a camada anterior d2
(linha 26). A linha 26, por sua vez, calcula o erro de cada n na camada oculta, com
exceo ao neurnio que representa o vis, j que esse no possui erro associado a
ele. E a funo sigmoidGradient.m utilizada para calcular o gradiente da funo
sigmoide.
Na linha 29 calculada parte da funo J que utilizada posteriormente
para encontrar parmetros Theta1 e Theta2 que minimizem essa funo de custo. A
frmula dentro do somatrio sum simboliza quo bem a rede est desempenhando
nesse determinado exemplo i. Calculando a funo de custo, algoritmos como o
declnio de gradiente ou ainda, algoritmos de otimizao, podem ser utilizados para
encontrar os valores ideais para os parmetros Theta1 e Theta2.
Quadro 20 Clculo da funo de custo e gradientes dos parmetros
Theta1 e Theta2 com regularizao.
32 J = sum(J)/m;
33
34 reg = (lambda/(2*m)) * ( sum(sum(Theta1(:,2:end).^2)) +
sum(sum(Theta2(:,2:end).^2)));
35 J = J + reg;
36
37 regTerm1 = (lambda/m) .* Theta1(:,2:end);
38 regTerm2 = (lambda/m) .* Theta2(:,2:end);
39
40 Theta1_grad = (Theta1_grad/m) + regTerm1;
41 Theta2_grad = (Theta2_grad/m) + regTerm2;
42
43 grad = [Theta1_grad(:) ; Theta2_grad(:)];
44
45 end
Fonte: elaborado pelo autor

O Quadro 20 apresenta o restante da funo J adicionando o termo de

61

regularizao (linha 35), conforme expresso na Equao 8 (item 2.4.4). O clculo


do gradiente dos parmetros Theta1 e Theta2, tambm regularizados, so escritos
nas linhas 40 e 41 desse mesmo quadro. Por fim, a ltima varivel que precisa ser
atribuda, como retorno da funo, a varivel grad, que retorna as matrizes
Theta1_grad e Theta2_grad rearranjadas em um nico vetor (linha 43).
Para clculo de atualizao dos parmetros da rede, ao invs de utilizar o
algoritmo de declnio de gradiente, conforme visto no captulo 2, foi determinada a
utilizao de um algoritmo de otimizao avanado. Esse tipo de algoritmo possui
rotinas otimizadas que aumentam a rapidez de convergncia e tambm so mais
apropriados quando o problema muito grande, contendo muitos atributos (NG,
2014). Alm disso, eliminam a necessidade de manualmente determinar um valor
para o parmetro , correspondente taxa de aprendizagem.
O Quadro 21 apresenta a chamada do algoritmo de otimizao avanado
fmincg, responsvel por retornar os valores atualizados dos parmetros Theta1 e
Theta2 e o custo final. Depois de atualizados, esses parmetros so utilizados para
predio das classes dos exemplos no conjunto de teste.
Quadro 21 Chamada da funo fmincg.m.
1
2
3
4
5
6
7

initial_Theta1 = randInitializeWeights(input_layer_size, hidden_layer_size);


initial_Theta2 = randInitializeWeights(hidden_layer_size, output_layer_size);
initial_nn_params = [initial_Theta1(:) ; initial_Theta2(:)];
options = optimset('MaxIter', 500);
costFunction = @(p) nnCostFunction(p, input_layer_size, hidden_layer_size,
output_layer_size, X, y, lambda);

8
9 [nn_params, cost] = fmincg(costFunction, initial_nn_params, options);
Fonte: elaborado pelo autor

Como se pode observar, a funo fmincg.m recebe como primeiro


parmetro, um ponteiro que aponta para a funo nnCostFunction.m (Quadro 18,
Quadro 19 e Quadro 20). Os outros dois parmetros so os valores iniciais dos
parmetros Theta1 e Theta2, rearranjados no vetor initial_nn_params (linha 4), e a
quantidade mxima de iteraes (pocas) a serem executadas, definidas pelo

62

parmetro options (linha 6).


Assim que obtido o vetor nn_params, depois da execuo do algoritmo
fmincg, esse pode ser utilizado para testar a qualidade do treinamento da rede no
conjunto reservado para teste. Dessa forma, conclui-se a etapa de treinamento da
rede e o algoritmo para teste da rede apresentado a seguir.
3.1.4

Avaliao do treinamento
Neste momento, o vetor nn_params contendo os valores de Theta1 e

Theta2, que minimizam a funo de custo J, j est disponvel. O prximo passo


volt-los para sua forma original (linhas 1 e 2) e utiliz-los para verificar a
qualidade de treinamento da rede. Para isso, foi desenvolvido o cdigo apresentado
no Quadro 22.
Quadro 22 Exibindo os resultados de desempenho do treinamento
1
2
3
4
5
6
7
8
9
10

Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)),


hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size +
1))):end), output_layer_size, (hidden_layer_size + 1));
Xtest = sortByCol(Xtest,ytest);
ytest = sort(ytest,'descend');
qtdeFotosBoas = sum(ytest == 1);
[pred pVal] = predict(Theta1, Theta2, Xtest);
pred_wrong = find(pred != ytest);
acc = mean(double(pred == ytest)) * 100;
Fonte: elaborado pelo autor

As linhas 4 e 5, por convenincia, realizam a ordenao dos elementos do


conjunto de teste de acordo com a sua respectiva classe y e de forma decrescente. A
linha 8 utiliza os parmetros Theta1 e Theta2 treinados pela rede, para adivinhar a
quais classes pertence cada um dos exemplos em Xtest (conjunto de exemplos
reservado para teste). A linha 10 calcula a porcentagem de acerto da rede na
generalizao de novos exemplos, que pode ser compreendido como o ndice de
preciso da RNA.
A funo predict.m (Quadro 23) retorna dois vetores p e h2 contendo,

63

respectivamente, a classe adivinhada e o valor exato calculado pela hiptese


h (x) para cada exemplo i do conjunto de teste. O processo para calcular essa
hiptese equivalente a etapa de alimentao da rede, vista na fase de treinamento,
onde os sinais de entrada (atributos de cada exemplo) so propagados, realizando a
ativao das unidades nas camadas posteriores, at se obter a o valor de sada
calculado por h (x) (linhas 6 e 7). Se esse valor de sada for maior que 0,50, o
exemplo classificado como vlido, caso contrrio, classificado como
invlido (linha 8).
Quadro 23 Funo predict.m.
1
2
3
4
5
6
7
8

function [p h2] = predict(Theta1, Theta2, X)


m = size(X, 1);
p = zeros(size(X, 1), 1);
h1 = sigmoid([ones(m, 1) X] * Theta1');
h2 = sigmoid([ones(m, 1) h1] * Theta2');
p = h2 > 0.50;
Fonte: elaborado pelo autor

Concluda a predio de todos os exemplos em Xtest, os resultados de


desempenho so gravados em um arquivo de texto nomeado por results.txt. Nele so
registradas informaes referentes arquitetura utilizada, quantidade de atributos,
valor escolhido para o parmetro de regularizao , preciso, quantidade de
predies erradas, quantidade de fotos vlidas classificadas incorretamente,
quantidade de fotos invlidas classificadas incorretamente, etc.
3.1.5

Curva de aprendizado
Para avaliar a necessidade de adquirir mais exemplos para treinamento

com o propsito de melhorar os resultados obtidos durante determinado teste, foi


desenvolvido um algoritmo para gerao da curva de aprendizado. Esse algoritmo
descrito no Quadro 23.
Neste quadro, as linhas de 1 a 4 representam a declarao das variveis a
serem utilizadas. O procedimento, conforme pode ser observado (linhas 6 a 13),

64

consiste em, a cada iterao, realizar o treinamento com um nmero j de exemplos


(aumentando-o gradativamente); e utilizar os parmetros aprendidos para calcular o
custo da rede em relao ao conjunto utilizado para treinamento e em relao a um
conjunto teste (ainda no conhecido pela rede).
Depois de finalizada a iterao estabelecida pela linha 6, obtm-se as
variveis error_train e error_val contendo os erros calculados para cada intervalo
com 100 exemplos adicionados ao conjunto de treinamento. Com esses dados,
possvel, atravs da linha 15, exibir o grfico que possibilita visualizar se o aumento
de exemplos no conjunto de treinamento influenciar positivamente no resultado
obtido.
Quadro 24 Cdigo de Gerao da curva de aprendizado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

m = size(X, 1);
loop = m/100;
error_train = zeros(loop, 1);
error_val = zeros(loop, 1);
for i = 1:loop
j=i*100;
theta = runTraining(X(1:j,:),y(1:j),lambda,i_size,h_size,o_size);
error_train(i) = nnCostFunction(theta,i_size,h_size,o_size,X(1:j,:),y(1:j),0);
error_val(i) = nnCostFunction(theta,i_size,h_size,o_size,Xval,yval,0);
end
plot(1:loop, error_train, 1:loop, error_val);
title('Curva de aprendizado')
legend('Train', 'Cross Validation')
xlabel('Nmero de exemplos (intervalo corresponde a 100 exemplos)')
ylabel('Erro')
Fonte: elaborado pelo autor

3.2

Testes e Resultados
Durante todo o projeto, uma srie de alteraes e tentativas foi realizada,

tanto nos cdigos quanto nos dados, a fim de melhorar a sua preciso. Essas

65

tentativas envolveram a alterao da arquitetura da rede, alterao da quantidade de


atributos utilizados (dimenses das imagens), utilizao de diferentes valores para o
parmetro de regularizao e a aquisio de mais exemplos para o conjunto de
treinamento. Toda vez que um treinamento era realizado com alguma modificao
nos parmetros do algoritmo, a qualidade do aprendizado adquirido com essas
novas configuraes era mensurada e registrada em um arquivo .txt para anlise.
O que foi possvel constatar com os testes realizados, em relao ao
nmero de unidades na camada de entrada, foi que os melhores valores variavam
entre 576 e 1024, ou seja, quando as imagens foram redimensionadas para tamanhos
entre 24x24 e 32x32, obtiveram-se resultados mais positivos. Acredita-se que com
imagens menores, as informaes perdidas foram relevantes para uma menor
qualidade do aprendizado, e imagens maiores que 32x32 dificultava o trabalho da
RNA em encontrar os melhores parmetros para generalizao de novos exemplos.
O nmero de unidades na camada intermediria tambm foi definido
atravs de testes com diferentes valores. Conforme visto no captulo 2, no existe
nenhuma resposta geral para a escolha da quantidade de ns nessa camada e isso
depende do contexto e complexidade do problema. Por isso foram realizados testes
com valores entre 15 e 120, e dessa forma se pde concluir que as arquiteturas que
resultaram nas melhores qualidades de aprendizado, na sua maioria, continham
apenas 25 unidades na camada intermediria. De alguma forma, essa quantidade
pareceu ideal para mapear a relao entre os padres de entrada e a classe de sada.
Em relao ao parmetro de regularizao , quando configurado com
valor maior que 1.24, esse fator comprometia o desempenho da rede. Portanto,
evidenciou-se que valores mais prximos a zero proporcionavam um maior
equilbrio entre a rigidez e a varincia da rede.
Um dos fatores que constantemente contribuiu para uma melhora na
preciso medida atravs da classificao novos exemplos foi o aumento da
quantidade de dados utilizados para treinamento. Como exemplo, possvel
comparar um teste realizado no incio de setembro, em que a rede foi treinada com
5.431 exemplos, com outro teste parecido, executado no fim de novembro, onde

66

foram utilizados 8.699 dados para treinamento. Com o aumento do nmero de


exemplos de treinamento, a preciso de generalizao aumentou em quase 5%.

Figura 23 Exemplo de curva de aprendizado gerado no Octave


Fonte: print screen do software no sistema operacional Windows 8

A Figura 23 demonstra uma curva de aprendizado, gerada durante um dos


testes realizados, que possibilitou identificar um problema de alta varincia
(overfitting) em relao ao modelo criado. Analisando esse grfico, percebe-se que
o aumento do nmero de exemplos utilizados no treinamento reduziu o erro
calculado pela funo de custo no conjunto de validao13, e isso estimulou a
aquisio de mais dados para treinamento. Contudo, depois de 8.000 imagens
coletadas, o impacto na qualidade do aprendizado deixou de ser relevante.
Os melhores resultados obtidos durante os testes realizados so
apresentados na Tabela 3. Nessa tabela, possvel analisar que, mesmo modificando
algumas configuraes, tanto nos dados quanto na implementao da RNA, no foi
possvel obter nenhum modelo com preciso maior que 90%.

13

Nesse caso foi utilizado o conjunto de teste como conjunto de validao.

67

Tabela 3 Dez melhores resultados obtidos.


Qtde. de
dados
treinados

Qtde. de
dados
avaliados

N de
unidades
na camada 1

N de
unidades
na camada 2

Iteraes

Custo
final

Preciso

Data do
treinamento

7652

618

1024

25

0,16

100

0,14145

88,35

25/09/2014

7652

618

625

25

0,01

100

0,13341

87,38

24/09/2014

7410

823

676

25

0,16

100

0,1481

87,36

19/10/2014

7751

627

484

25

100

0,22904

87,24

19/09/2014

7751

627

625

40

0.64

100

0,23657

87,08

18/09/2014

7652

618

625

25

0,01

100

0,30163

86,73

23/09/2014

7652

618

1024

35

1.24

100

0,14985

86,57

26/09/2014

7652

618

625

25

0,24

100

0,18198

86,41

24/09/2014

7410

823

676

25

0,16

100

0,19163

86,27

19/10/2014

7652

618

1024

25

0.08

100

0,13307

85,92

25/09/2014

Fonte: elaborado pelo autor

3.3

Concluso
O resultado que representou a melhor generalizao nos exemplos do

conjunto de teste, contendo 618 imagens, foi realizado em 25 de Setembro e


alcanou 88,35% de preciso. Observando os exemplos que no foram avaliados
corretamente e as hipteses calculadas para eles, foi possvel identificar que o
modelo falhava, de maneira considervel, na classificao de algumas fotos. Foi
visto, por exemplo, que algumas fotos que atendem perfeitamente os critrios de
uma boa foto para o perfil do LinkedIn, foram definidas como ruins (valores de
() bem prximo a zero).
Com a finalidade de melhorar esse resultado, foram realizadas tentativas
com diferentes arquiteturas e configuraes, alm de tambm tentar variar a
quantidade de pocas, porm nada elevou consideravelmente a preciso da rede
neural. A medida que demonstrou melhor impacto nos resultados foi o aumento de
dados no conjunto de treinamento, e por esse motivo o conjunto de validao criado
foi anexado ao conjunto de treinamento.
Um dos aspectos que provavelmente impossibilitaram a RNA de obter
resultados melhores foi a rigorosidade na coleta dos dados. Algumas imagens,

68

apesar de corresponderem a fotos de rosto e bem posicionadas, foram atribudas


pasta de fotos invlidas por conterem elementos inadequados como culos escuros,
mscaras, pinturas no rosto, celulares (fotos do tipo selfie), entre outros. Esses
pequenos detalhes, que foram determinantes para que essas fotos fossem definidas
como invlidas, podem ter confundido a rede no seu processo de generalizao.
Considerando o pargrafo anterior, a rede desenvolvida assim como o prprocessamento dos dados realizado, devido complexidade dos dados, foram
insuficientes para alcanar uma soluo tima para o problema. Por esse motivo, no
prximo captulo so elencados possveis trabalhos futuros que pretendem
modificar o modelo criado a fim de aumentar a preciso na tarefa de classificao
desempenhada pelo prottipo desenvolvido.

69

CONSIDERAES FINAIS

Neste trabalho, foram abordados os fundamentos do funcionamento de


redes neurais artificiais e apresentado um prottipo de software utilizando uma rede
MLP com uma nica camada oculta, treinada para classificar se determinada foto
apropriada para utilizao no perfil da rede social profissional LinkedIn. O
algoritmo de treinamento utilizado foi o backpropagation.
O prottipo foi desenvolvido sobre o GNU Octave verso 3.2.4, que se
mostrou uma tima ferramenta para implementao de redes neurais artificiais. Um
algoritmo inicial pode ser rapidamente desenvolvido e o conceito de vetorizao
inserido no ambiente do programa possibilita cdigos simples e rpidos.
A grande dificuldade encontrada durante o projeto foi a definio da
arquitetura de rede a ser trabalhada e a criao do conjunto de dados utilizado. A
atividade de seleo manual dos dados e a separao deles entre as duas diferentes
classes existentes demandou bastante tempo.
Para avaliar a preciso do prottipo desenvolvido foram realizados
diferentes testes e experimentos em um conjunto contendo fotos boas e ruins,
conforme as caractersticas levantadas durante o trabalho. Os padres foram obtidos
atravs dos algoritmos estabelecidos no item 3.2.3.
Segundo os dados apresentados no item 3.3, foi possvel verificar que a
RNA desenvolvida, apesar da grande complexidade dos dados, foi capaz de
generalizar novos exemplos. Entretanto atingiu um ndice de preciso equivalente a
88%, o que evidencia uma possvel falha nos dados e/ou na RNA desenvolvida.
Em virtude do que foi mencionado anteriormente, o presente trabalho
oferece oportunidades de trabalhos futuros com o objetivo de aumentar a qualidade

70

do treinamento e consequentemente melhorar a preciso na etapa de generalizao.


Logo, destacam-se os seguintes pontos de grande interesse:
Avaliar novos procedimentos para o pr-processamento dos dados,
extraindo as informaes mais relevantes para o aprendizado e
diminuindo a complexidade nas variveis de entrada da RNA;
Aumentar relativamente o conjunto de dados a fim de possibilitar o
uso de algoritmos de seleo de modelo, e assim determinar de
forma eficiente quais as melhores configuraes para a rede.
Classificar a foto em diferentes cenrios e utilizar classificao de
mltiplas classes ao invs de classificao binria no projeto da
rede MLP.
Estudar o comportamento de outros tipos de redes neurais, como
por exemplo, redes neurais convolucionais e verificar sua
aplicabilidade para problemas similares ao levantado neste
trabalho.

Utilizar outras tcnicas de aprendizado supervisionado, como por


exemplo, mquinas de vetores de suporte.

De maneira geral, pode-se concluir que o objetivo estabelecido neste


trabalho, de desenvolver um prottipo de software que fosse capaz de aprender a
classificar imagens a partir dos dados coletados, de acordo com as caractersticas
correspondentes a qualidade da foto requerida para uso no perfil do LinkedIn, foi
atingido.

REFERNCIAS BIBLIOGRFICAS

ABERDEEN GROUP (Org.). What Is Your Most Effective Source of Hire? 2013.
Disponvel em: <http://web.jobvite.com/rs/jobvite/images/Aberdeen Sourcing Report.pdf>. Acesso em: 27 ago. 2014
ALPAYDIN, Ethem. Introduction to Machine Learning. [s.l]: The Mit Press,
2010. 584 p.
BISHOP, Christopher M.. Pattern Recognition and Machine Learning. New
York: Springer, 2006.
BRAGA, Antnio de Pdua; CARVALHO, Andr Carlos Ponce de Leon Ferreira
de; LUDERMIR, Teresa Bernarda. Redes neurais artificiais: teoria e aplicaes. 2.
ed. Rio de Janeiro: Livros Tcnicos e Cientficos, 2011. xii, 226 p.
BULLHORN (Org.). AN INSIDE LOOK AT SOCIAL RECRUITING IN THE
USA: THE BULLHORN REACH RANKINGS REPORT. 2012. Disponvel em:
<http://reach.bullhornreach.com/reach/cmsites/default/files/BullhornReachRankings
Report Final_0.pdf>. Acesso em: 27 ago. 2014.
CALDEIRA, Andr. Seu perfil no LinkedIn: qual a 1a impresso? 2014. Disponvel
em:
<http://exame.abril.com.br/rede-de-blogs/muito-trabalho-poucostress/2014/02/02/seu-perfil-no-linkedin-qual-a-1a-impressao/>. Acesso em: 27 ago.
2014.
CONCEIO, Daniel Tr da. Redes Neurais Artificiais Aplicadas ao Jogo da
Velha 3D em Pinos. 2009. 84 f. TCC (Graduao) - Curso de Tecnlogo da Informao e da Comunicao, Instituto Superior de Tecnologia em Cincia da Informao
de
Petrpolis,
Petrpolis,
2009.
Disponvel
em:
<http://www.lncc.br/~borges/doc/Redes Neurais Artificiais Aplicadas ao Jogo da
Velha 3D em Pinos.TCC.pdf>. Acesso em: 20 set. 2014.
DOYLE, Alison. How to Take and Choose a Good Profile Photo for Linkedin.
2014. Disponvel em: <http://jobsearch.about.com/od/tips/qt/linked-profilephoto.htm>. Acesso em: 27 ago. 2014.
EATON, John W.. About GNU Octave. 2013. Disponvel
<https://www.gnu.org/software/octave/about.html>. Acesso em: 20 out. 2014.

em:

EATON,
John
W..
GNU
Octave.
2013.
Disponvel
<https://www.gnu.org/software/octave/>. Acesso em: 20 out. 2014.

em:

HEMPEL, Jessi. How LinkedIn will fire up your career. 2010. Disponvel em:
<http://money.cnn.com/2010/03/24/technology/linkedin_social_networking.fortune/
>. Acesso em: 27 ago. 2014.
JOBVITE (Org.). Social Recruiting Survey Results 2013. 2013. Disponvel em:
<http://web.jobvite.com/rs/jobvite/images/Jobvite_2013_SocialRecruitingSurveyRe
sults.pdf>. Acesso em: 27 ago. 2014.
KLINE, Scott R.. A Professional Photographers Guide to Getting the Right
LinkedIn
Profile
Photo.
2014.
Disponvel
em:
<http://blog.linkedin.com/2014/07/14/a-professional-photographers-guide-togetting-the-right-linkedin-profile-photo/>. Acesso em: 05 dez. 2014.
LAKATOS, Eva Maria; MARCONI, Marina de Andrade. Tcnicas de pesquisa:
planejamento e execuo de pesquisas, amostragens e tcnicas de pesquisa, elaborao, anlise e interpretao de dados . 7. ed. So Paulo: Atlas, 2008. 277 p. ISBN
9788522451524.
LINKEDIN (Brasil) (Org.). LinkedIn - Tendncias globais em recrutamento para 2013: As cinco principais tendncias em atrao de talentos que voc precisa
saber.
2013.
Disponvel
em:
<http://pt.slideshare.net/linkedin-talentsolutions/global-recruiting-trends-2013-brazil-portuguese>. Acesso em: 27 ago.
2014.
LUGER, George F.. Artificial Intelligence: Structures and Strategies for Complex
Problem Solving. Massachusetts: Pearson Education, 2009. 754 p.
IDOETA, Paula Adamo. Redes sociais mudam a dinmica da busca por empregos.
2013.
Disponvel
em:
<http://www.bbc.co.uk/portuguese/noticias/2013/08/130808_redes_sociais_empreg
os_pai.shtml>. Acesso em: 27 ago. 2014
MAHONEY, Carol; LERMUSI, Yves. How to Measure and Improve Quality of
Hire: Results from a roundtable with Silicon Valley companies. 2010. Disponvel
em: <http://web.checkster.com/wp-content/uploads/2012/09/Checkster-Quality-ofHire-Roundtable.pdf>. Acesso em: 04 dez. 2014.
MARSLAND, Stephen. Machine Learning: An Algorithmic Perspective. [s.l]:
Chapman & Hall/CRC, 2009.
MITCHELL, Tom. Machine Learning. [s.l]: McGraw-Hill, 1997. 414 p.
NASH, Adam. A Photo is Worth a Thousand Words. 2007. Disponvel em:
<http://blog.linkedin.com/2007/09/27/a-pictures-wort/>. Acesso em: 27 ago. 2014.
NG, Andrew. Advice for applying machine learning: Learning curves. Disponvel
em: <https://class.coursera.org/ml-005/lecture/39>. Acesso em: 30 out. 2014.

NG, Andrew. Introduction: What is Machine Learning. Disponvel em:


<https://class.coursera.org/ml-005/lecture/2>. Acesso em: 09 set. 2014.
NG, Andrew. Linear Regression with one variable: Gradient descent. Disponvel
em: <https://class.coursera.org/ml-005/lecture/11>. Acesso em: 06 out. 2014
NG, Andrew. Linear Regression with multiple variables: Gradient descent in
practice I: Feature Scaling. Disponvel em: <https://class.coursera.org/ml005/lecture/21>. Acesso em: 28 out. 2014.
NG, Andrew. Logistic Regression: Cost function. Disponvel
<https://class.coursera.org/ml-005/lecture/58>. Acesso em: 07 out. 2014.

em:

NG, Andrew. Logistic Regression: Hypothesis Representation. Disponvel em:


<https://class.coursera.org/ml-005/lecture/34>. Acesso em: 25 set. 2014.
NG, Andrew. Neural Networks: Learning: Backpropagation Algorithm. Disponvel em: <https://class.coursera.org/ml-005/lecture/51>. Acesso em: 27 out. 2014.
NG, Andrew. Neural Networks: Learning: Implementation note: Unrolling parameters. Disponvel em: <https://class.coursera.org/ml-005/lecture/53>. Acesso
em: 30 out. 2014.
NG, Andrew. Neural Networks: Learning: Random initialization. Disponvel em:
<https://class.coursera.org/ml-005/lecture/55>. Acesso em: 22 out. 2014.
NG, Andrew. Neural Networks: Representation: Examples and Intuitions I. Disponvel em: <https://class.coursera.org/ml-005/lecture/47>. Acesso em: 17 set.
2014.
NG, Andrew. Neural Networks: Representation: Model Representation I. Disponvel em: <https://class.coursera.org/ml-005/lecture/58>. Acesso em: 20 out. 2014.
NG, Andrew. Neural Networks: Representation: Non-linear Hypotheses. Disponvel em: <https://class.coursera.org/ml-005/lecture/43>. Acesso em: 10 set. 2014.
NG, Andrew. Octave Tutorial: Basic operations. Disponvel
<https://class.coursera.org/ml-005/lecture/26>. Acesso em: 30 out. 2014.

em:

NG,
Andrew.
Octave
Tutorial:
Vectorization.
Disponvel
<https://class.coursera.org/ml-005/lecture/30>. Acesso em: 30 out. 2014.

em:

NG, Andrew. Regularization: The problem of overfitting. Disponvel em:


<https://class.coursera.org/ml-005/lecture/39>. Acesso em: 29 out. 2014.
NIELSEN, Michael A.. Neural Networks and Deep Learning. 2014. Disponvel
em: <http://neuralnetworksanddeeplearning.com/chap1.html>. Acesso em: 06 nov.
2014.

PARENZA, Greice Kelly et al. Analisando o Papel das Redes Socias no Processo
de Recrutamento e Seleo: Um Estudo Multicaso em Empresas do Setor Metal
Mecnico.
2013.
Disponvel
em:
<http://semead6.tempsite.ws/16semead/resultado/trabalhosPDF/1038.pdf>. Acesso
em: 10 ago. 2014
RIBEIRO,
Thyago.
Multiplicao
de
Matrizes.
Disponvel
em:
<http://www.infoescola.com/matematica/operacoes-com-matrizes-multiplicacao/>.
Acesso em: 29 out. 2014
RUSSELL, Stuart; NORVIG, Peter. Artificial Intelligence: A Modern Approach. 3.
ed. New Jersey: Pearson Education, 2010. 1132 p.
RUSSELL, Stuart; NORVIG, Peter. Inteligncia artificial: traduo da segunda
edio. Campinas: Campus, 2004. 1021 p.
SEETHA, M. et al. ARTIFICIAL NEURAL NETWORKS AND OTHER METHODS OF IMAGE CLASSIFICATION. Journal Of Theoretical And Applied
Information Technology. [S.l], p. 1039-1053. nov 2008. Disponvel em:
<http://www.jatit.org/volumes/research-papers/Vol4No11/5Vol4No11.pdf>. Acesso
em: 19 ago. 2014
SKEELS, Meredith M.; GRUDIN, Jonathan. When Social Networks Cross
Boundaries: A Case Study of Workplace Use of Facebook and LinkedIn. 2009.
Disponvel
em:
<http://research.microsoft.com/enus/um/people/jgrudin/publications/newwave/socialnetworking2009.pdf>.
Acesso
em: 27 ago. 2014.
THAI, Le Hoang; HAI, Tran Son; THUY, Nguyen Thanh. Image Classification
using Support Vector Machine and Artificial Neural Network. International
Journal Of Information Technology And Computer Science. [S.l], p. 32-38.
maio 2012. Disponvel em: <http://www.mecs-press.org/ijitcs/ijitcs-v4-n5/IJITCSV4-N5-5.pdf>. Acesso em: 19 ago.
THE LADDERS. Keeping an eye on recruiter behavior: NEW STUDY CLARIFIES
RECRUITER
DECISION-MAKING.
2012.
Disponvel
em:
<http://cdn.theladders.net/static/images/basicSite/pdfs/TheLadders-EyeTrackingStudyC2.pdf>. Acesso em: 04 dez. 2014.
THE MATHWORKS INC (Ed.). MAT-File Format. Natick, Massachusetts (USA):
The
Mathworks,
Inc,
2014.
38
p.
Disponvel
em:
<http://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf>. Acesso em:
27 out. 2014.