Блог им. WLMike

MVP на нейронных сетях

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

Сходил недавно на семинар по эволюционному поиску нейросетевых архитектур — очень проникся темой. Пока останусь на градиентном бустинге, но буду двигаться в сторону сетей и эволюционного поиска их архитектур. В какой-то момент столкну бустинг и сети в эволюционном процессе, а там посмотрим, кто победит.

★8
64 комментария
А как результат меряете? На исторических данных? Включаете ли комиссии и прочие расходы? Хотелось бы увидеть графики.
avatar
Dmitryy, я предварительно оценивал, поэтому издержки не учитывал, да и они в моем подходе не существенны. Оценка велась по корреляции предсказания и прогноза. Прогноз строился примерно на 90 тыс. обучающих примеров, а тестировался на 15 тыс. примерах следующих по времени. 
avatar
Михаил, видимо я изначально не правильно понял смысл. У вас получается попытка строить прогноз поведения актива, а сама торговля здесь и не важна, если прогноз удачный.
avatar
Михаил, но позвольте Вам тогда высказать соображения о том, что финансовым мир стохастический. Можете ли вы предсказать рандом? Да, 50 на 50, Вы будете видеть успешные кейсы и не успешные, успешные будут заставлять вас думать, что это все реально, осталось только подкрутить не успешные. Я бы советовал вам работать с миром волатильностей, они тоже случайны, но там есть больше пространства для маневра. 
avatar

Dmitryy, вы вряд ли в своем примере сможете придумать схему предсказания, которая будет иметь корреляцию с исходом статистически значимо отличающуюся от нуля. С другой, стороны если вы научились прогнозировать с коэффициентом корреляции R таким, что  R * (n — 2)^0.5 / (1 — R^2)^0.5 > 2 (для моего количества проверочных примеров R > 0.017), то есть значительный шанс, что ваше предсказание отлично от случайного и на его базе можно построить работающую торговую модель. В большинстве случаев, корреляцию можно транслировать в оценку прибыльности стратегии. 

avatar
Михаил, если не против, хочу еще немного подискутировать. Я вижу, что у Вас огромный опыт за плечами и Вам есть на чем судить. Но позвольте все же усомниться в возможности прогнозирования, т.к. модель, работающая на основе только исторических данных, не учитывает новостной фон. Если завтра что-то уберут из индекса после многолетнего роста, только от того, что вес бумаги сильно вырос? Фонды делают распродажу, все ребалансируют вслед за новостью. И тут модель обученная на многолетнем стабильном росте споткнется.

Что далеко ходить, может ли модель обыграть вчерашнюю новость с Лукойлом и индексом? http://www.finmarket.ru/news/5162517
avatar

Dmitryy, давайте подискутируем, но чтобы понять вашу точку зрения и быстрее прийти к взаимопониманию, напишите, в общих чертах на чем основывается ваш подход и как он справляется с указанной вами проблемой на примере Лукойла.

Мои соображения примерно следующие:
1. Критерием должны быть не сомнения из общих соображений, а формальные статистические тесты. Если некая “простая” модель, которая заведомо все не учитывает дает статистически значимы результат, ее можно использовать. Если хочется ее можно продолжать улучшать.
2. Более сложная (или другая) модель принимается не потому, что она сложная и учитывает какие-то дополнительные факторы, а потому что она дает статистически значимое улучшение по сравнению с более слабой моделью. Иногда выгоднее использовать ансамбль моделей — но выгодность этого решения так же должна проверяться статистическими тестами.
3. Я не против учета новостей, и в принципе сети это позволяют делать. Для меня это сложно, особенно на первых порах, так как сложно найти подходящие исторические данные. Может когда-то дойду до этого.
4. Принципиально не строю модель для конкретного инструмента, а строю единую модель по примерно 100 бумагам, некоторые из которых меняли долю в индексе, поэтому есть шанс, что модель в какой-то мере может учесть это.
5. Вряд ли можно создать идеальную модель, которое будет все точно предсказывать. Не совсем строго выражаясь, важно, чтобы модель ошибалась реже и меньше, чем угадывала, тогда ошибки (например, с Лукойлом) будут компенсировать правильными ставками под другим бумагам. Формально это надо подтверждать статистическими тестами.
6. Чтобы нивелировать эффект ошибок и сделать свой результат более устойчивым, нужно делать много ставок параллельно (я анализирую около 100 бумаг и одновременно делаю “ставки” по ним), учитывать структуру рисков и грамотно диверсифицировать их (использую робастные методы оценки ковариационных матриц для портфелей с большим количеством инструментов).
7. Для того, чтобы совершать меньше сделок, дополнительно используется статистическая значимость улучшений в структуре портфеля — если некая операция улучшает портфель, но не статистически значимо, то она не совершается.

avatar
Михаил, спасибо за столь развернутый ответ, здесь определенно много над чем стоит подумать. 

Что касается моего подхода, это торговля волатильностью. Мы с большой долей вероятности можем определить движение волатильности, когда она сильно выше своего среднего значения. А учитывая волатильность волатильности можно делать более или менее приближенные прогнозы по ее поведению. ЗЫ, но я только учусь.
avatar
Михаил, а что это за обучающие примеры? типа свечные паттерны или индикаторы какие-то?
avatar
cyb650, собственно основная идея была уйти от каких-то индикаторов и патернов и перейти к сырым данным. Фактически в модель пихался тензор размера (B, T, 2), где B — размер батча, T — количество дней истории (порядка года, то есть около 252), 2 — соответственно ряд дневных цен закрытия и ряд дивидендов.
avatar
Михаил, не мало ли данных для сетки?
avatar
akuloff, сетки часто заводятся от десятка тысяч обучающихся примеров, а тут их около 100 тыс., и прогноз получился вполне статистически значимым. Но обычно чем больше примеров, тем лучше. Есть планы по их дальнейшему увеличению. Каждые пару недель я включаю еще одну бумагу в анализ.
avatar
Михаил, а объемы торгов не учитываются?
avatar
cyb650, объемы торгов пока не учитывали. Идей для развития достаточно много, и это одна из них.
avatar
Интересно. А сейчас какие сети, LSTM применяется?
avatar
LSTM используются, но по моим ощущениям это умирающий класс, в зависимости от ситуации вытесняются сетями внимания или сверточными. Я по пробовал bi-LSTM и dilated-conv
avatar
Михаил, вообще странно, RNN  (lstm, gru) же как раз для временных рядов, а сверточные время не учитывают, вернее не учитывают хронологию -  «что после чего шло»
avatar

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

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

Минус LSTM в том, что он плохо параллелится, поэтому его вытесняют архитектуры, которые не страдают этим недостатком.

avatar
Михаил, кстати Вы вот писали про исследования, может ткнете где про временные ряды и не LSTM? Спасибо заранее.
avatar
akuloff, про сети внимания можно почитать Attention Is All You Need. Про последнюю SOTA в этой области XLNet: Generalized Autoregressive Pretraining for Language Understanding  — внутри есть ссылки на похожие модели в частности BERT. 
Про сверточные в приложении к временным рядам WaveNet: A Generative Model for Raw Audio. А дальше гуляете по ссылкам внутри статей и экспериментируете сами.
Дополнительно можно порыться в исходниках Gluon — там есть ссылки на статьи
avatar
akuloff, пробовал крутить LSTM — на выходе получается скользящая средняя)
avatar
cyb650, не факт, что это работает со всеми инструментами и на всех временных горизонтах, а может вам просто данных не хватило. Сколько примерно обучающих примеров было, что вы прогнозировали?
avatar
Михаил, да, данных было мало — брал дневки сбера за 6 лет.
avatar
cyb650, у меня в голове следующее мнемоническое правило:

Примеров до 100 — простые статистические методы

Примеров от 100 до 1000 — простые методы машинного обучения (KNN, SVM, регрессии с L1/L2 регуляризацией)

Примеров от 1000 до 10000 — мощные методы машинного обучения (GBM, RF)

Примеров более 10000 — можно попробовать сети, но вероятно GBM будет лучше

Примеров очень много — рано или поздно сети лучше GBM

У вас примеров явно мало для сетей
avatar
Михаил, согласен, буду пробовать gbm. а какой таймфрейм цены вы используете?
avatar
cyb650, я инвестор — использую дневные данные и строю прогноз грубо на год вперед. 
avatar
Михаил, если Вы по дневкам строите прогноз на год вперед, у Вас очень мало независимых испытаний получается, ведь перекрытие прогнозов очень большое. То есть, для 100 акций и 10 лет истории, независимых испытаний, условно 1000. А если учесть взаимозависимость акций, то и того меньше, раз в 10.
avatar
Михаил, эта эмпирика явно не из  тех областей, где низкое отношение сигнала к помехе. 
avatar

SergeyJu, вы правы относительно меток — они сильно коррелированы, поэтому важно, чтобы метки в обучающем сете и в валидационном совсем не пересекались. Но вектора признаков практически независимы. Корреляция в векторе дивидендов нулевая, корреляция в векторе котировок если есть, то буквально в паре соседних по времени обучающих примерах. Таким образом мы учим по независимым признакам зависимые метки. 

Наверное, некое “эффективное” количество семплов меньше того, которое получается прямым подсчетом, но больше, чем вы думаете. Это в принципе легко проверить — построить модель на непересекающихся семпла (их будет условно 1000) и на пересекающихся их будет в 250 раз больше. Я делал подобное сравнение — первая вариант совсем не работает, а второй делает статистически значимые прогнозы. 

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

avatar
Михаил, очень непонятное деление. GBM и подобные методы — аналог сетей со свободной архитектурой, построенной «жадным алгоритмом». 

KNN — это обучение без учителя. 

SVM — работает на линейной разделимости, а не на малых выборках.

Как вы получили своё правило... 
avatar

Kot_Begemot,

GBN — это решающие деревья, а не сети. У них мало чего общего с сетями, и их обычно используют на табличных данных (в ручную сделанных фичах), а сети на сырых данных (кусок временного ряда, изображение, текст). 

 

KNN-регрессия — обучение с учителем. Вы ведь находите ближайших соседей и берете среднее их меток для предсказания. Раз метки есть, то это обучение с учителем. 

 

SVM — работает с линейноразделимыми поверхностями в спремляющем пространстве. Если вы используете, kernel trick (обычно rbf ядро), то можете вполне нелинейные прогнозы получать с помощью SVM. sklearn это все поддерживает из коробки. SVM может работать и с большим количеством данных, но он обычно уступает GBM, когда данных достаточно много, поэтому смысла в его использование на относительно больших данных обычно мало.

avatar
Михаил, 

SVM — работает с линейноразделимыми поверхностями в спремляющем пространстве

Это уже «напилинг» -

Украли американцы у русских чертежи истребителя. Собрали — паровоз. Разобрали, собрали — паровоз! Что делать, выкрали русского специалиста. Спец берёт чертёж, смотрит, смотрит и говорит: «Там же внизу маленьким шрифтом: после сборки обработать напильником».



GBM — это решающие деревья, а не сети. У них мало чего общего с сетями, и их обычно используют на табличных данных (в ручную сделанных фичах), а сети на сырых данных (кусок временного ряда, изображение, текст).   


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



 Предобработка данных перед использованием в свёрточной NN.

Разница между GBM и NN в процессе обучения и, соответственно, в размере области градиентного пересмотра параметров.

В этом смысле, ваше решение отвязаться от «ручного» построения признаков (фич), остаётся для меня не ясным. 
avatar
Kot_Begemot,
Это уже «напилинг» -
Можете называть это как хотите — kernel trick стандартная штука, которую проходят в большинстве курсов по ML, включена в большинство библиотек. На самом деле без этого SVM вообще мало интересен, так как принципиально не отличается от других линейных методов. 
Обычно перед применением нейронных сетей данные предобрабатывают.  Это ядерные свёртки изображений, обработка по градиентам яркости и пр., пр. пр. в голом виде нейронные сети не применяют… обычно.

У вас очень странная интерпретация нейронных сетей — сверхточный слой, это не предобработка, а один из стандартных слоев сетей. Параметры сверток обучаются как и все остальные слои с помощью back propagation. Свертки бывают и в начале, и в конце, и в середине. Часто это практически основной содержательный слой в сети (можно глянуть RezNet или WaveNet — там сплошные свертки от начала и до конца — это что не сети что ли, а только предобработка?). Одна из моделей, которую я использовал, состояла из 7 сверхточных слоев и одного глобального пулинга. Так как в пулинге совсем нет обучаемых параметров, то по сути вся сеть из сверток. Для таких архитектур даже термин есть fully convolutional network. 

Разница между GBM и NN в процессе обучения и, соответственно, в размере области градиентного пересмотра параметров.


Я бы сказал, что там все разное.

NN — это дифференцируемая функция, производные которой много где отличны от нуля. При обучении дифференцируется Loss по параметрам сети. На каждой итерации обновляются существующие параметры с учетом производной Loss по ним.

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

PS: Мне кажется, мы уже удалились куда-то не в конструктивное русло, из-за различий в терминологической базе.
avatar
cyb650, кстати вспомнил есть прикольная картинка. Тут сетей нет, но по сути их можно в качестве последнего пункта дорисовать.
avatar
Михаил, правильно ли я понимаю, что у вас портфельное инвестирование на основе GBM и NN?

В качестве прогнозируемой переменной только будущие изменения цен?
avatar
Kot_Begemot, сейчас портфельное инвестирование на основе GBM. Пытаюсь перейти на NN. Прогнозирую будущее изменение цены. Ковариационная матрица историческая Ledoit-Wolf скорректированная на точность прогноза доходности. 
avatar
Михаил, а в чём смысл перехода на NN? В нелинейности или регуляризации?
avatar
Kot_Begemot, GBM нелинеен, большинство стандартных алгоритмов GBM используют регуляризацию, поэтому смысл не в этом. Смысл уйти от ручного придумывания фич к использованию сырых данных и пусть сеть сама фичи внутри себя составляет.
avatar
Михаил, но всё таки «нелинейность» GBM дискретна, а NN — непрерывная, и регуляризации у них тоже немного отличаются.

В этом смысле, я ещё могу понять замену одних алгоритмов на другие — тонкие эффекты могут играть роль.  А вот на счёт требований к «сырости»… как-то сомнительно, чтобы NN обладали меньшими требованиями, чем GBM.

В любом случае, интересно было бы увидеть оценку ваших результатов на этом поприще.
avatar

Kot_Begemot, дискретность GMB, когда у вас 10000 деревьев глубиной 10 (практический кейс моей модели — будет примерно 10 млн дискретных значений на области определения), с практической точки зрения можно считать непрерывной. Хотя кончено, это совсем разные методы, поэтому прямое их сопоставление не совсем корректно проводить. На мой взгляд ключевое отличие в табличности GBM и возможности NN делать фичи из сырых данных. 

 

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

 

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

Пока NN у меня вышло хуже GBM, но GBN я точу давно, а по NN сделал первую попытку на самых простых архитектурах, без каких-то настроек параметров (выбрал минимальные из общего здравого смысла и предыдущего опыта из других областей), и на ограниченных данных. Результат хуже, но не разительно — есть потенциал.

avatar
Михаил, 

NN более требовательны к количеству данных и железу

Вот из-за этого и все вопросы. Зачем чесать правой ногой правое ухо, если удобнее левой?


На мой взгляд ключевое отличие в табличности GBM и возможности NN делать фичи из сырых данных

ммм… можете привести пример, в котором NN построит фичу из сырых данных, да такую, что на это не способно дерево решений или бустинг?

Я вижу разницу только в непрерывности — если NN  умеет складывать числа, то GBM — нет, он только сравнивает числа в логическом масштабе (Булевы операции). Поэтому и пишу про… «нелинейность» NN.
avatar
Kot_Begemot, как это делают сети на примере изображений, можно посмотреть в работе Visualizing and Understanding Convolutional Networks

Про что-то подобное для деревьев я не знаю, так же я не знаю примеров применения GMB для анализа изображений, звука, текстов и любых других сырых сигналов. Если вы дадите мне ссылки на подобные примеры буду рад почитать. 

Булевых функции достаточно для реализации сложения, чем компьютер по сути внутри занимается.
avatar
Михаил, GBM аналогично NN используется, например, в распознавании спутниковых снимков при составлении карт (топография, геология и пр.).

Если бы я занимался распознаванием текста/речи/видео, то мог бы ответить вам профессионально и в цифрах. Но мне известно об этих и подобных задачах лишь постольку, поскольку. 

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

То есть, другими словами, помимо X>a производить операцию X+Y>a, и линейно разделять данные. Бустинг, в случае обнаружения линейных зависимостей, нарисует вам ту же линию ступеньками и к классифицирующему нейрону дайет та же информация, что и в случае NN, но, разве что нарезанная «кусками».

Это касается «обычных» нейронных сетей также как и «свёрточных», здесь никакого разделение не нужно.
avatar
Kot_Begemot, можете ссылку дать на пример применения GBM распознавании спутниковых снимков при составлении карт?
avatar
Михаил, пример не могу, а описание можно найти в интернете. 

Вот, например, в задачах распознавания лиц

habr.com/ru/post/133826/
avatar
Kot_Begemot, это статья 2011 года. С тех пор, как 2015 году придумали RezNet и побили уровень распознавания изображений человеком, никто так не делает.
avatar
Михаил, может быть там и что-то придумали...  откуда мне знать? 

Но даже если что и придумали, то какое это имеет отношение к делу? Если NN даже теоретически не способна придумывать «фичи» отличные от обычных линейных алгоритмов?
avatar
Kot_Begemot, на чем базируется это утверждение? С теоретической точки зрения есть теорема Цыбенко, а с практической RezNet распознает изображения лучше человека, а линейные алгоритмы как-то не очень. 
avatar
Михаил, вот на теореме Цыбенко и базируется. Бесконечное число классификаторов способны бесконечно приблизить что угодно — хоть непрерывную функцию, хоть разрывную, хоть одной переменной, хоть 10… Если, конечно, эти классификаторы удастся обучить.

Я же не зря попросил у вас пример любой простой задачи, с которой может справиться NN и не может, например, RF (или справляется значительно хуже).
avatar
Kot_Begemot, эта теорема только про сети, а не про любой классификатор, и точно не про линейный, о котором вы писали в прошлом посте.  

Про простую задачу вы в первый раз сейчас спрашиваете — специально поиском поискал. На простых задачах у NN обычно нет преимуществ по сравнению с моделями на основе решающих деревьев. И есть много простых задач, которые сети решить могут (классический пример, один класс круг на плоскости, а другой класс все остальное, или XOR), а линейный классификатор нет.
avatar
Михаил,  

 эта теорема только про сети, а не про любой классификатор

эта теорема по любой сложный классификатор, состоящий из множества простых классификторов, работающих в единой композиции, например, нейронной сети.

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

Если вопрос, почему делают много слоев? С начало было экспериментально установлено в множестве прикладных задач, что это дает более качественный результат, а потом было доказано, что это экспоненциально снижает количество необходимых нейронов.
avatar
Михаил,

Но под действие теоремы не подпадают деревья, или простые линейные модели

Чтобы распространить действие теоремы на другие архитектуры необходимо доказать, что простейший (элементарный) классификатор композиции способен решать задачи линейной разделимости, то есть представим в виде:

Fi ( w'*x +b), где Fi — пороговая функция

тогда композиция из этих классификаторов будет обладать всеми свойствами рассматриваемой сети.

Дерево решений, например, умеет решать задачу линейной разделимости?

В итоге получается, что NN на сырых данных не даст вам никакого преимущества по сравнению с XGBoost или др. используемыми алгоритмами. 
avatar
Kot_Begemot, теоретическом плане я с вами согласен. Но на практике так не работает. У сетей есть области, где они имеют несравненное преимущество по сравнению с бустингами и полностью их вытеснили. Примерно так же, как теоретически достаточно одного скрытого слоя, а на практике все современные архитектуры имеют 50-150 слоев, и именно шаг от одного скрытого слоя в теории к большому числу слоев на практике позволил совершить серьезный прорыв в качестве сетей. 

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

Может чего-нибудь поменяется со временем, но последние лет пять (как были изобретены некоторые подходы, которые позволили тренировать глубокие сети) состояние дел именно такое. 
avatar
Михаил,  странное деление… картинка, состоящая из пикселей от 0 до 1 это «неструктурированные данные», а такая же табличка тех же размеров с данными от 0 до 1, но определяющими не цвет, а, скажем,  содержание химических элементов уже «структурированные данные». Это как?

И что ещё за «глубокие сети», предполагающие какие-то особые методы тренировки?
avatar

Kot_Begemot, основное отличие, что в случае картинок, звука и т.д. у нас обычно очень много одинаковых элементов (картинка, 500 на 500 это 250000, элементов, секунда звука, 44000), в табличных данных элементы разные (пол, возраст, вес, последнее место работы, образование и т.д.) и их обычно гораздо меньше (десятки или сотни). Никаких теоретических причин, почему сети хорошо работают на данных первого типа, и обычно проигрывают на вторых, я не знаю, но практика показывает, что это так. 

 

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

 

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

 

Было предложено много приемов решения этих проблем:

 

ReLu активация вместо сигмойдной — производная 1 на половине области определения

 

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

 

Batch normalization — особый слой, который стабилизирует градиенты

 

Skip connections — способ пробросить градиент в глубокие слои напрямую без множественных промежуточных умножений. 

 

Все это позволило тренировать сети в качестве эксперимента глубиной в несколько тысяч слоев, но реально на практике слоев обычно 50-150

avatar
Михаил, таким образом «неструктурированные данные» это данные, обладающие некоторой структурой, например непрерывной и, таким образом, позволяющие применить к ним :

1. Неслучайные веса или даже ненастраиваемую предобработку
2. Регуляризацию плавности
3.  и т.д.

Для «неструктурированных данных», не обладающих априорной структурой никакая априорная регуляризация по структуре или априорное задание дерева (веса нейронной сети) — невозможны. 

Наверное так)

И поскольку рынок скорее обладает структурой, нежели  — нет, то нейронные сети к нему должны быть теоретически применимы лучше чем Boosting, в этом смысле я вас поддерживаю и желаю вам всяческих успехов.
avatar
Михаил, хорошая заявка, если научите NN делать фичи, будет круто. 
avatar
SergeyJu, это основной механизм работы сетей — начиная с первого слоя и далее создаются все более и более сложные фичи. Для сверточных сетей есть классическая работа которая это показывает. Первые слои учат простейшие примитивы вроде черточек под разными углами, а более глубокие слои учат фичи собачка, глаз, рыбка и так далее - Visualizing and Understanding Convolutional Networks Осторожно pdf очень тяжелый из-за обилия картинок. 
avatar
Михаил, прямого переноса на наши задачи ни у кого (насколько я знаю) не получается. И я это отношу именно к низкому соотношению сигнала к шуму и нестационарности данных.
avatar
SergeyJu, если люди придумывают работающие признаки, то я не вижу принципиальных причин, почему сеть не может.
avatar
Михаил, принципиальных и я не вижу… хотя и с людьми не шибко гладко. В основном все придумывают плохо работающие признаки. Или плоховато работающие, но таких людей уже мало. Ни одного хорошо работающего, устойчивого признака я еще не видел. Отсюда все эти портфели, диверсификации и регуляризации. 
avatar
SergeyJu, мне кажется, в такой ситуации большой плюс от сетей. Люди склонны переоценивать свои силы и обычно не умею держать более десятка ситуаций в уме, как следствие какой-то частный случай излишне интерполируют. Если мы пихаем в сеть достаточно много данных по множеству инструментов, а сигнала в них реально нет, то она и сойдется к чему-то типа простого фиксированного прогноза. 
avatar
Михаил, будет очень интересно, если продолжите писать о получаемых результатах. 
avatar

теги блога Михаил

....все тэги



UPDONW
Новый дизайн