В этом разделе рассматривается, как формат структур входных данных влияет на симуляцию сетей. Он начинается со статических сетей, а затем продолжается с динамических сетей. В следующем разделе описывается, как формат структур данных влияет на сетевое обучение.
Существует два основных типа векторов входа: те, которые происходят одновременно (в то же время или не в конкретной временной последовательности), и те, которые происходят последовательно во времени. Для параллельных векторов порядок не важен, и если бы было количество сетей, проходящих параллельно, можно было бы представить по одному входному вектору каждой из сетей. Для последовательных векторов важен порядок, в котором появляются векторы.
Самая простая ситуация для симуляции сети возникает, когда сеть, которая будет моделироваться, является статической (не имеет обратной связи или задержек). В этом случае вы не должны беспокоиться о том, происходят ли входные векторы в определенной временной последовательности, поэтому можно рассматривать входы как параллельные. В сложение задача сделана еще проще, принимая, что сеть имеет только один вектор входа. В качестве примера используйте следующую сеть.
Чтобы настроить эту линейную сеть прямого распространения, используйте следующие команды:
net = linearlayer; net.inputs{1}.size = 2; net.layers{1}.dimensions = 1;
Для простоты присвойте матрицу веса и смещение W = [1 2] и b = [0].
Команды для этих назначений:
net.IW{1,1} = [1 2]; net.b{1} = 0;
Предположим, что набор данных моделирования сети состоит из Q = 4 параллельных векторов:
Параллельные векторы представлены сети как одна матрица:
P = [1 2 2 3; 2 1 3 1];
Теперь можно моделировать сеть:
A = net(P) A = 5 4 8 5
Одна матрица параллельных векторов представлена сети, и сеть производит одну матрицу параллельных векторов как выход. Результат был бы тем же самым, если бы было четыре сети, работающие параллельно, и каждая сеть получила один из входных векторов и произвела один из выходов. Упорядоченное расположение входных векторов не важно, потому что они не взаимодействуют друг с другом.
Когда сеть содержит задержки, вход в сеть обычно является последовательностью входных векторов, которые происходят в определенном временном порядке. Чтобы проиллюстрировать этот случай, следующий рисунок показывает простую сеть, которая содержит одну задержку.
Следующие команды создают эту сеть:
net = linearlayer([0 1]); net.inputs{1}.size = 1; net.layers{1}.dimensions = 1; net.biasConnect = 0;
Присвойте матрицу веса W = [1 2].
Команда:
net.IW{1,1} = [1 2];
Предположим, что вход последовательность:
Последовательные входы представляются в сеть как элементы массива ячеек:
P = {1 2 3 4};
Теперь можно моделировать сеть:
A = net(P) A = [1] [4] [7] [10]
Вы вводите массив ячеек, содержащий последовательность входов, и сеть создает массив ячеек, содержащий последовательность выходов. Порядок входов важен, когда они представлены в виде последовательности. В этом случае выходной ток получается путем умножения входного тока на 1 и предыдущего входа на 2 и суммирования результата. Если бы вы изменили порядок входов, номера, полученные в выходе, изменились бы.
Если бы вы применили те же входы, что и набор параллельных входов, вместо последовательности входов, вы получили бы совершенно другой ответ. (Однако непонятно, почему вы хотели бы сделать это с динамической сетью.) Было бы так, как если бы каждый вход применялся одновременно к отдельной параллельной сети. В предыдущем примере, Симуляции с Последовательными Входами в Динамической Сети, если вы используете параллельный набор входов, у вас есть
который можно создать со следующим кодом:
P = [1 2 3 4];
Когда вы симулируете с параллельными входами, вы получаете
A = net(P) A = 1 2 3 4
Результат такой же, как если бы вы одновременно применили каждый из входов к отдельной сети и вычислили один выход. Обратите внимание, что поскольку вы не назначили никаких начальных условий задержкам сети, они были приняты равными 0. Для этого случая выход просто в 1 раз превышает вход, потому что вес, который умножает токовый вход, равен 1.
В некоторых особых случаях можно хотеть симулировать сетевую реакцию на несколько различных последовательностей одновременно. В этом случае необходимо представить сеть с параллельным набором последовательностей. Например, предположим, что вы хотели представить сети следующие две последовательности:
Область входа P
должен быть массивом ячеек, где каждый элемент массива содержит два элемента двух последовательностей, которые происходят одновременно:
P = {[1 4] [2 3] [3 2] [4 1]};
Теперь можно моделировать сеть:
A = net(P);
Результат выхода сети будет
A = {[1 4] [4 11] [7 8] [10 5]}
Как видим, первый столбец каждой матрицы составляет выходную последовательность, полученную первой входной последовательностью, которая была той, что использовалась в более раннем примере. Второй столбец каждой матрицы составляет выходную последовательность, полученную второй входной последовательностью. Не существует взаимодействия между двумя параллельными последовательностями. Они как будто применялись к отдельным сетям, идущим параллельно.
Следующая схема показывает общий формат входного сигнала сети P
когда существует Q параллельных последовательностей TS временных шагов. Он охватывает все случаи, когда существует один входной вектор. Каждый элемент массива ячеек является матрицей параллельных векторов, которые соответствуют одной и той же точке времени для каждой последовательности. Если существует несколько входных векторов, в массиве ячеек будет несколько строк матриц.
В этом разделе вы применяете последовательные и параллельные входы к динамическим сетям. В Симуляции с Параллельными Входами в Статической Сети вы применили параллельные входы к статическим сетям. Также возможно применить последовательные входы к статическим сетям. Он не изменяет симулированного отклика сети, но может повлиять на способ обучения сети. Это станет ясно из концепций обучения нейронной сети.
Смотрите также Настройте входы и выходные параметры неглубокой нейронной сети.