Почему нейронные сети с одинаковыми свойствами отличаются?

Вступление

Я очень новичок в Искусственный интеллект, машинное обучение и нейронная сеть.

Я пытался закодировать некоторые вещи с помощью FANN (Быстрая Искусственная Нейронная Сеть) библиотека (C ++) для тестирования возможностей системы такого типа.

программирование

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

Чтобы объяснить мои наблюдения, я буду использовать обозначения A-B-C — […] — X изобразить конфигурацию входные нейроны, В нейроны на первом скрытом слое, С нейроны на втором, … и Икс Выходные нейроны.

В этих тестах данные обучения были случайным результатом 2к за работой Функция NOT (f (0) = 1; f (1) = 0) (эквивалентно «!» Во многих языках). Также обратите внимание, что Epoch представляет собой 1 тренировочный тест по всем данным обучения. «ИИ» будет представлять собой обученный ИНС.

В данных обучения не было ошибок.

Вы можете найти весь исходный код на мой GitHub Repo.

Больше не лучше

Во-первых, я заметил, что система 1-1-1 более мощная в 37 эпох, чем 1- [50 слоев 5 нейронов] -1 в 20 тысячах эпох (0,0001 ошибок по сравнению с 0,25).

Мое первое, хотя было то, что второму ИИ нужно больше тренироваться, потому что нужно свести к минимуму больше затрат, но я не уверен, что это единственная причина.

Это побудило меня попробовать некоторые тесты с одинаковым общим количеством нейронов.

Равно не равно

Конфигурация 1-2-2-1 кажется более эффективной, чем 1-4-1

На самом деле, когда я запускаю тест на этих двух разных конфигурациях, я получаю эти выходные данные (программа тестирования написана самостоятельно).
Это два разных теста, «9 **» — текущий индекс теста.

Тест состоит в том, чтобы дать AI случайное значение от 0 до 1 и распечатать вывод. Каждый тест проводился отдельно.

// 1-2-2-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 1.000000, output : 0.009162
[938]Number : 0.000000, output : 1.000000
[939]Number : 0.000000, output : 1.000000
[940]Number : 1.000000, output : 0.009162
[941]Number : 0.000000, output : 1.000000
[942]Number : 0.000000, output : 1.000000

// 1-4-1
[936]Number : 0.000000, output : 1.000000
[937]Number : 0.000000, output : 1.000000
[938]Number : 1.000000, output : 0.024513
[939]Number : 0.000000, output : 1.000000
[940]Number : 0.000000, output : 1.000000
[941]Number : 1.000000, output : 0.024513
[942]Number : 1.000000, output : 0.024513

Вы можете заметить, что первый конфиг дает результат ближе к 0, чем второй. (0.009162 против 0.024513). Это не проблема кодирования IEEE, и эти 2 значения не меняются, если я запускаю другой тест.

В чем причина этого? Попробуем разобраться.

  • Сколько «синапсов» у нас в первом конфиге?

первый

first[0]->second[0]
first[0]->second[1]

затем

second[0]->third[0]
second[0]->third[1]
second[1]->third[0]
second[1]->third[1]

окончательный

third[0]->first[0]
third[1]->first[0]

Таким образом, мы получаем общую сумму 2 + 4 + 2 = 8 синапсов. (и так 8 различных весовых возможностей).

  • Как насчет второй конфигурации?

первый

first[0]->second[0]
first[0]->second[1]
first[0]->second[2]
first[0]->second[3]

окончательный

second[0]->third[0]
second[1]->third[0]
second[2]->third[0]
second[3]->third[0]

Таким образом, мы получаем в общей сложности 4 + 4 = 8 синапсов. (еще 8 различных весовых возможностей).

И на обеих системах мы имеем 4 функции активации (1 на каждый нейрон).

Как мы можем получить значительную разницу возможностей с одинаковыми свойствами?

-1

Решение

В общем, имея много узлов & веса могут привести к чрезмерной специализации нейронной сети. В некотором экстремальном примере: если у вас есть несколько тысяч изображений, нейронная сеть с миллиардом миллиардов узлов (и многими другими весами) будет рисковать изучением каждого пикселя в ваших тренировочных данных вместо того, чтобы находить понятия «глаз», « уши «, … которые составляют» лицо «. Поэтому, когда вы представляете эту сверхспециализированную нейронную сеть с различными изображениями, она не будет работать на них (или, по крайней мере, не очень хорошо). Он не разработал абстрактные понятия (например, «у кошки есть уши и глаза», а у «дома есть окна»).

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

Те же свойства:
Количество весов одинаково, но структура различна. Нейронная сеть, состоящая из прямой линии узлов (1-1-1 -…- 1), будет вести себя совершенно иначе, чем более компактная (1-20-1). Сеть 1-1-1 -…- 1 может даже не узнать, что может изучить сеть 1-20-1 (хотя существуют некоторые правила относительно количества узлов / весов, которые вам необходимы для изучения булевой алгебры, хотя я не помню их).

Я подозреваю, что «1-4-1» показывает большее отклонение от ожидаемого результата, так как на каждый промежуточный узел влияет больше весов — чем больше весов, чтобы получить право на узел, тем дольше будет проходить обучение.

В сети 1-2-2-1 первый промежуточный уровень имеет только один весовой коэффициент в качестве входных данных на узел, второй промежуточный уровень имеет 2 весовых коэффициента на узел, а выходной уровень имеет два весовых коэффициента на узел. Таким образом, самое большее, вы можете «шевелиться» по двум значениям на промежуточный узел.

Я не знаю деталей вашей нейронной сети (функция, к которой применяется вес), но если вы подумаете о следующем примере, это может прояснить ситуацию:

  • давайте предположим, что функция f (вес, вход) = вход * вес + константа
  • далее наша сеть — 1-1 (т. е. она имеет один вес для определения)

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]