質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1965閲覧

LSTM の定義方法

reiwa2277

総合スコア4

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/08/11 06:09

編集2019/08/12 01:00

LSTMの定義のコードで重みwとバイアスbの定義方法がなぜそうなるか分かりません。
重みはなぜ入力層と隠れ層を足すのか分かりません
要するに3・4行目の数式がなぜそうなるかわからないとのことです。
教えてください

python

1 2n_input = 32 3n_hidden = 64 4w =np.random.randn(n_inputs+n_hidden,n_hidden*4) 5b = np.zeros(n_hidden*4) 6 7def lstm(x, h, c): 8 z = ...i = ...f = ...o = ...

イメージ説明

参考書にこのような記載しかされておらずどなたか力を貸してください!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

LSTM はいくつかバージョンがあるのですが、おそらく忘却ゲートがあるバージョンかと思います。

わかるLSTM ~ 最近の動向と共に - Qiita

重みはなぜ入力層と隠れ層を足すのか分かりません

LSTM ブロックの入力は1つ前の層の出力 (n_inputs 次元) と LSTM ブロックの1つ前の時刻の出力 (n_hidden 次元) なので、入力の次元は合わせて、n_inputs + n_hidden 次元になります。

また、1つの LSTM ブロックには input gate、output gate、forget gate と LSTM の入力で4つの隠れ層があるので、出力数は合わせて、n_hidden * 4 となります。

※ 画像は上記 Qitta の記事の図を引用

同様に4つの隠れ層があるので、バイアスの次元も合わせて n_hidden * 4 です。

投稿2019/08/13 14:08

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reiwa2277

2019/08/14 11:42

お二方のおかげで理解できました! ありがとうございます!
guest

0

重みはなぜ入力層と隠れ層を足すのか

提示されている部分のコードは、
w の 定義として入力層と隠れ層(の重みの値)を足しているのではなく、
w の 重みのノード数を 「入力層のノード数 + 隠れ層のノード数」として、randomに初期化する、ということだと思います。
b は 隠れ層の4倍のノード数で0に初期化される、ということですね。

投稿2019/08/11 06:44

mokemokechicken

総合スコア948

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reiwa2277

2019/08/11 07:02

bはz,i,f,oの4つ分を合わせているとのことですかね? wのノード数はなんで足すんですか?隠れ層のノード数だけじゃなくて?
mokemokechicken

2019/08/11 07:09

> bはz,i,f,oの4つ分を合わせているとのことですかね? そうなのではないかと。 > wのノード数はなんで足すんですか?隠れ層のノード数だけじゃなくて? 入力xに対しても内積とったりするんじゃないでしょうか。 そのコードを追っていって w, b が何に対して作用しているかをみるとはっきりすると思います。 ※ すみません、今すぐ思い出せない(色々なバリエーションがあったかとか、そもそもメジャーな実装がどうなのか、等)ので、はっきりしたことが言えなくて。
reiwa2277

2019/08/11 07:46

bはそうですね。4つ分まとめてますよね。 wは内積をとってどうするんですか?
mokemokechicken

2019/08/11 07:58

よろしければ、上記の lstm のコードを全部質問の部分に書いてもらえないでしょうか。 > wは内積をとってどうするんですか? LSTMにしたいのでしょうね。 例えば、 https://qiita.com/t_Signull/items/21b82be280b46f467d1b#lstm%E3%81%AE%E9%A0%86%E4%BC%9D%E6%92%AD%E8%A8%88%E7%AE%97 だと、 Wの種類は z, in , for, out の 4種類ありますね。 この中で y_t-1というのは hidden に該当すると思います。 W と R が常にペアで Wx + Ry_t-1 と使われているので、それをまとめたのが、そのコードの w なのだと思います(全体をみてないのでわからないですが)。
reiwa2277

2019/08/11 08:17

追記しました。どこのことでしょうか?
mokemokechicken

2019/08/11 10:10 編集

これがLSTMの実装の全体でしょうか? LSTMのおおよそ全体かな、と思う部分を記載してもらいたいです。 その中で w, b がどのように作用しているかをみると、 LSTMの仕組みがコード中でどのように再現され、 wの役割が何かがはっきりする可能性があると思うのです。 一応、書いておくと、今書かれているコードだと、wは一切(再)登場しないのでコメントできないです。
mokemokechicken

2019/08/11 10:37

実際 raiwa2277 さんのコード中の w の役割は私にはまだわからないですが、 私は さっきのURLの中の W, R を合わせた(連結した)のが、w なのだと思っています。 そういう風にみたら理解できないでしょうか?
reiwa2277

2019/08/13 10:58

参考書見たらこれしかなくて・・・ 「入力層のノード数 + 隠れ層のノード数」のノード数をなぜ足すのか書いていないですし理解できないですよね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問