Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Следовательно, никакого обучения нейронов в рассматриваемой НС производить не нужно
, что делает возможным обучение в широком спектре приложений.
Они не склонны к переобучениюТак есть там обучение или нет?
Есть обучение у 1-го слоя
Есть обучение у 3-го слояКак оно происходит? Как обычно, через backpropagation?
построение минимальной ДНФ функции (подробнее об этом по ссылке на предыдущую мою статью).Мне пока не нужно подробнее. Объясните вкратце, как о предыдущих двух объяснили, пожалуйста.
нахождению функций распределения вероятностейСложно назвать обучением в данном случае, но понятно.
Т. е. с помощью нейронов происходит переход из N-мерного пространства входных сигналов в M-мерное пространство нейронов с двоичной метрикой.Или, N-мерное гипер-пространство «сворачивается» в M-мерный гиперкуб.
Правильно ли я понимаю, что нелинейное преобразование входных данных нужно только для того, чтобы равномерно распределить точки по гипер-пространству?Правильно.
А оно в свою очередь нужно только для того, чтобы минимизировать количество нейронов в скрытом слое, так как они равномерно делят пространство.Нет. Равномерность в единичном гиперкубе нужна для того, чтобы максимально использовать его пространство. Иначе, если все исходные точки будут транслироваться в какую-то небольшую область куба, то может так получиться, что нейроны просто «незаметят» их.
А сами эти нейроны по сути — элементарные детекторы с бинарным выходом, и фактически могут быть заменены на совершенно другие.Да, нейроны это детекторы с бинарным выходом, которые показывают с какой стороны относительно их плоскостей располагается конкретная точка.
И в итоге весь интеллект сосредотачивается в алгоритме, который строит логическую функцию.Да, от логической функции многое зависит. Соответственно, алгоритм минимизации (построения) очень важен с точки зрения нахождения оптимальной функции.
У Вас обширный код, есть ли этот алгоритм в обособленном виде? Чтобы можно было ему скормить массив бинарных векторов + выход и получить логическую функцию.habr.com/ru/post/424517
Пробовали распознавать, допустим, какие-нибудь элементарные изображения?Вообще, представленная сеть работает с одномерными векторами. Поэтому напрямую с изображениями она работать не может. Но если доработать…
Нет. Равномерность в единичном гиперкубе нужна для того, чтобы максимально использовать его пространство. Иначе, если все исходные точки будут транслироваться в какую-то небольшую область куба, то может так получиться, что нейроны просто «незаметят» их.Именно это я и имел в виду. Чтобы точки не кучковались. Если они будут плотно лежать в какой-то области пространства, а разбиение плоскостями всего пространства равномерное, то потребуется очень много плоскостей, чтобы разбить этот плотный участок. При этом на разряженные участки будет бессмысленно потрачены нейроны. То есть, равномерность позволяет уменьшить необходимое число нейронов. Поэтому я и назвал это «минимизацией».
Вообще, представленная сеть работает с одномерными векторами. Поэтому напрямую с изображениями она работать не может. Но если доработать…Есть идея простого детектора (типа направленной On/Off клетки в сетчатке) — просто бить изображение на две части случайным образом (как на картинке у Вас в примере), считать яркость обеих половин и выдавать бинарный ответ: «ярче ли левая половина?».
Именно это я и имел в виду. Чтобы точки не кучковались. Если они будут плотно лежать в какой-то области пространства, а разбиение плоскостями всего пространства равномерное, то потребуется очень много плоскостей, чтобы разбить этот плотный участок. При этом на разряженные участки будет бессмысленно потрачены нейроны. То есть, равномерность позволяет уменьшить необходимое число нейронов. Поэтому я и назвал это «минимизацией».Действительно, я не понял. В этом смысле всё правильно
Есть идея простого детектора (типа направленной On/Off клетки в сетчатке) — просто бить изображение на две части случайным образом (как на картинке у Вас в примере), считать яркость обеих половин и выдавать бинарный ответ: «ярче ли левая половина?».Не очень понял причём здесь НС, если можно напрямую подсчитать два значения яркости и сравнить их как два числа.
Вы этот подход разрабатываете «самостоятельно», или отталкиваетесь от каких-то биологических исследований? Спрашиваю, потому что, во-первых, массив элементарных детекторов — это то, с чего начинается обработка в живых нейронных сетях. И во-вторых, у нейронов далее по тракту обработки обнаруживаются логические функции.Данная НС вообще никак не привязана к мозгу или каким-то другим биологическим объектам. Для меня это чисто математическая абстракция — алгоритм. Упоминание здесь нейронов — только дань исторической традиции: так уж повелось в машинном обучении, что такие бинарные конструкции называются нейронами, а их совокупность — нейронной сетью. Я успешно применял данную НС в анализе финансовых рядов и показателей, т. е. в области далёкой от биологии. То что в биологических объектах есть похожие конструкции — ничего удивительного, т. к. всё во вселенной функционирует в соответствии с математическими законами.
Обобщение возникает в результате того, что точки внутри ограниченной плоскостями области отображаются в одну и ту же вершину гиперкуба, так? Логическая функция же как бы «собирает» эти области, где результат равен true, отбрасывая остальные. Вершина гиперкуба — это индекс/идентификатор ограниченной области. То есть, как альтернатива логической функции — просто список идентификаторов этих ограниченных областей / вершин куба.Не уверен, что полностью понял сообщение, но поводу логической функции думаю верно — она действительно пытается укрупнить, т. е. «собрать» в единое целое смежные ячейки пространства, которые были рассечены плоскостями нейронов и в которые попали точки только одного класса (0 или 1).
Если сеть на тестовых данных выдала ошибку, то как делать дообучение? Я так представляю надо эту область, в которую попала «ошибочная» точка бить дополнительной партией плоскостей на более мелкие области и уточнять логическую функцию. Вы этот вопрос как-то решаете с дообучением, я так понимаю, это требует введение новых нейронов?На этот вопрос нет неоднозначного ответа. Наличие ошибок на тестовых или обучающих выборках это нормально. Зависит от того, что хотите получить из НС. Если хотите превратить НС в устройство памяти, которое идеально воспроизведёт обучающую выборку, то можете поступить так, как написали. Но не стоит удивляться потом, если НС на других тестовых данных не сумеет вообще ничего угадать. Вы же создали элемент памяти обучающей выборки, а не устройство, которое выявляет закономерности в данных. В реальности же из любой закономерности бывают исключения и они могут встречаться в обучающей выборке. Важно, чтобы НС не подстроилась под эти исключения и тогда она подстроится под общую закономерность в данных. А то, что для небольшого количества исключений из закономерности НС выдаст ошибку — это не страшно. Наоборот, эту ситуацию можно использовать в свою пользу: 1. НС нашла закономерность в данных; 2. Она нашла точки, которые не попадают под эту закономерность. Двойной профит так сказать.

НС нашла закономерность в данныхЕсли всё происходит так, как я выше описал, то, честно, не вижу у сети способности поиска закономерностей (предсказательности). Её и не может быть, так как выход бинарный. Сеть не может сказать «очень похоже, что эта новая точка близка к обучающим». Даже если она стоит почти впритык к обучающей точке, но между ними есть разделяющая плоскость. Здесь нет аппроксимации как у классических НС. Поэтому я бы назвал её сложным детектором. То есть, простые детекторы, которые стоят в начале обработки, ограничивают пространство примитивным способом. Но в комплексе все вместе могут «вырезать» из пространства кусок любой замысловатой формы. При этом точность/грубость/приближение этой фигуры ограничивается только количеством нейронов. Это практически как широко известный метод ограничительных объёмов из расчётов в 3D-графике. Но использование его таким способом в ИНС мне не встречалось. Кстати, рекомендую с ним ознакомиться, так как возможно позволит Вам улучшить алгоритм, многократно ускорить расчёт. К примеру, для всех точек, что лежат левее плоскости b5, можно сразу дать ответ 0, не уточняя область.
Хочу всё таки прояснить пару моментов. Вот условный набросок разбиения пространства плоскостями. Каждой плоскости соответствует свой нейрон. Допустим у нас в обучающей выборке только две точки — показаны красным цветом. Они попадают в две ограниченные плоскостями области — A1 и A2.Логическая функция «складывает» смежные области (можно назвать домены), которые отличаются в коде только одной позицией. Например, ниже они отмечены зелёными оттенками. Области A1 и A2 не являются непосредственно смежными, но потенциально в результате минимизации функции на каком-то шаге они могут стать смежными и будут объединены. Всё зависит от окружающей обстановки.
Область A1 ограничивается нейронами: b0, b1, b2, b4. Область A2 — b0, b2, b3, b4, b5. Соответственно каждая область кодируется/адресуется:
A1 — 000..010111
A2 — 000..111101
Логическая функция «складывает» обе эти области в одну.

Под обобщением я понимаю, что любая другая точка (показаны синим цветом) в области A1 даст тот же самый код: 010111. И сеть выдаст результат: 1/true.Понятно. Логическая функция предполагает, что в каждой элементарной области, будет находится только одна точка, имеющая признак 0 или 1. Если в областях A1, A2 или любой другой находятся одновременно точки с разными признаками и 0 и 1, то это аномальная ситуация для логической функции и здесь можно:
Области, в которые не попали точки из обучающей выборки сеть не «распознает», выдаст 0/false. То есть, к примеру, на точку в близко примыкающей к A1 и A2 области, ограниченной b0, b2, b4 сеть выдаст 0.
И под дообучением я имел в виду следующее. Если в процессе работы выяснилось, что синяя точка в A2 не должна давать положительный ответ, то следует добавить новый нейрон и разбить область A2 пополам между новой точкой (синяя) и ранее обученной (красная). То есть, «доработать напильником» ограничительный объём.
Если всё происходит так, как я выше описал, то, честно, не вижу у сети способности поиска закономерностей (предсказательности). Её и не может быть, так как выход бинарный. Сеть не может сказать «очень похоже, что эта новая точка близка к обучающим». Даже если она стоит почти впритык к обучающей точке, но между ними есть разделяющая плоскость. Здесь нет аппроксимации как у классических НС. Поэтому я бы назвал её сложным детектором.Если точки в пространстве единичного куба занимают устойчивое или фиксированное положение, то данная сеть подстраивается под этот «образ» и выдаёт правильный результат. Если же точки в пространстве куба хаотически перемещаются и не дают устойчивой картинки, то НС в этом случае бессильна.

Пришествие бинарных нейронных сетей на основе случайных нейронов и логических функций