概要
前回までの続き。
- (2021-06-16)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み1章 ニューラルネットワークの基礎
- (2021-06-17)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み2章 Keras のインストールと API
- (2021-06-18)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み3章 畳み込みニューラルネットワーク
- (2021-06-19)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み4章 GAN と WaveNet
- (2021-06-20)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み5章 単語分散表現
- (2021-06-21)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み6章 リカレントニューラルネットワーク
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 なのヤメーや(正当キレ)。確かにこの変数名をサラッと書けたらワカってる感はあるが……。
- はい今回はおしまい。(満足)
- 嘘です。これまでのモデルは分類問題を解くものだったが、今回は回帰問題を解く。
- 回帰問題とは、連続値の予測するもの。
- 分類を行うモデルの最後の層は、予測するクラスと同じ数の出力を行う全結合層だった。
- 回帰のモデルはなんと、最後の全結合層の出力は単一値。
- サンプルでは大気中の一酸化炭素、亜酸化窒素、気温、総体温度からベンゼンの濃度を予測する。
- なんか最近、アヤメ2種を、ガクの長さと花弁の長さを手がかりにパーセプトロンモデルで分類するサンプルを見たので理解できるな。
- データセットはここ https://archive.ics.uci.edu/ml/datasets/Air+quality
- このデータセットを整理するとき、「なんらかの理由で一部のデータが空欄だったら全体の平均で埋める」という手法をとっていた。この発想、自分になくて面白かった。
- https://github.com/oreilly-japan/deep-learning-with-keras-ja/blob/master/ch07/regression_net.py
- また別のモデルとして、自己符号化器。
- 何……? って、入力を復元するネットワークか。
- 学習の手法としては、入力をコンパクトな表現で圧縮してから、それを復元する。
- 圧縮担当のモデルをエンコーダーといって、戻すほうをデコーダー。
- これも 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 というパラメータを使うが、初期化の手法として何が適切について理論的な証明はまだない。
ずっと「イメージの流れ」を意識して読書してきたけれど、このやり方は、ばらばらと用語が出てくる章に弱い。集中力全然キープできなかった。せいぜい、図に用語を増やさせてもらおう。