>>> Если сеть обучается только на размеченных данных , то нет шанса детектировать объекты вне "предметного поля" - для них просто нету специализированных распознавателей.
В машинном обучении с размеченным данными есть обучающая выборка, валидационная и тестовая.
На обучающей выборке до недавнего времени проводили послойное предобучение без учителя, чтобы корректно инициализировать веса. Это было эквивалентом наработки базовых примитивов. Потом уже шло обучение с учителем.
Чтобы модель не стала высокоспециализированной на обучающей выборке её тестируют на валидационном множестве примеров. Очень часто сеть может научиться распознавать обучающую выборку ещё лучше и точнее, но при этом точность распознания на валидационном множестве у неё падает. Происходит переобучение.
Чтобы скрытые слои сети давали качественные уровни абстрагирования (ты про это пишешь, как про фишку биологических сетей) часть связей между слоями нейронов отключают случайным образом - это так называемая процедура дропаута. В итоге удаётся создавать сети, которые находят абстракции, которые приспособлены ко множеству архитектур нейронных сетей. Получаются слои, в которых нет высоко специализированных нейронов, а компетенция распространена по всему слою.
Если дропаута не делать, то сеть обучается под конкретную архитектуру, появляются высокоспециализированные нейроны, которые могут пытаться работать за весь слой - это плохо. Экспериментально установлено, что такие сети хуже себя ведут на реальных данных. А мы, повторюсь, обучаем сеть не для того, чтобы она хорошо угадывала размеченные картинки, а чтобы она хорошо распознавала объекты на новых данных, о которых мы имеем очень смутное, приблизительное представление.
Соответственно, сейчас в машинном обучении умеют делать предообучение (обучение без учителя на тренировочном множестве) и умеют хорошо разбивать слои по уровням абстракции.
После того, как сеть обучена на тренировочном множестве и остановлена на валидационном, её прогоняют на тестовом множестве и смотрят результат.
Цель при этом, хорошо распознавать объекты на новых данных. Если у тебя сеть обучалась на данных, которые потом никак не соотносятся с реальными данным, то это твои проблемы, ты должен давать ей корректные обучающие выборки.
Ещё немного о дропауте простым языком:
http://www.nanonewsnet.ru/articles/2016/kak-obuchaetsya-ii
Как же всё-таки сделать так, чтобы каждый нейрон обучался какому-нибудь полезному признаку? И снова мы возвращаемся к регуляризации. В данном случае речь идет о дропауте (dropout; переводов хороших для этого слова мы не знаем, да и бог с ним). Как мы уже упоминали, обучение нейронной сети обычно производят стохастическим градиентным спуском, случайно выбирая по одному объекту из выборки. Дропаут-регуляризация заключается в том, что при выборе очередного объекта изменяется структура сети: каждая вершина выбрасывается из обучения с некоторой вероятностью. Выбросив, скажем, половину нейронов, мы получим “новую” архитектуру сети.
Проведя обучение на оставшейся половине нейронов, мы увидим очень интересный результат. Теперь каждый нейрон должен обучиться выделять какой-нибудь признак сам. Он не может “рассчитывать” на то, что объединится с другими нейронами, потому что те могут быть выключены.
С дропаутом мы словно усредняем гигантскую смесь разных архитектур: получается, что мы на каждом тестовом примере строим новую модель, на каждом тестовом примере берём одну модель из гигантского ансамбля и обучаем на один шаг, затем для следующего примера берём другую модель и обучаем её на один шаг, а потом в конце на выходе усредняем все эти модели. Это очень простая с виду идея; но оказывается, что дропаут дает очень сильный эффект практически на всех глубоких моделях.
И ещё одно небольшое лирическое отступление, которое свяжет то, что происходит сейчас, с тем, с чего мы начинали. Что делает нейрон при дропауте? У него есть своё значение, это обычно число от 0 до 1 или от —1 до 1. И он его посылает, но не всегда, а с вероятностью ½. Но что если поменять местами эти числа? Пускай теперь нейроны посылают всегда один и тот же по величине сигнал, а именно ½, но с вероятностью, равной своему значению. Средний выход нейрона от этого не изменится, но в результате у нас получатся стохастические нейроны, случайно посылающие сигналы. Интенсивность, с которой они это делают, зависит от их выхода. Чем больше выход, чем более нейрон активирован, тем чаще он будет посылать сигналы. Ничего не напоминает? Мы говорили об этом в самом начале статьи: нейроны в мозге работают именно так. Как и в мозге, нейрон не передает амплитуду спайка, нейроны передают один бит — факт спайка.
Интересно, что с применением дропаута и грамотной инциализации уходит потребность в предобучении (обучении без учителя).
В мозге первичные распознаватели тоже не являются предобученным в строгом смысле слова. На сегодня не вполне понятно, как формируются первичные распознователи, какова регулирующая роль генов и эпигенетических факторов. Известно, например, что при переключении первичных слуховых и визуальных зон у эмбрионов животных (переключении между собой входов в эти зоны) ничего страшного не происходит, вырастают вполне адекватные животные. У таких животных есть некоторые проблемы со зрением и со слухом, но не серьёзные.
То есть так называемое "обучение без учителя" (другое название: "предопределенное обучение" - (c) Марвин Минский) в первичных зонах - это тема для дальнейших исследований. Верно, что в итоге в этих областях распознаются базовые примитивы, но детали того, как происходит формирование этих распознавателей, по-моему, плохо изучены.
Я думаю, что nan меня поправит, т.к. у него скорее всего есть гораздо более качественные представления по этому вопросу. Я сам только разбираюсь.
>>> нет шанса детектировать объекты вне "предметного поля"
Это верно и для биологических сетей. Если ты не будешь показывать котёнку горизонтальных линий и зафиксируешь его так, чтобы он не мог шевелиться, то у него не сформируются горизонтальные распознаватели. У него есть генетическая склонность к формированию таких распознователей, но если не будет стимуляции со стороны среды, то в результате прунинга эти распознаватели отключатся.
Опять же, если мы говорим об абстракциях высокого уровня, реальных абстракциях, которые формируются с учётом гомеостаза системы, окрашены личным субъективным опытом, то вполне возможно, что ты не сможешь увидеть принципиально новый объект, если он вдруг окажется в твоём поле зрения. Детекторы "новизна x значимость" просто не сработают.
https://scorcher.ru/neuro/neuro_sys/invisible/invisible2.php - белая слепота.
В целом же, современные искусственные нейронные сети можно дообучать:
https://habr.com/ru/post/344222/ - Как построить классификатор изображений на основе предобученной нейронной сети
Это не было бы возможно, если бы сети реально глубоко затачивались под обучающие выборки.
Вот конкретные рекомендации по переобучению предобученных сетей:
Наборы данных похожи, новых данных много.
Необходимо обучить на новых данных несколько верхних слоев предобученной модели с малой скоростью обучения.
Наборы данных похожи, новых данных мало.
Необходимо обучить линейный классификатор на признаках, извлеченных из верхних слоев предобученной модели.
Наборы данных не похожи, новых данных много.
Необходимо обучить на новых данных большое количество слоев предобученной модели с малой скоростью обучения.
На сегодня использование предобученных сетей - обычная история. Поскольку обучение искусственных нейронных сетей стоит дорого, становится выгодно дообучать сети, которые уже прошли определенное обучение за счёт крупных компаний, исследовательских институтов.
При этом такие предобученные сети можно использовать не целиком, их можно частично разбирать, то есть работать и (?)дообучать(?) отталкиваясь от разных уровней абстрагирования. Это возможно в том числе благодаря процедуре дропаута, когда мы не даём слою / слоям во время обучения подстраиваться под конкретную архитектуру сетки.
Я думаю, что я на твои возражения смог ответить только частично, но может быть этого достаточно, и ты как-то скорректируешь вопрос, прояснишь его, если посчитаешь нужным.