4 факта о нейронных сетях

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



1. Нейронная сеть – это не модель человеческого мозга


Человеческий мозг – одна из самых больших загадок, над которой бьются ученые не одно столетие. До сих пор нет единого понимания, как все это функционирует. Есть две основные теории: теория о «клетке бабушки» и теория дистрибутивного представительства. Первая утверждает, что отдельные нейроны имеют высокую информационную вместимость и способны формировать сложные концепты. Например, образ вашей бабушки или Дженнифер Энистон. Вторая говорит о том, что нейроны намного проще в своем устройстве и представляют комплексные объекты лишь в группе. Искусственную нейронную сеть можно в общих чертах представить как развитие идей второй модели.


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

4 факта о нейронных сетях Нейронные сети, Статья, Длиннопост

Что из этого следует? ИНС создаются по архетипу человеческого мозга в том же смысле, как олимпийский стадион в Пекине был собран по модели птичьего гнезда. Это ведь не означает, что стадион – это гнездо. Это значит, что в нем есть некоторые элементы его конструкции. Лучше говорить о сходстве, а не совпадении структуры и дизайна.



2. Размер имеет значение, но больше – не всегда значит лучше

После выбора архитектуры возникает вопрос, насколько большой или насколько небольшой должна быть нейронная сеть? Сколько должно быть «инпутов»? Сколько нужно использовать скрытых нейронов? Скрытых слоев (в случае с глубокой сетью)? Сколько «аутпутов» нужно нейронам? Если мы промахнемся с размером, сеть может пострадать от переобучения или недообучения. То есть не будет способна грамотно обобщать.


Сколько и какие инпуты нужно использовать?

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


Сколько необходимо скрытых нейронов?

Оптимальное число скрытых элементов – специфическая проблема, решаемая опытным путем. Но общее правило: чем больше скрытых нейронов – тем выше риск переобучения. В этом случае система не изучает возможности данных, а как бы запоминает сами паттерны и любой содержащийся в них шум. Такая сеть отлично работает на выборке и плохо за пределами выборки. Как можно избежать переобучения? Есть два популярных метода: ранняя остановка и регуляризация. Первое означает то, что мы просто остановимся в тот момент, когда validation loss начнет расти. Второе - мы будем регулировать веса синапсов путем добавления их в функцию loss: таким образом, сеть будет стремиться не только дойти до идеального результата предсказания, но еще и сохранить адекватные веса.



3. Нейронным сетям не всегда нужен большой объем данных


Нейронные сети могут использовать три основных обучающих стратегии: контролируемое обучение, неконтролируемое и усиленное обучение. Для первой, нужны, по крайней мере, два обучающих сета данных. Один из них будет состоять из входных с ожидаемыми выходными сигналами, второй с входными без ожидаемых выходных. Оба должны включать маркированные данные, то есть паттерны с изначально неизвестным предназначением.


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


4. Нейронную сеть нельзя обучить на любых данных


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


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


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


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

Спасибо за прочтение!

Часть текста скопировано, а часть урезана (бОльшая часть) и изменена с целью более упрощенной читаемости и меньше_букав. А значит пенять на меня, а не на автора. Источник.

Искусственный интеллект

2.4K постов9.7K подписчиков

Добавить пост

Правила сообщества

Здесь вы можете свободно создавать посты по теме Искусственного интеллекта. Добро пожаловать :)


Разрешено:


- Делиться вопросами, мыслями, гипотезами, юмором на эту тему.

- Делиться статьями, понятными большинству аудитории Пикабу.

- Делиться опытом создания моделей машинного обучения.

- Рассказывать, как работает та или иная фиговина в анализе данных.

- Век жить, век учиться.


Запрещено:


I) Невостребованный контент

  I.1) Создавать контент, сложный для понимания. Такие посты уйдут в минуса лишь потому, что большинству неинтересно пробрасывать градиенты в каждом тензоре реккурентной сетки с AdaGrad оптимизатором.

  I.2) Создавать контент на "олбанском языке" / нарочно игнорируя правила РЯ даже в шутку. Это ведет к нечитаемости контента.


II) Нетематический контент

  II.1) Создавать контент, несвязанный с Data Science, математикой, программированием.

  II.2) Создавать контент, входящий в противоречие существующей базе теорем математики. Например, "Земля плоская" или "Любое действительное число представимо в виде дроби двух целых".

  II.3) Создавать контент, входящий в противоречие с правилами Пикабу.


III) Непотребный контент

  III.1) Эротика, порнография (даже с NSFW).

  III.2) Жесть.


За нарушение I - предупреждение

За нарушение II - предупреждение и перемещение поста в общую ленту

За нарушение III - бан

Вы смотрите срез комментариев. Показать все
46
Автор поста оценил этот комментарий

Как человек уже лет 15 работающий (в том числе) с нейронными сетями, скажу вам, что статья без целевой аудитории. Новичкам надо как-то проще, не задавливая корреляцией, "аутпутами" и "инпутами" (чем вам общепринятые входы-выходы не угодили?). У того же Горбаня по полочкам разложено. Проще, яснее, короче. А тем, кто более-менее разобрался, как накропать простенькую сеть для классификации, текст уже - записки капитана очевидность.

раскрыть ветку (33)
3
Автор поста оценил этот комментарий
Я так понимаю эту статью писала нейронная сеть?))
6
Автор поста оценил этот комментарий
Парни, очень хочу изучить deep learning, нейронные сети, и вот это всё. Расскажите, с чего начать? Опыт программирования есть, первое высшее вычтех, правда, Python не знаю. Какие книги/курсы посоветуете?
раскрыть ветку (17)
6
Автор поста оценил этот комментарий

Я, конечно, не парень, но отвечу) Нейронные сети до фига где можно слепить, Python не обязателен. У Круглова был неплохой обзор пакетов и сред, в которых их можно реализовать. Книжке уже сто лет в обед, но для начала самое оно, как мне кажется. Точное название не помню, но легко гуглится "Круглов, нейронные сети".

раскрыть ветку (14)
3
Автор поста оценил этот комментарий
Спасибо большое, сорри, что с полом ошибся ) а какие области математики нужно подтянуть?
раскрыть ветку (13)
6
Автор поста оценил этот комментарий

Статистика, матрицы, оптимизация и аппроксимация функций.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Плюсуюсь к вышеперечисленному. Обязательно ещё посмотрите информативность признаков, точность, погрешности, пороги принятия решения.

Автор поста оценил этот комментарий

Не только матрицы, а желательно в общем иметь представление о линейной алгебре, имхо.

1
Автор поста оценил этот комментарий

у udacity вроде очень неплохой курс про machine learning. Сам задался таким же вопросом на одном из сайтов видел опыт чела, который перечислял по чему он учил. Удасити был хорошей базой.

Сам только начал, главное мотивация)

раскрыть ветку (3)
Автор поста оценил этот комментарий
Сколько он там стоит, не знаете?
раскрыть ветку (2)
2
Автор поста оценил этот комментарий

вполне хватит пройти бесплатную версию

Автор поста оценил этот комментарий

Бесплатный, который базовый курс.

Автор поста оценил этот комментарий
Вы хотите просто поизучать или заняться серьёзно? Если просто поизучать, то в сети полно туториалов, где математики на школьном уровне достаточно. Если более глубоко - теорвер + матстат, базовые диффуры, начала теории оптимизации. И английский)
раскрыть ветку (5)
Автор поста оценил этот комментарий
Конечно заняться серьёзно. Расскажите, как это сделать? Сейчас есть платные онлайн курсы, но они, мягко говоря, недешевые
раскрыть ветку (4)
2
Автор поста оценил этот комментарий

Платные не нужно, чтобы начать изучать.


Если с английским проблем нет, то могу порекомендовать начать с курса Machine Learning на Coursera - поймете с чем имеете дело и как его едят, там математика в объеме школьного курса, затем - четыре курса специализации Deep Learning.


Для повышения кругозора, рекомендую Probabilistic Graph Models - как оказывается, не все в машинном обучении базируется не нейронных сетях, но тут уже стоит иметь представление о теории вероятности. Если такого представления нет - рекомендую посмотреть серию уроков на khanacademy.org - там все разжевывается буквально на пальцах, очень понятно и доступно. Там же, при желании, можно повозиться с дифурами.


В качестве факультатива - яндексовский курс "Машинное обучение и анализ данных" - получите представление об общих подходах к анализу данных и инструментарии.


Как чтение перед сном - Artificall Intelligence: A Modern Approach (вроде даже есть в переводе).

раскрыть ветку (1)
Автор поста оценил этот комментарий
Спасибо огромное! Очень ценная для меня информация
1
Автор поста оценил этот комментарий

Советую почитать книгу "Глубокое обучение на Python" Ф. Шолле.
И да, если хотите заняться серьёзно - Python обязателен.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Спасибо огромное, мне сейчас такая информация очень ценна
1
Автор поста оценил этот комментарий
На курсере есть курс machine learning (за авторством Эндрю Ына). На английском, но все кратко, быстро по существу, без понтов и мистификации
Автор поста оценил этот комментарий
Посмотри курс Созыкина
5
DELETED
Автор поста оценил этот комментарий

15 лет с сетками? Не хотите что-нибудь нам рассказать? Думаю, было бы интересно!)

раскрыть ветку (13)
6
Автор поста оценил этот комментарий

Я на какое-то новое знание не претендую, новых алгоритмов и архитектура не разрабатываю. Решаю довольно узкие задачи. Из интересного - личный опыт обучения и тестирования нейронных сетей на реальных клинических данных (патологии системы свертывания крови). И да это тот случай, когда сеть работает с 10-ю входными нейронами эффективнее, чем с 16-ю, а обучать порой лучше на множестве 10х50, но сбаллансированом, чем на 10х100, но с перекосом в "норму" (собственно ваши пункт 3 и 4).

раскрыть ветку (12)
1
DELETED
Автор поста оценил этот комментарий

Не мои, кхе-кхе.

А вот причем тут

И да это тот случай, когда сеть работает с 10-ю входными нейронами эффективнее, чем с 16-ю
Ведь количество входных зависит от кол-ва фич. Либо я не понял, что вы имели ввиду. Но по-любому, если ваш опыт работы - не плод больного воображения, пишите посты в сообщество, думаю, будет интересно.
раскрыть ветку (11)
1
Автор поста оценил этот комментарий

16 и 10 в моем случае было количество исследуемых параметров гемостаза, которое и определило количество нейронов в первом слое. С 16-ю вероятность правильной классификации была 0,85, с 10-ю - 0,92. Так что все как по книжке - лучше меньше да лучше)

Писать про НС не очень хочу, если честно. Занимательно у меня вряд-ли получится, а занудствовать по работе надоело.

раскрыть ветку (10)
Автор поста оценил этот комментарий

Я только спросить)

Вы слышали про эксперимент гугла, в котором сети создавали архитектуру новой сети? И что вы знаете про реккурентные сети?

Вроде как получилось решение, которое несмог-бы придумать человек, и оно было довольно эффективно.


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

раскрыть ветку (9)
1
Автор поста оценил этот комментарий

Про эксперимент слышала краем уха в другом контексте, сильно не вникала, так что врать не буду. А что до рекуррентных сетей, так это, в общем случае, просто сети с обратными связями (с выхода на вход). Бывают неполносвязные, бывают полносвязные (если по простому, все выходы связаны со входами). Таким архитектурам уже больше 30 лет. Я в работе полносвязные сети не использовала. Неполносвязные иногда бывают полезны при работе с сигналами (делала нейросетевую диагностику сердечно-сосудистых заболеваний по ЭКГ). Оценивалась эффективность работы разных архитектур, так вот такие сети неплохо работали, но каких-то супер преимуществ не давали. В итоге лучшими для этой задачи стали радиально-базисные сети.

От задачи очень много зависит. И по большому счету, определить, какая сеть подойдёт для конкретной вашей задачи, можно только попробовав обучить и протестировать.

1
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий

Забыла написать, самое классное в нейронных сетях - это как раз то, что совершенно необязательно знать, как именно они работают. Чёрный ящик. Но при этом они-таки работают.

раскрыть ветку (6)
DELETED
Автор поста оценил этот комментарий

Вот здесь не соглашусь. Нужно достаточно хорошо понимать их принцип работы, иначе нихрена не выйдет: люди часто воспринимают нейросеть как черный ящик. Поэтому им кажется, что можно туда запихать данные - и все, она обучится. Но это далеко не так. Самый простой пример: научите сетку искать корень из числа. И да, вам не поможет MatrixNet, ResNet и так далее. А в более сложных примерах: сверточная не обучится работать с разными масштабами, реккурентная - с большим количеством токенов. Короче, сетка - совсем не черный ящик, и для сложных задач конечно требуется очень хорошее понимание, как они работают.

раскрыть ветку (5)
Автор поста оценил этот комментарий

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

раскрыть ветку (4)
DELETED
Автор поста оценил этот комментарий

Ахах, вы на fastai пишете что ли?)

На самом деле, честно говоря, все еще несогласен. Да, подготовка данных - чрезвычайно важная часть, но не более важная, чем составление структуры сети. Если от структуры сетки результат не меняется - то либо задача решается линейной регрессией, либо вы делаете что-то не так. Мне тут коллега рассказывал, у него, например, добавление свертки с ядром 1х1 посередине сетки дало нефиговую accuracy. Это при том, что такая свертка - это просто поточечное умножение тензора на константу (с точностью до сессии, очевидно). Так что уж не знаю, как именно вы работаете с сеткой, но если вы не звездабол - я серьезно говорю, расскажите же нам!) Если ваш опыт столь сильно отличается от моего, думаю, будет это интересно всем.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Я в матлабе пишу)

И я не говорила, что от изменения структуры ничего не меняется - меняется, ещё как. Просто при некорректном обучающем множестве никакая структура не спасет.

А про опыт - если настаиваите, напишу.

раскрыть ветку (2)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку