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.