Биткойн и криптовалюты пожирают мир. Конечно, у них у всех огромный спад за последние несколько месяцев, но не заблуждайтесь. Криптовалюты останутся, и ожидается, что они перевернутся и достигнут более высоких уровней, чем раньше. Просто подумайте, что общее рыночная капитализация крипто-монет на данный момент составляет 300 миллиардов долларов США, а в какой-то момент 2018 года это число составляло около 800 миллиардов.
Итак, кто бы не хотел предсказывать будущие цены на биткойны? И будьте уверены, что большинство крупных банков, хедж-фондов и торговых компаний используют для этого какой-то сложный алгоритм. Сложный алгоритм? Что за алгоритм спросите вы?
Мы предполагаем, что ответ включает в себя методы глубокого обучения среди прочего, но мы не можем быть уверены, поскольку никто не хочет раскрывать свои секреты. И почему они должны?
Рекуррентная нейронная сеть и LSTM
Но я отхожу от цели сегодняшней статьи. Цель состоит в том, чтобы использовать простую нейронную сеть и попытаться предсказать будущие цены на биткойны за короткий период времени. Я решил использовать рекуррентные сети и особенно LSTM, поскольку они доказали свою эффективность в решении задач регрессии. Рекуррентные сети представляют собой не что иное, как простые сети с петлей обратной связи. Я имею в виду, что помимо стандартного ввода, они также используют информацию из предыдущих состояний для вычисления градиента ошибки. Другими словами, они учатся на своей собственной истории.
LSTM являются расширением классических рекуррентных сетей, которые обращаются к
проблема с исчезающим градиентом (градиент стремится к нулю, поскольку ошибка рекурсивно распространяется по многим слоям). Ячейка долговременной памяти использует вход, забывание и выход. Эти ворота помогают сети узнать, что сохранить, что забыть, что запомнить, на что обратить внимание и что вывести. Довольно аккуратно, верно? Помните, что ворота — это не что иное, как простой многослойный персептрон, но грамотная их комбинация может дать потрясающие результаты.
STFCN: пространственно-временной FCN для семантической сегментации видео
Давайте немного углубимся.
Каждая ячейка LSTM имеет свое состояние ячейки (c) и может добавлять или удалять информацию.
Ворота забывания решают, что удалить из состояния ячейки (f), а ворота ввода (i) решают, какие значения он будет обновлять.
Слой tanh создает вектор новых значений-кандидатов (c_hat), которые можно добавить к состоянию.
Входной вентиль и новые состояния-кандидаты объединяются для обновления состояния ячейки.
Наконец, он должен решить, что выводить (h). За это отвечает выходной вентиль(о), который фактически фильтрует состояние ячейки от ненужной информации. Результатом будет обратная связь для следующего раунда обучения.
Я знаю, что это довольно сложно, поэтому не стесняйтесь прочитать это еще раз. Я подожду…
Нейронный процесс Хоукса: нейронный самомодулирующий многомерный точечный процесс
Но хватит болтовни. Давайте напишем код.
Код на Питоне
Мы должны начать с загрузки исторических цен на биткойны за последний год из
здесь. Набор данных довольно прост, так как содержит только дату и цену.
from google.colab import files
files.upload()
df = pd.read_csv("market-price.csv",header=None)
dates=df('Date')
df.drop(('Date'), 1, inplace=True)
df.head()
Цена | |
---|---|
0 | 4363.054450 |
1 | 4360.513317 |
2 | 4354.308333 |
3 | 4391.673517 |
4 | 4607.985450 |
Прежде чем мы построим нашу модель, мы должны сделать небольшую предварительную обработку данных:
Теперь пришло время для LSTM. Философия нашего подхода заключается в том, что мы подаем в нейронную сеть одну цену за раз, и она прогнозирует цену в следующий момент. Модель будет состоять из одного слоя LSTM со 100 единицами (единицы — это размерность ее вывода, и мы можем настроить это число), слоя Dropout для уменьшения переобучения и слоя Dense (Fullly Connected), который отвечает за фактический прогноз.
Как видите, это очень простая модель, которую можно значительно улучшить, добавив больше слоев и атрибутов данных (от твиттер-каналов до рыночной капитализации и объема). И вы должны использовать их, если вы действительно серьезно относитесь к прогнозированию цен на криптовалюты. Здесь я просто пытаюсь дать вам основу для работы.
Для процесса обучения мы будем использовать оптимизацию Адама и среднеквадратичную ошибку в качестве функции потерь.
Кстати, оптимизация Адама (адаптивная оценка момента) — это усовершенствование стохастического градиентного спуска, которое адаптирует скорость обучения на основе среднего первого момента и среднего второго момента. Подробнее об этом
здесь
(из курса deeplearning.ai на Coursera).
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(units= 100,activation= 'tanh'.input_shape=(None, 1)))
model.add(tf.keras.layers.Dropout(rate= 0.2))
model.add(tf.keras.layers.Dense(units= 1, activation= 'linear'))
model.compile(optimizer= 'adam', loss= 'mse')
Через 100 эпох модель обучается и может использоваться для прогнозирования будущих цен на следующий месяц.
model.fit(x=x_train,y=y_train,batch_size= 1,epochs= 100,verbose=True );
inputs = min_max_scaler.transform(inputs)
inputs = np.reshape(inputs, (len(inputs), 1, 1))
predicted_price = model.predict(inputs)
plt.plot(dates(len(df)-prediction_days:),test_set(:, 0), color='red', label='Real BTC Price')
plt.plot(dates(len(df)-prediction_days:),predicted_price(:, 0), color = 'blue', label = 'Predicted BTC Price')
Вау… Результаты даже лучше, чем я ожидал. И мы достигаем этого самым простым способом. Представьте, если мы будем использовать больше слоев, больше эпох, точно настроим параметры и, самое главное, добавим гораздо больше видов входных данных. Чтобы дать вам подсказку, мы можем:
Используйте твиттер-канал или новости и выполняйте анализ настроений зафиксировать общественное мнение о биткойне
И чтобы обескуражить вас, небольшое замечание, что приведенные выше результаты могут быть не такими идеальными, как кажутся. Причина в том, что в конечном итоге сеть учится предсказывать значение, очень близкое к предыдущему, с точки зрения минимизации среднеквадратичной ошибки. В общем, исторические данные — не лучший способ предсказать цену, поскольку они подвержены таким недоразумениям.
Тем не менее, потенциал здесь есть, и нет никаких сомнений в том, что их действительно можно использовать для решения этих задач, особенно если они сочетаются с различными архитектурами, такими как сверточные сети.
Ну вот и все ребята. Я надеюсь, что хоть немного помог вам понять, что такое LSTM и как вы можете использовать их, чтобы предсказать цену биткойна и стать неприлично богатым (муахахаха)
Прощай…
* Раскрытие информации: Обратите внимание, что некоторые из приведенных выше ссылок могут быть партнерскими ссылками, и без дополнительной оплаты для вас мы будем получать комиссию, если вы решите совершить покупку после перехода по ссылке.