exponenta event banner

Обнаружение неисправностей химического процесса с помощью глубокого обучения

В этом примере показано, как использовать данные моделирования для обучения нейронной сети, которая может обнаруживать неисправности в химическом процессе. Сеть обнаруживает неисправности в моделируемом процессе с высокой точностью. Типичный рабочий процесс выглядит следующим образом:

  1. Предварительная обработка данных

  2. Разработка архитектуры слоев

  3. Обучение сети

  4. Выполнить проверку

  5. Тестирование сети

Загрузить набор данных

В этом примере используются файлы в формате MATLAB, преобразованные MathWorks ® из данных моделирования Tennessee Eastman Process (TEP) [1]. Эти файлы доступны на сайте файлов поддержки MathWorks. См. отказ от ответственности.

Набор данных состоит из четырех компонентов - безотказное обучение, безотказное тестирование, неисправное обучение и неисправное тестирование. Загрузите каждый файл отдельно.

url = 'https://www.mathworks.com/supportfiles/predmaint/chemical-process-fault-detection-data/faultytesting.mat';
websave('faultytesting.mat',url);
url = 'https://www.mathworks.com/supportfiles/predmaint/chemical-process-fault-detection-data/faultytraining.mat';
websave('faultytraining.mat',url);
url = 'https://www.mathworks.com/supportfiles/predmaint/chemical-process-fault-detection-data/faultfreetesting.mat';
websave('faultfreetesting.mat',url);
url = 'https://www.mathworks.com/supportfiles/predmaint/chemical-process-fault-detection-data/faultfreetraining.mat';
websave('faultfreetraining.mat',url);

Загрузите загруженные файлы в рабочую область MATLAB ®.

load('faultfreetesting.mat');
load('faultfreetraining.mat');
load('faultytesting.mat');
load('faultytraining.mat');

Каждый компонент содержит данные моделирования, выполненного для каждой перестановки двух параметров:

  • Номер отказа (Fault Number) - для неисправных наборов данных целочисленное значение от 1 до 20, представляющее другой моделируемый отказ. Для безаварийных наборов данных значение равно 0.

  • Прогон моделирования - для всех наборов данных целочисленные значения от 1 до 500, где каждое значение представляет уникальное состояние случайного генератора для моделирования.

Продолжительность каждого моделирования зависела от набора данных. Все симуляции отбирали каждые три минуты.

  • Наборы обучающих данных содержат 500 выборки времени из 25 часов моделирования.

  • Наборы данных тестирования содержат 960 выборки времени из 48 часов моделирования.

Каждый кадр данных имеет следующие переменные в своих столбцах:

  • Столбец 1 (faultNumber) указывает тип отказа, который варьируется от 0 до 20. Номер отказа 0 означает отсутствие отказа, в то время как номера отказа 1-20 представляют различные типы отказов в TEP.

  • Столбец 2 (simulationRun) указывает количество запусков моделирования TEP для получения полных данных. В наборах данных обучения и тестирования количество прогонов варьируется от 1 до 500 для всех номеров отказов. Каждый simulationRun значение представляет другое состояние случайного генератора для моделирования.

  • Колонка 3 (sample) указывает количество записей переменных TEP на моделирование. Это число варьируется от 1 до 500 для наборов данных обучения и от 1 до 960 для наборов данных тестирования. Переменные TEP (столбцы 4- 55) отбирались каждые 3 минут в течение 25 часов и 48 часов для наборов данных обучения и тестирования соответственно.

  • Колонки 4-44 (xmeas_1 через xmeas_41) содержат измеренные переменные TEP.

  • Колонки 45-55 (xmv_1 через xmv_11) содержат управляемые переменные TEP.

Изучите подразделы двух файлов.

head(faultfreetraining,4)    
ans=4×55 table
    faultNumber    simulationRun    sample    xmeas_1    xmeas_2    xmeas_3    xmeas_4    xmeas_5    xmeas_6    xmeas_7    xmeas_8    xmeas_9    xmeas_10    xmeas_11    xmeas_12    xmeas_13    xmeas_14    xmeas_15    xmeas_16    xmeas_17    xmeas_18    xmeas_19    xmeas_20    xmeas_21    xmeas_22    xmeas_23    xmeas_24    xmeas_25    xmeas_26    xmeas_27    xmeas_28    xmeas_29    xmeas_30    xmeas_31    xmeas_32    xmeas_33    xmeas_34    xmeas_35    xmeas_36    xmeas_37    xmeas_38    xmeas_39    xmeas_40    xmeas_41    xmv_1     xmv_2     xmv_3     xmv_4     xmv_5     xmv_6     xmv_7     xmv_8     xmv_9     xmv_10    xmv_11
    ___________    _____________    ______    _______    _______    _______    _______    _______    _______    _______    _______    _______    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ______    ______    ______    ______    ______    ______    ______    ______    ______    ______    ______

         0               1            1       0.25038      3674       4529      9.232     26.889     42.402     2704.3     74.863     120.41     0.33818      80.044      51.435      2632.9      25.029      50.528      3101.1      22.819      65.732      229.61      341.22       94.64      77.047      32.188      8.8933      26.383       6.882      18.776      1.6567      32.958      13.823      23.978      1.2565      18.579      2.2633      4.8436      2.2986     0.017866     0.8357     0.098577     53.724      43.828     62.881    53.744    24.657    62.544    22.137    39.935    42.323    47.757     47.51    41.258    18.447
         0               1            2       0.25109    3659.4     4556.6     9.4264     26.721     42.576       2705         75     120.41      0.3362      80.078      50.154      2633.8      24.419      48.772        3102      23.333      65.716      230.54       341.3      94.595      77.434      32.188      8.8933      26.383       6.882      18.776      1.6567      32.958      13.823      23.978      1.2565      18.579      2.2633      4.8436      2.2986     0.017866     0.8357     0.098577     53.724      43.828     63.132    53.414    24.588    59.259    22.084    40.176    38.554    43.692    47.427    41.359    17.194
         0               1            3       0.25038    3660.3     4477.8     9.4426     26.875      42.07     2706.2     74.771     120.42     0.33563       80.22      50.302      2635.5      25.244      50.071      3103.5      21.924      65.732      230.08      341.38      94.605      77.466      31.767      8.7694      26.095      6.8259      18.961      1.6292      32.985      13.742      23.897      1.3001      18.765      2.2602      4.8543        2.39     0.017866     0.8357     0.098577     53.724      43.828     63.117    54.357    24.666    61.275     22.38    40.244     38.99    46.699    47.468    41.199     20.53
         0               1            4       0.24977    3661.3     4512.1     9.4776     26.758     42.063     2707.2     75.224     120.39     0.33553      80.305       49.99      2635.6      23.268      50.435      3102.8      22.948      65.781      227.91      341.71      94.473      77.443      31.767      8.7694      26.095      6.8259      18.961      1.6292      32.985      13.742      23.897      1.3001      18.765      2.2602      4.8543        2.39     0.017866     0.8357     0.098577     53.724      43.828       63.1    53.946    24.725    59.856    22.277    40.257    38.072    47.541    47.658    41.643    18.089

head(faultytraining,4)       
ans=4×55 table
    faultNumber    simulationRun    sample    xmeas_1    xmeas_2    xmeas_3    xmeas_4    xmeas_5    xmeas_6    xmeas_7    xmeas_8    xmeas_9    xmeas_10    xmeas_11    xmeas_12    xmeas_13    xmeas_14    xmeas_15    xmeas_16    xmeas_17    xmeas_18    xmeas_19    xmeas_20    xmeas_21    xmeas_22    xmeas_23    xmeas_24    xmeas_25    xmeas_26    xmeas_27    xmeas_28    xmeas_29    xmeas_30    xmeas_31    xmeas_32    xmeas_33    xmeas_34    xmeas_35    xmeas_36    xmeas_37    xmeas_38    xmeas_39    xmeas_40    xmeas_41    xmv_1     xmv_2     xmv_3     xmv_4     xmv_5     xmv_6     xmv_7     xmv_8     xmv_9     xmv_10    xmv_11
    ___________    _____________    ______    _______    _______    _______    _______    _______    _______    _______    _______    _______    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ________    ______    ______    ______    ______    ______    ______    ______    ______    ______    ______    ______

         1               1            1       0.25038      3674       4529      9.232     26.889     42.402     2704.3     74.863     120.41     0.33818      80.044      51.435      2632.9      25.029      50.528      3101.1      22.819      65.732      229.61      341.22       94.64      77.047      32.188      8.8933      26.383       6.882      18.776      1.6567      32.958      13.823      23.978      1.2565      18.579      2.2633      4.8436      2.2986     0.017866     0.8357     0.098577     53.724      43.828     62.881    53.744    24.657    62.544    22.137    39.935    42.323    47.757     47.51    41.258    18.447
         1               1            2       0.25109    3659.4     4556.6     9.4264     26.721     42.576       2705         75     120.41      0.3362      80.078      50.154      2633.8      24.419      48.772        3102      23.333      65.716      230.54       341.3      94.595      77.434      32.188      8.8933      26.383       6.882      18.776      1.6567      32.958      13.823      23.978      1.2565      18.579      2.2633      4.8436      2.2986     0.017866     0.8357     0.098577     53.724      43.828     63.132    53.414    24.588    59.259    22.084    40.176    38.554    43.692    47.427    41.359    17.194
         1               1            3       0.25038    3660.3     4477.8     9.4426     26.875      42.07     2706.2     74.771     120.42     0.33563       80.22      50.302      2635.5      25.244      50.071      3103.5      21.924      65.732      230.08      341.38      94.605      77.466      31.767      8.7694      26.095      6.8259      18.961      1.6292      32.985      13.742      23.897      1.3001      18.765      2.2602      4.8543        2.39     0.017866     0.8357     0.098577     53.724      43.828     63.117    54.357    24.666    61.275     22.38    40.244     38.99    46.699    47.468    41.199     20.53
         1               1            4       0.24977    3661.3     4512.1     9.4776     26.758     42.063     2707.2     75.224     120.39     0.33553      80.305       49.99      2635.6      23.268      50.435      3102.8      22.948      65.781      227.91      341.71      94.473      77.443      31.767      8.7694      26.095      6.8259      18.961      1.6292      32.985      13.742      23.897      1.3001      18.765      2.2602      4.8543        2.39     0.017866     0.8357     0.098577     53.724      43.828       63.1    53.946    24.725    59.856    22.277    40.257    38.072    47.541    47.658    41.643    18.089

Чистые данные

Удалите записи данных с номерами отказов 3, 9 и 15 в наборах данных обучения и тестирования. Эти номера отказов не распознаются, и связанные с ними результаты моделирования являются ошибочными.

faultytesting(faultytesting.faultNumber == 3,:) = [];
faultytesting(faultytesting.faultNumber == 9,:) = [];
faultytesting(faultytesting.faultNumber == 15,:) = [];


faultytraining(faultytraining.faultNumber == 3,:) = [];
faultytraining(faultytraining.faultNumber == 9,:) = [];
faultytraining(faultytraining.faultNumber == 15,:) = [];

Разделить данные

Разделите данные обучения на данные обучения и проверки, зарезервировав 20 процентов данных обучения для проверки. Использование набора данных проверки позволяет оценить соответствие модели набору данных обучения при настройке гиперпараметров модели. Разделение данных обычно используется для предотвращения переоборудования и недооснащения сети.

Получение общего количества строк как в сбойных, так и в безаварийных наборах учебных данных.

H1 = height(faultfreetraining); 
H2 = height(faultytraining);    

Прогон моделирования - это количество повторений процесса TEP с определенным типом отказа. Получение максимального прогона моделирования из набора данных обучения, а также из набора данных тестирования.

msTrain = max(faultfreetraining.simulationRun); 
msTest = max(faultytesting.simulationRun);      

Рассчитайте максимальный прогон моделирования для данных проверки.

rTrain = 0.80; 
msVal = ceil(msTrain*(1 - rTrain));    
msTrain = msTrain*rTrain;   

Получение максимального количества выборок или временных шагов (то есть максимального количества записей данных во время моделирования TEP).

sampleTrain = max(faultfreetraining.sample);
sampleTest = max(faultfreetesting.sample);

Получите точку деления (номер строки) в сбойных и неисправных наборах обучающих данных для создания наборов валидационных данных из наборов обучающих данных.

rowLim1 = ceil(rTrain*H1);
rowLim2 = ceil(rTrain*H2);

trainingData = [faultfreetraining{1:rowLim1,:}; faultytraining{1:rowLim2,:}];
validationData = [faultfreetraining{rowLim1 + 1:end,:}; faultytraining{rowLim2 + 1:end,:}];
testingData = [faultfreetesting{:,:}; faultytesting{:,:}];

Проектирование и предварительная обработка сети

Окончательный набор данных (состоящий из данных обучения, проверки и тестирования) содержит 52 сигнала с 500 едиными временными шагами. Следовательно, сигнал или последовательность необходимо классифицировать по правильному номеру неисправности, что делает ее проблемой классификации последовательности.

  • Сети долговременной памяти (LSTM) подходят для классификации данных последовательности.

  • Сети LSTM хороши для данных временных рядов, поскольку они, как правило, запоминают уникальность прошлых сигналов, чтобы классифицировать новые сигналы

  • Сеть LSTM позволяет вводить данные последовательности в сеть и делать прогнозы на основе отдельных временных шагов данных последовательности. Дополнительные сведения о сетях LSTM см. в разделе Сети долговременной памяти.

  • Обучение сети классификации последовательностей с помощью trainNetwork сначала необходимо выполнить предварительную обработку данных. Данные должны быть в массивах ячеек, где каждый элемент массива ячеек является матрицей, представляющей набор из 52 сигналов в одном моделировании. Каждая матрица в матрице ячеек является набором сигналов для конкретного моделирования TEP и может быть либо неисправной, либо безотказной. Каждый набор сигналов указывает на определенный класс отказов в диапазоне от 0 до 20.

Как было описано ранее в разделе Набор данных, данные содержат 52 переменные, значения которых записываются в течение определенного периода времени при моделировании. sample переменная представляет количество записей этих 52 переменных в одном прогоне моделирования. Максимальное значение параметра sample переменная составляет 500 в наборе данных обучения и 960 в наборе данных тестирования. Таким образом, для каждого моделирования имеется набор из 52 сигналов длиной 500 или 960. Каждый набор сигналов относится к определенному прогону моделирования TEP и указывает на определенный тип отказа в диапазоне 0 - 20.

Обучающие и тестовые наборы данных содержат 500 имитаций для каждого типа отказа. Двадцать процентов (от обучения) сохраняются для проверки, что оставляет набор данных обучения с 400 моделированием для каждого типа неисправности и данные проверки с 100 моделированием для каждого типа неисправности. Использовать функцию помощника helperPreprocess для создания наборов сигналов, где каждый набор является двойной матрицей в одном элементе массива ячеек, который представляет одно моделирование TEP. Следовательно, размеры окончательных наборов данных обучения, проверки и тестирования следующие:

  • Размер Xtrain: (Общее количество имитаций) X (Общее количество типов отказов) = 400 X 18 = 7200

  • Размер XVal: (Общее количество имитаций) X (Общее количество типов отказов) = 100 X 18 = 1800

  • Размер Xtest: (Общее количество имитаций) X (Общее количество типов отказов) = 500 X 18 = 9000

В наборе данных первые 500 имитаций: 0 тип отказа (безотказный) и порядок последующих имитаций отказа известны. Эти знания позволяют создавать истинные ответы для наборов данных обучения, проверки и тестирования.

Xtrain = helperPreprocess(trainingData,sampleTrain);
Ytrain = categorical([zeros(msTrain,1);repmat([1,2,4:8,10:14,16:20],1,msTrain)']);
 
XVal = helperPreprocess(validationData,sampleTrain);
YVal = categorical([zeros(msVal,1);repmat([1,2,4:8,10:14,16:20],1,msVal)']);
 
Xtest = helperPreprocess(testingData,sampleTest);
Ytest = categorical([zeros(msTest,1);repmat([1,2,4:8,10:14,16:20],1,msTest)']);

Нормализовать наборы данных

Нормализация - это метод, который масштабирует числовые значения в наборе данных до общего масштаба без искажения различий в диапазоне значений. Этот метод гарантирует, что переменная с большим значением не будет доминировать над другими переменными в обучении. Он также преобразует числовые значения в более высоком диапазоне в меньший диапазон (обычно от -1 до 1) без потери какой-либо важной информации, необходимой для обучения.

Вычислите среднее значение и стандартное отклонение для 52 сигналов, используя данные из всех моделей в наборе обучающих данных.

tMean = mean(trainingData(:,4:end))';
tSigma = std(trainingData(:,4:end))';

Использовать функцию помощника helperNormalize применять нормализацию к каждой ячейке в трех наборах данных на основе среднего и стандартного отклонения обучающих данных.

Xtrain = helperNormalize(Xtrain, tMean, tSigma);
XVal = helperNormalize(XVal, tMean, tSigma);
Xtest = helperNormalize(Xtest, tMean, tSigma);

Визуализация данных

Xtrain набор данных содержит 400 безаварийных имитаций, за которыми следует 6800 неисправных имитаций. Визуализация безотказных и неисправных данных. Сначала создайте график безотказных данных. Для целей этого примера постройте график и отметьте только 10 сигналов в Xtrain набор данных для создания легко читаемой фигуры.

figure;
splot = 10;    
plot(Xtrain{1}(1:10,:)');   
xlabel("Time Step");
title("Training Observation for Non-Faulty Data");
legend("Signal " + string(1:splot),'Location','northeastoutside');

Теперь сравните безотказный график с неисправным графиком, построив график любого из элементов массива ячеек после 400.

figure;
plot(Xtrain{1000}(1:10,:)');   
xlabel("Time Step");
title("Training Observation for Faulty Data");
legend("Signal " + string(1:splot),'Location','northeastoutside');

Архитектура слоев и варианты обучения

Уровни LSTM являются хорошим выбором для классификации последовательностей, поскольку уровни LSTM имеют тенденцию запоминать только важные аспекты входной последовательности.

  • Укажите входной слой sequenceInputLayer иметь тот же размер, что и число входных сигналов (52).

  • Укажите 3 скрытых слоя LSTM с единицами измерения 52, 40 и 25. Эта спецификация основана на эксперименте, проведенном в [2]. Дополнительные сведения об использовании сетей LSTM для классификации последовательностей см. в разделе Классификация последовательностей с использованием глубокого обучения.

  • Добавьте 3 уровня выбытия между уровнями LSTM, чтобы предотвратить перегрузку. Уровень отсева случайным образом устанавливает входные элементы следующего уровня на ноль с заданной вероятностью, чтобы сеть не стала чувствительной к небольшому набору нейронов в слое

  • Наконец, для классификации включают полностью соединенный уровень того же размера, что и число выходных классов (18). После полностью подключенного уровня включают в себя уровень softmax, который назначает десятичные вероятности (возможность предсказания) каждому классу в многоклассовой задаче, и уровень классификации для вывода окончательного типа отказа на основе выходных данных уровня softmax.

numSignals = 52;
numHiddenUnits2 = 52;
numHiddenUnits3 = 40;
numHiddenUnits4 = 25;
numClasses = 18;
     
layers = [ ...
    sequenceInputLayer(numSignals)
    lstmLayer(numHiddenUnits2,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits3,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits4,'OutputMode','last')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Задайте параметры обучения, которые trainNetwork использует.

Сохранение значения пары имя-значение по умолчанию 'ExecutionEnvironment' как 'auto'. С помощью этого параметра программа автоматически выбирает среду выполнения. По умолчанию trainNetwork использует графический процессор, если он доступен, в противном случае использует центральный процессор. Для обучения графическому процессору требуются параллельные вычислительные Toolbox™ и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Поскольку в этом примере используется большой объем данных, использование графического процессора значительно увеличивает время обучения.

Установка пары «имя-значение» 'Shuffle' кому 'every-epoch' избегает отбрасывания одних и тех же данных каждую эпоху.

Дополнительные сведения о возможностях обучения для глубокого обучения см. в разделе trainingOptions.

maxEpochs = 30;
miniBatchSize = 50;  
 
options = trainingOptions('adam', ...
    'ExecutionEnvironment','auto', ...
    'GradientThreshold',1, ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize', miniBatchSize,...
    'Shuffle','every-epoch', ...
    'Verbose',0, ...
    'Plots','training-progress',...
    'ValidationData',{XVal,YVal});

Железнодорожная сеть

Обучение сети LSTM с помощью trainNetwork.

net = trainNetwork(Xtrain,Ytrain,layers,options);

На рисунке хода обучения отображается график точности сети. Справа от рисунка просмотрите информацию о времени и настройках обучения.

Тестовая сеть

Запустите обученную сеть на тестовом аппарате и спрогнозируйте тип отказа в сигналах.

Ypred = classify(net,Xtest,...
    'MiniBatchSize', miniBatchSize,...
    'ExecutionEnvironment','auto');

Рассчитайте точность. Точность - это количество истинных меток в тестовых данных, соответствующих классификациям из classify делят на количество изображений в тестовых данных.

acc = sum(Ypred == Ytest)./numel(Ypred)
acc = 0.9992

Высокая точность указывает на то, что нейронная сеть успешно способна идентифицировать тип неисправности невидимых сигналов с минимальными ошибками. Следовательно, чем выше точность, тем лучше сеть.

Постройте график матрицы путаницы, используя метки истинного класса тестовых сигналов, чтобы определить, насколько хорошо сеть идентифицирует каждый отказ.

confusionchart(Ytest,Ypred);

Используя матрицу путаницы, можно оценить эффективность сети классификации. матрица путаницы имеет числовые значения в основной диагонали и нули в другом месте. Обученная сеть в этом примере эффективна и правильно классифицирует более 99% сигналов.

Ссылки

[1] Риет, К. А., Б. Д. Амсель, Р. Трэн и Б. Майя. «Дополнительные данные моделирования процессов Tennessee Eastman для оценки обнаружения аномалий». Harvard Dataverse, версия 1, 2017. https://doi.org/10.7910/DVN/6C3JR1.

[2] Heo, S. и Дж. Х. Ли. «Обнаружение и классификация неисправностей с использованием искусственных нейронных сетей». Кафедра химической и биомолекулярной инженерии, Корейский передовой институт науки и техники.

Вспомогательные функции

helperPreprocess

Вспомогательная функция helperPreprocess использует максимальный номер образца для предварительной обработки данных. Номер выборки указывает длину сигнала, которая соответствует набору данных. Цикл for проходит через набор данных с фильтром длины сигнала для формирования наборов из 52 сигналов. Каждый набор является элементом массива ячеек. Каждый массив ячеек представляет одно моделирование.

function processed = helperPreprocess(mydata,limit)
    H = size(mydata);
    processed = {};
    for ind = 1:limit:H
        x = mydata(ind:(ind+(limit-1)),4:end);
        processed = [processed; x'];
    end
end

helperNormalize

Вспомогательная функция helperNormalize использует данные, среднее и стандартное отклонение для нормализации данных.

function data = helperNormalize(data,m,s)
    for ind = 1:size(data)
        data{ind} = (data{ind} - m)./s;
    end
end

См. также

| | |

Связанные темы