Химическое обнаружение отказа процесса Используя глубокое обучение

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

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

  2. Спроектируйте архитектуру слоя

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

  4. Выполните валидацию

  5. Протестируйте сеть

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

Этот пример использует отформатированные MATLAB файлы, преобразованные MathWorks® от данных моделирования Процесса Теннесси Истмэна (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');

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

  • Номер отказа — Для дефектных наборов данных, целочисленного значения от 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 процентов обучающих данных для валидации. Используя валидацию набор данных позволяет вам оценить подгонку модели на обучающем наборе данных, в то время как вы настраиваете гиперпараметры модели. Разделение данных обычно используется, чтобы препятствовать тому, чтобы сеть сверхсоответствовала и underfitting.

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

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 хороши для данных timeseries, когда они склонны помнить уникальность прошлых сигналов для того, чтобы классифицировать новые сигналы

  • Сеть LSTM позволяет вам ввести данные о последовательности в сеть и сделать предсказания на основе отдельных временных шагов данных о последовательности. Для получения дополнительной информации о сетях LSTM смотрите Длинные Краткосрочные Сети Памяти (Deep Learning Toolbox).

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

Как был описан ранее в разделе Data Set, данные содержат 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 безотказных симуляций, сопровождаемых 6 800 дефектными симуляциями. Визуализируйте безотказные и дефектные данные. Во-первых, создайте график безотказных данных. В целях этого примера, графика и метки только 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 для классификации последовательностей смотрите, что Классификация Последовательностей Использует Глубокое обучение (Deep Learning Toolbox).

  • Добавьте 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 использует графический процессор, если вы доступны, в противном случае, он использует центральный процессор. Обучение на графическом процессоре требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Поскольку этот пример использует большой объем данных, использование графического процессора значительно ускоряет учебное время.

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

Для получения дополнительной информации об опциях обучения для глубокого обучения смотрите trainingOptions (Deep Learning Toolbox).

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] Rieth, C. A. Б. Д. Амсель, Р. Трэн., и Б. Майя. "Дополнительные Данные моделирования Процесса Теннесси Истмэна для Оценки Обнаружения Аномалии". Гарвард 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

Смотрите также

(Deep Learning Toolbox) | (Deep Learning Toolbox)

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте