雑記: 5次以上の方程式に解の公式が存在しない話

以下の話は厳密なものでも網羅的なものでもありません。キャラクターが登場しますが原作とは関係ありません。内容の誤りは筆者に帰属しますのでご指摘ください。
f:id:cookie-box:20180125113448p:plain:w60

美希、最近仕事忙しそうだけど学校の勉強は大丈夫?

f:id:cookie-box:20180210114535p:plain:w60

春香に心配されなくてもミキは成績いいの。それに今日は学校に顔出して、2次方程式の解の公式とか習ったの。解の公式があるなんて便利なの。これなら今後は何次方程式が出てきても全部パソコンとかにまかせて、ミキは寝てればいいの。あふぅ。

f:id:cookie-box:20180125113448p:plain:w60

…美希、一応言っとくけど、5次以上の方程式に解の公式は存在しないよ?

f:id:cookie-box:20180210114535p:plain:w60

え、そうなの?…でも、それっておかしいの。難しくてまだ公式をつくれてないだけかもなの。ないって言いきれないと思う。

f:id:cookie-box:20180125113448p:plain:w60

ううん、言いきれるの。

f:id:cookie-box:20180210114535p:plain:w60

なんで?

f:id:cookie-box:20180125113448p:plain:w60

まず、解の公式って何かちゃんと決めておかなきゃだけど、n を1以上の整数として、n 次方程式  a_n x^n + a_{n-1} x^{n-1} + \cdots + a_0 =0 \; (a_n \neq 0) の解の公式とは、方程式に出てくる係数  a_0,  \cdots , a_n および(係数がつくる体と同じ体に属する)定数をつかった式で方程式の解をかきあらわしたものとする。ただし、この式でつかっていい演算は、足し算、引き算、割り算、掛け算、冪乗根(ルートを取るとか、3乗根をとるとか、もっと一般に  m を2以上の整数として  m 乗根をとるという操作のことね)に限るよ。あと、各演算をつかっていいのは有限回だけとするね。ちなみに、n 次方程式の解が複数ある場合は全部かきあらわさないと駄目だからね。 2次方程式の解の公式では  \pm で2つの解を1つの式にまとめているけど、こういう形にまとめないといけないってわけじゃないよ。

f:id:cookie-box:20180210114535p:plain:w60

…まあそれはそれでいいの。2次方程式の解の公式も、係数  a, b, c をつかって、足し算、引き算、掛け算(掛け算ができれば累乗もできるね)、割り算、ルートをつかって解をあらわしているの。

f:id:cookie-box:20180125113448p:plain:w60

あと注意として、5次方程式の解の公式は存在しないけど、いつも係数で解がかけないってわけじゃないからね。例えば、 a_5 x^5 -a_0 = 0 という形の5次方程式だったら、 x = \sqrt[5]{a_0 / a_5} が解の1つだとただちにわかるよね(これに1以外の1の5乗根をかければ5つの解が全てそろうね)。あと、係数の式で解がかけないというのは、解が存在しないという意味ではないことにも気を付けてね。係数の式で解がかけなくても解自体は存在するから、「5次方程式には解がない」というのは色んな意味で間違い。もっとも、中学校では複素数はまだ扱わないから、実数の範囲に解がないときには「解なし」という答え方をすると思うけど、5次方程式には実数解が必ず1つ以上あるしね。

f:id:cookie-box:20180210114535p:plain:w60

「方程式の解が方程式の係数の式でかけるかかけないか」っていう問題なのはわかったの。でも、4次以下の方程式はかけるけど5次以上の方程式はかけないですとか、やっぱり変だと思うの。

f:id:cookie-box:20180125113448p:plain:w60

まずちょっと準備として、(0で割ることを除いて)加減乗除について閉じている数の集合をたいっていうんだ。例えば、実数どうしって足しても引いても掛けても割っても必ず実数になるよね。だから、実数全体は体になるんだ。他にも、有理数にだけ注目してもよくて、有理数どうしも加減乗除したら必ず有理数になるから、有理数も体なんだ。あと、高校では実数より広い複素数というのを習うけど、この複素数も体。体じゃない例としては、整数だけに注目するとこれは体じゃない。整数どうしを割り算すると整数じゃなくなっちゃうことがあるからね。それで、方程式の解って方程式の係数がつくる体に入っているとは限らない。美希が学校で習ってる2次方程式も、係数は有理数でも解は無理数になったりするよね?

f:id:cookie-box:20180210114535p:plain:w60

無理数って  \sqrt{2} とかのこと? そーゆーのが解になる方程式なんかいっぱいあるの。 x^2 = 2 とか。

f:id:cookie-box:20180125113448p:plain:w60

うんうん、2次方程式  x^2 - 2 = 0 を考えてみると、この方程式の係数は  a_2 = 1, \; a_1=0, \; a_0 =-2 で、これらの加減乗除有理数 \mathbb{Q} をつくるんだよね。それで、この方程式の解も同じ有理数体の中にいてくれたら、解を係数の加減乗除だけでかきあらわすことができる望みがある。でも、実際の解は  x=\pm \sqrt{2}無理数だから有理数体の中にはいない。だから少なくともこの方程式は、係数の有限回の加減乗除だけでは解まで絶対たどり着けない。

f:id:cookie-box:20180210114535p:plain:w60

体っていうのはまだよくわからないけど、 1, 0, -2 の有限回の加減乗除 \sqrt{2} がつくれないのはわかるの。それが春香が言う「係数がつくる体に解が入ってない」ってことなのかもしれないけど、結局入ってないんじゃ駄目じゃん。それに、2次方程式にはちゃんと解の公式があるの。

f:id:cookie-box:20180125113448p:plain:w60

加減乗除では解がつくれないと言ったけど、解の公式は加減乗除に加えて「冪根をとる」ってことができるんだよ。解の公式がかけるには、解が係数体に入っていないといけないってわけじゃないんだ。係数体  K に含まれる適当な数に冪根をとったものを  K に加えて体を拡大して、そうしてできた新しい体  K_1 に含まれる数に冪根をとったものを加えてまた体を拡大して…、って繰り返しやっていって、体の中に解が含まれるまで拡大できればいいんだ。有限回の拡大でね。美希がさっき言った2次方程式  x^2 = 2 だと、解は  \pm \sqrt{2} だから、係数体  \mathbb{Q} \mathbb{Q}(\sqrt{2}) に拡大すれば解を含むようにできる。 \mathbb{Q}(\sqrt{2}) っていうのは、 a, b有理数として、 a + \sqrt{2} b でかける数全体のことだよ。

f:id:cookie-box:20180210114535p:plain:w60

春香、 x^2 = 2 の解は  \sqrt{2} -\sqrt{2} だけなの。 a + \sqrt{2} b でかける数全部は要らないと思うの。

f:id:cookie-box:20180125113448p:plain:w60

あ、体っていうのは、体の要素どうしを加減乗除しても体の要素じゃないと駄目なんだ(0で割るのは除いて)。有理数 \mathbb{Q} \sqrt{2} を加えた体をつくりたかったら、有理数 \sqrt{2} を足し引きしたものは全てその体の要素なんだよね。もちろん、掛け算や割り算したものも体の要素だし、さらにそれらを加減乗除したものも体の要素だけど、それらは全て  a + \sqrt{2} b の形にかける。

f:id:cookie-box:20180210114535p:plain:w60

あ、そういうことなの。ならいいの。でも、そんな体に広げて考えるなんて、なんか大げさなの。

f:id:cookie-box:20180125113448p:plain:w60

大げさでいいんだよ。係数体や係数体を有限回何らかの冪根で拡大した体に解が入っていたら、ちゃんと求まるかどうかはともかく解の公式がかける可能性はある。有限回の加減乗除冪根の操作で解までたどり着けるってことだからね。逆に、係数体や係数体を有限回何らかの冪根で拡大した体に解が入っていなかったら、解の公式がかける可能性すらないんだよ。そして、5次以上の方程式には解の公式がかける可能性すらない。

f:id:cookie-box:20180210114535p:plain:w60

…言いたいことは何となくわかったの。でも、そんなに体を広げて解が入っていないって言えるの? 何回も足し算、引き算、掛け算、割り算、冪根をつかってよくても、解にたどり着けないものなの? 解が入っていないですっていう証明なんて、できなさそうなの。なんか悪魔の証明?みたい。

f:id:cookie-box:20180125113448p:plain:w60

そんなに手がかりがないわけじゃないよ。係数体を繰り返し拡大しても解にたどり着くことができないと直接示すのは確かに難しい。でも、係数体や係数体を拡大した体の中に解が入っているかどうかを問い掛けることができるツールがあるんだ。

f:id:cookie-box:20180210114535p:plain:w60

そんなツールがあるの? でも春香、いまは目の前の体に解が入っているかどうか問い掛けたいんじゃなくて、これから体を何度拡大してもずっと解が入ることがないのかどうかが知りたいと思うんだけど…。

f:id:cookie-box:20180125113448p:plain:w60

そこでなんと、このツールで解が入っているかどうか問い掛けた結果からは、その体を拡大した上で解が入っているかどうか問い掛けた結果がどうなるかも調べられるんだ。「解が入っています」という結果までたどり着くことはない、というのもわかっちゃう。

f:id:cookie-box:20180210114535p:plain:w60

それはすごいの。どんなツールなの?

f:id:cookie-box:20180125113448p:plain:w60

そのツールの名前はガロア群。ある方程式について、係数体の元を変えないような解の入れ替えの操作を全て集めると群の構造をしていて、これを方程式のガロア群というんだ。方程式のガロア群をとって、もしそれが単位群なら、それは「この体には解が全て入っています」ということ。単位群でなければまだ入っていない解があるから係数体を拡大する必要があるけど、拡大した体に解が入っているかどうかのガロア群をまたとるんだ(これはもう方程式のガロア群とはいわないけど同じように定義できるよ)。ただ、このときの拡大の仕方は適当に冪根を加えるのでは駄目で、元の係数体の係数をもつようなある多項式が1次式にまで因数分解できるようになるような拡大をしないといけないんだけど、この拡大の仕方は趣旨に合っているよね(そして、このような体の拡大をガロア拡大というよ)。そうやって係数体を拡大してガロア群を取り直すと、そのガロア群は元の方程式のガロア群の正規部分群になるんだ。さらに体を拡大してガロア群を取り直しても同じで、拡大する前のガロア群の正規部分群になる。特に、体に冪根を加えることによってガロア拡大するとき、拡大前後のガロア群の剰余群は巡回群になる。まとめると、元の方程式のガロア群に対して、剰余群が巡回群になるように正規部分群をとる操作を何度繰り返しても単位群にたどり着くことがないならば、係数体をどう拡大しても解を含む体にはならないということになる。

f:id:cookie-box:20180210114535p:plain:w60

春香、待って、なんで解の入れ替えなんて話になったの? 別に解を入れ替えたいわけじゃないと思うの。

f:id:cookie-box:20180125113448p:plain:w60

「係数体の元を変えない解の入れ替え」を全て集めた群に注目すると、この群が係数体の拡大(ここでは、冪根を加えることによるガロア拡大)の前と後でどんな関係で結ばれているかがわかるんだ。つまり、後者は前者の「剰余群が巡回群になるような正規部分群」になっている。そして、この群が単位群になるまで係数体を拡大すれば解が含まれているといえる。体の拡大の前後の関係がわかって、最終目標までわかるんだよ。もし体の方だけ考えていたら、拡大したらどんな変化があるのかも、どこまで拡大したらよいのかもよくわからなかったからね。

f:id:cookie-box:20180210114535p:plain:w60

あとその群って何? 単位群とか正規部分群とか剰余群とか巡回群とかも、ミキ知らないし…。

f:id:cookie-box:20180125113448p:plain:w60

まあ群は中学校で習わないからね(高校で習うとは言ってない)。その辺は置いといて結論を先に言うと、一般的な5次方程式のガロア群は5次対称群  S_5 という群になるんだけど、この  S_5 は、「剰余群が巡回群になるように正規部分群をとる操作を何度繰り返しても単位群にたどり着くことがない」んだ。6次方程式以上も同様。

つづかない

NIPS2017論文読みメモ: Tensorized LSTM(その3)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その2 / 次回:まだ
f:id:cookie-box:20180108144114p:plain:w60

RNN は、ステップ毎に「前回の特徴 + 今回の入力」を「今回の特徴」に変換することによって、ある系列の特徴を得ることを目指す。RNN層をスタックすれば特徴の特徴を得ることもできる。でも、層をスタックするほど実行時間も勾配消失(爆発)の危険も増大する。層を積み重ねずに深く特徴を抽出したいなら、ある層が抽出した特徴を次の層に渡すとき、次の時間ステップに渡すように歪めてしまう。つまり、「前回の浅い特徴 + 前回の深い特徴」を「今回の深い特徴」にする。これによって、前回の浅い特徴から今回の深い特徴まで架け橋ができる。時間ステップが経過する度、特徴は深くなる。さらに、後ろの層の特徴を参照してもいい。表現力も増す。

f:id:cookie-box:20180108144126p:plain:w60

前回はその Tensorized RNN まで用意できたよね。各層の隠れ状態を積み重ねたものを隠れテンソルとする。この隠れテンソルの更新をカーネルでの畳込みにより行うことでパラメータも節約できる。ただ、LSTM の機能をまだ実装できていない。LSTM は RNN に記憶セルとゲートを増設したものだから、記憶セルを設置して、各ゲート用のカーネルを用意するのじゃ駄目なのかな?

f:id:cookie-box:20180108144114p:plain:w60

歪みのない Stacked RNN だったらそれでも大丈夫…。記憶セルは、時が流れても拡大も縮小もされない特徴を確保するための仕組み。時を遡っても誤差が拡大も縮小もされないことを保証する。でも、Tensorized RNN 上の誤差逆伝播では前のステップの同じ層にだけじゃない、前の層にも後ろの層にも誤差を伝播さなければならない…。

f:id:cookie-box:20180108144126p:plain:w60

それはそうだけど…記憶セルのお陰で勾配消失(爆発)の懸念は払拭されたんじゃ…あ、伝播に支障をきたすのはもしかして重み係数のコンフリクトの方?

f:id:cookie-box:20180108144114p:plain:w60

うん。再帰構造を含むニューラルネットには、時間ステップ毎に受け取りたい入力がきたり受け取りたくない入力がくるから、重み係数のコンフリクトの心配が付きまとう。だから受け取りたいときだけ受け取れるように Input Gate で制御する。でも、Input Gate が制御しているのは「記憶にどのように加算するか」…加算だけでは制御できているとはいえない。次の時間ステップにかけて層をクロスした斜め方向にも情報は流れる。この斜めのフローも、ゲート開閉を制御したい?

f:id:cookie-box:20180108144126p:plain:w60

何となくわかった…でも、記憶セルの更新時に斜め方向への情報は移動しないよね。それこそ、テンソル更新時の畳込みにつかうカーネルを、時間ステップ毎に変えちゃうような対応が必要じゃない?

f:id:cookie-box:20180108144114p:plain:w60

うん。「変える」。ただし、変えるのはテンソル更新時のカーネルじゃない。斜め方向のフローを制御するために、記憶セルは同じカーネルサイズで「かき混ぜる(=畳込む)」。そしてこのかき混ぜるためのカーネルは、時間ステップ毎に  H_{t-1}^{cat} からつくる。「記憶セルをかき混ぜるためのカーネル」をつくるためのカーネルをも学習するのが Tensorized LSTM の完成形。

f:id:cookie-box:20180205234353p:plain:w390

(その4があれば)つづく

NIPS2017論文読みメモ: Tensorized LSTM(その2)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その1 / 次回:まだ
f:id:cookie-box:20180108144126p:plain:w60

えっと、LSTM がもてる記憶の複雑さ―つまり、同時にもてる情報量の大きさと特徴抽出の深さ―を上げるにはどうしようって話だったよね。単純に記憶の次元を増やすのじゃパラメータが激増するし、LSTM のスタックじゃせっかくの LSTM の利点である長期依存性の学習が台無しになっちゃうって言ってたよね。

f:id:cookie-box:20180108144114p:plain:w60

うん…それでどうしようという話だけど、一般のニューラルネットワークでパラメータ数を抑制しながら情報量を増やす有名な方法には、Tensor Factorization とパラメータの再利用があるって。前者の Tensor Factorization というのは、パラメータを、低ランクのテンソルの積で表せるようなテンソルにするみたい? 参考文献も読まなければ正しくはわからないけど…低ランクの積で表せるという制限を課すことでパラメータ数を抑えながら、高次元の特徴量を扱える? もう1つのパラメータの再利用は、CNN のように、小さなパラメータセットを繰り返し全体に適用するようなイメージ?

f:id:cookie-box:20180108144126p:plain:w60

じゃあそのどちらか、あるいは両方を採用するとか?

f:id:cookie-box:20180108144114p:plain:w60

それは…後者を。パラメータの再利用なら、特徴量ベクトルの次元数とは独立にパラメータ数を決められるし(CNNでいうと、画像の大きさとは関係なくカーネルサイズを決められる、かな…)、あと、情報をばらばらにして再帰ループさせることができるから、特徴抽出の深化に役立つって。これは、詳しくは後で? あと、それとは別に…RNNの隠れ状態ベクトル(特徴量ベクトル)をテンソルで表すって。あ、この論文では LSTM を拡張するけど、先に RNN で考える? テンソルで表すと、パラメータを共有する軸?をつくれるって。この軸と垂直な方向に隠れ状態テンソルを延ばしても、パラメータ数は増えない。これは、CNNでいう畳込み層のパラメータ数が、カーネルサイズが同じなら画像のサイズを大きくしても変わらないのと同じ。あと、高階のテンソルをつかうと、パラメータ数が同じなら、depth の割に高速にネットワークを wide にできるって。あの、「同時にもてる情報量の大きさ」と「特徴抽出の深さ」と言っていたのを、原文通りに width と depth とかくようにするね…正確ではない訳だと思うから。この、テンソルにする理由の後者はまだよくわからない。

f:id:cookie-box:20180108144126p:plain:w60

うん。その隠れ状態のテンソルは具体的にどんな風に計算されてつくられるものなのか…プログラムでもなければ、よくわからないかな。

f:id:cookie-box:20180108144114p:plain:w60

泉さんには、プログラムの方が読みやすい? でも、論文だから…数式。あ、RNNの隠れ状態ベクトルテンソルにするといったけど、最初は簡単のために2次元のテンソル、つまり行列で考える。まず、普通の Stacked RNN (sRNN) からスタートする。論文3ページの Figure 1 の (a) …下に、絵を描いた。破線の左側。sRNN はある時間ステップ内で多段階の特徴抽出をする。図の例だと、3段階? この特徴抽出を、ある時刻に一段階目、次の時刻に二段階目…としたい。RNN は既に時間方向に「深い」から、特徴抽出も、これに便乗? そのように特徴抽出を時刻ごとに一段階ずつにしたのが、破線の右側。Figure 1 の (b) …これは skewed sRNN といって、sRNN をゆがめただけで…既に過去に別の論文で提案されている…。

f:id:cookie-box:20180126225422p:plain:w500

f:id:cookie-box:20180108144126p:plain:w60

確かに、右側の絵では、データがどんどん次の時刻に流れて行っているね。出力される  h_{t-3}^{3} の上の添え字は何段目の RNN の隠れ状態ベクトルか、下の添え字はどの時刻の入力まで参照しているかという意味?

f:id:cookie-box:20180108144114p:plain:w60

合ってる。上の図を、時間方向に展開しない形で書くと、下図になる。下図の一番左が sRNN で、真ん中が skewed sRNN。skewed sRNN の一層目は、一つ前の時刻の入力データと、一つ前の時刻の一層目の出力を受け取る。でも、一つ前の時刻の二層目以降の出力を受け取ってもいい。二層目の出力も受け取ったのが、下図の一番右。そして、この一番右の図の、各層の隠れ状態ベクトルを束ねた行列を隠れ状態テンソルと見做したものが、Tensorized RNN (tRNN)。

f:id:cookie-box:20180126231548p:plain:w500
tRNN の隠れ状態テンソル H_t \in \mathbb{R}^{P \times M} とかく。 P が sRNN のスタック数に相当… テンソルサイズとよぶ。 M は各層の隠れ状態ベクトルの次元数に相当… M は画像でいうRGBチャネルのように、チャネル数とよぶ。さらに、 H_{t-1} の頭に次元が合うように変換した入力データをくっつけたものを  H_{t-1}^{cat} \in \mathbb{R}^{(P+1) \times M} とかく。 H_{t-1}^{cat} H_t に更新するときは、CNNの要領…カーネルサイズ  K ずつ、畳込み。その後、活性化。テンソルサイズ  P が大きくなっても、この畳込みのパラメータ数は増えない…。そして、例えば  K=3 なら、「一つ前の層のさっきの出力」「この層のさっきの出力」「一つ後の層のさっきの出力」を畳み込むことになる…層をまたいだ畳込み…だから、cross-layer convolution という。
f:id:cookie-box:20180126232714p:plain:w480

f:id:cookie-box:20180108144126p:plain:w60

なるほど。これなら、 P を大きくしてもパラメータは増えないし、時の流れに便乗して特徴抽出の深化が進む…cross-layer convolution で層間でデータを相互作用させることで、複雑な学習もできる…後はこれを LSTM よろしく、記憶とゲートを増設するだけって感じかな?

f:id:cookie-box:20180108144114p:plain:w60

基本的には…。でも、記憶とゲートを増設するだけでは、上手くいかないことが…。単純に記憶とゲートを増設すると以下。これは、Figure 1 の (d) に相当。ただこれだと、記憶は時間方向にしかスムーズに逆伝播しない。いま、cross-layer convolution しているから、層をまたぐ方向にも記憶は伝播しないといけない…。

f:id:cookie-box:20180126235221p:plain:w320

(その3があれば)つづく

NIPS2017読み会@PFN: 参加メモ

以下の勉強会に参加してきました。connpass.com


以下、思ったことのメモです。いい加減なことしか書いてなく、文字数と興味は比例しません。
NIPSについて はえーNIPS会議への参加はプラチナチケットなのですね…。
GANのテーマトーク 半教師有りですごいというのやってみたいです。ラベル貼るの大変ですので。
Inverse Reward Design
https://arxiv.org/abs/1711.02827
自分の発表でした…お聞き苦しくすみませんでした…。この日記上で志希ちゃん(自分)とまかべー(自分)が論文読みをしてくれましたが、発表資料を作成すると後から結構間違いに気付きました…それもすみませんでした…。
A Unified Approach to Interpreting Model Predictions
https://arxiv.org/abs/1705.07874
モデルの解釈性の話。この話とは関係ないですが、以前読もうとしていた教材を、全然読んでいません…。
https://christophm.github.io/interpretable-ml-book/
Deep Sets
https://arxiv.org/abs/1703.06114
(順序のない)集合を扱う話でした。PointNet と関係あるのでしょうか…。関係ないですが、この論文タイトルは検索しづらいですね…。
Interpolated Policy Gradient: Merging On-Policy and Off-Policy Gradient Estimation for Deep Reinforcement Learning
https://arxiv.org/abs/1706.00387
ご本人の発表でした。方策オンと方策オフを混ぜた手法。強化学習問題で、囲碁などは Simulation。データがいくらでも取れる。自動運転などは Real-world。データは限られる。なので向いている手法の違いなども出てくるのですね。
分散深層学習のテーマトーク 大規模データの処理はお金でGPUを積めば解決するのではないのですよというお話でした。学習率とバッチサイズのスケジューリングだけでなく、大規模なりの勾配降下法など。
階層的強化学習のテーマトーク 11月の強化学習アーキクチャ勉強会でこの方のお話を一度お聴きしたので聴きやすかったです。ワークショップとなるほどの分野になのですね。これも昨年からやってみたいと思っていてやっていないです…。LSTM論文を読んでいたので、「記憶改竄」と聞いて LSTM の Forget Gate を思い出してしまいました。LSTM でいうなれば、入力データのモードの違いを読み取って、Forget ではなく以前もっていた記憶を Remember ということができそうですね。どなたかやっているのでしょうか。
モデルに基づく強化学習のテーマトーク 現実世界の強化学習は難しいという話が今日よく出てきますね。現実世界の情報の引き出しにくさに加え、安全性(解釈性)が求められるのは、深層学習モデルではなかなか届かないですね。AIの判定が誰かの不利益になるとき(説得するのに)、失敗が致命的な事故となるとき(自動運転)、安全性(解釈性)が要りますね。
Estimating Mutual Information for Discrete-Continuous Mixtures
https://arxiv.org/abs/1709.06212
情弱なので相互情報量がわからないです。
→ このテーブルの下で考えました。
Predicting Organic Reaction Outcomes with Weisfeiler-Lehman Network
https://arxiv.org/abs/1709.04555
グラフを畳込むということが言われればできますね(但しノードことに近傍が異なる)。こういう、高度に専門的なドメイン知識(この発表では化学反応)が搭載された機械学習というの、将来できたらいいなあと思う方向性です。
音のテーマトーク 音、会話、音楽とあるのですね。会話認識で音素がモデル化されているというの、前回の記事でエリー(自分)が言っていたのと関連しています。音声合成というのは、ボイスロイドという認識でよいのでしょうか…。マルチモーダル学習もやってみたいです。
分子と材料のテーマトーク 今日一日通して、機械学習とモデルの協力というテーマがよく出てきますね…。VAE は分子もつくってくれるのですね…(合成できる保証がないって面白いですが)。というか VAE と GAN で対比したときの VAE の役割って何だったっけ…。以下をみると GAN と違って尤度が測れるのか…。
https://www.slideshare.net/masa_s/gan-83975514
相互情報量って何かを以下の記事っぽい雰囲気で考えようと思いますが、2変数必要ですね。
雑記: 交差エントロピーって何 - クッキーの日記
上の記事には2国間の天気の同時分布などないので、以下のようにイメージしておきます。

  •  P(A国が晴, B国が晴)=0.25
  •  P(A国が曇, B国が晴)=0.25
  •  P(A国が雨, B国が曇)=0.25
  •  P(A国が雪, B国が雨)=0.125
  •  P(A国が雪, B国が雪)=0.125

A国の天気とB国の天気の相互情報量というものを考えることができるはず。
 I(A国の天気, B国の天気 \displaystyle)= \sum_{y \in Y} \sum_{x \in X} p(x, y) \log \frac{p(x,y)}{p(x)p(y)}
A国の天気がこれでB国の天気がこれだという情報を、「A国の天気とB国の天気が独立だと考えたときのエンコーディング」から「正しいエンコーディング」を引いたものの平均になっている。独立だと考えたときの方が確率は同じか小さくなるから、相互情報量は0か正になる。相互情報量が0なら、 X Y は独立になる。というか、「実際の同時分布」と「独立な場合の同時分布」のカルバック・ライブラー情報量だ。「独立な場合の同時分布」までの距離だ。

NIPS2017論文読みメモ: Tensorized LSTM(その1)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その0 / 次回:まだ
f:id:cookie-box:20180108144114p:plain:w60

前回この論文を読もうとしたけど、RNN や LSTM の話をして、全く論文に入らなかった…。

f:id:cookie-box:20180108144126p:plain:w60

ごめん…今回は論文の内容に入るね。でも、前回は LSTM は図を出しただけで、LSTM ってどんなものか全然話してなかったから、その話だけ先にしておきたいかな。LSTM の原論文は以下だよ。

Sepp Hochreiter; Jürgen Schmidhuber. Long short-term memory. Neural Computation, 9 (8): 1735–1780, 1997. http://www.bioinf.jku.at/publications/older/2604.pdf
前回の絵も再掲しておくね。あ、絵の黄色い箇所は上の論文にはなくて、わかるLSTM ~ 最近の動向と共に - Qiita を参考に描き足したものだよ。該当する論文はそちらの記事を見てね。
f:id:cookie-box:20180117205719p:plain:w600

f:id:cookie-box:20180108144114p:plain:w60

前回と違って、一部線が太くなってる?

f:id:cookie-box:20180108144126p:plain:w60

太い線の箇所だけみるとシンプルなRNN(シンプルな RNN のことを、Tensorized LSTM の論文では vanilla RNN と呼んでいるね)なんだ。LSTM は vanilla RNN にどんなパーツを付け加えたものかわかるようにしてみたよ。

f:id:cookie-box:20180108144114p:plain:w60

バニラ…シンプルな味で、おいしそう。じゃなかった、vanilla RNN の周りに結構ごてごてパーツが付いてるんだ…わたしのPCみたい…でも、どうしてこんなに色々なパーツが?

f:id:cookie-box:20180108144126p:plain:w60

絵理さん、PC自作だもんね。じゃなかった、vanilla RNN には以下の欠点があって、この前者を解決するのが上図の「記憶」のライン(原論文の constant error carrousel)、後者を解決するのが上図の Input Gate / Output Gate というように対応付いているよ。

  • 勾配や発散や消滅することにより学習が不安定になる: これは前回も話したけど、誤差を時間ステップをさかのぼらせて伝播させる毎に各時間ステップの誤差が掛け合わさることで発散や消滅の恐れがある問題だね。これは RNN の再帰構造に起因する問題ではなくて、再帰しない多層ネットワークでも層をさかのぼる度に誤差が掛け合わさるんだけど、RNN では時間ステップの長いデータを処理したいときさかのぼる回数が多くなるのと、再帰ゆえに同じ重みを何度も通るパスが存在することから特にクリティカルになっているね。
  • 重み係数のコンフリクトにより表現力が制限される: こちらは再帰構造ならではの悩みだね。ある入力パターンを受け取ったらその特徴を何ステップも保持したいとする。このとき、ある入力パターンから特徴を受け取るように学習しなければならないのはもちろんだけど、そうやって得た特徴がその後の入力によってかき消されないようにもしないといけない。あるときには受け取りたいけどあるときには受け取りたくない、これが Input 側のコンフリクト。他方、特徴があるパターンのときにだけ何か信号を出力したいとして、別のパターンのときにはそのような信号を出力しないようにしたいこともある。あるときには読み出したいけどあるときには読み出したくない、これが Output 側のコンフリクト。
前者を解決するには、再帰させる特徴ベクトルに重み係数を掛けることも活性化することも許されない(正確には原論文を見てね)。誤差を安定的に過去に伝播させるには、言い換えると、過去から今まで続く系列の特徴を学ぶには、そのような特徴には毎ステップ何か加算するくらいしかできない。このような「記憶」という特徴を再帰させる。後は、記憶を毎ステップ加算して読み出せばいい。LSTM では記憶にどのように加算するかをこそ学ぶ。でも、それだけだと重み係数のコンフリクトから逃れられない。だから、受け取りたいときだけ受け取れるように、読み出したいときだけ読み出せるように、制御するゲートを付けてしまってこのゲートの開閉も学べばいい。これが LSTM。

f:id:cookie-box:20180108144114p:plain:w60

パーツパーツに意味があるんだ。

f:id:cookie-box:20180108144126p:plain:w60

前回話しそびれたのはここまでだよ。

f:id:cookie-box:20180108144114p:plain:w60

ありがとう泉さん。いまの話で読みやすくなった…今回読む論文のイントロダクションでも「LSTM によって記憶の保持期間の長期化と、ゲートによる情報フローの制御ができるようになった」とある…それで次の課題は…どうやって LSTM のキャパシティを大きくする?

f:id:cookie-box:20180108144126p:plain:w60

LSTM のキャパシティ?

f:id:cookie-box:20180108144114p:plain:w60

うん…いくら記憶をずっと保持することができても…複雑な記憶をもつことができなければ LSTM の適用場面は限られる。LSTM のキャパシティを広げる1つの方向は、単に記憶の次元を増やす…これは、一度にもてる情報量を増やす。もう1つは…特徴抽出の深化(という表現はわたしが勝手にあてているけど…)。LSTM をいくつも積み重ねる(Stacked LSTM が既に提案されている)ことで、より高レベルな特徴を抽出できるようになる…深層学習がなぜ深層なのかという話でよく挙げられるように…ピクセルからエッジを、エッジから顔のパーツを、顔のパーツから人の顔を…。時系列なら音素、言葉、会話文とか…?Stacked LSTM の原論文は読んでない…ごめん…。

f:id:cookie-box:20180108144126p:plain:w60

その2つの方向が、論文タイトルの Wider と Deeper ということかな?

f:id:cookie-box:20180108144114p:plain:w60

うん。もちろん、記憶の次元を増やせば Wider になるし、LSTM をいくつもスタックすれば Deeper にはなる…。でも…前者は追加的なパラメータを…後者は実行時間を要する…。

f:id:cookie-box:20180108144126p:plain:w60

そりゃあパラメータは必要になるでしょ…記憶の次元を  d だけ大きくするなら、必要な追加パラメータは…あ、2乗で効くんだね。

f:id:cookie-box:20180108144114p:plain:w60

そう。もう一方の Stacked LSTM は実行時間もかかるし、それに、多層化によって LSTM が払拭したはずの勾配の発散や消滅の懸念がまた首をもたげてくる…。

f:id:cookie-box:20180108144126p:plain:w60

それは確かに問題って感じがするね。

f:id:cookie-box:20180108144114p:plain:w60

それでこの論文では、上図の「記憶」を、テンソル―多次元配列の意味だと思う―で表現する手法で、LSTM を、パラメータの追加なしに Wider に、ほとんど実行時間の増加なしに安定的に Deeper にする…以下の順序でそれを実現していく…。

  • まず RNN の出力をテンソルにすることで、パラメータを共有しながら一度にもてる情報量を増やす。
  • 次に上の Tensorized RNN で特徴抽出の深化を時間ごとの再帰ループにマージさせていく。
  • Tensorized RNN を Tensorized LSTM に拡張する。

(その2があれば)つづく