|
|
(20 промежуточных версий не показаны.) |
Строка 1: |
Строка 1: |
| <big>Решетов Юрий Вячеславович</big> | | <big>Решетов Юрий Вячеславович</big> |
- |
| |
- | == Проект RNN ==
| |
- |
| |
- |
| |
- | Нейросеть RNN (Reshetov Neural Network), является тернарным классификатором и имеет три слоя:
| |
- |
| |
- | 1. Входной слой. Входные данные нормируются в диапазоне от 0 до 1 включительно.
| |
- |
| |
- | 2. Логический слой. Состоит из взаимоисключающих логических формул нечёткой логики. Количество взаимоисключающих формул для логического слоя равно 2^n, где n – количество входов нейросети
| |
- |
| |
- | 3. Выходной слой. Один искусственный нейрон.
| |
- |
| |
- |
| |
- |
| |
- | == Логический слой ==
| |
- |
| |
- |
| |
- | Закодируем входные значения в виде двоичных чисел. Например, у нас три входа, следовательно понадобится 2^3 = 8 логических состояний.
| |
- |
| |
- | 000
| |
- |
| |
- | 001
| |
- |
| |
- | 010
| |
- |
| |
- | 011
| |
- |
| |
- | 100
| |
- |
| |
- | 101
| |
- |
| |
- | 110
| |
- |
| |
- | 111
| |
- |
| |
- | Заменим 0 на 1 – x<sub>i</sub>, а 1 на x<sub>i</sub>, где i – номер входа и перемножим арифметические выражения:
| |
- |
| |
- | (1- x<sub>0</sub>) * (1 – x<sub>1</sub>) * (1 – x<sub>2</sub>)
| |
- |
| |
- | (1- x<sub>0</sub>) * (1 – x<sub>1</sub>) * x<sub>2</sub>
| |
- |
| |
- | (1- x<sub>0</sub>) * x<sub>1</sub> * (1 – x<sub>2</sub>)
| |
- |
| |
- | (1- x<sub>0</sub>) * x<sub>1</sub> * x<sub>2</sub>
| |
- |
| |
- | x<sub>0</sub> * (1 – x<sub>1</sub>) * (1 – x<sub>2</sub>)
| |
- |
| |
- | x<sub>0</sub> * (1 – x<sub>1</sub>) * x<sub>2</sub>
| |
- |
| |
- | x<sub>0</sub> * x<sub>1</sub> * (1 – x<sub>2</sub>)
| |
- |
| |
- | x<sub>0</sub> * x<sub>1</sub> * x<sub>2</sub>
| |
- |
| |
- |
| |
- | Присвоим каждое арифметическое выражение переменной:
| |
- |
| |
- | Out<sub>0</sub> = (1 - x<sub>0</sub>) * (1 – x<sub>1</sub>) * (1 – x<sub>2</sub>)
| |
- |
| |
- | Out<sub>1</sub> = (1 - x<sub>0</sub>) * (1 – x<sub>1</sub>) * x<sub>2</sub>
| |
- |
| |
- | Out<sub>2</sub> = (1 - x<sub>0</sub>) * x<sub>1</sub> * (1 – x<sub>2</sub>)
| |
- |
| |
- | Out<sub>3</sub> = (1 - x<sub>0</sub>) * x<sub>1</sub> * x<sub>2</sub>
| |
- |
| |
- | Out<sub>4</sub> = x<sub>0</sub> * (1 – x<sub>1</sub>) * (1 – x<sub>2</sub>)
| |
- |
| |
- | Out<sub>5</sub> = x<sub>0</sub> * (1 – x<sub>1</sub>) * x<sub>2</sub>
| |
- |
| |
- | Out<sub>6</sub> = x<sub>0</sub> * x<sub>1</sub> * (1 – x<sub>2</sub>)
| |
- |
| |
- | Out<sub>7</sub> = x<sub>0</sub> * x<sub>1</sub> * x<sub>2</sub>
| |
- |
| |
- |
| |
- | Переменные Out<sub>0</sub>, Out<sub>1</sub>, …, Out<sub>7</sub> – выходы логического слоя.
| |
- |
| |
- | Подадим выходы логического слоя на искусственный нейрон с весовыми коэффициентами:
| |
- |
| |
- | Probability = Out<sub>0</sub> * w<sub>0</sub> +
| |
- | Out<sub>1</sub> * w<sub>1</sub> +
| |
- | Out<sub>2</sub> * w<sub>2</sub> +
| |
- | Out<sub>3</sub> * w<sub>3</sub> +
| |
- | Out<sub>4</sub> * w<sub>4</sub> +
| |
- | Out<sub>5</sub> * w<sub>5</sub> +
| |
- | Out<sub>6</sub> * w<sub>6</sub> +
| |
- | Out<sub>7</sub> * w<sub>7</sub>
| |
- |
| |
- | Где:
| |
- |
| |
- | w<sub>0</sub>, w<sub>1</sub>, …, w<sub>7</sub> – весовые коэффициенты в диапазоне значений от 0 до 1 включительно.
| |
- |
| |
- | Probability – значение на выходе RNN и одновременно вероятность принадлежности паттерна к одному из классов.
| |
- |
| |
- |
| |
- | == Обучение сети RNN ==
| |
- |
| |
- |
| |
- | Обучение сети RNN сводится к обучению выходного слоя, т.е. подбору коэффициентов искусственного нейрона на выходе сети.
| |
- |
| |
- | Обучение RNN тривиально, т.к. оно сводится к решению системы линейных неравенств.
| |
- |
| |
- |
| |
- | Предположим, что у нас есть обучающая выборка:
| |
- |
| |
- | x<sub>11</sub>, x<sub>12</sub>, …, x<sub>1n</sub>, y<sub>1</sub>
| |
- |
| |
- | x<sub>21</sub>, x<sub>22</sub>, …, x<sub>2n</sub>, y<sub>2</sub>
| |
- |
| |
- | …
| |
- |
| |
- | x<sub>m1</sub>, x<sub>m2</sub>, …, x<sub>mn</sub>, y<sub>m</sub>
| |
- |
| |
- | Где:
| |
- |
| |
- | x<sub>ij</sub> – j-е входное значение для i-го примера в диапазоне от 0 до 1 включительно
| |
- |
| |
- | y<sub>i</sub> – выходное значение для для i-го в бинарном диапазоне 0 либо 1
| |
- |
| |
- |
| |
- | В этом случае система линейных неравенств имеет вид:
| |
- |
| |
- | Out<sub>11</sub> * w<sub>1</sub> + Out1<sub>2</sub> * w<sub>2</sub> +…+ Out<sub>1n</sub> * w<sub>n</sub> Z<sub>1</sub> 0.5
| |
- |
| |
- | Out<sub>21</sub> * w<sub>1</sub> + Out<sub>22</sub> * w<sub>2</sub> +…+ Out<sub>2n</sub> * w<sub>n</sub> Z<sub>2</sub> 0.5
| |
- |
| |
- | …
| |
- |
| |
- | Out<sub>m1</sub> * w<sub>1</sub> + Out<sub>m2</sub> * w<sub>2</sub> +…+ Out<sub>mn</sub> * w<sub>n</sub> Z<sub>m</sub> 0.5
| |
- |
| |
- |
| |
- | Где:
| |
- |
| |
- | Out<sub>ij</sub> – j-е выходное значение логического слоя для i-го примера
| |
- |
| |
- | w<sub>j</sub> – j-й весовой коэффициент выходного слоя
| |
- |
| |
- | Z<sub>i</sub> – знак неравенства для i-го примера в виде ≥ если y<sub>i</sub> = 1 (принадлежит к первому классу объектов) и ≤ если y<sub>i</sub> = 0 (принадлежит ко второму классу объектов)
| |
- |
| |
- | Несложно понять, что вышеуказанная система линейных неравенств всегда имеет тривиальное решение, значение всех весовых коэффициентов выходного искусственного нейрона равна 0.5, в силу того, что сумма всех значений на выходе логического слоя сети всегда равна 1.
| |
- |
| |
- | Соответственно, если существует решение системы неравенств при котором значение хотя бы одного единственного весового коэффициента не равно 0.5, т.е. решение нетривиально, то RNN обучаема. Если такого решения не существует, то обучающая выборка нерепрезентативна.
| |
- |
| |
- | Соответственно метод обучения сети RNN сводится к алгоритмам оптимизации линейных неравенств, т.е. линейному программированию.
| |
- |
| |
- |
| |
- | == Свойства сети RNN ==
| |
- |
| |
- |
| |
- |
| |
- | Сеть RNN в отличие от других общеизвестных нейронных сетей требовательна к полноте и непротиворечивости данных в обучающей выборке. Т.е. если обучающие примеры содержат паттерны, имеющие неоднозначности или содержат неполную информацию, то вероятность таких паттернов на выходе сети будет равной 0.5.
| |
- |
| |
- | Если другие нейросети не требовательны к обучающей выборке и могут обучиться на любых, в том числе и на случайных, противоречивых либо не полных данных, то в RNN этот недостаток устранён.
| |
- |
| |
- | Для наглядности лучше привести примеры:
| |
- |
| |
- | Предположим, что нам необходимо обучить сеть RNN данным моделирующим логическую функцию y = A ИЛИ B:
| |
- |
| |
- |
| |
- | {| class="wikitable" style="text-align: center"
| |
- | ! Значение на входе A !! Значение на входе B !! Значение на выходе
| |
- | |-
| |
- | | 0 || 0 || 0
| |
- | |-
| |
- | | 0 || 1 || 1
| |
- | |-
| |
- | | 1 || 0 || 1
| |
- | |-
| |
- | | 1 || 1 || 1
| |
- | |}
| |
- |
| |
- | Если обучающие примеры представить в виде вышеприведенной таблицы, то результаты работы сети будут точно соответствовать табличным паттернам.
| |
- |
| |
- | Предположим, что в обучающей выборке содержится неполная информация, т.е. исключим один из примеров:
| |
- |
| |
- | {| class="wikitable" style="text-align: center"
| |
- | ! Значение на входе A !! Значение на входе B !! Значение на выходе
| |
- | |-
| |
- | | 0 || 0 || 0
| |
- | |-
| |
- | | 0 || 1 || 1
| |
- | |-
| |
- | | 1 || 1 || 1
| |
- | |}
| |
- |
| |
- | В этом случае, для оставшихся в обучающей выборке примеров, обученная сеть RNN даст результат, точно соответствующий табличным данным, а для примера, отсутствующего в выборке вероятность будет равна 0.5:
| |
- |
| |
- | {| class="wikitable" style="text-align: center"
| |
- | ! Значение на входе A !! Значение на входе B !! Значение на выходе RNN
| |
- | |-
| |
- | | 0 || 0 || 0
| |
- | |-
| |
- | | 0 || 1 || 1
| |
- | |-
| |
- | | 1 || 0 || 0.5
| |
- | |-
| |
- | | 1 || 1 || 1
| |
- | |}
| |
- |
| |
- | Т.е. RNN не измышляет гипотез и не интерпретирует информацию о которой ей ничего не было известно в процессе обучения, а помечает её, как неопределенность.
| |
- |
| |
- | *Еще один пример, добавим противоречия в обучающую выборку:
| |
- |
| |
- | {| class="wikitable" style="text-align: center"
| |
- | ! Значение на входе A !! Значение на входе B !! Значение на выходе
| |
- | |-
| |
- | | 0 || 0 || 0
| |
- | |-
| |
- | | 0 || 1 || 1
| |
- | |-
| |
- | | 1 || 0 || 0
| |
- | |-
| |
- | | 1 || 0 || 1
| |
- | |-
| |
- | | 1 || 1 || 1
| |
- | |}
| |
- |
| |
- |
| |
- | После обучения сети получаем результаты:
| |
- |
| |
- | {| class="wikitable" style="text-align: center"
| |
- | ! Значение на входе A !! Значение на входе B !! Значение на выходе RNN
| |
- | |-
| |
- | | 0 || 0 || 0
| |
- | |-
| |
- | | 0 || 1 || 1
| |
- | |-
| |
- | | 1 || 0 || 0.5
| |
- | |-
| |
- | | 1 || 1 || 1
| |
- | |}
| |
- |
| |
- | Т.е. что недостающую информацию, что противоречивую, сеть RNN трактует как неопределенность, т.е. помечает вероятностью 0.5.
| |
- |
| |
- | При попытках обучения сети RNN с помощью оптимизации системы линейных неравенств алгоритмом линейного программирования на обучающей выборке, созданной с помощью генератора псевдослучайных последовательностей, значительная часть паттернов имеет на выходе значения равные 0.5, и незначительная значения значения очень близкие к 0.5.
| |
- |
| |
- |
| |
- |
| |
- | Выводы:
| |
- |
| |
- |
| |
- | Сеть RNN, обученная алгоритмом линейного программирования, путём оптимизации системы линейных неравенств, способна устранять (аннигилировать) дезинформацию в обучающей выборке и обучается только на выявленных закономерностях.
| |
- |
| |
- |
| |
- |
| |
- |
| |
- | == Природа недоразумений ==
| |
- |
| |
- |
| |
- | Любое недоразумение — это наличие противоречий в обучающей выборке. Т. е. в обучающей выборке есть некое утверждение и есть один или более котрпримеров, опровергающих это самое утверждение.
| |
- |
| |
- | Откуда берутся недоразумения? Теоретически их причиной могут быть ошибки и неточности, как измерений, так и документирования данных. Предположим, что мы имеем идеальную систему измерений и документирования, в которой любые ошибки и неточности исключены. Тогда основной причиной недоразумений будет являться недостаточность факторов для выявления закономерностей.
| |
- |
| |
- | Пример:
| |
- |
| |
- | Пусть у нас есть электрическая цепь, в которую включены последовательно: источник питания, два рубильника А и В, электрическая лампа. Если оба рубильника А и В включены, то электрическая лампочка загорается. Также есть третий рубильник C, который не включен в электрическую цепь.
| |
- |
| |
- | Предположим, что есть группа ученых, задача которых заключается в том, чтобы выяснить причины свечения электрической лампы в зависимости от состояния включенности или выключенности рубильников. При этом предполагается, что рубильники включаются и выключаются некими третьими лицами, о которых ученым ничего неизвестно. Сами ученые могут только наблюдать за состоянием рубильников и свечением лампочки.
| |
- |
| |
- | Очевидно, что если ученые имеют возможность наблюдать все рубильники, то рано или поздно они выяснят закономерность, согласно которой лампочка загорается при одновременном включении рубильников А и В и независима от состояния рубильника С.
| |
- |
| |
- | А теперь предположим, что ученые не имеют никакой возможности наблюдать состояние включенности рубильника B. Что произойдет в этом случае? Очевидно, что произойдет недоразумение, т. е. ученые смогут выяснить, что выключение лампочки связано с выключением рубильника А. Но при включении лампочки они смогут выяснить лишь то, что для этого необходимо, но недостаточно, чтобы рубильник А был включен.
| |
- |
| |
- | Создадим обучающую выборку из всех возможных взаимоисключающих состояний известных факторов:
| |
- |
| |
- | {| class="wikitable" style="text-align: center"
| |
- | ! Состояние рубильника А !! Состояние рубильника C !! Состояние электрической лампы !! Результат обучения RNN
| |
- | |-
| |
- | | Выключен || Выключен || Не горит || 0
| |
- | |-
| |
- | | Выключен || Включен || Не горит || 0
| |
- | |-
| |
- | | Включен || Выключен || Не горит || 0.5
| |
- | |-
| |
- | | Включен || Включен || Не горит || 0.5
| |
- | |-
| |
- | | Включен || Выключен || Горит || 0.5
| |
- | |-
| |
- | | Включен || Включен || Горит || 0.5
| |
- | |}
| |
- |
| |
- |
| |
- |
| |
- | В этом случае учёным удастся выяснить независимость состояния лампочки от состояния включенности рубильника С, поскольку результат в последнем столбце таблицы — это вероятность того, что рубильник А включен, поделенная на два.
| |
- |
| |
- | Но полную картину зависимостей состояния лампочки от состояния рубильников выявить никаким образом не удастся, т. к. для этого не достаёт одного фактора — состояния включенности рубильника B.
| |
- |
| |
- | Выводы: основой противоречий в обучающих выборках является недостаточность факторов. При отсутствии прямой или косвенной информации о значимых факторах в случае независимости состояния известных факторов от состояния значимых
| |