「TensorFlowで学ぶディープラーニング入門」を感想、ざっくりまとめ。
「TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説」
という本を読みました。
感想、内容まとめ、などを書きます。よろしければ参考にしてみてください。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~
- 作者: 中井悦司
- 出版社/メーカー: マイナビ出版
- 発売日: 2016/09/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
はじめに
まず、難しかったです。専門用語も多くて、数学の式も多くて、思ったより難解でした。
そんな中でも、「得にこの部分を見ておけば、本全体として何を説明しているのかが比較的イメージしやすいかな」という部分があったので、そういった部分に的を絞って紹介します。
この記事で「畳み込みフィルター」と「プーリング層」といったニューラルネットワークを構成する用語が何を意味しているのか?というのがなんとなーく分かると思います。
私自身がなんとなーくしか理解できておりませんので、既に多少知識がある人にはあまり参考にならないかもしれません。
私の持っている知識
私自身の知識としては、以前AIに関する本を一冊ななめ読みして、ニューラルネットワークについてなんとなく知っている。という程度のものです。
私の理解としては、ニューラルネットワークとは人間の脳のニューロンをモデル化したものであるとか、
それをプログラムで実装する場合は実は単純な行列計算になるという事ぐらいです。
TensorFlowに関しては「誰でも簡単にディープラーニングを使ったAIを実装できるらしい」という程度の認識です。いや、認識でした。
後で書きまずが、そうそう簡単には実装出来ないと思います。
ちなみに以前読んだのはこの本。今回読んだ本よりはまだ易しい内容です。
きちんと理解するには数学の知識が必要
この「TensorFlowで学ぶディープラーニング入門」という本の内容を理解するには、数学の知識を必要とする部分がかなり多く含まれています。
「ニューラルネットワークの仕組みを丁寧に伝えよう」という意図はとてもよく伝わってくるものの、数学に慣れていない人(私みたいな)にはほとんど理解できないのではないかと思います。
分からない部分は調べながら読み進めれば良いのですが、(私みたいな)数学に詳しくない人間がそれをやってたら本を読み終わるまで何ヵ月、あるいは1年以上かかってしまうかもしれません。
それもなかなかじれったいので、詳細を理解するのはいったん置いておいて、まずはざっくり理解するために、分からない所はさらさらっと目だけ通してどんどん先に読み進めてしまいましょう。
そうすると、ひとまず「ニューラルネットワークを構成する要素はどういった物があるのか」「それぞの要素はどういった役割があるのか」といった事が、いったんは知識として身についてきます。
それだけでも十分価値はあります。
全体を理解してから詳細を詰めていくというやり方も悪くはないはずです。
分からない言葉は沢山でてきますが、特に繰り返し出てくる言葉がいくつかあります。
それは嫌でも印象に残ります。
いったんざっくり読み終わったあとで、頻繁に使われる言葉から調べていく事で、だんだんと理解が進んでいきます。
内容が分からないまま文章を読み進めるのはツライ部分もありますが、投げ出さずに頑張っていきましょう。
「機械学習モデルの3ステップ」
この本ではいくつかの例題を元に、TensorFlowを用いてニューラルネットワークを構築していきます。
そして、そのすべてに基本の流れというものがあります。
それがこの本の中で「機械学習モデルの3ステップ」と呼ばれているものです、以下の3つのステップです。
- 与えられたデータを元にして、未知のデータを予測する数式を考える
- 数式に含まれるパラメーターの良し悪しを判断する誤差関数を用意する
- 誤差関数を最小にするようにパラメーターの値を決定する
解決したい問題に応じて、開発者はこの「機械学習モデルの3ステップ」の1~3をそれぞれ自分で考え、構築する必要があります。
問題が画像解析ともなると、この3ステップを素人がイチから考えるのはほとんど無理と言っても良いと思います。
機械学習というのは「なんでも機械が勝手にやってくれる」というわけではありません。
TensorFlowというライブラリも、自動的に問題を解決してくれるライブラリではありません。
「どうやったら機械が上手く学習してくれるかは、人間が一生懸命に考えなければならない」という事をまず理解しておく必要があります。
TensorFlowで出来ること・出来ないこと
TensorFlowでは上記の「機械学習モデルの3ステップ」で必要になるアルゴリズムがあらかじめ用意されています。
ですから、機械学習モデルやニューラルネットワークの設計さえ出来てしまえば、あとはライブラリの関数を組み合わせて実装する事ができます。
また、解析の状態を途中で保存・復元したり、学習の処理を複数のサーバーで並列で実行させる事も簡単にできるようになっています。(並列処理に関しては、「TensorFlowで学ぶディープラーニング入門」では説明されていませんが)
さらに、TensorFlowで構築したニューラルネットワークの構造を画像として出力したり、最適化の様子をグラフで表示するツールも整備されています。
ここまでがTensorFlowで出来る事の、全てではありませんが「TensorFlowで学ぶディープラーニング入門」で触れられているだいたいの事です。
先にも書いたように、TensorFlowを使ってニューラルネットワークを構築する以前に、どんなアルゴリズムを用いて、どんなネットワークを構築するかを考えるのは開発者自身です。
これこそが機械学習の難しい部分であり、TensorFlowのサポート外の部分になります。
TensorFlowのライブラリ関数の仕様だけ覚えても機械学習の実装が出来るわけではなく、実装する力をつける為にはやはり機械学習そのものの理解を進める必要があります。
ニューラルネットワークのざっくりイメージ
ニューラルネットワークの説明の、数学を用いた部分の内容はほぼすっとばして読んだ私ですが、それでもニューラルネットワークに関して理解が進んだ部分もあると思っています。
たぶん、本当の理解の10%ぐらいは…
「TensorFlowで学ぶディープラーニング入門」を読み終わった今後も引き続き勉強は進めるとして、今回の所は数学の分からない私が、数学の分からない人に向けた、ものすごく単純化したニューラルネットワークのイメージを解説します。
ここではニューラルネットワークを構成する用語のうち、「畳み込みフィルター」と「プーリング層」が何をやっているのか?
という部分にだけ焦点を当てて説明をしてみようと思います。
この部分だけ見ても全体の1割も理解できないと思いますが、私のように全くのド素人状態から勉強を始める人にとっては理解しやすい部分から入っていくというのも戦略として有りだと思います。
ニューラルネットワークのイメージを伝えるうえで、まず例として扱う問題の題材を決めます。
その題材は、「TensorFlowで学ぶディープラーニング入門」の中で例題として登場しているもので、「三種類の手書き文字を見分ける問題」をというものです。
三種類の手書き文字、というか記号は「|」「-」「+」の3つで、これを機械学習を用いて見分けるという物です。
この問題を解決するために、以下のようなニューラルネットワークを構築しています。
この図に登場する「畳み込みフィルター」と「プーリング層」は、実はどちらも「画像の加工」を行っているものになっています。
「畳み込みフィルター」は「画像のエッジを際立たせる」という役割を持つ「画像フィルター」です。
そして「プーリング層」は、「画像の改造度を下げて抽象化し、余計な情報を削ぎ落す」という処理を行っています。
この二つを通す事で画像の特徴が抽出された状態になります。
画像の変換の様子とフィルターのイメージを追加した図が以下になります。
この例では「縦の線を抽出するフィルター」と「横の線を抽出するフィルター」を適用し、それぞれの結果をプーリング層を通して画素数を落としています。
画素数を落とすことで、特徴抽出に必要の無い情報を削っているわけです。
さらに発展すると、適用するフィルターの内容自体も動的に生成して最適な物を学習するようにしていきます。
ここまでが「ニューラルネットワークの構築」で、あとはここに学習データ、つまり大量もの手書き文字を入力画像として何度も流し込み、パラメーターの調整を繰り返す事で「学習」が進んでいくわけです。
TensorFlowではこの「パラメーターの調整」を行ってくれる「トレーニングアルゴリズム」というものが複数用意されています。
ニューラルネットワークの構築が出来上がれば、あとは学習が終わるまで「トレーニングアルゴリズム」を何度も実行し繰り返すという事になります。
思いっきり端折って書きましたが、「TensorFlowで学ぶディープラーニング入門」の内容を10倍ぐらい薄めるとこんなような事が書いてあります。
(それでも分かりにくいのは、私の文章力の拙さのせいです。ごめんなさい。)
他には数字の「0」~「9」の手書き文字の分類の精度を上げる方法や、カラー画像の分類、より詳細な数学的な説明や、TensorFlowのコードの意味や小技について丁寧に解説されています。
最後に
機械学習の学習は楽しいものですが、モノにするにはそれなりに根気が必要になる分野だと思います。
だからこそ、本を一冊読んで理解できないからといって諦めず、より自分に合った本を探してみたり、勉強会に参加するなどして詳しい人と直接話をしてみたりするのが良いのではないかと思います。
また、機械学習の商用利用はどの企業でもすぐに出来るものではないと思います。
「業務で今すぐ機械学習の知識が必要だ」という人は世の中ではまだ少数派です。
しかし、必要になってから勉強し始めてはなかなか追いつけません。
いつか機械学習の仕事をGETしたいのならば、今から少しずつ勉強を進めておきましょう。
機械学習とは言え、他の技術と同様に「所詮は道具」に過ぎません。
このブログで例として取り上げたような「3つの記号を分類できる」という機能だけでは、たとえ面白くても、誰も欲しいと思いません。
エンジニアは道具を使ったり作ったりするのが大好きですが、それを仕事にする場合に大事な事は、「この技術(道具)は世の中をどのように良くしていくのか?」「自分はこの技術を何に役立てたいのか?」「何に可能性を感じるのか?」という事です。
エンジニアとして楽しく学び続けるためにも、技術の需要はきちんと見極めていきましょう。
それでは以上です!
この記事で取り上げた本。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~
- 作者: 中井悦司
- 出版社/メーカー: マイナビ出版
- 発売日: 2016/09/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る