Блог им. ch5oh
В связи с хайпом вокруг искуственных нейронных сетей стало интересно: насколько реально обучить сеть или дерево или иную технологию машинного обучения для восстановления вида неизвестной функции по следующим значениям обучающей выборки:
Сеть или дерево должна вычислить значение этой функции для аргумента x==97853
Философский подтекст состоит в том, что человек в состоянии определить вид этой функции совершенно достоверно и получить нулевую ошибку на валидационной выборке любого размера и сложности.
Если технологии ML не могут дать адекватного ответа на этот вопрос, то могут ли они в принципе быть полезны в торговле?
UPDATE 1: За прошедшие несколько часов 2 человека однозначно продемонстрировали способность восстановить вид искомой функции. Что подтверждает простоту озвученной задачки.
Также в голове примерно нарисовалось понимание, как будут решать Деревья. Они разобьют числовую ось на отрезки (точки разбиения насколько понимаю будут выбраны случайным образом) после чего предложат либо кусочно-постоянную либо кусочно-линейную функцию в качестве интерполяции. После чего будут нести всякую чушь и требовать увеличения объёма обучающей выборки. Причем желательно, чтобы в неё входили примеры в том числе в области 100 000.
Что же касается основного вопроса данной заметки, то уважаемый ves2010 предлагает считать сетки и ML в целом полезными, ЕСЛИ предварительно грамотно декомпозировать задачу и выделить им ровно тот участок работы, с которым они скорее всего смогут справиться.
UPDATE 2: функция следующая.
Посчитать количество цифр в десятичной записи числа и умножить на 40.
Человек решает если и не мгновенно, то вполне в состоянии уловить данную зависимость, потратив несколько часов внимания.
Причем уловив связь, он будет давать правильный ответ даже на стозначных числах.
счас граль спалю по пьяни… потом минут через 10 удолю нах
Называется это так:
Декомпозиция -> Оптимизация частей -> Синтез
На выходе получается Грааль
ves2010, наверное, что-то не догоняю.
Вроде бы проще заставить нейронку строить весь дом (миллиард домов) и только вешать ярлыки «нравится/ерунда», чем объяснить ей почему один «порог внутри бота» хороший, а другой — «плохой».
Разве что использовать итоговый финрез всего бота как целевую функцию, которую нейронка должна максимизировать? При этом отвечая только за свой небольшой элемент логики???...
kot_vezdehot, скажите, Вы не родственник случайно Kot_Begemot ? =)
kot_vezdehot, давайте я через некоторое время напишу, чтобы не портить удовольствие коллегам. Могу даже Вам в личку отдельно его сообщить.
Один человек уже написал ответ (мне в личку). Так что здесь нет ничего сверхъестественного. Даже стесняюсь приглашать к разговору местных математиков. Для них это не задача вообще.
Но вопрос не в задаче. Вопрос именно в потенциальной полезности нейронок для нашего дела, если они даже с такой задачкой могут испытывать сложности.
ПС Вот тут, кстати, даже плач Ярославны об этом имеется. (Осторожно: много букв)
https://habr.com/ru/post/488568/
ch5oh, ничего сверхъестественного для человека, которого натаскивали на схожих «задачах» (даже не клетчатой бумажке), а продвинуто обученный ухватит суть мгновенно. Для рынка же нужно сначала самостоятельно поставить задачу, как кто-то здесь уже однажды писал, и лишь потом искать подходы к решению.
Для второго этапа несколько подрихтованные нейросетки вполне даже годятся.
Eugene Logunov, > "и оно вам вытащит факторы, отвечающие за сдвиг/наклон/кривизну улыбок."
Если эти факторы действительно содержатся в цене. А если это экзогенные факторы? Типа твитов или новых санкций? Или цены на нефть?
И, кстати, хорошо бы ещё определиться с тем, имеется ли всё-таки лаговая связь между нефтью и нашим рынком или все эти величины по сути независимы, а двигаются синхронно только за счет наличия неназванного фундаментального фактора?..
А по вашим точкам можно построить бесконечное количество функций, с разными вариантами ответа.
Осталось определиться с тем, где нам взять информацию «сейчас хай, пора шортить» или «сейчас лоу, пора покупать». У Вас есть такой классификатор?
Eugene Logunov, есть нюанс. Иногда мы бегаем за нефтью, а иногда нефть бегает за нами. Полагаю, что в условиях переменной лаговости статистические модели поиска причинности загрустят.
Хотя не щупал их серьёзно. Пробельчик в исследованиях… =/
Но везде и всюду написано, что именно этим они и занимаются. Вся цель обучения нейронки состоит в том, чтобы она получила способность давать «правильные» ответы (то есть правильные y) в том числе в ситуации, когда в неё пихают незнакомый «невиданный ранее» вектор x.
Нейронщики, чтобы научить сеть экстраполировать, обычно делают предположение о некотором виде масштабируемости данных и перед отправкой вектора x в сеть приводят его к некоторому «нормированному» виду x', чтобы он приближённо напоминал те вектора, на которых сеть обучалась. Без этого — никуда.
Kot_Begemot, После обучения сети в неё можно подпихивать любые данные. Например, картинки незнакомых котиков или новые рукописные цифры, которые мы сами только что нарисовали. Это и есть «экстраполяция» в моём понимании. Вы же не можете объявить картинку сфинкса «аутлайером» и просто кинуть OutOfRangeException. Или сказать, что Сетке «не нравится» белый персидский кот на белом фоне.
(Будет настроение, после клиринга отпишу подробнее)
ПBМ, в этой задаче можно дать дофига данных. Но машина всё равно так и будет лажать на out-of-sample.
ЕСЛИ хитропопый датасайнтист не разработает для неё процедуру предварительной подготовки данных.
И тут парадокс. Если нам всё равно нужен хитропопый датасайнтист, то в чем смысл? Новые рабочие места создавать? Вся мишура с МЛ моментально осыпается и они превращаются в груду хлама.
Кстати, блестящая демонстрация этого тезиса буквально недавно попадалась. Сеть научили опознавать животных по фоткам. 95% точность или даже больше. Теперь берем фотографию белки. Сеть говорит: "Белка". Вносим на картинку исчезающие изменения, которые человеческий глаз даже еле замечает. Ну, там чуть размазалось, тут слегка зарябило. Ерунда. Сеть говорит: "Золотая рыбка". И где вся магия МЛ???
ПBМ, вроде, деревья решений традиционно считают частью МЛ? =) Ну, типа, что машина сама генерирует цепочку условий, которые надо проверить и по которым надо пройти, чтобы получить ответ.
А что касается «мало данных и неявная зависимость»… Ну, вроде, сетки и на мизерные выборки в 150 точек с бешеной и крайне яркой сезонностью ставят. Конечно, это скорее «фо фан» упражнения, но всё же...
результат не совсем верный (что-то там не так считается), но у нас же тупая машина, ей простительно
( ( 4 + 4 ) / 2 + 4 / 5 ) + 35 = 40.0: 40
( ( 61 + 4 ) / 2 + 61 / 5 ) + 35 = 79.9: 80
( ( 117 + 4 ) / 2 + 117 / 5 ) + 35 = 119.10000000000001: 120
просто поздно уже, да и силы уже не те в пятницу :)
считает криво… где-то ошибка у меня, но близко.
и да, я понимаю, что в задаче целочисленная арифметика
ПBМ, кстати, это же Вы подогнали дерево под предъявленные данные.
А сколько это дерево насчитает на x==97853 ?
( ( 97853 + 4 ) / 2 + 97853 / 5 ) + 35 =
= 48928,5 + 19570,6 + 35 =
= 68534,1
Правильно понял?
А люди говорят "200" должен быть ответ.
Ну для MLя просто мало данных. Если вы дадите ей много данных (хотя бы значения для x от 1 до 10^6, например) — ML тоже может научиться вычислять значения как надо. Опять же, нужен человек, который поможет со структурой задачи — т.е. подскажет, что y кратно 40 только. А совсем без человека-подсказчика на этапе обучения ML и не работает, это вам любой нормальный спец в этом области расскажет.
MadQuant, буквально двумя комментариями выше сокрушался на этот счет:
smart-lab.ru/blog/595697.php#comment10687822
Может, МЛ вообще не работает? Или работает совсем не так, как нам его преподносят с восторгом в голосе и пеной у рта? Нам же что говорят проповедники: "Готовишь данные на входе, показываешь данные на выходе. Дальше машина долго гоняет электрончики из угла в угол — и вуаля." Причем проповедники же не уточняют, насколько тщательно готовился набор картинок для MNIST и сколько там предварительных нормировок было сделано. И что если взять с потолка другую картинку как бы тоже рукописной цифры, то с большой вероятностью сетка облажается. Точнее, не будет там никаких «99% на тестовой выборке».
Если добавить в обучающую выборку такую фичу как количество цифр в десятичной записи, то любая нейросеть, даже наверное единственный персептрон, молниеносно найдёт решение. Но это должен сделать человек.
В ML магии нет, инжиниринг фич никто не отменял. Чтобы обучить полезную модель, надо очень внимательно подумать какие ей показывать фичи и ещё что немаловажно — какие таргеты.
Тогда всё начинает сходиться туда куда нужно, но это нифига не само собой происходит.
Подготовить фичи эквивалентно как вы говорите решению задачи только пока фич одна-две. Как только фич становится больше, а зависимость становится сложнее — для поиска приближения этой зависимости нужны методы ML. Но подать на вход алгоритма такие фичи и таргеты, между которыми вообще есть зависимость — это обязанность дата саентиста.
Пафос Респектыч, так никто ж не знает априорно есть зависимость или нет. Поэтому берут таблицу на 200 столбцов со всеми мыслимыми фичами — и вперед.
А «обещает» — индустрия МЛ. Проповедники сингулярного будущего.
Так где такое обещают-то, пруфы есть? Видосик там или статейка с фамилией? А то я сам как-то не встречал.
Пафос Респектыч,
Источник:
Машинное обучение
Видосики, ага. «Решение всех проблем человечества — квантовый МЛ». Как ещё новых адептов привлечь? Только наобещать золотые горы.
А дальше надо в зависимости от реальной прикладной задачи выбирать подходящий метод, и дальше длинный список. По идее это всё надо знать хотя бы поверхностно что для чего. Универсальной методы нет (((
Распространённый поп-инструментарий тут практически бессилен, даже если его умело применять и знать теорию, потому что он создавался под другие задачи. Надо или долго дорабатывать напильником или писать своё, и у тех кто берётся тоже далеко не у всех получается.
Вообще рынки предсказывать это такая довольно нишевая задача для кучки упоротых, ей не так много народа занимается как может показаться, а грамотного так и того меньше.
f(x) = 40*ceil(log10(x))
Таких чудес не бывает )))
Может, действительно кто-то и теханализ умеет делать?.. =)
То есть фича о количестве цифр может и неявно, но присутствует в формулировке задачи, а компьютеру её взять будет неоткуда.
Как вариант — нужно много точек данных, тогда он может сможет догадаться, но засада в том что на том же рынке много данных взять неоткуда. Поэтому возвращаемся к важности фиче инжиниринга.
Может кто-то и теханализ умеет делать, несомненно. Первый признак — такой человек сможет сказать что вот тут его скорее всего можно будет сделать, а вот — тут скорее всего нельзя.
А откуда следует, что функция именно такая? Их бесконечное количество.
Чем эта лучше других?
Вот машинное обучение по заданным критериям и отвечает на последний вопрос.
MS, будем считать, что был установлен телепатический контакт между мной и (минимум) двумя абонентами. Я задумал эту функцию и привел 3 точки для примера. А люди мои мысли прочитали.
На рынке тоже самое. «Рынок» задумывает функцию, а мы её угадываем явно или неявно. Кто хорошо угадывает — тот молодец живет припеваючи.
а ИИ для теста вы берёте нулёвую, которая такую ещё никогда не видела.
люди ведь тоже много косячат.
ПBМ, не спорю, что «люди много косячат».
Зато машина имеет передо мной колоссальное преимущество: объём памяти, скорость и безошибочность вычислений.
ну конечно мой прототип не мог этого сделать.
потому что __Я__ предусмотрел в нём только операции
final Operator[] allOps = {add, sub, mul, div, pow};
если туда добавить функцию numberCount и определить её как количество цифр, то дерево построится с полпинка
говорит ли это что-то плохое о самом подходе или «нереальности обучить»?
ни в малейшей степени.
вот есть стиральная машина. она делает простую работу — крутит барабан и греет воду.
или есть посудмоечная машина — крутит поливалку и греет воду.
они делают дело порой медленее и иногда хуже чем человек.
но бесполезны ли они?
Но если человек уже решил задачу прогнозирования рынка (путем придумывания «правильных фич»), то дальше ему уже и нейронка особо не нужна. Можно использовать классические методы.
если мало — возьмите автобус или авто.
человек умеет ходить. за кой чёрт ему авто? он итак дойдёт.
ПBМ, давайте ближе к нашей теме.
Если человек стопудово знает, какие фичи вляют на клоуз следующего бара (и при этом человек заодно примерно понимает вид этой зависимости), то может быть уже нет смысла кормить эти фичи в нейронку? Зачем нейронка, если нужно просто вычислить регрессионные коэффициенты, взвешивающие фичи по степени их относительной важности для прогноза.
Польза от МЛ как раз должна быть в том, чтобы некие алгоритмы находили зависимости в ситуациях, где их не может найти человек. Ну, как я это себе представляю.
ПBМ, в этом топике Вы не первый, кто упирает на то, что «без правильных фич ML — хлам». Но что есть «правильная фича»? По определению, это некий ряд данных, который действительно оказывает влияние на прогнозируемую величину (на клоуз следующего бара).
Получается, мы ходим по кругу: без «правильных фич» МЛ — хлам, а с «правильными фичами» он нам как бы и не нужен уже.
ch5oh, я про фичи не говорил.
это скорее — список разрешенных операций.
грубо говоря вот есть программа которая должна научиться играть в шахматы, но вы при программировании «забываете» ей сказать что ферзь может ходить по диагоналям.
а потом хохочете что она косячит в элементарных вещах.
нужен, не нужен, это так себе спор, вкусовщина же.
вашу позицию можно переформулировать (что вы уже сами сделали чуть выше) — если можно обойтись без ML — без него надо/можно/стоит обойтись. понятно, что с этим утверждением спорить сложно и не нужно.
как я понимаю, человеческое знание работает таким образом, что не всегда всё кристально ясно и понятно. даже людям не всегда «хватает фич».
и такое в последние годы уже не только в новых науках типа экономики, но и в физике и даже в математике (см Синъити Мотидзуки)
может и придёт тот день, когда всё станет 42. но пока до него далеко вроде бы.
PS: что-то туго далась ваша задача. но всё-таки спрограммил. сперерывами на поиграть с детьми, отметить 23 и тп. думаю теперь моя программа сможет найти и более сложные решения, типа:
X=3; Y=3;
X=13; Y=65;
X=511; Y=487;
X=12345; Y=???
ПBМ, Ваша программа прекрасна, но это не та функция, которая была изначально задумана. Хотите верьте, хотите нет. «Правильную» функцию написал в конце топика в UPDATE2.
С уважением,
вашу функцию я прочёл. и даже комментировал по ней, начиная в 13:03 (вы мне отвечали).
я поясню ещё две детали:
1. я сделал _другую_ функцию, другую задачу. на основе «фич» из вашей. т.е. все фичи известны: +, -, *, /, pow, число_цифр.
осталось мелочь — показать что программный поиск не нужен.
2. ну если честно, тут большая путаница, что есть машин лёрнинг, а что нет. если считать что всё что накапливает состояние в процессе работы методом проб и ошибок = машин лёрнинг, то моя программа — именно лёрнинг. и она одинаково легко решает и вашу оригинальную задачу. и задачу которую я придумал.
а вот человек, сдаётся мне, от второй задачи легко опухнет.
Eugene Logunov, больше всего смущает переход от 11 к 13. Без него это просто кусочно-линейная функция.
ПС Впечатляет, что Вы в 4 часа ночи размышляете над такими вопросами. =)