Как стать автором
Обновить

Нейросети и глубокое обучение, глава 4: визуальное доказательство того, что нейросети способны вычислить любую функцию

Время на прочтение21 мин
Количество просмотров21K
Всего голосов 22: ↑20 и ↓2+18
Комментарии27

Комментарии 27

Человек на полном серьезе написал, что механизм аппроксимации (нейросеть) позволяет аппроксимировать (приблизительно вычислить) аппроксимируемую функцию?
Гениально…
С нетерпением жду статьи про ряды

Если я правильно помню, это упрощенная идея доказательства доказательство теоремы Колмогорова-Арнольда, о представимости функции от нескольких переменных функцией одной переменной
ОК, пусть вычислит md5()
Да не вопрос! У вас же есть память для хранения 2^128 нейронов в скрытом слое? :)
И ещё датасет нужен соответствующий) Каждая точка

Всё-таки вычислить или апроксимирвать? Это вроде сильно не одно и тоже. И речь наверно о любых "вычислимых" функциях.

Во-первых, это не значит, что сеть можно использовать для точного подсчёта любой функции. Мы лишь можем получить настолько хорошее приближение, насколько нам нужно
НЛО прилетело и опубликовало эту надпись здесь
Мне больше нравится объяснение, что для каждой возможной комбинации входных параметров можно все выходы сделать 0, кроме одного, и тогда нейросеть превращается в обычную табличную функцию. Очевидно, что при бесконечном числе нейронов даже в одном скрытом слое, таким образом можно аппроксимировать любую функцию с любой необходимой точностью. Просто берём нужное значение из нужной ячейки таблицы, и все. Ну а многослойность нужна, чтобы уменьшить число нейронов для решения задачи.
Автор не упомянул (насколько я понял) ещё одно важное ограничение. При обучении нейросети мы должны иметь в датасете точки, достаточно близкие к той точке, которую мы собрались аппроксимировать. А что значит «достаточно близкие», зависит от вида целевой функции и от вида активационной.
Например, если наша целевая функция — это 2^x, у нас есть в датасете неограниченное число точек из интервала (0,1), а активационная функция — это сигмоида, то совершенно не факт, что нейронка правильно апроксимирует точку с x=5.
Если вы не против, немного перефразирую. Для того, чтобы достичь требуемой точности НС на интервале, необходимо на этом интервале вычислить целевую функцию и обучить сеть по этим вычислениям.
Тут напрашивается и такой вопрос: имея возможность вычислить значение некоторой функции (может и приблизительно), на сколько разумно использовать НС и начиная с какого момента НС будет менее производительна, чем более традиционные методы?

НС разумно использовать, когда традиционное вычисление функции очень дорого.

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

Так вот вопрос, сумеет ли НС дать прирост в производительности?
Часто бывает, что НС аппроксимирует эмпирическую функцию. Например, каков будет результат общевойскового боя при заданных вводных. Соответственно, мы можем или выяснить это экспериментально, или иметь некую теорию, позволяющую предсказывать результаты сражений. Обучение нейросети — это как раз и есть создание теории из опытных данных.
В общем, если у нас есть удовлетворительная матмодель процесса — тогда лучше использовать её. Если нет — можно или вывести теорию (хорошо, но требует кучу человекочасов), или обучить нейросеть (плохо для интерпретации, зато автоматически и довольно точно)
Без модели исследуемого процесса не обойтись и в случае применения нейросетей, волшебным образом она модель не построит, она всего лишь инструмент для подбора свободных параметров в моделях, построенных людьми. Итого вариантов два: либо построить модель решения, либо модель поиска этого решения — подбора свободных параметров первой модели. Во втором варианте есть возможность воспользоваться нейросетями.
В смысле «волшебным образом не построит модель»? Нафиг тогда вообще нужна нейронка?)
Если у меня есть соображения, как должна выглядеть модель, я возьму линейную или полиномиальную регрессию, или какую-то ещё известного вида. Если вообще никаких идей или идеи формализуются очень плохо, то у нас есть две около-универсальных модели: полносвязная нейросеть и градиентный бустинг. И формальные методы, как их тестировать на адекватность — кроссвалидация.
Да, есть специализированные нейросети — конволюционная, например, но я сейчас про полносвязную однонаправленную.
И насколько я понимаю, параметры ищет градиентный спуск (+эволюция для гиперпараметров), а нейронка — это продукт его работы.

В общем, я прошу пояснить, как тогда в вашем представлении выглядит универсальный ML, который строит модели данных без значимых априорных данных, и почему полносвязная нейросеть/бустинг деревьев/AIXI не подходят под это определение?
Универсальный ML пока что никак не выглядит, по всем тем причинам, которые вы и описываете. Универсального решения любой задачи не существует. И полносвязная нейронка тоже «увидит» лишь те решения, которые дизайнер фич позволит ей увидеть. Всё это, конечно, не мешает случайно натыкаться на решения чужими моделями, как и не мешает верить в чудо. :)
Фичи повышают вероятность нахождения определённых решений. Но если запустить обучение достаточно надолго, и нейронка будет достаточно большая, то она сама построит эти фичи. На бесконечности построит, то есть недостаток предобработки можно компенсировать избытком вычислительных мощностей. Так что в пределе нейронка универсальна, разве нет?
Есть другая модель, более теоретическая, но более обоснованно универсальная. AIXI. Если конкретнее, то AIXI Monte Carlo. Это поиск формул, которые могли бы породить данные, в алгоритмически полном пространстве. Например, у нас есть датасет Y=f(X), и AIXI перебирает множество программ на, скажем, Си, и все программы тестирует на то, насколько похожий датасет они порождают. Эта модель тоже неуниверсальна?
Есть гибридные модели. Предобработчик на базе чего-то типа AIXI и постобработчик на базе нейросети/бустинга. Выполняет работу по дизайну фичей. Конечно, она может увидеть не все фичи, но человек же тоже не все полезные фичи видит. Такая модель неуниверсальна?
А если в качестве предобработки используются верхние слои нейронки — то есть у нас сеть глубокая и полносвязная — это не сделает её универсальной в том же смысле, в котором универсальна человеческая способность искать шаблоны в данных?
Все эти ваши фантазии упираются только в одно — «P != NP». Иначе бы то, о чём вы говорите, действительно имело бы практическую ценность :).
Вообще-то все эти модели работают. Ну как работают. Эволюционный поиск тоже работает. Глобальный оптимум не находит, но локальный — запросто. Вот и эти модели находят локально-оптимальные решения. Было бы странно от них ждать идеальных решений.
Без модели исследуемого процесса не обойтись и в случае применения нейросетей, волшебным образом она модель не построит, она всего лишь инструмент для подбора свободных параметров в моделях, построенных людьми.

Чем эта пачка из нейросетей, бустингов и AIXI так уж принципиально отличается от того, как модели строят люди? Понятно, что физическая база отличается и что элементарные блоки несколько иначе устроены.
Но у меня сложилось впечатление, что вы полагаете, что люди могут строить модели каким-то таким образом, которым ML строить модели не может. Даже если данные и у людей, и у ML одни и те же. Даже если под ML подразумеваются любые ML из класса нейросетей, бустингов и AIXI, а так же любых их комбинаций.
Я правильно понял вашу позицию? Если да, то можно поподробнее, так как мне это кажется странным?
Я говорю о том, что без проектирования модели задачи любой инструмент автоматического подбора параметров (будь то подкидывание монетки или нейросеть) будет бесполезен. Выводы о том, насколько схожи или не схожи нейросетки с биомозгами из этого тезиса сделать не получится.
Когда человеческий мозг ищет некоторую закономерность в данных — это процесс автоматического подбора параметров?
Он это делает с проектированием модели задачи или без? Если модель всё же используется, то её изготовление всегда происходит из какой-то другой модели или иногда тем самым автоматическим подбором параметров?
Ваши вопросы не являются контраргументами к моему тезису, вы и дальше можете жонглировать словами сколько угодно :). Уверен, что вы поняли мой исходный тезис, но пытаетесь «юридически» решить вопрос :).
Ок, хорошо. По моим наблюдениям, feature engeneering и грамотный ручной выбор модели позволяют решить задачу сильно быстрее, чем если бы мы использовали тру-универсальные инструменты вроде AIXI или околоуниверсальные вроде ff-нейросетей. Тем не менее, «грубая сила» позволяет уделять меньше внимания построению моделей. Это и грубая сила более полного перебора (например, в широком пространстве нейронок, а не в узком пространстве линейных моделей), и грубая сила бОльшего количества статистики.

Тем не менее иногда встаёт вопрос — а как в данной конкретной задаче сделать именно универсальную модель? Не то, чтобы мы не могли провести feature engeneering — скорее, мы себе не доверяем. И считаем свой FE слишком неполным. А иногда нам и правда нужна широкая универсальность, потому что чёрт его знает, с чем там наш сервис столкнётся в будущем, и хорошо бы, чтобы он мог сам как-то это прожевать, без доработок.

Некоторые люди сразу говорят, что широкой универсальности добиться (даже задорого) нельзя. Они обосновывают это вполне правильной математикой — NP-полные задачи никто не отменял. Но эта логика неприменима к реальным мозгам — люди решают очень широкий класс задач, особенно если им дать компьютер. И возникает вопрос — а если человек может, то как это на компе реализовать? Если человек может делать FE, то может, и ML может? (ну пусть не человек, а коллектив людей. Но может же?)

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

Другие начинают говорить, что… Честно говоря, я не уверен, что понимаю их верно. Это моя недоработка, и я сейчас именно её пытаюсь исправить, задавая вопросы вам =) Но концепция видится следующая: ML — это прикладное построение моделей. Человек может формализовать в виде датасета лишь малую часть своих знаний, ещё у него есть всякие неявные догадки, и он их формализует, выбирая класс модели (свёрточная ли нейронка или линейная регрессия) и FE. Нам не нужна механика, умеющая из нейронки прямого распространения выточить свёрточную, потому что это слишком дорого. Да, такая механика возможна. Да природа примерно так и поступила. Безо всяких априорных данных сделала модель из… Из молекул, которые были «под рукой». Довольно тупыми алгоритмами эволюции. Но это чересчур дорого, потому непрактично и неинтересно. Не могли бы вы поправить меня в данной позиции, если я неправ?

Есть и третья позиция. Если человек что-то может, значит, может и ML. А чтобы конструкция работала, она должна уметь делать Meta-Learning. То есть должна быть какая-то механика такая, что после решения одной задачи наша модель меняется, и вторую задачу решает уже быстрее, если вторая задача похожа на первую. Например… Можно взять штук 100 разных топологий нейронок, прогнать их на 10к задач и собрать статистику, какие топологии работают лучше всего. И на новой задаче сначала пробовать наилучшие топологии, и весь этот рейтинг постоянно обновлять, после каждой новой решённой задачи. Я опытным путём проверял Meta-Learning под задачи Feature Engeneering. Эксперимент показал, что поначалу модель Meta-Learning запарывает задачи, но после серии попыток выходит на уровень модели с хорошим ручным Feature Engeneering. Даже несмотря на то, что в этом автоматизированном FE был очень урезанный набор функций, и подобрать «истинную» закономерность там было тупо невозможно, только апроксимация. Всё равно Meta-Learning отработал, как надо.
Практически же Meta-Learning сейчас используется в распознавании изображений — есть обученная нейросеть, которая распознаёт всякие разные картинки, многие пользователи берут её в качестве отправной точки для своей нейросети. Обучение в результате требует меньше времени и статистики
«Универсальная модель к задаче» — это не аткая уж и универсальная модель, потому что её каждый раз строит человек к каждой задаче. Ок, к каждому классу задач. Ок, использует общие подходы построения моделей в схожих задачах. НО ДЕЛАЕТ ЭТО ЧЕЛОВЕК. Не потому, что он умнее транзисторного процессора, а потому, что именно у него, этого человека, заключённого в физическую реальность, и возникла ЗАДАЧА :). У транзистора личных задач нет.
Интересно, когда это будет применяться на биржевых торгах?
Давно применяется.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории