Forex lstm


Kashif & # 039; s ML e NN BLOG.
Dados Forex e LSTM - (TensorFlow) Redes Neurais.
Trabalhei em dados Forex e usei redes neurais para prever o preço futuro do par de moedas EUR_USD ou gerar tendência futura.
Passos realizados para preparar dados baixados:
Os dados baixados estavam em forma json com recursos incorporados de moeda (alto, baixo, aberto, fechado, volume, tempo, completo). Os dados do json foram analisados ​​e colocados no quadro de dados da Pandas e também foram salvos no arquivo csv. Outros recursos como curto e longo SMA, bandas de bollinger, mudança de porcentagem e diferenças em high-low e open-close também foram adicionados aos dados. Em seguida, esses dados foram divididos em conjunto de treinamento e teste. Os dados de treinamento foram alimentados para a Rede Recorrente Neural (LSTM)
3 camadas LSTM, com abandono e, finalmente, com saída de ativação linear de 1 neurônio.
Para perda & # 8220; erro quadrado médio & # 8221; foi usado, e para otimizador & # 8220; rmsprop & # 8221; foi usado.
Os detalhes do modelo estão abaixo:
Outras modificações do modelo também foram tentadas, o que eu não gostaria de mencionar aqui, caso contrário, o detalhe será esmagador para você.
Depois de treinar os dados por 30 épocas, a perda caiu para 0,0114, que você pode ver aqui:
O preço aberto previsto de EUR_USD (usando dados de teste) parecia algo assim:
O gráfico de dados real (linha azul) e previsão (linha verde) parece assim:
Aqui estão mais alguns gráficos usando os mesmos dados:
Usando diferentes conjuntos de recursos, lstm caminha neurônios e épocas, você pode obter diferentes tipos de resultados. Depende da sua estratégia de negociação o que você realmente deseja realizar e quais recursos você deseja incorporar. O intervalo de tempo dos dados coletados e a extensão dos dados também desempenham um papel muito crítico na obtenção de bons resultados de acordo com seus objetivos de negociação.
Divirta-se com o uso de LSTM (redes neurais) com dados Forex e avalie todos os riscos por conta própria antes de fazer negócios reais.

Tutorial de Rede Neural Recorrente, Parte 4 e # 8211; Implementando um RNN GRU / LSTM com Python e Theano.
O código para esta publicação está no Github. Esta é a parte 4, a última parte do Tutorial da Rede Recorrente Neural. As partes anteriores são:
Nesta publicação, aprenderemos sobre redes LSTM (Long Short Term Memory) e GRUs (Gated Recurrent Units). Os LSTMs foram propostos pela primeira vez em 1997 por Sepp Hochreiter e J ürgen Schmidhuber, e estão entre os modelos mais utilizados na Deep Learning para NLP hoje. As GRUs, usadas pela primeira vez em 2017, são uma variante mais simples dos LSTMs que compartilham muitas das mesmas propriedades. Vamos começar olhando os LSTMs e, então, veremos como as GRUs são diferentes.
Redes LSTM.
Na parte 3, analisamos como o problema do gradiente de queda evita que as RNN padrão aprendam dependências de longo prazo. Os LSTMs foram projetados para combater os gradientes de fuga através de um mecanismo de gating. Para entender o que isso significa, vamos ver como um LSTM calcula um estado oculto (I & # 8217; m usando para significar multiplicação elementar):
Essas equações parecem bastante complicadas, mas na verdade não é tão difícil. Primeiro, note que uma camada LSTM é apenas outra maneira de calcular um estado oculto. Anteriormente, calculamos o estado oculto como. As entradas para esta unidade foram, a entrada atual no passo, e o estado oculto anterior. O resultado foi um novo estado oculto. Uma unidade LSTM faz exatamente a mesma coisa, apenas de uma maneira diferente! Esta é a chave para entender o grande quadro. Você pode essencialmente tratar unidades LSTM (e GRU) como caixas pretas. Dada a entrada atual e o estado oculto anterior, eles calculam o próximo estado oculto de alguma forma.
Com isso em mente, tente tentar uma intuição sobre como uma unidade LSTM calcula o estado oculto. Chris Olah tem uma excelente publicação que envolve detalhes sobre isso e, para evitar a duplicação de seu esforço, só vou dar uma breve explicação aqui. Peço-lhe que leia sua postagem para uma visão mais profunda e visualizações agradáveis. Mas, para resumir:
são chamados de portas de entrada, esquecimento e saída, respectivamente. Note-se que eles têm exatamente as mesmas equações, apenas com diferentes matrizes de parâmetros. Eles se importam com os portões chamados porque a função sigmoide esmaga os valores desses vetores entre 0 e 1 e, multiplicando-os de forma elementar com outro vetor, você define a quantidade desse outro vetor que você deseja & # 8220; deixe passar o & # 8221 ;. O gateway de entrada define a quantidade do estado recém-computado para a entrada atual que deseja permitir. O portão de esquecer define quanto do estado anterior que você quer deixar passar. Finalmente, o gateway de saída define quanto do estado interno que deseja expor à rede externa (camadas mais altas e próximo passo). Todos os portões têm as mesmas dimensões, o tamanho do seu estado oculto. é um candidato & # 8220; # 8221; estado oculto que é computado com base na entrada atual e no estado oculto anterior. É exatamente a mesma equação que tivemos em nossa RNN de baunilha, acabamos de renomear os parâmetros e para e. No entanto, em vez de tomar como o novo estado oculto como fizemos na RNN, usaremos o portão de entrada de cima para escolher um pouco disso. é a memória interna da unidade. É uma combinação da memória anterior multiplicada pelo portão de esquadrão e o estado oculto recém-computado, multiplicado pelo portão de entrada. Assim, intuitivamente, é uma combinação de como queremos combinar a memória anterior e a nova entrada. Podemos optar por ignorar completamente a memória antiga (esquecer o portão de todos os 0 & # 8217; s) ou ignorar o estado recém-computado completamente (entrada de todos os 0 & # 8217; s), mas provavelmente queremos algo entre estes dois extremos. Dada a memória, finalmente calculamos o estado oculto de saída multiplicando a memória pelo gate de saída. Nem toda a memória interna pode ser relevante para o estado oculto usado por outras unidades na rede. LSTM Gating. Chung, Junyoung, et al. & # 8220; Avaliação empírica de redes neurais recorrentes fechadas na modelagem de sequências. & # 8221; (2017)
Intuitivamente, as RNN simples podem ser consideradas um caso especial de LSTMs. Se você consertar o gateway de entrada todos os 1 & # 8217; s, o portão de esquadrão para todos os 0 & # 8217; s (você sempre esqueceu a memória anterior) eo gateway de saída para todos os & # 8217; s (você expõe toda a memória) você quase obtenha RNN padrão. Há apenas um adicional que abole a saída um pouco. O mecanismo de gating é o que permite que os LSTMs explicitamente modelem dependências de longo prazo. Ao aprender os parâmetros para seus portões, a rede aprende como sua memória deve se comportar.
Notavelmente, existem várias variações na arquitetura básica do LSTM. Um comum é criar conexões peephole que permitem que os portões não dependam apenas do estado oculto anterior, mas também do estado interno anterior, adicionando um termo adicional nas equações do portão. Há muitas mais variações. LSTM: A Search Space Odyssey avalia empiricamente diferentes arquiteturas LSTM.
A idéia por trás de uma camada GRU é bastante semelhante à de uma camada LSTM, assim como as equações.
Um GRU possui dois portões, um gateway e um gateway de atualização. Intuitivamente, o gateway de reinício determina como combinar a nova entrada com a memória anterior, e o gateway de atualização define quanto da memória anterior se mantém. Se configuramos a reinicialização para todos os 1 & # 8217; s e o gateway de atualização para todos os 0 & # 8217; s, chegamos novamente ao nosso modelo RNN simples. A idéia básica de usar um mecanismo de gating para aprender dependências de longo prazo é a mesma que em um LSTM, mas há algumas diferenças importantes:
Um GRU tem dois portões, um LSTM tem três portões. GRUs don & # 8217; t possuem e memória interna () que é diferente do estado oculto exposto. Eles não têm o portão de saída que está presente nos LSTMs. Os gateways de entrada e de esquadrão são acoplados por um gateway de atualização e o gateway de reinicialização é aplicado diretamente ao estado oculto anterior. Assim, a responsabilidade do gateway de reinício em um LSTM é realmente dividida em ambos e. Nós não aplicamos uma segunda não-linearidade ao calcular a saída. GRU Gating. Chung, Junyoung, et al. "Avaliação empírica de redes neurais recorrentes fechadas na modelagem de sequências". (2017)
GRU vs LSTM.
Agora que você viu dois modelos para combater o problema de gradiente desaparecendo, você pode estar se perguntando: qual deles usar? As GRUs são bastante novas (2017), e suas negociações não foram completamente exploradas. De acordo com avaliações empíricas na Avaliação Empírica de Redes Neurais Recorrentes Gated em Modelagem de Seqüência e Exploração Empírica de Arquiteturas de Rede Recorrentes, não há um vencedor claro. Em muitas tarefas, ambas as arquiteturas produzem desempenho comparável e os hiperparâmetros de ajuste, como o tamanho da camada, são provavelmente mais importantes do que escolher a arquitetura ideal. As GRUs têm menos parâmetros (U e W são menores) e, portanto, podem treinar um pouco mais rápido ou precisam de menos dados para se generalizar. Por outro lado, se você tiver dados suficientes, o maior poder expressivo dos LSTMs pode levar a melhores resultados.
Implementação.
Deixe o retorno à implementação do Modelo de Idioma da parte 2 e use as unidades GRU na nossa RNN. Não há uma razão de princípio por que eu escolhi GRUs em vez de LSTMs nesta parte (outra que eu também queria me familiarizar mais com as GRUs). Suas implementações são quase idênticas, então você deve ser capaz de modificar o código para passar de GRU para LSTM facilmente ao mudar as equações.
Baseamos o código em nossa implementação anterior de Theano. Lembre-se de que uma camada GRU (LSTM) é apenas outra maneira de calcular o estado oculto. Então, tudo o que realmente precisamos fazer é mudar a computação de estado oculto em nossa função de propagação direta.
Em nossa implementação, também adicionamos unidades de polarização. É bastante típico que estes não sejam mostrados nas equações. É claro que também precisamos alterar a inicialização de nossos parâmetros e porque eles agora têm tamanhos diferentes. Não mostro o código de inicialização aqui, mas está no Gitub. Eu também adicionei uma camada de incorporação de palavras, mas mais sobre isso abaixo.
Isso foi bastante simples. Mas e os gradientes? Poderíamos derivar os gradientes para e manualmente usando a regra da cadeia, tal como fizemos antes. Mas na prática, a maioria das pessoas usa bibliotecas como Theano que suportam a auto-diferenciação de expressões. Se você for forçado a calcular os gradientes você mesmo, você provavelmente deseja modularizar unidades diferentes e ter sua própria versão de auto-diferenciação usando a regra da cadeia. Nós deixamos Theano calcular os gradientes para nós:
Isso é muito bonito. Para obter melhores resultados, também usamos alguns truques adicionais em nossa implementação.
Usando rmsprop para atualizações de parâmetros.
Na parte 2, usamos a versão mais básica do Stochastic Gradient Descent (SGD) para atualizar nossos parâmetros. Acontece que esta não é uma ótima idéia. Se você definir sua taxa de aprendizado suficientemente baixa, SGD é garantido para progredir em direção a uma boa solução, mas na prática, isso levaria muito tempo. Existe uma série de variações comumente usadas no SGD, incluindo o método de Momentum (Nesterov), AdaGrad, AdaDelta e rmsprop. Esta publicação contém uma boa visão geral de muitos desses métodos. Eu também planejo explorar a implementação de cada um desses métodos em detalhes em uma publicação futura. Para esta parte do tutorial, escolhi ir com rmsprop. A idéia básica por trás do rmsprop é ajustar a taxa de aprendizado por parâmetro de acordo com a soma (suavizada) dos gradientes anteriores. Intuitivamente, isso significa que os recursos que ocorrem com frequência obtêm uma taxa de aprendizado menor (porque a soma de seus gradientes é maior) e características raras obtêm uma taxa de aprendizado maior.
A implementação do rmsprop é bastante simples. Para cada parâmetro, mantemos uma variável de cache e, durante a descida de gradiente, atualizamos o parâmetro e o cache da seguinte maneira (exemplo para):
O decadência normalmente é definido como 0.9 ou 0.95 e o termo 1e-6 é adicionado para evitar a divisão por 0.
Adicionando uma camada de incorporação.
O uso de incorporações de palavras como word2vec e GloVe é um método popular para melhorar a precisão do seu modelo. Em vez de usar vetores um-quentes para representar nossas palavras, os vetores de baixa dimensão aprendidos usando word2vec ou GloVe carregam significado semântico & # 8211; palavras semelhantes têm vetores semelhantes. Usar esses vetores é uma forma de pré-treinamento. Intuitivamente, você está dizendo à rede quais palavras são semelhantes, de modo que ele precisa aprender menos sobre o idioma. Usar vetores pré-treinados é particularmente útil se você não tiver muitos dados porque permite que a rede generalize para palavras não vistas. Eu não usei vetores de palavras pré-treinados em meus experimentos, mas adicionar uma camada de incorporação (a matriz em nosso código) facilita conectá-los. A matriz de incorporação é realmente apenas uma tabela de pesquisa # 8211; O vetor da coluna ith corresponde à ith palavra em nosso vocabulário. Ao atualizar a matriz, estamos aprendendo os próprios vetores de palavras, mas são muito específicos para nossa tarefa (e conjunto de dados) e não tão gerais como aqueles que você pode baixar, que são treinados em milhões ou bilhões de documentos.
Adicionando uma segunda camada GRU.
Adicionar uma segunda camada à nossa rede permite que nosso modelo capture interações de nível superior. Você poderia adicionar camadas adicionais, mas não tentei isso para essa experiência. Você provavelmente verá retornos decrescentes após 2-3 camadas e, a menos que você tenha uma quantidade enorme de dados (o que nós não precisamos), é improvável que mais camadas façam uma grande diferença e que possam levar a uma superposição.
Adicionar uma segunda camada à nossa rede é direta, nós (novamente) precisamos apenas modificar a função de cálculo de propagação direta e inicialização.
Uma nota sobre o desempenho.
Eu já fiz perguntas sobre isso no passado, então eu quero esclarecer que o código que mostrei aqui não é muito eficiente. Ele foi otimizado para maior clareza e foi escrito principalmente para fins educacionais. Provavelmente é bom o suficiente para brincar com o modelo, mas você não deve usá-lo em produção ou esperar treinar em um grande conjunto de dados com ele. Existem muitos truques para otimizar o desempenho do RNN, mas talvez o mais importante seja o lote de suas atualizações. Em vez de aprender de uma frase por vez, você deseja agrupar frases do mesmo comprimento (ou até mesmo preencher todas as frases para ter o mesmo comprimento) e, em seguida, executar grandes multiplicações de matriz e resumir gradientes para todo o lote. Isso é porque essas grandes multiplicações de matriz são gerenciadas de forma eficiente por uma GPU. Ao não fazer isso, podemos obter pouca aceleração usando uma GPU e o treinamento pode ser extremamente lento.
Então, se você deseja treinar um modelo grande, eu recomendo usar uma das bibliotecas Deep Learning existentes que são otimizadas para o desempenho. Um modelo que levaria dias / semanas para treinar com o código acima só levará algumas horas com essas bibliotecas. Eu pessoalmente gosto de Keras, que é bastante simples de usar e vem com bons exemplos para RNNs.
Para poupar-lhe a dor de treinar um modelo durante muitos dias, treinei um modelo muito semelhante ao da parte 2. Usei um tamanho de vocabulário de 8000, mapeou palavras em vetores de 48 dimensões e usei duas camadas GRU 128-dimensional. O notebook iPython contém código para carregar o modelo para que você possa jogar com ele, modificá-lo e usá-lo para gerar texto.
Aqui estão alguns bons exemplos da saída da rede (capitalização adicionada por mim).
Eu sou um bot, e essa ação foi realizada automaticamente. Eu me aplico ridiculamente bem o suficiente para apenas youtube. I & # 8217; tem um ritmo bom! Não há problema aqui, mas pelo menos ainda acena! Depende de quão plausível seja meu julgamento. (com a constituição que torna impossível)
É interessante olhar para as dependências semânticas dessas frases em vários passos de tempo. Por exemplo, o bot e automaticamente estão claramente relacionados, assim como os suportes de abertura e fechamento. Nossa rede conseguiu aprender isso, muito legal!
Isso é por agora. Espero que tenha se divertido e deixe as perguntas / comentários nos comentários!

Forex lstm
Puxe pedidos 0.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
Uma rede neural recorrente a longo prazo de longa duração para prever séries temporais forex.
O modelo pode ser treinado em dados diários ou mínimos de qualquer par forex. Os dados podem ser baixados a partir daqui.
O lstm-rnn deve aprender a prever o próximo dia ou minuto com base em dados anteriores.
A rede neural é implementada em Theano.
Este código está em desenvolvimento.
&cópia de; 2017 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.

MachineLearning.
410 & # 32; пользователей находятся здесь.
МОДЕРАТОРЫ.
Bem-vindo ao Reddit,
a primeira página da internet.
e inscreva-se em uma das milhares de comunidades.
Quer adicionar à discussão?
помощь правила сайта центр поддержки вики реддикет mod guidelines связаться с нами.
приложенияи инструменты Reddit para iPhone Reddit para o site móvel Android кнопки.
Использование данного сайта означает, что вы принимаете & # 32; пользовательского соглашения & # 32; и & # 32; Политика конфиденциальности. &cópia de; 2017 reddit инкорпорейтед. Все права защищены.
REDDIT e o logotipo ALIEN são marcas registradas da reddit inc.
& pi; Renderizado pelo PID 84879 em & # 32; app-456 & # 32; 2017-12-24 20: 16: 30.219661 + 00: 00 executando o código de país a84abeb: UA.

[译] 理解 LSTM 网络.
Neil Zhu, 简 书 ID Not_GOD, University AI 创始人 & amp; Cientista Chefe, 致力于 推进 世界 人工智能 化 进程. 制定 并 实施 UAI 中长期 增长 战略 和 目标, 带领 团队 快速 成长 为 人工智能 领域 最 专业 的 力量.
作为 行业 领导 者, 他 和 UAI 一起 在 2017 年 创建 了 TASA (中国 最早 的 人工智能 社团), DL Center (深度 学习 知识 中心 全球 ​​价值 网络), crescimento de AI (行业 智库 培训) 等, 为 中国 的 人工智能才 建 建 建 了 了 了 了 量 血液 和 养 养 养 养 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了 了全球 第一 本 深度 学习 入门 书 "神经 网络 与 深度 学习", 生产 的 内容 被 大量 的 专业 垂直 公众 号 和 媒 媒 媒 媒 连载 连载 规划 受邀 为 内 顶尖 顶尖 制定 制定 制定 课程 课程 课程 课程 课程 课程 前沿 前沿 前沿 前沿 前沿 前沿 前沿 前沿 前沿 前沿, 均受 学生 和 老师 好评.
Redes Neurônicas Recorrentes.
RNN 解决 了 这个 问题. RNN 是 包含 循环 的 网络, 允许 信息 的 持久 化.
在 上面 的 示例 图 中, 神经 网络 的 模块, A, 正在 读取 某个 输入 x_i, 并 输出 一个 值 h_i. 循环 可以 使得 信息 可以 从 当前 步 传递 到 下一步.
这些 循环 使得 RNN 看起来 非常 神秘. 然而, 如果 你 仔细 想想, 这样 也不 比 一个 正常 的 神经 网络 难于 理解. RNN 可以 被 看做 是 同一 神经 网络 的 多次 复制, 每个 神经 网络 模块 会把 消息传递 给 下 一个. 所以, 如果 我们 将 这个 循环 展开:
链式 的 特征 揭示 了 RNN 本质 上 是 与 序列 列表 相关 的. 他们 是 对于 这类 数据 的 最 的 神经 网络 架构.
并且 RNN 也 已经 被 人们 应用 了! 在 过去 几年 中, 应用 RNN 在 语音 识别, 语言 建模, 翻译, 图片 描述 等 问题 上 已经 取得 一定 成功, 并且 这个 列表 还在 增长. 我 建议 大家 参考 Andrej Karpathy的 博客 文章 - A Eficácia Não razoável das Redes Neurais Recorrentes 来 看看 更 丰富 有趣 的 RNN 的 成功 应用.
而 这些 成功 应 应 应 就 就 就 就 就 就 就 就 就 就 就LSTM 达到 的. 这篇 博 文 也会 就 LSTM 进行 展开.
长期 依赖 (Dependências de Longo Prazo) 问题.
RNN 的 关键 之 之一 就是 他们 可以 用来 先前 的 信息 当前 的 任务 上, 例如 使用 过去 的 视频 段 来 对 对 段 的 理解. 如果 RNN 可以 做到 这个, 他们 就 变得 非常 有用. 但是真的 可以 么? 答案 是, 还有 很多 依赖 因素.
时候 先前 先前 的 的 来 预测 预测 下 下 来 来 们 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 试着 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的 的词 们 并 并 需要 其他 的 上 使 使 使 使 使 使先前 的 信息.
但是 同样 会有 一些 更加 复杂 的 场景. 假设 我们 试着 去 预测 "Eu cresci na França. Eu falo francês fluente "最后 的 词. 当前 的 信息 建议 下 一个 词 可能 是 一种 语言 的 名字, 但是 如果 我 需要 弄清楚 是 什么 语言, 我们 是 需要 提到 的 离 当前 位置 很 远 的 França 的 上下文的.......................................
在 理论上 绝对 绝对 处 处 的 的 问题 问题 问题 问题 问题(1994) 等 人 对该 问题 进行 了 深入 的 研究, 他们 发现 一些 使 训练 RNN 变得 非常 困难 的 相当 根本 的 原因.
Longo prazo curto 网络 - 一般 就 叫做 LSTM - 是 一种 RNN 特殊 的 类型, 可以 学习 长期 依赖 信息. LSTM 由 Hochreiter & amp; Schmidhuber (1997) 提出 并 在 近期 被 进 进 巨 巨 巨 巨 巨
LSTM 过 刻意 的 信息 在 实践 中 是 是 是 为 实践 实践 中 中 很 很 很 很 代 代 代 代 代 代 代 代 代 代 代 的 的 的 的 的 的 的 的 的 的 的 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代 代
所 所 所 所 所 所 具 具 具 具 标准
LSTM 同样 是 这样 的 结构, 但是 重复 的 模块 拥 个 拥 拥 拥 拥 特殊
不必 担心 这里 的 细节. 我们 会 一步 一步 地 剖析 LSTM 解析 图. 现在, 我们 先 来 熟悉 一下 图 中 使用 的 各种 元素 的 图标.
在 上 的 图例 中 每 条 条 传输 着 着 一层. 合 在一起 的 线 表示 向量 的 连接, 分开 的 线 表示 内容 被 复制, 然后 分发 到 不同 的 位置.
LSTM 的 核心 思想.
LSTM 有 通过 精心 设计 的 称 作为 "门" 的 结构 来 去除 或者 增加 信息 到 细胞 状态 的 能力. 门 是 一种 让 信息 选择 式 通过 的 方法. 他们 包含 一个 sigmoid 神经 网络 层 和 一个 pointwise 乘法 操作.
Sigmoid 层 输出 0 到 1 之间 的 数值, 描述 每个 部分 有多 少量 可以 通过 .0 代表 "不许 任何 量 通过", 1 就 指 "允许 任意 量 通过"!
在 我们 中 们 们 们 们 从 从 状态给 每个 在 细胞 状态 C_ 中 的 数字 .1 表示 "完全 保留", 0 表示 "完全 舍弃".
下 下 是 样 样值 向量 到 来 来 产 产生 对 状态 的 更新
现在 是 更新 旧 细胞 状态 的 时间 了, C_ 更新 为 C_t. 前面 的 步骤 已经 决定 了 将会 做 什么, 我们 现在 就是 实际 去 完成.
们 掉 掉 状态 状态 与 与 丢弃 丢弃 更 更 更 更 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程 程.
最终, 我们 需要 确定 输出 什么 值. 这个 输出 将会 基于 我 的 细胞 状态 但 也 也 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞 细胞状态 通过 tanh 进行 处理 (得到 一个 在 -1 到 1 之间 的 值) 并将 它 和 sigmoid 门 的 输出 相乘, 最终 我们 仅仅 会 输出 我们 确定 输出 的 那 部分.
在 语言 模型 的 例子 中, 因为 他 就 看到 了 一个 代词, 可能 需要 输出 与 个 相关 的 信息 信息 例如 知 知 知 是 是形 变化.
们 但 都 在 不 正常 的 的 微 的 的 的讲 一下.
其中 一个 流 形 的 LSTM 变 体, 就是 由 Gers & amp; Schmidhuber (2000) 提出 的, 增加 了 "conexão peephole". 是 说, 我们 让 门 层 也会 接受 细胞 状态 的 输入.
上面 的 图例 中, 我们 增加 了 peephole 到 每个 门 上, 但是 许多 论文 会 加入 部分 的 peephole 而非 所有 都 加.
另一个 变 体 是 通过 使用 acoplado 忘记 和 输入 门. 不同于 之前 是 分开 确定 什么 忘记 需要 添加 什么 新 的 信息, 这里 是 一同 做出 决定. 我们 仅仅 会 们 我们 将 要 输入 在 当前 位置 时 忘记. 我们仅仅 输入 新 的 值 那些 们 们 们 忘记 旧 的 信息 的 那些 状态.
另一个 改动 较大 的 变 体 是 Gated Recurrent Unit (GRU), 这 是 由 Cho, et al. (2017) 提出 提出 的 更 更 更 的 的变 体.
这里 只是 部分 流行 的 LSTM 变 体. 当然 还有 很多 其他 的, 如 Yao, et al. (2018) 提出 的 Depth Gated RNN. 还有 用 一些 完全 不同 的 观点 来 解决 长期 依赖 的 问题, 如 Koutnik, et al. (2017) 提出 的 Clock RNN.
要 问 哪个 变 体 是 最好 的? 其中 的 差异 性 真的 重要 吗? Greff, et al. (2018) 给出 了 流行 变 体 的 比较, 结论 是 他们 基本上 是 一样 的. Jozefowicz, et al. (2018) 则 在 超过 1 万种 RNN 架构 上 进行 了 测试, 发现 一些 架构 在 某些 任务 上 也 取得 了 比 比较 更好 的 结果.
刚 开始 我 我 过 过 过 过 过 任 更
由于 LSTM 一般 是 通过 一系列 的 方程 表示 的, 使得 LSTM 有 一点 令人 费解. 然而 本文 中 一步 一步 地 解释 让 这种 困惑 消除 了 不少.
LSTM 是 我 在 在 中 很 自然 自然 自然 自然 自然 自然 重 呢下 下 已经 已经 了 是 是 是 是 是 图片 图片 的部分, 根据 这 部分 信息 来 产生 输出 的 词. 实际上, Xu, et al. (2018) 已经 这么做 了 - 如果 你 希望 深入 探索 注意力 可能 这 就是 一个 有趣 的 起点! 还有 一些 使用 注意力 的 相当 振奋人心 的 研究 成果, 看起来 有 更多 的 东西 亟待 探索 ......
Agradeço a várias pessoas por me ajudar a entender melhor os LSTMs, comentando as visualizações e fornecendo comentários sobre esta publicação.
Agradeço aos meus colegas do Google os seus comentários úteis, especialmente Oriol Vinyals, Greg Corrado, Jon Shlens, Luke Vilnis e Ilya Sutskever. Agradeço também a muitos outros amigos e colegas por terem tido tempo para me ajudar, incluindo Dario Amodei e Jacob Steinhardt. Estou especialmente agradecido com Kyunghyun Cho por uma correspondência extremamente pensativa sobre meus diagramas.
Antes desta publicação, pratiquei explicar LSTMs durante duas séries de seminários que ensinei em redes neurais. Obrigado a todos os que participaram daqueles por sua paciência comigo e por seus comentários.
我 是 Neil 朱小虎, 简 书 ID Not_GOD, Universidade AI 创始人 & amp; CH.

Comments

Popular posts from this blog

Promoção de opção binária

A arte de comprar e vender ações e opções de compra de ações