Ultimamente, venho estudando a teoria por trás das RNAs e queria entender a 'mágica' por trás da capacidade de classificação não linear de várias classes. Isso me levou a este site, que faz um bom trabalho em explicar geometricamente como essa aproximação é alcançada.
Aqui está como eu entendi (em 3D): As camadas ocultas podem ser pensadas como saída de funções de etapa 3D (ou funções de torre) que se parecem com isso:
O autor afirma que várias dessas torres podem ser usadas para aproximar funções arbitrárias, por exemplo:
Isso parece fazer sentido, no entanto, a construção do autor é bastante artificial para fornecer alguma intuição por trás do conceito.
No entanto, como exatamente isso pode ser validado, dada uma RNA arbitrária? Aqui está o que eu quero saber / entender:
- AFAIK a aproximação é uma aproximação suave, mas essa "intuição" parece fornecer uma aproximação discreta, está correto?
- O número de torres parece basear-se no número de camadas ocultas - as torres acima são criadas como resultado de duas camadas ocultas. Como posso verificar isso (com um exemplo em 3d) com apenas uma única camada oculta?
Eu realmente gostaria de entender esse recurso de aproximação em 3D para qualquer função 3D arbitrária que uma RNA possa ser aproximada com uma única camada oculta - quero ver como essa aproximação parece formular uma intuição para várias dimensões?
Aqui está o que tenho em mente que acho que poderia ajudar:
- Alimente esses dados a uma RNA e visualize a aproximação com uma camada oculta (com cerca de 2-6 neurônios).
Esta construção está correta? Isso funcionaria? Como faço para fazer isso? Ainda não sou adepto da propagação traseira para implementar isso sozinho e estou procurando mais clareza e orientação a esse respeito - exemplos existentes mostrando isso seriam ideais.
Respostas:
Existem dois excelentes artigos recentes sobre algumas das propriedades geométricas de redes neurais profundas com não linearidades lineares por partes (que incluem a ativação da ReLU):
Eles fornecem alguma teoria e rigor extremamente necessários quando se trata de redes neurais.
Sua análise gira em torno da ideia de que:
Assim, podemos interpretar redes neurais profundas com ativações lineares por partes como particionando o espaço de entrada em várias regiões e, sobre cada região, há uma hiper superfície superficial.
No gráfico que você referenciou, observe que as várias regiões (x, y) têm hipersuperfícies lineares sobre elas (aparentemente planos inclinados ou planos). Portanto, vemos a hipótese dos dois artigos acima em ação nos seus gráficos referenciados.
Além disso, afirmam (ênfase dos co-autores):
Basicamente, esse é o mecanismo que permite que redes profundas tenham representações de recursos incrivelmente robustas e diversas, apesar de terem um número menor de parâmetros do que suas contrapartes superficiais. Em particular, as redes neurais profundas podem aprender um número exponencial dessas regiões lineares. Tomemos, por exemplo, o Teorema 8 do primeiro artigo referenciado, que afirma:
Isso é novamente para redes neurais profundas com ativações lineares por partes, como ReLUs, por exemplo. Se você usasse ativações do tipo sigmóide, teria hipersuperfícies sinusoidais mais suaves. Atualmente, muitos pesquisadores usam ReLUs ou alguma variação de ReLUs (ReLUs com vazamento, PReLUs, ELUs, RReLUs, a lista continua) porque sua estrutura linear por partes permite uma melhor retropropagação do gradiente em comparação com as unidades sigmoidais que podem saturar regiões assintóticas) e efetivamente matam gradientes.
Esse resultado de exponencialidade é crucial; caso contrário, a linearidade por partes pode não ser capaz de representar com eficiência os tipos de funções não lineares que devemos aprender quando se trata de visão computacional ou outras tarefas difíceis de aprendizado de máquina. No entanto, temos esse resultado de exponencialidade e, portanto, essas redes profundas podem (em teoria) aprender todos os tipos de não linearidades, aproximando-as com um grande número de regiões lineares.
Se você quiser apenas testar sua intuição, existem muitos ótimos pacotes de aprendizado profundo disponíveis hoje em dia: Theano (Lasanha, No Learn e Keras construídas sobre ela), TensorFlow, um monte de outras pessoas que tenho certeza que estou saindo Fora. Esses pacotes de aprendizado profundo calcularão a retropropagação para você. No entanto, para um problema de menor escala como o que você mencionou, é uma boa ideia codificar a retropropagação, apenas para fazê-lo uma vez e aprender como verificar gradualmente. Mas, como eu disse, se você quiser experimentar e visualizar, pode começar rapidamente com esses pacotes de aprendizado profundo.
Se alguém é capaz de treinar adequadamente a rede (usamos pontos de dados suficientes, inicializamos adequadamente, o treinamento corre bem, essa é outra questão a ser franca), então uma maneira de visualizar o que nossa rede aprendeu, neste caso , uma hipersuperfície, é apenas representar graficamente nossa hipersuperfície sobre uma malha xy ou grade e visualizá-la.
Se a intuição acima estiver correta, usando redes profundas com ReLUs, nossa rede profunda terá aprendido um número exponencial de regiões, cada região tendo sua própria hipersuperfície linear. Obviamente, o ponto principal é que, como temos muitos exponencialmente, as aproximações lineares podem se tornar tão boas e não percebemos a irregularidade de tudo isso, já que usamos uma rede suficientemente grande / profunda.
fonte