====== Dicas Deep Learning ======
Estou estudando Deep Learning (IA) no fast.ai e guardo aqui minhas anotações.
**Referências externas:**
* [[https://course.fast.ai/|Curso Fast AI]]
* Reforço matemática:
* [[https://pt.khanacademy.org|Khan Academy]]
* [[https://machinelearningmastery.com/computational-linear-algebra-coders-review/|Curso de álgebra linear computacional]]
===== Lição 2 =====
==== O que pode dar errado ====
- Taxa de aprendizado (LR) muito alta;
- Taxa de aprendizado muito baixa;
- Número de iterações (epochs) muito alto;
- Número de iterações muito baixo.
Learning rate padrão = 0.003. Pode ser alterada em max_lr:
learn.fit_one_cycle(1, max_lr=0.5)
**Ajustes:**\\
* Se sua perda na validação (valid_loss) está muito grande, sua LR está alta;
* Se sua perda no treino é maior que na validação: ou sua taxa de aprendizado (learning rate) está muito baixa ou o número de iterações (epochs);
* Não aumente tanto o número de epochs, ou seu modelo pode ficar treinado pra reconhecer apenas a sua fotografia e não qualquer fotografia daquele tipo
* O risco de treinar demais o modelo (e passar a reconhecer só suas fotos) é muito baixo. Isso pode ser percebido se seu erro caiu bem e depois começou a aumentar de novo durante as iterações
==== Dicas lição 2 ====
* Não há como definir quanto material é necessário pra um treino, só testando. Se treinar com muitas iterações e o erro começar a piorar sem antes ter chegado onde quer, e se não tiver com um dos quatro problemas mencionados, pode precisar de mais dados.
* Dados desproporcionais (muito mais dados de uma das classes) também funcionam, teste. Se não funcionar uma ideia é fazer //over sampling//, copiando os dados que tem pra aumentar.
===== Álgebra =====
==== Equações lineares ====
* Notação equação reduzida da reta: y = ax + b
* a = coeficiente de inclinação da reta (tb chamado 'm'): m = Δy / Δx
* b = ponto onde a reta corta o eixo y
* Para operações matriciais é mais conveniente redigir como: y = ax1 + bx2, com x2 = 1 sempre
* Mais convenientemente ainda pode ser notada assim para um conjunto de dados: {{:ti_publica:equcacao_linear_matricial.gif|}}, onde a2 era o b e xi,2 = 1 sempre.
* Notação equação fundamental da reta: ''y-b = m(x-a)''
* Mais prática pra escrever a partir de m e um ponto (a,b), mas não dá a interceptação do eixo y
===== pi torch =====
==== Criando um vetor====
* ''x = torch.ones(n,2)'' inicia um tensor com n linhas e 2 colunas, segunda coluna com '1's (vide álgebra pra facilitar operações matriciais)
* ''x[:,0].uniform_(-1.,1)'' - cria dados randômicos entre -1 e 1 na primeira coluna do vetor:
* ''[:]'' endereça cada valor na dimensão (no caso endereça toda a linha);
* ''0'' pega a primeira coluna;
* ''uniform'' vai criar distribuição uniforme randômica;
* O '_' indica que não vai retornar valor, vai atribuir valor a variável referida.
* Se não usar um ponto '.' os valores serão inteiros e não pto flutuante. O bom é que basta um ponto em um dos números, dispensando os zeros, mas poderia ser usado ''(-1.0,1.0)''