@Mersi_dems

Можно ли заставить нейросеть заставить избегать определенных состояний?

Приветствую, есть один вопрос .
Можно ли заставить нейросеть избегать определенных состояний ?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 2
mayton2019
@mayton2019
Bigdata Engineer
Нейросеть - это функция с множеством входов и множеством выходов.

Краткий ответ - да можно. Если при обучении вы будете указывать отсуствие этих состояний.

Более полный ответ - зависит от архитектуры сети. Например сеть Хопфилда не то что избегает а скорее наоборот
притягивается к нужному числу состояний. В этом ее суть. Как ее заставить что-то избегать я не знаю. Скорее
это вопрос философии и определений чем вопрос математики.

Вот если автор конкретизирует свой вопрос на примере - то тогда наверное можно что-то обсудить.
Ответ написан
Комментировать
@rPman
Главный инструмент обучения нейросети (не единственный) - это создание функции ошибки и подбор параметров для ее минимизации.

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

Классический но не единственный способ определения функции ошибки - это сумма всех расстояний (если вектор состояния это координаты в многомерном пространстве) между ожидаемым выходом и полученным текущей сетью. Самая простая метрика расстояния для одного 'эксперимента' - квадратный корень суммы квадратов разницы значений векторов, т.е. A(a1,a2,a3,...) - это вектор из обучающей выборки, а B(b1,b2,b3,...) то что вернула сеть, то расстояние sqrt((a1-b1)^2+(a2-b2)^2+...), соответственно полученные ошибки нужно просто сложить для всей обучающей выборки, и получить полную ошибку.

Так вот, есть разные способы повысить/понизить значимость конкретному значению вход+выход из обучающей выборки - это:
a) добавить коэффициент к ошибке, т.е. умножить ошибку на какое то фиксированное значение (для каждой пары вход-выход свое значение, по умолчанию 1), увеличивая этот коэффициент можно заставить нейросеть более строго изучать какие то конкретные примеры из обучающей выборки, а какие то наоборот, менее строго.
b) исключать примеры из обучающей выборки или добавлять их несколько раз (я находил несколько исследований этого метода, точнее частично похожих на это)

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

Почему это актуально и работает? одна из старейших проблем обучения нейронной сети - это попадание в локальные минимумы ошибки, если представить значение ошибки как поверхность в многомерном пространстве а текущее значение нейронной сети - шарик, скатывающийся вниз под действием гравитации, то там будут горы, равнины, что то типа русл рек и т.п. и в процессе обучения обучение может зайти в местную ложбинку и вылезать от туда долго (в многомерной оптимизации есть разные техники против этого). Напоминаю - мерность этого ландшафта тут - количество весов нейронной сети + 1, поэтому красивой визуализации не получится.

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

p.s. могу предложить один алгоритм, выбора какие примеры из обучающей выборки нужно исключать а какие нет - периодически, с некоторой частотой, из обучающей выборки исключаются примеры, по которым сеть выдает хороший результат, т.е. которые заучила или по которым выявила закономерности (ошибка меньше некоторого порога или выбирать какой то процент примеров, отсортированных по значению этой ошибки).

В этом случае сеть будет обучаться дольше на тех примерах, которые у нее не получаются и не будет тратить время на те примеры, с которыми она уже разобралась. Само собой, любое обучение без хороших примеров заставит сеть забывать их, поэтому их нужно возвращать назад в выборку, можно даже привязать вероятность исключения примера обратно пропорционально ошибке, поделив на какое то число (чтобы они все же попадали в выборку)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Можно, называется - обучение
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы