Echemos un vistazo a cómo se implementa la red neuronal BP dentro de la caja de herramientas de matlab

Tabla de contenido

1. Efecto de reproducción del código fuente

2. El principal proceso de formación.

3. Análisis de la diferencia de fuente de efecto

4. Comparación de los efectos de diferentes métodos de entrenamiento

5. Artículos relacionados


Artículo original, reimpresión por favor indique que es de " Old Cake Explanation-BP Neural Network " bp.bbbdata.com

Si usamos directamente el método de descenso de gradiente para resolver la red neuronal BP,

A menudo no es tan bueno como la caja de herramientas de matlab.

Este problema me ha preocupado durante mucho tiempo,

Entonces también podríamos desenterrar el código fuente para ver cómo la caja de herramientas de Matlab implementa la red neuronal de BP.

Por qué nuestro efecto de entrenamiento autoescrito no es tan bueno como la caja de herramientas de la red neuronal BP.

1. Efecto de reproducción del código fuente


Extraiga el código fuente del algoritmo de entrenamiento de descenso de gradiente de la caja de herramientas de matlab y ordene el proceso del algoritmo,

El peso de una red neuronal BP de 2 capas ocultas obtenida por código autoescrito

El peso obtenido llamando a la caja de herramientas newff:

Se puede ver que los dos resultados son iguales, lo que indica que la lógica de entrenamiento de la red neuronal de BP de la caja de herramientas se comprende y reproduce por completo.


2. El principal proceso de formación.


El proceso principal del método de descenso de gradiente de red neuronal BP es el siguiente


Primero inicialice el umbral de peso,

Luego iterativamente umbraliza los pesos con el gradiente,

Salir del entrenamiento si se cumple la condición de terminación

La condición de finalización es: el error ha alcanzado el requisito, el gradiente es demasiado pequeño o se alcanza el número máximo de veces


el código se muestra a continuación:


function [W,B] = traingdBPNet(X,y,hnn,goal,maxStep)
%------变量预计算与参数设置-----------
lr        = 0.01;            % 学习率  
min_grad  = 1.0e-5;          % 最小梯度

%---------初始化WB-------------------
[W,B] = initWB(X,y,hnn);  % 初始化W,B

%---------开始训练--------------------
for t = 1:maxStep
    % 计算当前梯度
    [py,layerVal] = predictBpNet(W,B,X);         % 计算网络的预测值
    [E2,E]        = calMSE(y,py);              % 计算误差
    [gW,gB]       = calGrad(W,layerVal,E);    % 计算梯度
    
    %-------检查是否达到退出条件----------
    gradLen = calGradLen(gW,gB);              % 计算梯度值
    % 如果误差已达要求,或梯度过小,则退出训练
    if E2 < goal   || gradLen <=min_grad
        break;                 
    end
    
    %----更新权重阈值-----
    for i = 1:size(W,2)-1
        W{i,i+1} = W{i,i+1} + lr * gW{i,i+1};%更新梯度
        B{i+1} = B{i+1} + lr * gB{i+1};%更新阈值
    end
end
end

(El código aquí reproduce las operaciones comunes de los dos algoritmos, que son el procesamiento de normalización y la verificación de generalización)

3. Análisis de la diferencia de fuente de efecto


Fuente de la diferencia de rendimiento


El proceso principal no es diferente del tutorial regular de algoritmos,

Entonces, ¿por qué el resultado de matlab es mejor,

La razón está principalmente en la inicialización,

Muchos tutoriales sugieren inicialización aleatoria,

De hecho, la caja de herramientas de Matlab utiliza el método nguyen_Widrow para la inicialización.


método nguyen_Widrow


La idea de inicialización del método nguyen_Widrow es la siguiente:

Tomando una red de entrada única como ejemplo, inicializará la red de la siguiente forma:

Su propósito es hacer que cada nodo oculto se distribuya uniformemente en el rango de datos de entrada.

La razón es que si cada neurona en la red neuronal de BP se utiliza por completo al final,

Entonces debería ser más similar a la distribución anterior (cobertura completa del rango de entrada, uso completo de cada neurona),

En lugar de una inicialización aleatoria y luego un ajuste lento, es mejor dar dicha inicialización desde el principio.

El texto original del método es:

Derrick Nguyen 和Bernard Widrow的《Mejorar la velocidad de aprendizaje de las redes neuronales de 2 capas eligiendo los valores iniciales de los pesos adaptativos》


Cuarto, la diferencia en el efecto de diferentes métodos de entrenamiento.


Comparación de efectos


Y el autor usó traind, trainda y trainlm para comparar los efectos.

encontre el mismo problema,

Si no se puede entrenar a traind, se puede entrenar a traind.

Y si trainda no puede entrenarlo, trainlm puede entrenarlo de nuevo.

es decir, en términos de efecto de entrenamiento

trend < trenda < trenlm


Entonces, si usamos directamente el algoritmo de descenso de gradiente escrito por nosotros mismos,

Todavía no es tan bueno como usamos la caja de herramientas de matlab.

La red neuronal BP de matlab usa el algoritmo trainlm por defecto


Razón breve


Entonces, ¿por qué trainda es mejor que traind y por qué trainlm es mejor que trainda?

Después de retomar el análisis del código fuente, se debe principalmente a que la tasa de aprendizaje adaptativo se ha agregado a trainingda.

El trainlm utiliza la información de la segunda derivada para acelerar la velocidad de aprendizaje.


5. Artículos relacionados


Ver el código completo para reproducir:

"Reescritura de código de entrenamiento (método de descenso de gradiente)"

Ver el método de inicialización:

"Inicialización de la red neuronal BP"


Esta es la lógica del algoritmo del método de descenso de gradiente en la caja de herramientas de la red neuronal matlab, ¡así de simple~!

Supongo que te gusta

Origin blog.csdn.net/dbat2015/article/details/125638331
Recomendado
Clasificación