Diseño y Optimización de Red Neuronal MATLAB BP


prefacio

  • La red neuronal BP (propagación hacia atrás), una red neuronal de alimentación hacia adelante que utiliza la propagación hacia atrás de errores para actualizar los umbrales de peso, a menudo se usa para resolver problemas de ajuste o clasificación.

Muchos bloggers excelentes han realizado trabajos relacionados con la descripción detallada y la derivación de los principios de cálculo de redes neuronales y redes neuronales BP:

El objetivo principal de este artículo es hacer un resumen de mi experiencia en la aplicación de la red neuronal BP en el proceso de aprendizaje y realización de proyectos. El contenido incluye principalmente la introducción de los pasos de diseño de redes neuronales BP basados ​​en MATLAB y la optimización relacionada. Si ha entendido a grandes rasgos los principios de la computación y está explorando el contenido de documentos grandes y pequeños para usted, tal vez leer este artículo pueda acelerar su proceso.
inserte la descripción de la imagen aquí

1. División del conjunto de datos

Para evitar el sobreajuste del modelo durante el proceso de entrenamiento, podemos dividir el conjunto de datos de diferentes formas según el tamaño de nuestros propios datos.

  • Cuando el conjunto de datos es lo suficientemente grande, se puede adoptar el método de división del conjunto de entrenamiento, el conjunto de prueba y el conjunto de verificación, y las proporciones de división son: 0.7, 0.15, 0.15 El método de división predeterminado de la caja de herramientas.

  • Se adopta el método de división de conjunto de entrenamiento y conjunto de prueba, y la relación general es: 0.8, 0.2.

  • Cuando el conjunto de datos es pequeño, se utiliza el método de dejar uno fuera para la validación cruzada circular.

  • Cuando el conjunto de datos es pequeño, también se pueden usar algunos métodos para realizar el incremento del conjunto de datos, como los datos después de agregar ruido blanco y la imagen después de la rotación, reducción y ampliación.

2. Determinación de la topología de la red

2.1 Capa de entrada y capa de salida

Determinar la entrada y la salida del modelo, como estudiar la influencia de x, y, z en t. Hay 3 entradas y 1 salida Lo que quiero expresar aquí es el proceso de determinación de los factores de investigación xyz. Muchos factores pueden ser todos los datos registrables en el proceso de simulación o experimento. Si hay muchos factores, puede considerar realizar un procesamiento de reducción de dimensionalidad en la dimensión de datos antes del entrenamiento. Por ejemplo:

  • Hay dos métodos principales en el aprendizaje automático, el mapeo lineal y los métodos de mapeo no lineal.
  • Mapeo lineal: PCA, LAD
  • Mapeo no lineal: métodos kernel (kernel + lineal), 2D y tensorización (2D + lineal), aprendizaje múltiple (ISOMap, LLE, LPP)

2.2 Número de capas ocultas y número de unidades

(1) Determinación del número de capas ocultas

En muchos lugares podemos ver esta frase:

  • La red neuronal BP de tres capas puede aproximar una función continua dada arbitrariamente con precisión arbitraria

Por supuesto, tantos años de experiencia en educación orientada a exámenes me dijeron que lo creyera. Por lo general, primero uso 3 capas para los experimentos de simulación y, si no funciona, elijo cambiar el número de capas al final.

(2) Determinación del número de unidades de capa oculta

Hay dos métodos:

  1. Dado el rango aproximado, el número de unidades recurrentes y el efecto de entrenamiento como condición de juicio
  2. Consulte la fórmula empírica en la literatura existente para determinar el número de unidades, por ejemplo:
    n=log2 (número de unidades de entrada);
    n=sqrt (número de unidades de entrada + número de neuronas de salida)+a (a está entre [ 0,10] constante).
    Aquí la segunda fórmula empírica se puede utilizar en combinación con el método 1

Aquí, quiero hablar de dos lugares. Una es que, en teoría, la cantidad de capas ocultas y la cantidad de unidades se pueden seleccionar de manera simple y aproximada usando un bucle. Por supuesto, la premisa es que la división del conjunto de entrenamiento sea consistente y tenga suficiente tiempo. Por supuesto, implica el impacto del umbral inicial y el peso en la Red. Este proceso se vuelve relativamente más complicado. Este es también el segundo punto que quiero decir. ¿Puede considerar un análisis cuantitativo simplificado del impacto del umbral inicial y el peso en el entrenamiento de red específico? De esta manera, puede ser posible utilizar un algoritmo de optimización para optimizar toda la topología. . . Por supuesto, esto es solo mi propia imaginación, y la viabilidad y la complejidad de su realización son realmente difíciles de decir.

2.3 Función de transferencia, función de aprendizaje y función de rendimiento

función nombre de la función usar
Función de transferencia logsig Función sigmoidea
Función de transferencia dlogsig Derivada de la función sigmoidea
Función de transferencia tanaceto Función sigmoidea
Función de transferencia dtansico Derivado de la función sigmoidea
Función de transferencia puralina función lineal pura
Función de transferencia dpurelina derivada de una función puramente lineal
función de aprendizaje aprendiendo Función de aprendizaje basada en el método de descenso de gradiente
función de aprendizaje aprendiendo Función de aprendizaje de impulso de descenso de gradiente
función de rendimiento mes función de error cuadrático medio
función de rendimiento mesreg función de normalización del error cuadrático medio

3. Determinación del peso inicial y umbral

3.1 Dado al azar [-1 1]

En la caja de herramientas de matlab, el valor inicial predeterminado se proporciona como [-1 1] y el umbral de peso inicial se proporciona aleatoriamente.

3.2 Algoritmo de optimización que optimiza pesos y umbrales iniciales

En los documentos comunes ahora, después de determinar la topología del par de redes neuronales, los pesos y umbrales iniciales se optimizan antes del entrenamiento. Deje que el punto de partida del entrenamiento sea relativamente bueno, que se usa comúnmente aquí:

  • GA-BP
  • PSO-BP
  • OSG-BP
  • ACO-BP
  • BFO-BP
  • ABC-BP

Al mismo tiempo, también es un lugar común para que los documentos hagan algoritmos. Por supuesto, el algoritmo de optimización aquí puede usar varios algoritmos de inteligencia de enjambre e incluso mejorar el algoritmo de optimización para optimizar el valor inicial de la red neuronal BP. Este método es muy bueno y se puede utilizar para construir rápidamente una tesis. La clave es cómo reproducir la red de acuerdo con el umbral y el peso, para realizar la función de aptitud correcta del algoritmo de optimización.

4. Configuración de parámetros de entrenamiento

La configuración de parámetros del modelo de entrenamiento afecta el efecto del entrenamiento, y se deben realizar los ajustes correspondientes para diferentes modelos.

proyecto función
El número máximo de iteraciones net.trainParam.epochs
objetivo de entrenamiento net.trenParam.objetivo
tiempo de entrenamiento net.trainParam.time
Rendimiento de gradiente mínimo net.trenParam.min_grad
Errores máximos de confirmación net.trenParam.max_fail
La ruta de búsqueda lineal utilizada net.trainParam.searchFcn
tasa de aprendizaje net.trenParam.lr
factor de impulso net.trainParam.mc

5. Entrenamiento y evaluación del efecto del entrenamiento

Después de usar la función de entrenamiento para entrenar la red, puede ver el proceso de entrenamiento y los resultados del entrenamiento en la interfaz que viene con la caja de herramientas.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Con respecto al gráfico de regresión aquí, vi que las personas en Zhihu y Baidu preguntaron si las coordenadas horizontales y verticales son en realidad los valores reales y predichos después de la normalización, que representan el efecto de la regresión.

Por supuesto, para que sea más fácil juzgar el efecto de predicción del entrenamiento del modelo, puede usar R2 (coeficiente de determinación, que se traduce como el coeficiente de determinación en algunos libros de texto, también conocido como bondad de ajuste) para evaluar la relación entre los datos pronosticados y los datos reales Relevancia. Es conveniente usarlo como la condición de terminación del bucle del programa.

Aquí he registrado previamente la fórmula de cálculo de R2 que utilicé y un blog que vi en csdn, que se puede usar como referencia:

%y1为预测值 y为实际值
R2=1 - (sum((y1- y).^2) / sum((y - mean(y)).^2))
function [r2 rmse] = rsquare(y,f,varargin)
% Compute coefficient of determination of data fit model and RMSE
%
% [r2 rmse] = rsquare(y,f)
% [r2 rmse] = rsquare(y,f,c)
%
% RSQUARE computes the coefficient of determination (R-square) value from
% actual data Y and model data F. The code uses a general version of 
% R-square, based on comparing the variability of the estimation errors 
% with the variability of the original values. RSQUARE also outputs the
% root mean squared error (RMSE) for the user's convenience.
%
% Note: RSQUARE ignores comparisons involving NaN values.
% 
% INPUTS
%   Y       : Actual data
%   F       : Model fit
%
% OPTION
%   C       : Constant term in model
%             R-square may be a questionable measure of fit when no
%             constant term is included in the model.
%   [DEFAULT] TRUE : Use traditional R-square computation
%            FALSE : Uses alternate R-square computation for model
%                    without constant term [R2 = 1 - NORM(Y-F)/NORM(Y)]
%
% OUTPUT 
%   R2      : Coefficient of determination
%   RMSE    : Root mean squared error
%
% EXAMPLE
%   x = 0:0.1:10;
%   y = 2.*x + 1 + randn(size(x));
%   p = polyfit(x,y,1);
%   f = polyval(p,x);
%   [r2 rmse] = rsquare(y,f);
%   figure; plot(x,y,'b-');
%   hold on; plot(x,f,'r-');
%   title(strcat(['R2 = ' num2str(r2) '; RMSE = ' num2str(rmse)]))
%   
% Jered R Wells
% 11/17/11
% jered [dot] wells [at] duke [dot] edu
%
% v1.2 (02/14/2012)
%
% Thanks to John D'Errico for useful comments and insight which has helped
% to improve this code. His code POLYFITN was consulted in the inclusion of
% the C-option (REF. File ID: #34765).

if isempty(varargin); c = true; 
elseif length(varargin)>1; error 'Too many input arguments';
elseif ~islogical(varargin{
    
    1}); error 'C must be logical (TRUE||FALSE)'
else c = varargin{
    
    1}; 
end

% Compare inputs
if ~all(size(y)==size(f)); error 'Y and F must be the same size'; end

% Check for NaN
tmp = ~or(isnan(y),isnan(f));
y = y(tmp);
f = f(tmp);

if c; r2 = max(0,1 - sum((y(:)-f(:)).^2)/sum((y(:)-mean(y(:))).^2));
else r2 = 1 - sum((y(:)-f(:)).^2)/sum((y(:)).^2);
    if r2<0
    % http://web.maths.unsw.edu.au/~adelle/Garvan/Assays/GoodnessOfFit.html
        warning('Consider adding a constant term to your model') %#ok<WNTAG>
        r2 = 0;
    end
end

rmse = sqrt(mean((y(:) - f(:)).^2));

6. Resultados del entrenamiento

A través del entrenamiento del modelo de conjunto de entrenamiento y la prueba del modelo de conjunto de prueba, creemos que el modelo actual está disponible y puede completar las tareas de predicción numérica y predicción de clasificación.
Por supuesto, si necesita tener un modelo para reproducir este proceso, recuerde guardar los pesos, umbrales, parámetros de normalización, parámetros de desnormalización correspondientes, registre la función de activación que usa en la estructura de la red, use la función de activación y las operaciones Matrix reproducen el red. La experiencia muestra que la normalización debe normalizarse al rango [-1,1], que puede reproducir perfectamente la red.

ps_input %归一化参数
ps_output%返归一化参数
W1=net.IW{
    
    1,1};
W2=net.LW{
    
    2,1};
B1=net.b{
    
    1} ;
B2=net.b{
    
    2} ;

Para operaciones específicas, consulte lo siguiente:


7. Comparación entre el entrenamiento tradicional de BP y la tasa de aprendizaje adaptativo + entrenamiento de aprendizaje de impulso

Tome la función de ajuste f(x)=cos(x) como ejemplo (aquí solo se considera la comparación de los métodos de entrenamiento y el conjunto de datos no se divide):

  • Respectivamente con el entrenamiento tradicional de BP: traind, tasa de aprendizaje adaptativo + entrenamiento de aprendizaje de impulso: traindx, Levenberg-Marquadt: tranlm

Entrenamiento tradicional de BP: traind (largo tiempo, convergencia lenta)
computadora
$1600
velocidad de aprendizaje adaptable + entrenamiento de aprendizaje de impulso: traindx (tiempo más corto, convergencia más rápida)
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Levenberg-Marquadt:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
código fuente de tranlm (período de tiempo, convergencia rápida):

clc;
clear;
x=0:0.1:2*pi;
y=cos(x);

%% I.数据读取
p_train=x;
t_train=y;
%% II.数据归一化
[P_train, ps_input] = mapminmax(p_train,-1,1);
[T_train, ps_output] = mapminmax(t_train,-1,1);
p = P_train;
t = T_train;
%% III.BP神经网络建立
% 1.创建网络
net = newff(p,t,4,{
    
    'tansig','purelin'},'trainlm');
% net = newff(p,t,4,{
    
    'tansig','purelin'},'traingd');
% net = newff(p,t,4,{
    
    'tansig','purelin'},'traingdx');
% 2.设置训练参数
net.trainParam.epochs = 2000; %运行次数
net.trainParam.goal = 1e-3;   %目标误差
net.trainParam.lr = 0.035;    %学习率
net.trainParam.mc = 0.85;      %动量因子
net.divideFcn = ''; %清除样本数据分为训练集、验证集和测试集命令
%%
% 3. 训练网络
net = train(net,p,t);
%%
% 4. 仿真测试
t_sim =sim(net,p);
%%
% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);
%% IV.拟合评价
r2_bp = 1 - (sum((T_sim'-  t_train').^2) ./ sum(( t_train' - mean(t_train')).^2))

%% V.绘值训练对比图
figure;
subplot(1,2,1)
plot(x,y);
xlabel('X');
ylabel('Y');
title('y=cos(x)');
subplot(1,2,2)
plot(1:length(T_sim),T_sim,'r-o',1:length(T_sim),t_train,'k-');  
legend('BP神经网络预测值','实际值');
xlabel('X');
ylabel('Y');
string = {
    
    'BP神经网络R1训练集预测结果对比';['R^2=' num2str(r2_bp)]};
title(string);


Resumir

El objetivo principal de este artículo es hacer un resumen de mi experiencia en la aplicación de la red neuronal BP en el proceso de aprendizaje y realización de proyectos. El contenido incluye principalmente la introducción de los pasos de diseño de redes neuronales BP basados ​​en MATLAB y la optimización relacionada, así como sus propias ideas misceláneas en el proceso. Si tiene alguna idea o pregunta, ¡bienvenido al chat privado o comentario! ! !


Al mismo tiempo, si tiene necesidades relevantes en la construcción de modelos y la optimización de modelos, puede buscar usuarios en Xianyu: Man Xiaojie, bienvenido a comunicarse.


Supongo que te gusta

Origin blog.csdn.net/ONERYJHHH/article/details/118607243
Recomendado
Clasificación