概要

前回までの続き。

1章で概念を回収、2章で Keras のクラスを回収。3、4章で CNN で画像分類と画像贋作、音声生成。5章で単語分散表現を CNN で処理。そして6章では、 RNN で系列データを学習した。

これまで畳み込みニューラルネットワークと、リカレントネットワークという2種類のモデルを見てきた。正直あまちゅわ Pythonista はもう吐き気を催しているのだけれども、さらに違う種類のモデルを見るようだ。まあ、ずっと気になっていた functional API のことも出てくるようだし、ふんばって見てみようや。

 

7章をざっくり読んだ

7章のサンプルコード: https://github.com/oreilly-japan/deep-learning-with-keras-ja/tree/master/ch07

  • 2章の最初のころに顔を見せたっきり出てこなかった functional API は、複雑なモデルを構築するために使う。
    • ヒヤヒヤしてたんだよなあ。これまでずっと使っていた Sequential は一本のパイプラインを構築するモデルだ。もーとってもわかりやすくて、いつそれが別のものにとって変わるのかヒヤヒヤしていたのだ。
    • 「なお functional API は一本も作れる。」
    • マジで? そうなってくると、一本パイプライン型をわざわざ functional API で組んで、私ワカってますよ感を出したくなるな。
    • そういうわけで Sequential と functional API の差を見てみよう。
# Sequential を使って一本パイプラインを組んだ場合。
# ああ、 add ではなくて list でもいいんだ。んー、でも add のほうが分かりやすい、かな……?
model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

# これ↑を functional API で表すとこう↓。
x = Input(shape=(784,))
g = Dense(32)
s_2 = Activation('sigmoid')
f = Dense(10)
s_K = Activation('softmax')
y = s_K(f(s_2(g(x))))
model = Model(inputs=x, outputs=y)
model.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
)
  • これ↑なに(絶望)
    • これまでバンバカ add していた各層は関数で表すことができて、それぞれこう↓だ。上↑の各変数名は下↓の関数記号からとってみるみたい。
    • Dense -> g(x)
    • Activation(relu) -> σ2(x)
    • Dense -> f(x)
    • Activation(softmax) -> σK(x)
    • 「functional API で組んで、私ワカってますよ感を出したく」なるとか抜かしちゃったけど、どう考えても add のほうがわかりやすい……。ていうか Dense の関数名が g なのヤメーや(正当キレ)。確かにこの変数名をサラッと書けたらワカってる感はあるが……。
  • はい今回はおしまい。(満足)
  • 嘘です。これまでのモデルは分類問題を解くものだったが、今回は回帰問題を解く。
    • 回帰問題とは、連続値の予測するもの。
    • 分類を行うモデルの最後の層は、予測するクラスと同じ数の出力を行う全結合層だった。
    • 回帰のモデルはなんと、最後の全結合層の出力は単一値。
  • サンプルでは大気中の一酸化炭素、亜酸化窒素、気温、総体温度からベンゼンの濃度を予測する。
  • また別のモデルとして、自己符号化器。
    • 何……? って、入力を復元するネットワークか。
    • 学習の手法としては、入力をコンパクトな表現で圧縮してから、それを復元する。
    • 圧縮担当のモデルをエンコーダーといって、戻すほうをデコーダー。
    • これも GAN と同じで、ふたつのモデルの組み合わせ。モデルには、圧縮する入力が画像だったら CNN を使えばいいし、テキストや時系列データなら RNN を使えばいい。
    • 入力を復元するモデルだから、完成品としてはデコーダーになるってことでいいのかな。
    • 英訳は autoencoder でした。何でやねんよくわかりません。
  • 複合ネットワーク。
    • うわ、出た。6章で「畳み込み層と RNN セルを混ぜたネットワークは何て名前になるの? 混ぜるな危険なの?」って書いたけど、出た。
    • これの例として Memory Network。
    • 今回の Memory Network は質問回答を行う。中国語の部屋を再現できちゃう……。
    • 今回の質問回答タスクでは、ストーリーを読んでそれについての質問を回答するという形式。どういうことかわからない? これは面白そうなので具体例を出そう。
    • 次のような↓問題が出されたときに……
      • (ストーリー)john travelled to the hallway mary journeyed to the bathroom
      • (質問)where is john
    • 次のような↓回答を出せる。
      • hallway
    • https://github.com/oreilly-japan/deep-learning-with-keras-ja/blob/master/ch07/composite_qa_net.py
  • たまにサンプルコードで backend API って出てくるから何のために使うやつかと思ったら……
    • 複数のバックエンドにまたがる処理を実装するためのもの。 Keras は TensorFlow や CNTK といったバックエンドに計算処理を移譲する高レベルの API だ。ふつうバックエンドはひとつ指定するのだが、ふたつ以上使うとき使うのよやな。
  • 当然あらわれし Lambda
    • カスタマイズできる層のこと。
  • 生成モデル generative model
    • ん? Generative adversal network ってなかった?
    • と思いながら読んでみたら、 GAN はこの生成モデルのひとつらしい。
    • 生成モデルのサンプルとしては Deep Dream というのがあるみたい。
    • これは画像の中にオブジェクトを生成するもの。もともと inceptionalism と呼ばれていたけれど Deep Deream のほうがよく知られている名前。
    • 「特徴」をとらえるものらしいけど、まだ「特徴」のイメージがついていないな。
  • 層の初期化するときに kernel_initializer というパラメータを使うが、初期化の手法として何が適切について理論的な証明はまだない。

ずっと「イメージの流れ」を意識して読書してきたけれど、このやり方は、ばらばらと用語が出てくる章に弱い。集中力全然キープできなかった。せいぜい、図に用語を増やさせてもらおう。