ぴあぴあゆーとぴあ

雑記ブログ

ゼロから始めるDeepLearning

暖かくなってきて花見の時期ですね。

そんな中、Python記事第二弾。
ニューラルネットワークの記事ですが。)
Python3を触り始めて2週間ほどですが
なかなか設計が難しいですね。
抽象性をあまり持たせられないことが多いです。




さて、この三連休でこの本を読んでいました。
自分は予備知識もあって、サクサクと読めて楽しかったです。
黄色チャートを読んでいるような感じで読めましたね。


ニューラルネットワークの各重みなどのパラメータがどういうときにどういった意味を持つのか、
「数学的な説明」と「感覚的な説明」の2通りで解説されており良かったです。
MNISTの手書き文字画像データを用いた、実際のコードが載っているのが素晴らしいです。
慣れている方だと、数式を読むよりもプログラムを読んだ方が理解しやすいかも(?)

自分はコーディングはせず、プログラムの部分は読んで満足しました。笑
tensorflowを使いたいので、いずれその記事を書く予定です。


以下ニューラルネットワークの個人的まとめ

ニューラルネットワークの出力
入力に関しては、わりとなんでもいけるので略
2値分類問題や、ラベル付けなどの結果を出力する。
n個のラベルに分類する問題ならば、n個の数値を出力する。
2値分類問題なら2つの値を、出力します。

ここで出力された値の中から一番大きな値が、分類されたラベルとなります。

ニューラルネットワークのフロー
基本的なニューラルネットワークは、入力データを順番に前の層から次の層へ送っていきます。
入力データ→第一層→第二層→.......→第n層→出力層
のような感じです。
ここで大事なのは、入力データがいきなり第二層へ行ったりしないことですね。
また層の間で送られるデータは行列をイメージしておいてください。

・各層で行われる計算
基本的には入力データの行列に、重みデータの行列の内積を計算を行います。
また、重み付けの層からは、その結果を「整える」活性化関数を使う層が続きます。

上記の書籍では各処理のフロー毎に、
中学生でもわかるくらいの簡単な例が付いていてわかりやすいです。

ニューラルネットワークのパラメータ
①各層で使う「重み」
②各層の出力を「整える」活性化関数
基本的には「重み」を求めてしまえば、ラベル付けできるようになります。
活性化関数は、重み付けする層の出力を「整える」のに使います。
「整える」というのは、めちゃくちゃな出力結果を正規化(出力の総和を1に)したり、抑えたりします。
特性は活性化関数により異なりますね。

ところでニューラルネットワークは「教師あり学習」です。
教師あり学習というのは、答え付きの問題集を解いて行って、
自分の回答と答えを比較して正当率を上げていくようなアルゴリズムですね。

重みは、「テストデータを入力したときの出力結果」から、
「テストデータの答えとの差分」を損失関数により計算し、
その計算結果を手掛かりに更新していきます。

よって「重み」を求めるのに必要になるのが以下
③重みの初期値
④訓練時に使う損失関数
⑤パラメータの更新手法
が必要となります。
重みの初期値や、どのような損失関数を用いるかについては
適用したい問題に応じて決めれば良いと思われます。
先行研究などを探せば見つかるはずです。

パラメータの更新は、損失関数の出力結果により行います。
損失関数というのは、基本的にどれだけ正しく識別できていないか、を計算します。
つまり損失関数の最小値を出せるようなパラメータに更新することが重要です。
損失関数が小さくなるパラメータに更新していきます。

損失関数の最小値をみつける、ここで微分が用いられる。
微分は、傾きを求めるもの。
主にこの傾きから、関数の最小値があるであろう方向へ、パラメータを更新していきます。

傾きの情報から、どれだけパラメータを更新するかは決めないといけないです。
この辺りのパラメータも、よく使われているものを用いれば大丈夫なようです。


以上が簡単なまとめですかね。
個人的には畳み込みニューラルネットワークのところの話が、面白かったです。
パラメータの更新で、物理的なモデルを採用しているというのも面白いかった。
PIDとかその辺の制御系の手法を使ってみたら面白そうだなと感じました。

また畳み込みニューラルネットワーク(CNN)は、自然言語処理でもよく使われいるようですね。
今までは形態素解析をしてから、意味解析を行うという手法が普通でした。
ですが、CNNに文章を1文字ずつ入れていくと、形態素解析を行わずに意味解析ができるようです。
面白いですね。

またニューラルネットワークはパラメータさえ決まってしまえば、
実際のテストで答えを計算するのが早いのが面白いですね。
人間も解き方を考える時は大変だけど、解き方さえ分かればすっと解けますもんね。
人間っぽいなーと感じました。

f:id:nanabyo:20170827190931j:plain