Na versão anterior do seu Superior Deep Studying MOOC, lembro -me de Jeremy Howard, do Quick.Ai, dizendo algo assim:
Você é uma pessoa de matemática ou uma pessoa de código e (…)
Eu posso estar errado sobre o qualquere isso não é sobre qualquer versus, digamos, ambos. E se, na realidade, você não é nada disso?
E se você vier de um pano de fundo próximo de matemática e estatística, nem ciência da computação: as ciências humanas, digamos? Você pode não ter uma compreensão intuitiva, rápida e sem esforço das fórmulas de látex que vem com talento pure e/ou anos de treinamento, ou ambos – o mesmo vale para o código do computador.
O entendimento sempre precisa começar em algum lugar, para que ele comece com matemática ou código (ou ambos). Além disso, é sempre iterativo, e as iterações geralmente alternam entre matemática e código. Mas quais são as coisas que você pode fazer quando principalmente, você diria que é um Pessoa de conceitos?
Quando o significado não emerge automaticamente das fórmulas, ajuda a procurar materiais (postagens de weblog, artigos, livros) que enfatizem o conceitos Essas fórmulas são sobre. Por conceitos, quero dizer abstrações, conciso, verbal Caracterizações do que uma fórmula significa.
Vamos tentar fazer conceptual Um pouco mais concreto. Pelo menos três aspectos vêm à mente: Útil AbstraçõesAssim, Chunking (compondo símbolos em blocos significativos) e Ação (O que essa entidade realmente fazer?)
Abstração
Para muitas pessoas, na escola, a matemática não significava nada. O cálculo period sobre latas de fabricação: como podemos obter o máximo de sopa possível na lata enquanto economiza em lata. Que tal isso: o cálculo é sobre como uma coisa muda à medida que outra muda? De repente, você começa a pensar: o que, no meu mundo, posso aplicar isso?
Uma rede neural é treinada usando backprop – apenas o regra da cadeia de cálculomuitos textos dizem. Que tal a vida. Como meu presente seria diferente se eu tivesse passado mais tempo exercitando o ukulele? Então, quanto mais tempo eu gastaria exercitando o ukulele se minha mãe não tivesse me desanimado tanto? E então – quão menos desanimador ela teria sido se não tivesse sido forçada a desistir de sua própria carreira como artista de circo? E assim por diante.
Como um exemplo mais concreto, tome otimizadores. Com a descida de gradiente como linha de base, o que, em poucas palavras, é diferente sobre o momento, RMSProp, Adam?
Começando com o momento, esta é a fórmula em uma das postagens, Sebastian Ruder’s http://ruder.io/ottimizing-gradient-descent/
(v_t = gamma v_ {t -1} + eta nabla _ { theta} j ( theta) theta = theta – v_t )
A fórmula nos diz que a mudança nos pesos é composta de duas partes: o gradiente da perda em relação aos pesos, calculado em algum momento (t ) (e escalado pela taxa de aprendizado) e a mudança anterior calculada no tempo (T-1 ) e descontado por algum fator (gama). O que faz isso na verdade Diga -nos?
Em seu Coursera MOOC, Andrew Ng apresenta impulso (e RMSProp, e Adam) após dois vídeos que nem são sobre aprendizado profundo. Ele apresenta médias móveis exponenciais, que estarão familiarizadas com muitos usuários de R: calculamos uma média em execução onde, em cada momento, o resultado em execução é ponderado por um determinado fator (0,9, digamos) e a observação atual em 1 menos esse fator (0,1, neste exemplo). Agora veja como momento é apresentado:
(v = beta v + (1- beta) dw w = w – alpha v )
Nós imediatamente vemos como (v ) é a média móvel exponencial dos gradientes, e é isso que é subtraído dos pesos (dimensionados pela taxa de aprendizado).
Com base nessa abstração nas mentes dos espectadores, Ng continua apresentando o RMSPROP. Desta vez, uma média móvel é mantida do pesos quadrados e a cada vez, essa média (ou melhor, sua raiz quadrada) é usada para escalar o gradiente atual.
(s = beta s + (1- beta) dw^2 w = w – alpha frac {dw} { sqrt s} )
Se você sabe um pouco sobre Adam, pode adivinhar o que vem a seguir: por que não ter médias móveis no numerador e também no denominador?
(v = beta_1 v + (1- beta_1) dw s = beta_2 s + (1- beta_2) dw^2 w = w- alpha frac {v} { sqrt s + epsilon} )
Obviamente, as implementações reais podem diferir em detalhes e nem sempre expõem os recursos que claramente. Mas para entender e memorização, abstrações como esta – média móvel exponencial – Faça muito. Vamos agora ver sobre Chunking.
Chunking
Olhando novamente para a fórmula acima do put up de Sebastian Ruder,
(v_t = gamma v_ {t -1} + eta nabla _ { theta} j ( theta) theta = theta – v_t )
Quão fácil é analisar a primeira linha? É claro que isso depende da experiência, mas vamos nos concentrar na própria fórmula.
Lendo essa primeira linha, construímos mentalmente algo como uma AST (Sintaxe Summary Tree). Explorando ainda mais o vocabulário da linguagem de programação, a precedência do operador é essential: para entender a metade certa da árvore, queremos primeiro analisar ( nabla _ { theta} j ( theta) )e então apenas pegue ( eta ) em consideração.
Passando para fórmulas maiores, o problema da precedência do operador se torna um dos Chunking: Pegue esse grupo de símbolos e veja -o como um todo. Poderíamos chamar isso de abstração novamente, como acima. Mas aqui, o foco não está em nomeação coisas ou verbalizando, mas em vendo: Vendo de vista que quando você lê
( frac {e^{z_i}} { sum_j {e^{z_j}}} )
É “apenas um softmax”. Novamente, minha inspiração para isso vem de Jeremy Howard, de quem me lembro de demonstrar, em uma das palestras do Fastai, que é assim que você lê um artigo.
Vamos recorrer a um exemplo mais complexo. Artigo do ano passado sobre Tradução da máquina neural baseada em atenção com Keras incluiu uma curta exposição de atençãocom quatro etapas:
- Pontuando estados ocultos do codificador quanto à medida em que eles são adequados ao estado oculto do decodificador atual.
Escolhendo a atenção ao estilo de Luong agora, temos
(pontuação ( mathbf {h} _t, bar { mathbf {h} _s}) = mathbf {h} _t^t mathbf {w} bar { mathbf {h} _s} )
À direita, vemos três símbolos, que podem parecer sem sentido no início, mas se “desaparecermos mentalmente” a matriz de peso no meio, um produto de pontos aparece, indicando que essencialmente, isso está calculando semelhança.
- Agora vem o que é chamado pesos de atenção: No atual timestep, que os estados do codificador são mais importantes?
( alpha_ {ts} = frac {exp (rating ( mathbf {h} _t, bar { mathbf {h} _s}))} { sum_ {S ‘= 1}^{S} {Rating ( mathbf {h} _t, bar { mathbf {h} _ {s’}})}} )
Rolando um pouco, vemos que isso, de fato, é “apenas um softmax” (mesmo que a aparência física não seja a mesma). Aqui, ele é usado para normalizar as pontuações, fazendo -as soma para 1.
- Em seguida é o vetor de contexto:
( mathbf {c} _t = sum_s { alpha_ {ts} bar { mathbf {h} _s}} )
Sem muito pensamento – mas lembrando -se de emblem acima que o (alfa)s representa atenção pesos – Vemos uma média ponderada.
Finalmente, na etapa
- Precisamos realmente combinar esse vetor de contexto com o estado oculto atual (aqui, feito treinando uma camada totalmente conectada em sua concatenação):
( mathbf {a} _t = tanh ( mathbf {w_c} ( mathbf {c} _t; mathbf {h} _t)) )
Este último passo pode ser um exemplo melhor de abstração do que de Chunking, mas de qualquer maneira esses estão intimamente relacionados: precisamos se fundir adequadamente para nomear conceitos, e a intuição sobre conceitos ajuda a ser dividida corretamente. Intimamente relacionado à abstração também está analisando quais entidades fazer.
Ação
Embora não esteja relacionado ao aprendizado profundo (em sentido estreito), minha citação favorita vem de uma das palestras de Gilbert Strang sobre álgebra linear:
Matrizes não apenas sentam lá, fazem alguma coisa.
Se no cálculo escolar period sobre salvar materiais de produção, as matrizes eram sobre multiplicação de matrizes-a maneira linhas por colunas. (Ou talvez eles existissem para sermos treinados para calcular determinantes, números aparentemente inúteis que acabam tendo um significado, como veremos em um futuro put up.) Por outro lado, com base no muito mais esclarecedor Multiplicação da matriz como combinação linear de colunas (Resp. Linhas) Vista, Gilbert Strang apresenta tipos de matrizes como agentes, concisamente nomeados pela inicial.
Por exemplo, ao multiplicar outra matriz (UM) À direita, essa matriz de permutação (P )
( mathbf {p} = esquerda ( Start {Array} {rrr} 0 & 0 & 1 1 & 0 & 0 0 & 1 & 0 finish {Array} direita) )
coloca (UM)A terceira fila está primeiro, sua primeira fila em segundo e sua segunda fila em terceiro:
( mathbf {pa} = esquerda ( Start {Array} {rrr} 0 & 0 & 1 1 & 0 & 0 0 & 1 & 0 END {Array} 1 e 1 esquerda ( {Array} {rrr} 0 & 1 & 1 1 1 finish {Array} Proper) = esquerda ( Start {Array} {rrr} 2 & 4 & 8 0 & 1 & 1 1 & 3 & 7 finish {Array} Proper) )
Da mesma maneira, as matrizes de reflexão, rotação e projeção são apresentadas através de seus ações. O mesmo vale para um dos tópicos mais interessantes da álgebra linear do ponto de vista do cientista de dados: as fatizações matriciais. (Lu )Assim, (Qr )EigendeComposition, (Svd ) todos são caracterizados por o que eles fazem.
Quem são os agentes das redes neurais? As funções de ativação são agentes; É aqui que temos que mencionar softmax
Pela terceira vez: sua estratégia foi descrita em Vencedor leva tudo: uma olhada em ativações e funções de custo.
Além disso, os otimizadores são agentes, e é aqui que finalmente incluímos algum código. O ciclo de treinamento explícito usado em todas as postagens de weblog de execução ansiosas até agora
with(tf$GradientTape() %as% tape, {
# run mannequin on present batch
preds <- mannequin(x)
# compute the loss
loss <- mse_loss(y, preds, x)
})
# get gradients of loss w.r.t. mannequin weights
gradients <- tape$gradient(loss, mannequin$variables)
# replace mannequin weights
optimizer$apply_gradients(
purrr::transpose(record(gradients, mannequin$variables)),
global_step = tf$practice$get_or_create_global_step()
)
O otimizador faz uma única coisa: aplicar Os gradientes que ele passa da fita gradiente. Pensando na caracterização de diferentes otimizadores que vimos acima, este pedaço de código acrescenta vivacidade ao pensamento de que os otimizadores diferem no que eles na verdade Uma vez eles conseguiram esses gradientes.
Conclusão
Aumentando, o objetivo aqui period elaborar um pouco uma maneira conceitual e orientada a abstração de se familiarizar com a matemática envolvida em aprendizado profundo (ou aprendizado de máquina, em geral). Certamente, os três aspectos destacaram interagir, se sobrepor, formam um todo, e há outros aspectos nele. A analogia pode ser uma, mas foi deixada aqui porque parece ainda mais subjetiva e menos geral. Comentários que descrevem as experiências do usuário são muito bem -vindas.