Ajudaria se você fornecesse um contexto para a alegação de que a descida do gradiente é ineficiente. Ineficiente em relação a quê?
Acho que o contexto que falta aqui é a comparação com a descida estocástica ou gradiente em lote no aprendizado de máquina. Veja como responder à pergunta neste contexto. Você está otimizando os parâmetros do modelo, mesmo hiperparâmetros. Portanto, você tem a função de custo , onde x i - seus dados e Θ - vetor de parâmetros e L ( ) - função de perda. Para minimizar esse custo, use a descida do gradiente sobre os parâmetros θ j :
∂∑ni=1L(xi|Θ)xEuΘL ( ) θj
∂∂θj∑i = 1nL(Θ|xi)
Então, você vê que precisa obter a soma de todos os dados . Isso é lamentável, porque significa que você continua repetindo os dados para cada etapa da descida do gradiente. É assim que surge a descida do lote e do gradiente estocástico: e se amostrássemos a partir do conjunto de dados e calculássemos o gradiente em uma amostra, não o conjunto completo?
∂xi=1,…,n
Aqui,nsé o número de observações na amostras. Portanto, se sua amostra é 1/100 do conjunto total, você acelera seus cálculos em 100 vezes! Obviamente, isso introduz o ruído, o que prolonga o aprendizado, mas o ruído diminui na taxa de√
∂∂θj∑k=1nsL(Θ|xk)
nss enquanto o valor do cálculo aumenta em
n, então esse truque pode funcionar.
n−−√n
Como alternativa, insteado aguardando até a soma total ser calculada, você pode dividir isso em lotes e fazer uma etapa para cada lote ∑ M s = 1 ∑ n s i s = 1 . Dessa forma, você teria executado M etapas no momento em que a soma de todo o conjunto de dados é calculada. Estes seriam passos mais ruidosos, mas o ruído é cancelado com o tempo.∑ni=1∑Ms=1∑nsis=1