A descida de gradiente em Python

A descida de gradiente em Python
A descida de gradiente é um algoritmo que nos ajuda a encontrar o erro mínimo ou onde o valor da perda é menor. Escolhemos qualquer ponto da função e depois nos movemos lentamente em direção à direção negativa para que possamos alcançar o erro mínimo. Mas, enquanto nos movemos, também nos preocupamos com o valor do erro, que é o valor que é subtraído da previsão e valor da verdade. Além disso, não deve se tornar negativo.

Podemos entender melhor isso do exemplo a seguir:

Vamos assumir que uma máquina converte os quilômetros em milhas.

Mas não temos a fórmula para converter os quilômetros em milhas. Sabemos que os dois valores são lineares, o que significa que se dobrarmos as milhas, os quilômetros também dobram.

A fórmula é apresentada desta maneira:

Milhas = quilômetros * C

Aqui, C é uma constante e não sabemos o valor exato da constante.

Temos algum valor de verdade universal como uma pista. A tabela de verdade é dada abaixo:

Agora vamos usar algum valor aleatório de C e determinar o resultado.

Então, estamos usando o valor de C como 0.5, e o valor de quilômetros é 100. Isso nos dá 50 como a resposta. Como sabemos muito bem, de acordo com a tabela de verdade, o valor deve ser 62.137. Portanto, o erro que temos que descobrir como abaixo:

erro = verdade - calculado

= 62.137 - 50

= 12.137

Da mesma maneira, podemos ver o resultado na imagem abaixo:


Agora, temos um erro de 12.137. Como discutido anteriormente, a relação entre as milhas e quilômetros é linear. Então, se aumentarmos o valor da constante aleatória C, podemos estar recebendo menos erro.

Desta vez, apenas mudamos o valor de C de 0.5 a 0.6 e atinge o valor de erro de 2.137, como mostrado na imagem abaixo:

Agora, nossa taxa de erro melhora de 12.317 a 2.137. Ainda podemos melhorar o erro usando mais palpites sobre o valor de c. Acreditamos que o valor de C será 0.6 a 0.7, e chegamos ao erro de saída de -7.863.

Desta vez, o erro cruza a tabela de verdade e o valor real. Então, cruzamos o erro mínimo. Então, pelo erro, podemos dizer que nosso resultado de 0.6 (erro = 2.137) foi melhor que 0.7 (erro = -7.863).

Por que não tentamos com as pequenas mudanças ou a taxa de aprendizado do valor constante de C? Nós apenas vamos mudar o valor C de 0.6 a 0.61, não para 0.7.

O valor de c = 0.61, nos dá um erro menor de 1.137, que é melhor que o 0.6 (erro = 2.137).


Agora temos o valor de C, que é 0.61, e dá um erro de 1.137 apenas do valor correto de 62.137.

Este é o algoritmo de descida de gradiente que ajuda a descobrir o erro mínimo.

Código Python:

Convertemos o cenário acima em programação python. Inicializamos todas as variáveis ​​que precisamos para este programa Python. Também definimos o método kilo_mile, onde estamos passando um parâmetro C (constante).


No código abaixo, definimos apenas as condições de parada e a iteração máxima. Como mencionamos, o código será interrompido quando a iteração máxima for alcançada ou o valor de erro maior que a precisão. Como resultado, o valor constante atinge automaticamente o valor de 0.6213, que tem um pequeno erro. Portanto, nossa descida de gradiente também funcionará assim.

Descida de gradiente em python

Importamos os pacotes necessários e junto com os conjuntos de dados internos da Sklearn. Em seguida, definimos a taxa de aprendizado e várias iterações, como mostrado abaixo na imagem:

Mostramos a função sigmóide na imagem acima. Agora, convertemos isso em uma forma matemática, como mostrado na imagem abaixo. Também importamos o conjunto de dados interno da Sklearn, que possui dois recursos e dois centros.

Agora, podemos ver os valores de x e forma. A forma mostra que o número total de linhas é de 1000 e as duas colunas como definimos antes.

Adicionamos uma coluna no final de cada linha x para usar o viés como um valor treinável, como mostrado abaixo. Agora, a forma de x é 1000 linhas e três colunas.

Também remodelamos o y e agora ele tem 1000 linhas e uma coluna como mostrado abaixo:

Definimos a matriz de peso também com a ajuda da forma do x como mostrado abaixo:

Agora, criamos o derivado do sigmóide e assumimos que o valor de x seria depois de passar pela função de ativação sigmóide, que mostramos antes.

Em seguida, fazemos um loop até o número de iterações que já definimos foi alcançado. Descobrimos as previsões depois de passar pelas funções de ativação sigmóide. Calculamos o erro e calculamos o gradiente para atualizar os pesos como mostrado abaixo no código. Também economizamos a perda em cada época da lista de histórico para exibir o gráfico de perdas.

Agora, podemos vê -los em todas as épocas. O erro está diminuindo.

Agora, podemos ver que o valor do erro está reduzindo continuamente. Portanto, este é um algoritmo de descida de gradiente.