ゼロから作るDeep Learning 8章 畳み込みニューラルネットワーク
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (17件) を見る
前回はゼロから作るDeep Learning 7章 畳み込みニューラルネットワーク - n3104のブログです。
8章はこれまでの章のように理論の詳細について説明するのではなく、ディープラーニング歴史や実用例についての紹介でした。
- 8.1.1 よりディープなネットワークへ
- "ディープなネットワークの学習には多くの時間(おそ らく半日以上)が必要になります。"
- 半日!!!いや、まぁ機械学習の世界ではそれでも短いのかもだけど。。
- "ディープなネットワークの学習には多くの時間(おそ らく半日以上)が必要になります。"
- 8.1.2 さらに認識精度を高めるには
- Data Augmentation(データ拡張)は便利そう。データ集まらないケースもあるからなー。。ただ、画像は分かるんだけど、回帰のように数値を予測するケースだとデータ拡張は適用できるのかなー。。。
- 8.1.3 層を深くすることのモチベーション
- "「層を深くすること」の重要性については、理論的にはそれほど多くのことが分かっ ていないのが現状です。"
- 理論的に説明できないってことであって、応用として精度向上はできてるってことだろうな。
- "層を深くすることの利点のひ とつは、ネットワークのパラメータ数を少なくできることです。より詳しく言えば、 層を深くしたネットワークは、層を深くしなかった場合に比べて、より少ないパラ メータで同レベル(もしくはそれ以上)の表現力を達成できるのです。"
- なるほど。パラメータの探索作業を減らせる代わりに学習時間がかかるってことか。
- "学習の効率性も、層を深くすることの利点のひとつです。これは、層を深くしな かった場合に比べて、層を深くすることで、学習データを少なくでき、高速に学習が 行えることを意味します。"
- おっと、学習効率も上がるのか。。なら単に層を深くすればいいだけな気がするんだけど。。。問題に対して層を深くしすぎると過学習が起きるリスクはありそうだけど。。
- "「層を深くすること」の重要性については、理論的にはそれほど多くのことが分かっ ていないのが現状です。"
- 8.2.4 ResNet
- "しかし、ディープラーニングの学習においては、層を深くしすぎると、学習が うまくいかず、最終的な性能が劣ることも多々ありました。"
- 層を深くしすぎるトレードオフは学習できないことか。結局、パラメータの探索をやらない代わりにネットワークの深さの探索をやるだけな気もするんだけど。。それとも汎用化出来るものなのかなー。
- "ここでのポイントは、上流からの勾 配に対して何の手も加えずに、“そのまま”流すということです。そのため、ス キップ構造によって、勾配が小さくなったり(または大きくなりすぎたり)す る心配がなく、前層のレイヤに「意味のある勾配」が伝わっていくことが期待 できます。これまであった、層を深くすることで勾配が小さくなる勾配消失問 題は、このスキップ構造で軽減することが期待できます。"
- 発想は単純だけど、これで精度向上するんだーw
- "これは転移学習と言って、学習済みの 重み(の一部)を別のニューラルネットワークにコピーして、再学習を行いま す。たとえば、VGG と同じ構成のネットワークを用意し、学習済みの重みを 初期値とし、新しいデータセットを対象に、再学習(fine tuning)を行います。 転移学習は、手元にあるデータセットが少ない場合において、特に有効な手法 です。"
- 転移学習なんてのもあるんだ。頭いいなー。。
- "しかし、ディープラーニングの学習においては、層を深くしすぎると、学習が うまくいかず、最終的な性能が劣ることも多々ありました。"
- 8.5.4 Deep Q-Network(強化学習)
DQNは凄いなーと思いました。ゲームごとに設定を変える必要がないということは、要は同じように業務内容をゲーム画面として表現できる業務があれば、DQNで学習させられるということでしょうから。あとは歴史や実用例を知れておもしろかったです。今後もいろいろと実用化されていくんだろうなーと思いました。