LINUX.ORG.RU

Как научить нейронную сеть экстраполировать

 , , , ,


0

3

Доброго времени суток. Есть набор векторов со значениями, например

[1,2,3,4,2,1,2]
[3,9,5,2,1,1,1]
[3,2,2,0,2,1,1]
...
[6,7,3,5,2,0,0]
Можно ли научить нейронную сеть тренду изменения компонент, чтобы на выходе получить что-то похожее?

Я пробовал учить парами, последовательно. X - текущий вектор, Y - следующий. Но если прогнозировать десяток таких векторов, то точность получается около 10 процентов. Вообще, точность прогноза одного следующего вектора либо 1, либо 0. Что я делаю не так? Может, оценивать точность таким образом некорректно для такого решения?

ЗЫ: У меня сеть прямого распространения, с одним скрытым слоем с 10 нейронами. Рекуррентную сеть таким методом обучить не получается вообще: на выходе вектор из nan...


Вообще, точность прогноза одного следующего вектора либо 1, либо 0.

Что-то прямо как в том анекдоте про динозавра на улице. Что такое точность прогноза?

ZERG ★★★★★ ()
Ответ на: комментарий от ZERG

Точность на тестовых данных. Из моего примера, выход для [1,2,3,4,2,1,2] должен чем-то вроде [3,9,5,2,1,1,1]. Но компоненты вектора на выходе не могут быть больше 1.

Rot1 ()
Ответ на: комментарий от Rot1

А у тебя зависимость от последовательности векторов есть? (time series, например) У тебя датасет имеет хотя бы 10000 значений? Ты пробовал строить зависимости между фичами? Строил корреляцию пирсона?

nikolnik ★★★ ()

точность прогноза

Что скрыто за этой фразой?

Рекуррентную сеть таким методом обучить не получается вообще: на выходе вектор из nan...

Это у тебя градиент взорвался, что-то делал неправильно.

У меня сеть прямого распространения, с одним скрытым слоем с 10 нейронами.

Слоев мало, нейронов тоже. Хотя, без нормальной постановки задачи это все пальцем в небо.

Задачу не понял, честно говоря. Какая реальная проблема скрыта за этими векторами?

Solace ★★ ()
Ответ на: комментарий от Rot1

Я ничего не понял, давай ещё раз. У меня стойкое ощущение, что задача вообще без нейронок решается.

ZERG ★★★★★ ()

Что я делаю не так?

Всё так. Экстраполяции всегда врут. Попробуй лучше игральные кости кинуть, лучше прогноз получится.

yvv ★★☆ ()
Ответ на: комментарий от Solace

Какая реальная проблема скрыта за этими векторами

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

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

Что скрыто за этой фразой?

Скрыто то, что от меня требуют этих цифр. На векторном слое в гисах градиент правдоподобный получается. Но мне нужно как-то доказать, что это неслучайные значения. Точность можно проверить на данных за имеющийся год. Нужно число, которое будет выражать близость прогноза к этим данным. Что то вроде этого print(np.sum(np.abs(prediction_last_data-lastdata)))

Rot1 ()
Последнее исправление: Rot1 (всего исправлений: 1)

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

DarkAmateur ★★★ ()

... и да, в зависимости от данных, может потребоваться регуляризация.

DarkAmateur ★★★ ()
Ответ на: комментарий от peregrine

Так по факту так и выглядит. Есть статистика за n шагов, нужно предсказать, как она будет выглядеть на n+1 шаге. Как десять лет назад без нейронок обходились при прогнозировании - ума не приложу.

Возможно, но мне нужно машинное обучение.

Гоните в шею таких умников, которые всюду ML пихают.

ZERG ★★★★★ ()
Ответ на: комментарий от ZERG

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

Partisan ★★★ ()
Ответ на: комментарий от Rot1

на самом деле ты далбаёп. потому что «нейронка» - это просто персептрон. когда-то давным давно, когда не было клоунов вроде тебя, люди называли вещи своими именами. и это говно называлсь персептроном

i36_zubov ()
Ответ на: комментарий от ZERG

А тут ты не прав. Задача научить пользоваться нейронками и понимать что это такое, а не учить использовать их где надо. Использовать где надо это второй этап.

peregrine ★★★★★ ()
Ответ на: комментарий от i36_zubov

Может быть апельсин фруктом тогда называть не будем? Думай, что пишешь

Rot1 ()
Ответ на: комментарий от Rot1

1. Сколько у тебя лет исторических данных?

Скрыто то, что от меня требуют этих цифр. На векторном слое в гисах градиент правдоподобный получается. Но мне нужно как-то доказать, что это неслучайные значения. Точность можно проверить на данных за имеющийся год. Нужно число, которое будет выражать близость прогноза к этим данным. Что то вроде этого print(np.sum(np.abs(prediction_last_data-lastdata)))

2. Каких цифр? По какой метрике будет оцениваться результат, ТВЕРДО И ЧЕТКО?

shkolnick-kun ★★★★★ ()

У меня сеть прямого распространения, с одним скрытым слоем с 10 нейронами.

Ты данные за несколько месяцев на входы подаешь, или только один месяц?

Рекуррентную сеть таким методом обучить не получается вообще: на выходе вектор из nan...

Архитектуру сам проектировал? Почитай про LSTM/GRU, там не должно быть такой фини.

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от shkolnick-kun

Ты данные за несколько месяцев на входы подаешь, или только один месяц?

X - текущий месяц, Y - следующий. И так по всем месяцам последовательно

Rot1 ()
Ответ на: комментарий от Rot1

Не точность, а коэффициент корреляции Пирсона.

Его тебе надо максимизировать, или минимизировать MSE.

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от Rot1

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

peregrine ★★★★★ ()
Ответ на: комментарий от Rot1

Инстант фейл. По одному месяцу невозможно построить тренд, даже для линейной одномерной модели надо 3-5 точек минимум.

Семь лет мало, очень мало. Это всего 84 точки. На таких данных даже очень простую нейронку не обучить.

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от Rot1

Как вариант - прогнозировать данные для каждой зоны «отдельно», подавая на входы данные за три - пять предыдущих месяца.

В этом случае одна и та же модель будет обучаться по нескольким независимым временным рядам. Эффективное количество точек увеличится кратно количеству зон.

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от Rot1

Не обязательно за 6, можешь взять за 7,8 и т.д. То есть, «предсказывать» можно на несколько месяцев вперед.

shkolnick-kun ★★★★★ ()
Последнее исправление: shkolnick-kun (всего исправлений: 1)

Да, забыл спросить... А там валидационная часть выборки (данные, которых не было в обучающей) будет?

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от Rot1

Вот только его надо вычислять на 8-году, данных по которого у тебя нет.

Если будет близким к 1, значит модель хорошо обобщила данные, если нет - нет.

Подумай насчет CV, в общем.

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от Rot1

тут надо обучать параметры гаммы, которая генерирует poisson - интеграл дает negative-binomial aka gamma-poisson mixture, log likelihood которого можно максимизировать . с вероятностной моделью всякие погрешности выводятся естественным образом. корреляции компонентов по идее нейронка отразит; сезонность - можно флаг месяца на вход давать, простейший вариант; автокорреляции, если есть - моделировать через rnn.

anonymous ()

Стоит почитать про нейронные сети. По сути ты аппроксимируешь некую функцию. То есть теоретически ответ на твой вопрос - да, но все зависит от способа обучения и функции ошибки. Тебе не стоит учить парами - попробуй сразу целыми последовательностями. И если у тебя значения дискретные - используй округление или приводи всё к значениям от 0 до 1 («нормализация»).

slapin ★★★★★ ()
Ответ на: комментарий от peregrine

В этом-то и проблема, до тонкостей «где их использовать» часто не доходят, получается, что опять микроскопом гвозди забивают.

ZERG ★★★★★ ()
Ответ на: комментарий от ZERG

Ну почему же, NN это весело!

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

Просто это как бы универсальный способ, волшебная пилюля, способ решить любую задачу, где нужна аппроксимация по неполной выборке. Понятно, что если разбираться в процессе, вникнуть, решить алгоритмически, аналитически, еще как-то, то задача решится быстрее и проще, но это затраты недешевых человеческих ресурсов. Нейронные сети позволяют всё делать мимокрокодилом не особо вникая в природу процесса. Использование NN как fallback-метода решения таких задач - это скорее плюс чем минус. Но сейчас принято для закручивания винтика хвататься сразу за кувалду - можно удобно погнуть пальцы. Так как вопрос «а что еще можно делать с помощью нейронных сетей» все еще популярен и за это все еще платят нехилые деньги, так почему бы и не поучаствовать в празднике жизни?

slapin ★★★★★ ()
Ответ на: комментарий от slapin

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

Этот хайп на ML пройдет когда-нибудь. Он повторяется где-то раз в 15-20 лет.

dave ★★★★★ ()
Ответ на: комментарий от dave

Сейчас на ML и в частности на NN надеются в плане чтения записанных голосовых данных и вкладывают в это нехилые деньги. Еще датамайнинг по соцсетям для выявления маргинальных групп. Так что пока хайп не спадет, так как других методов это сделать универсально нет. А по-старинке искать уже разучились, да и лень - статистика то лучше выходит, и усилий и денег уходит меньше. А гопников ловить устанешь и результат не гарантирован. И шугануть народ так сложно. А тут двойной эффект, очевидная польза. Вопрос только кто первым научится кластеризовать voice и находить выборку, которую уже живые люди смогут прослушать - тот будет спасителем человечества. По крайней мере его части.

slapin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.