sábado, 22 de maio de 2010

Ubuntu 10.04 - Lucid Lynx

Instalei o Linux essa semana e pretendo adotá-lo como principal sistema operacional. Para isso restaurei meu pc com as configurações originais (Windows Vista limpo e seco), deixei uma partição de recover, uma com Windows, uma com Linux, uma para swap e uma de dados. E o Linux escolhido foi o Ubuntu (que já havia usado a algum tempo) em sua última versão: 10.04.



Desde que instalei não precisei recorrer ao Windows pra nada até agora. Tudo, tudo mesmo, consegui pelo Linux.  As primeiras modificações e instalações que fiz foram:

- Ativar o wireless da Broadcom que vem desativado.
- Mudar a barra de {minimizar maximizar fechar} da esquerda para a direita da janela.
- Instalar o emesene.
- Instalar o google chrome + extensões de gmail, proxy, twitter.
- Instalar codecs e player de áudio e vídeo (mplayer).
- Gnome-DO (aquela docky ali em baixo que aparenta o MAC).
- IDE de desenvolvimento C++ (Ainda estou testando o melhor entre eclipse, netbeans, codeblocks...).
- LaTeX + texmaker.
- Wine (roda pequenos aplicativos .exe para windows).

O wine me ajudou para pequenos programas portáteis que eu usava/uso. Por exemplo, um pequeno desbloqueador de PDFs protegidos.

Por enquanto é isso.. Um site que me ajudou muito:
http://ubuntued.info/

[]s

quarta-feira, 19 de maio de 2010

Hotlinks?


Da série "uma imagem vale mais que mil palavras".. Ainda mais se tiver mais que mil palavras na imagem =)

quinta-feira, 13 de maio de 2010

Dicas - Tempo exato no Youtube

Você sabia que dá pra colocar um link do Youtube no tempo exato que você quer que alguém veja? Pois eu achei que todo mundo soubesse disso. Para os que não sabem, fica a dica.

Supondo que o queira lhe mostrar o seguinte vídeo:

É um vídeo de um K.O (Knout Out) de um capoerista em uma luta oficial de M.M.A (Mixed Martial Arts). Porém, o vídeo 4:54 minutos e a luta mesmo só dura 20 segundos. Como eu já sei que a luta começa aos 2:22 eu faço isso:


Só isso. Bem auto-explicativo...

[]s

segunda-feira, 10 de maio de 2010

Redes Neurais Artificiais [#3]

RNA - Treinamento

A fase treino é, pra mim, a fase mais interessante. É só imaginar um treinamento de cão. Depois de treinado, ao ouvir a palavra "senta" o bixinho vai invariavelmente sentar. Qual a graça? A graça é, aos poucos, fazê-lo entender que ao ouvir "senta" ele deva colocar a bundinha no chão e ficar ali paradinho. De maneira semelhante acontece com a rede neural: depois de ensiná-la, executar é basicamente colher os resultados.

Antes de começar, vou mostrar como seria um modelo da porta-lógica E (AND):

                      [-1]
                        |
                        |1,5
                1       |
         [x1]-------> |¯¯¯|
                      |   |------> Y
         [x2]-------> |___|
                1

    Y=1, se u >= 0
    Y=0, se u < 0

            [x1] [x2] [u = w1x1 + w2x2 - limiar] [Y]
             0    0    1*0 + 1*0 - 1,5 = -1,5     0
             0    1    1*0 + 1*1 - 1,5 = -0,5     0
             1    0    1*1 + 1*0 - 1,5 = -0,5     0
             1    1    1*1 + 1*1 - 1,5 = 0,5      1


Alguma dúvida? A única diferença entre a porta lógica OU (OR) é o peso da entrada do limiar, que antes era 0,5 e agora é 1,5.

Voltando para a fase de treinamento. É aqui onde é ensinado o que é o certo para que a rede neural aprenda por si só. Esta fase consiste na modificação dos pesos e do limiar do neurônio M-P até que ele resolva o problema de interesse ou que o período de aprendizagem tenha finalizado. Esse processo de modificação dos parâmetros é guiado pelo erro entre a saída desejada e a saída gerada pela rede e pelo valores de entrada de x.

Uma regra de aprendizagem tem a seguinte forma:

onde:
- w(t) é a memória (conhecimento atual) do sistema;
- e(t) é a diferença (erro) entre a saída desejada [d(t)] e a saída obtida [y(t)];
- x(t) é o vetor de entradas.
- h é chamado de fator de aprendizagem a fim de tornar o processo de ajuste do vetor w mais estável.

O diagrama de blocos de um neurônio em fase de treinamento é o seguinte:



 
Vamos executar a fórmula da aprendizagem para a porta-lógica OU (OR) adotando h = 1 e seguindo os seguintes passos:

Primeiro temos que ter o gabarito para ensinarmos o que é o certo para o neurônio. Para o caso da porta lógica nós temos as entradas possíveis e as saídas desejadas possíveis:

[x1][x2][d]
|0 ||0 ||0|
|0 ||1 ||1|
|1 ||0 ||1|
|1 ||1 ||1|

Agora iniciaremos os pesos e o limiar do neurônio com valor zero para que, sozinho, eles se ajustem até resolver nosso problema.
                      [-1]
                        |
                        |
q
                w1      |
         [x1]-------> |¯¯¯|
                      |   |------> Y
         [x2]-------> |___|
                w2


Para t = 0: Iniciar com zeros os pesos e o limiar: w1(0)=w2(0)=
q(0)=0
Logo,
      |
q(0)| |0|                     |  -1 |
w(0)= |w1(0)|=|0|                x(t)=|x1(t)|
      |w2(0)| |0|                     |x2(t)|

Para t = 1: Calcular a saída para w(1)=[0 0 0] e x(1)=[-1 0 0]:
u(1) = (0)(-1) + (0)(0) + (0)(0) = 0;
y(1) = 0, (pois u <= 0)
e(1) = d - y = 0 - 0 = 0;
                          |0|           |-1| |0|
w(2) = w(1) +
he(1)x(1) = |0| + (0,5)(0)|0 | = |0| = w(1)
                          |0|           |0 |   |0|

Para t = 2: Calcular a saída para w(2)=[0 0 0] e x(2)=[-1 0 1]:
u(2) = (0)(-1) + (0)(0) + (0)(1) = 0;
y(2) = 0, (pois u <= 0)
e(2) = d - y = 1 - 0 = 1;

                          |0|           |-1|   |-0,5|
w(3) = w(2) +
he(2)x(2) = |0| + (0,5)(1)|0 | = | 0 |
                          |0|           |1 |   | 0,5|

Para t = 3: Calcular a saída para w(3)=[-0,5 0 0,5] e x(3)=[-1 1 0]:
u(3) = (-0,5)(-1) + (0)(1) + (0,5)(0) = 0,5;
y(3) = 1, (pois u > 0)
e(3) = d - y = 1 - 1 = 0;

w(4) = w(3)

Para t = 4: Calcular a saída para w(4)=[-0,5 0 0,5] e x(4)=[-1 1 1]:
u(4) = (-0,5)(-1) + (0)(1) + (0,5)(1) = 1;
y(4) = 1, (pois u > 0)
e(4) = d - y = 1 - 1 = 0;

w(5) = w(4) = w(3)

Para t = 5: Calcular a saída para w(5)=[-0,5 0 0,5] e x(5)=[-1 0 0]:
u(5) = (-0,5)(-1) + (0)(0) + (0,5)(0) = 0,5;
y(5) = 1, (pois u > 0)
e(5) = d - y = 0 - 1 = -1;

                          |-0,5|            |-1|   | 0 |
w(6) = w(5) +
he(5)x(5) = | 0  | + (0,5)(-1)|0 | = | 0 |
                          | 0,5|            |1 |   |0,5|

Para t = 6: Calcular a saída para w(6)=[0 0 0,5] e x(6)=[-1 0 1]:
u(6) = (0)(-1) + (0)(0) + (0,5)(1) = 0,5;
y(6) = 1, (pois u > 0)
e(6) = d - y = 1 - 1 = 0;

w(7) = w(6)

Para t = 7: Calcular a saída para w(7)=[0 0 0,5] e x(7)=[-1 1 0]:
u(7) = (0)(-1) + (0)(1) + (0,5)(0) = 0;
y(7) = 0, (pois u <= 0)
e(7) = d - y = 1 - 0 = 1;

                          | 0 |           |-1|   |-0,5|
w(8) = w(7) +
he(7)x(7) = | 0 | + (0,5)(1)|1 | = | 0,5|
                          |0,5|           |0 |   | 0,5|

Para t = 8: Calcular a saída para w(8)=[-0,5 0,5 0,5] e x(8)=[-1 1 1]:
u(8) = (-0,5)(-1) + (0,5)(1) + (0,5)(1) = 0,5;
y(8) = 1, (pois u > 0)
e(8) = d - y = 1 - 1 = 0;

w(9) = w(8)

Para t = 9: Calcular a saída para w(9)=[-0,5 0,5 0,5] e x(9)=[-1 0 0]:
u(9) = (-0,5)(-1) + (0,5)(1) + (0,5)(0) = 0,5;
y(9) = 1, (pois u > 0)
e(9) = d - y = 0 - 1 = -1;

                           |-0,5|            |-1|   | 0 |
w(10) = w(9) +
he(9)x(9) = | 0,5| + (0,5)(-1)|0 | = |0,5|
                           | 0,5|            |0 |   |0,5|

Para t = 10: Calcular a saída para w(10)=[0 0,5 0,5] e x(10)=[-1 0 1]:
u(10) = (0)(-1) + (0,5)(0) + (0,5)(1) = 0,5;
y(10) = 1, (pois u > 0)
e(10) = d - y = 1 - 1 = 0;

w(11) = w(10)

Para t = 11: Calcular a saída para w(11)=[0 0,5 0,5] e x(11)=[-1 0 1]:
u(11) = (0)(-1) + (0,5)(1) + (0,5)(0) = 0,5;
y(11) = 1, (pois u < 0)
e(11) = d - y = 1 - 1 = 0;

w(12) = w(11) = w(10)

Para t = 12: Calcular a saída para w(12)=[0 0,5 0,5] e x(12)=[-1 1 1]:
u(12) = (0)(-1) + (0,5)(1) + (0,5)(1) = 1;
y(12) = 1, (pois u > 0)
e(12) = d - y = 1 - 1 = 0;

w(13) = w(12) = w(11) = w(10)

Para t = 13: Calcular a saída para w(13)=[0 0,5 0,5] e x(13)=[-1 0 0]:
u(13) = (0)(-1) + (0,5)(0) + (0,5)(0) = 0;
y(13) = 0, (pois u <= 0)
e(13) = d - y = 0 - 0 = 0;

w(14) = w(13) = w(12) = w(11) = w(10)

FIM!

Percebemos que os pesos estabilizaram, memória não mudou e o erro estabilizou em zero. Ou seja, esse conjunto de pesos satisfaz a solução do nosso problema. Após o treinamento os pesos obtidos são guardados para serem usados. Logo, o neurônio-modelo encontrado é:

        |q | | 0 |
    w = |w1|=|0,5|
        |w2| |0,5|

                      [-1]
                        |
                        |0
              0,5       |
         [x1]-------> |¯¯¯|
                      |   |------> Y
         [x2]-------> |___|
              0,5


Apesar desse modelo ser diferente do apresentado na semana passada, funciona tão bem quanto. Isso mostra que os pesos não são únicos para cada problema. Diferentes pesos podem sim levar às mesmas soluções.

Se para uma simples porta-lógica com entradas e saídas binárias houveram 13 etapas de treinamento, imaginem para uma situação mais complexa. Ainda que um computador faça as contas por nós, essa etapa pode durar horas e horas dependendo de cada problema.

Para quem não viu, aqui estão as outras partes dessa introdução às Redes Neurais Artificiais:
- Redes Neurais Artificiais [#1]
- Redes Neurais Artificiais [#2]

Todo conteúdo baseado nas aulas do prof. Guilherme do Departamento de Teleinfomática da Universiade Federal do Ceará.

segunda-feira, 3 de maio de 2010

Redes Neurais Artificiais [#2]

RNA - Neurônios

De acordo com o Google, neurônio é a célula do sistema nervoso responsável pela condução do impulso nervoso. Ou seja, é uma célula nervosa especializada em enviar e receber sinais através do corpo humano.


Os neurônios são divididos em quatro partes, com as seguintes funções:

1 - Dendritos: Ramificações correspondentes aos canais de entrada de informação (sinais elétricos).
2 - Sinapse: Pontos de contato entre neurônios onde há passagem de neurotransmissores do axônio de um neurônio para os dendritos de outro neurônio.
3 - Corpo celular: Local onde é feito o balanço energético da célula nervosa (soma das contribuições de energia).
4 - Axônio: Canal de saída do neurônio, ou seja, caminho de propagação dos impulsos nervosos em direção a outros neurônios ou músculos.

O sentido de propagação dos impulsos nervosos ocorre sempre a partir dos dendritos, passando pelo corpo celular e axônio, até o próximo neurônio. Em outras palavras, aqui está minha visão simplificada de um neurônio ( neurônio para leigos):

O axônio emite um impulso elétrico apenas se o balanço enérgico realizado no corpo celular for maior que um certo limiar. Neste caso, diz-se que o neurônio está ativado. Um neurônio ativado emite uma sequência de impulsos elétricos ao longo de seu axônio. A informação é, então, codificada na frequência dos impulsos. A chegada desses impulsos nos terminais do axônio provoca a liberação de transmissores na fenda sináptica e daí para (i) outro neurônio, diretamente para o (ii) músculo ou até para (iii) órgãos sensoriais.

Foi baseado no estudo do cérebro e, por sua vez, dos neurônios, que, em 1943, o neurofisiologista Warren McCulloch, do MIT, e o matemático Walter Pitts, da Universidade de Illinois, propuseram a primeira estrutura do neurônio artificial, conhecido como neurônio M-P (McCulloch-Pitts).

(mecatrônica fácil ano 6 nº47)

Na construção do neurônio M-P é modelado o processamento da informação em um neurônio biológico, isto é, os caminhos e etapas pelas quais passam os impulsos elétricos que trafegam (i) entre neurônios, (ii) de um neurônio a músculo (atuador) ou (iii) de um neurônio a um órgão sensorial. Dessa maneira, McCulloch e Pitts desenvolveram modelos matemáticas de cada parte de um neurônio biológico: dendritos, sinapses, corpo celular e axônio.

Cada ramo dos terminais de recepção (dendritos) é modelado como um canal de transmissão por onde flui a informação de entrada (xi, i=1,...,n). A relevância das conexões sinápticas é modelada como um peso (wji, i=1,...,n), cujo papel é modelar o fluxo de informação passando por um certo canal de transmissão. A função do corpo celular (realizar o balanço energético) é modelado por uma função de soma das entradas moduladas pelos pesos sinápticos da forma:


em que 'u' é a ativação do neurônio. O ultimo componente do neurônio artificial é a função de transferência, que é análoga ao axônio biológico. Esse componente pode ser modelado, por exemplo, como uma chave ON-OFF, que indica se o neurônio respondeu ao estímulo atual. Se sim, a saída é positiva, por exemplo, ou se não, negativa.

O primeiro modelo possuía características bem simples com entradas e saídas binárias, resistores variáveis e amplificadores representando conexões sinápticas de um neurônio biológico. A partir desse modelo podemos implementar simples portas-lógicas como, por exemplo, a porta OU (OR):


em que w1 = w2 = 1 e limiar = 0,5. Dado que Y = 1 se u ≥ 0 e Y = 0 se u <0 tem-se a tabela verdade de uma porta lógica OU:


Como seria a porta lógica E (AND) ?

continua...

[]s

About us