Calcular gradientes es una tarea tediosa y propensa a errores, como una alternativa que quizás desee leer sobre la diferenciación automática. Elegir un entorno informático que admita AD es una ventaja.
Si calculó sus propios gradientes y desea verificarlo con un método de diferencia finita, ¿qué tan cerca debe estar para tener confianza? Desde el punto práctico, la precisión de 6 dígitos está bien, aunque puede salirse con 4 dígitos si usa el descenso de gradiente estocástico (minibatch).
El siguiente código demuestra una diferencia central de una función de costo y fue creado para Mocha.jl, la implementación de Julia del proyecto de red neuronal Berkeley Caffee escrito en Julia, un novedoso lenguaje basado en Unicode. Como alternativa, también recomiendo el verificador de derivadas IPOPT del proyecto COINOR, o un refuerzo de confianza aproximado: vea si L-BFGS devuelve un error o converge.
- ¿Cómo asociaría un producto con una categoría y subcategoría basada en la descripción de texto del producto?
- ¿Qué son los datos no paramétricos?
- Cómo poner un programa de IA en un dispositivo
- ¿Cuáles son las relaciones entre diversidad y precisión en los enfoques de conjunto?
- Cómo implementar SVM yo mismo
(Editar: me di cuenta de que no todos los navegadores representan correctamente los caracteres Unicode del fragmento de código proporcionado; reemplazando los subíndices y superíndices con un rectángulo).
@Doc """ COMPROBACIÓN DE GRADIENTES calcular y comparar gradiente analítico con finito método de diferencia implementar gradiente analítico es un error proceso propenso, mientras que el método de diferencia finita viene con O = 2 * | θ | complejidad, tiene una base de código muy simple, por lo tanto, fácil de inspeccionar. Este algoritmo evalúa la función F tanto en F (θ⁻) como en F (θ⁺) que están a dos ε de distancia, que calcula la pendiente de la línea. Esta la pendiente se compara con la longitud de 'dígitos' con gradiente analítico. En En caso de FALLA, se imprime la posición numérica, se indica PASS con '√' x - Función de tipo diferenciable f, g !, fg! representando el función, gradiente, gradiente de función respectivamente θ - vector de parámetros del modelo ε - distancia desde cualquier punto dado donde se evalúa 'f', principalmente 1e-6 funciona, puede haber intentado diferentes valores dígitos - representa el grado de corrección, ~ 6 y mayor considerado muy bueno, 4 está bien, menos de 4: trabajar en ello "" "-> función GradientCheck (x :: CostFunction, θ :: Vector {Float64}; ε = 1e-6, digit = 8) J = xf; ¡sol! = xg !; # alias J función de costo y g gradiente ∇ᵋ = similar (θ); llenar! (∇ᵋ, 0); ∇ = similar (θ); llenar! (∇, 0); C = J (θ); g! (θ, ∇); ## define la derivada de dos lados θ⁺ = similar (θ); θ⁻ = similar (θ); # iterar a través de la función de costo y calcular la pendiente para i = 1: longitud (θ) Base.copy! (Θ⁺, θ); θ⁺ [i] = θ⁺ [i] + ε; Base.copy! (Θ⁻, θ); θ⁻ [i] = θ⁻ [i] - ε; ∇ᵋ [i] = (J (θ⁺) - J (θ⁻)) / 2ε fin # hacer una comparación real con la precisión numérica de `dígito` # ∇⁺ = redondo (∇⁺, 4); ∇ = redondo (∇, 4) para i = 1: longitud (∇) if round (∇ [i], digit)! = round (∇ᵋ [i], digit) @printf ("% 3i", i); # imprime la posición si falla más @printf ("√"); # o un signo de verificación si el éxito fin fin println () fin #_________________________________________________________________ # # # Copyright (c) # Contacto: [correo electrónico protegido] # 2015 Toronto, en Canadá #________________________________________________________________ # Se concede permiso de forma gratuita bajo licencia BSD