継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ゼロから始めるディープラーニング 7章

タダです。

今回は7章の畳み込みニューラルネットワーク(CNN)についての勉強まとめです。 社内での輪読会に備えて先行で7章のまとめを行います。

※記事は理解ができるたびに何度もアップデートしていこうと思います。 www.oreilly.co.jp

目次

なお、各章の内容は次の通りです。

7.1

  • 畳み込みニューラルネットワーク(CNN)は、画像認識や音声認識などいたるところで使われている
  • これまでのニューラルネットワークとの違いは以下の2層があること
    • Convolutionレイヤ(畳み込み層)
    • Poolingレイヤ(プーリング層)
  • これまでのニューラルネットワークは、隣接する層と全てのニューロン間での結合(全結合/Affline)があった
    • 全結合のニューラルネットワークは、Afflineレイヤの後に活性化関数のReLUレイヤもしくはSigmoidレイヤが続き、最後にSoftmaxレイヤで最終的な出力を行う
    • CNNでは、[Convolution - ReLU - Pooling]というつながりになる
      • 出力するレイヤに近づくと[Affline - ReLU]という組み合わせが使われ、出力には[Affline - Softmax]が使われる

7.2

  • 畳み込み(Convolution)層の意義は、形状を維持して扱う
    • 画像認識の場合、入力データを3次元のデータとして受け取り、同じく3次元のデータとして次の層にデータを出力する(画像データを正しく理解出来る)
      • 畳み込み層の入出力データを、特徴マップとよび、畳み込み層の入力データを入力特徴マップ、出力データを出力特徴マップと呼ぶ
    • 全結合は画像認識の場合、全てのデータを形状(空間情報、RBGの各チャンネル間の関係性等)は無視して全ての入力データを同じ次元のニューロンとして扱う
  • 畳み込みそうで行うのは「畳み込み演算」
    • 画像処理でいうと、「フィルター演算」に相当する
      • 入力データに対してフィルターを適用する
      • 入力データとフィルターの要素を乗算し、その和を求める
        • CNNでは全結合のバイアスと対応するパラメータとして重みがある
  • 畳み込み層の処理を行う前に入力データの周囲に固定のデータ(0など)を埋めることをパディングと呼ぶ
    • パディングを使う理由は、出力サイズを調整するため
  • フィルターを適用する位置の感覚をストライドと呼ぶ
  • 3次元データの畳み込み演算での注意点は、入力データとフィルターのチャンネル数は同じ値にすること
  • 3次元の畳み込み演算はデータやフィルターを直方体のブロックで考えると判りやすい

7.3

  • プーリングは、縦・横方向の空間を小さくする演算
    • Maxプーリングの手法では、ウィンドウの中で最も大きい要素を出力する
  • プーリングの層の特徴は、以下のもの
    • 学習するパラメータがない
      • 対象領域から最大値をとる(もしくは平均とる)だけの処理
    • チャンネル数は変化しない
      • チェンネルごとに独立して演算を行う
    • 微小な位置変化に対してロバスト
      • 入力データの小さなズレは、吸収する

7.4

  • CNNでは4次元のデータを演算するが、im2colを使うと簡単に扱える
    • im2colでは、フィルター(重み)に取って都合のよい入力データを展開する関数(入力データに対してフィルターを適用する場所の領域を横方向に1列に展開する)
    • im2colでは、演算に多くのメモリを使用するが、大きな行列演算が可能
  • im2colでは、フィルターサイズ、ストライド、パディングを考慮して、入力データを2次元配列に展開する
  • プーリング層の実装は次の3段階の流れで行う
    • 入力データを展開する
    • 行ごとに最大値を求める
    • 適切な出力サイズに整形する

7.5

※コード解説のため省略

7.6

  • CNNでどのようなことを行っているのか
    • 一層目では、エッジ(色が変化する境目)やブロブ(局所的に塊のある領域)などをみている
    • 上記の情報を後続の層に渡している
  • 最初は抽象的な情報の認識なるが、層が深くなると高度な情報な認識を行う

7.7

  • 代表的なCNNの例として、LeNet、AlexNetについて触れる
    • LeNetは1989年に提案され、CNNの元祖になる
      • 現在のCNNとの違いは、活性化関数にある(LeNetはSigmoid関数、現在はReLU関数)
      • LeNetでは、サブサンプリングによって中間データのサイズ縮小を行うが、現z内はMax プーリングが主流
    • AlexNetはディープラーニングブームの火付け役
      • 活性化関数はReLU
      • LRNという局所的正規化を行う
      • Dropoutを使用する
  • ニューラルネットワークとしての変化はないが、取り巻く環境やコンピューター技術には大きな進歩があった(大量の並列計算を得意とするGPUの普及)

次は最後の8章になります。

ゼロから始めるディープラーニング 6章

タダです。

今回は6章の学習に関するテクニックについての勉強まとめです。

※記事は理解ができるたびに何度もアップデートしていこうと思います。 www.oreilly.co.jp

目次

なお、各章の内容は次の通りです。

6.1

  • 過学習にならないように最適な重みパラメーターの探索方法、初期値の設定について学ぶ
  • ニューラルネットワークの学習の目的は、損失関数の値をできるだけ小さくするパラメータを見つけること
  • 最適なパラメーターを見つける方法に勾配を使っていた
  • SGDのメリット・デメリット
    • SGDは単純で実装も簡単
    • SGDのデメリットは、関数の形状が等方的ではないと非効率的な経路で探索することになる
  • SGDの欠点の代替手法として、Momentum、AdaGrad、Adamという3つの手法がある
  • Momentumのイメージは、ボールが地面の傾斜を転がるように動く(物理法則に準じる動きをする)
  • AdaGradは、パラメータ全体の学習係数を適応的な値を調整して学習を行う
    • オーダーメイドの値をこしらえる
    • 過去の勾配を2乗和として記録する
  • AdamはMomentumとAdaGradを融合したもの
    • 加えてバイアス補正を行う
  • SGD、Momentum、AdaGrad、Adamはいずれも優れた手法ではない
    • 適材適所で使い分ける

6.2

  • 重みの初期値がニューラルネットワークの学習で重要になる
  • ReLU関数を使う場合は「Heの初期値」、sigmoid関数やtanhなどのS字カーブの時は「Xavierの初期値」を使うのがベストプラクティス

6.3

  • 重みの初期値を適切に設定すれば、各層のアクティベーションの分布は適度広がりを持ち、学習がスムーズに行える
  • Batch Normlization(Batch Norm)は2015年に提案された手法
    • であるが、多くの研究者や技術者に使われている
    • Batch Normのメリットは学習係数を大きくすることができる、初期値にそれほど依存しない、過学習を抑制することがあげられる
  • Batch Normは学習を行う際のミニバッチを単位として、ミニバッチごとに正規化する
  • Batch Normを使えば学習の進行を促進し、重みの初期値にロバストになる

6.4

  • 機械学習で目指すことは、汎化性能
    • 過学習で特定の問題しか解けないようなものではなくて汎用的に問題を解けるモデルの生成を行う
  • 過学習が起きる原因として主に2つある
    • パラメータを大量にもち、表現んりょくの高いモデルであること
    • 訓練データが少ないこと
  • 過学習抑制のために用いる手法がWeight decay(荷重減衰)
    • 大きな重みを持つことに対してペナルティを与えることで過学習を抑制する(L2ノルムを加算する)
  • Weight decayで対応できない場合に、Dropoutと言う手法がよく使われる

6.5

  • ニューラルネットワークでは重みやバイアスとは別にハイパーパラメータが多く登場する
    • Weight decay、学習係数など
  • ハイパーパラメタは適切な値に設定しなければ性能の悪いモデルになる
  • ハイパーパラメータの範囲は、大まかに指定するのが有効
  • ハイパーパラメータの最適化での注意点は、ディープラーニングの学習には多くの時間が必要であるため、適切な値に設定できなさそうな時はその値を切り捨てる
    • ステップ0:ハイパーパラメータの範囲を設定する(ざっくり)
    • ステップ1:設定されたハイパーパラメータの範囲からランダムにサンプリングする
    • ステップ2:ステップ1でサンプリングされたハイパーパラメータの値を使用して学習を行い、検証データで認識精度を評価する(ただし、エポックは小さく設定)
    • ステップ3:ステップ1と2をある回数(100回とか)繰り返し、認識の結果からハイパーパラメータの範囲を狭める

次は7章になります。

2/12~2/17 AWSブログ

タダです。

今週のAWSブログアップデートをまとめていきます。

1、Amazon Lex 対話ボックスの対応を強化

  • Lexのチャットボットの対話の応答が直接編集できるようになりました
  • Webページより編集し、プレビューでの確認まで可能です

2、New – DynamoDB の保存時の暗号化

  • DynamoDBのテーブル作成時に暗号化オプションを有効化すれば、データの保存時に暗号化を行ってくれます
    • 暗号化にはKMSが使われます
  • 提供リージョンが米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、欧州 (アイルランド)です

3、ご利用の WordPress ブログに新しい Amazon Polly の声を

4、AWS 深層学習 AMI は TensorFlow と Microsoft Cognitive ツールキット用の Volta GPU に対するより高速のトレーニングを提供します

CUDA 9 によるフレームワーク:

Apache MXNet 1.0 (Gluon 付き)

Caffe2 0.8.1

Microsoft Cognitive ツールキット (CNTK) 2.4

PyTorch 0.3

TensorFlow 1.5

Theano 1.0

CUDA 8 による Caffe 1.0

Keras 1.2.2 と Keras 2.1.3

AMI は、次のツールにより提供されるモデルのサービスとデバッグ機能も含みます。

Apache MXNet Model Server 0.1

TensorFlow Serving 1.4.0

TensorBoard 1.0.0

5、【 AWS 新リージョン】 AWS 大阪ローカルリージョンが本日より利用可能になりました

  • 昨年のAWS Summit Tokyoで発表された大阪ローカルリージョンの利用ができるようになりました
  • 現在は申請及び審査で許容されたお客様しか利用できないようです

6、Amazon Relational Database Service – 2017 年を振り返って

  • RDSのアップデートまとめ記事です(80個ものアップデートがありました)

7、AWS Glue and SneaQLを使ったAmazon Redshift へのUpsert

  • Full 360社ではGlueでS3にいれたデータをRedshiftにロードし、ECSで動かすSneaQLでRedshiftで操作するようなアーキテクチャを行っているとのことです

8、AWS Glue : ネストされた JSON を Relationalizeトランスフォーム

  • ネストされたJSONの変換をRelationalizeで行って、JSONデータをフラット化するためにGlueを使う紹介記事です

9、AWS Cloudtrail Logs を AWS Glue と Amazon Quicksight 使って可視化する

  • CloudTrailのログをGlueとQuickSightを使って可視化するための方法の紹介記事です
    • 可視化するデータはAthenaで抽出します

10、Amazon EC2 テストポリシー

  • 負荷試験の申請方法の紹介記事です

11、AWS SCT と AWS DMS を使ってMySQLから Amazon Aurora に移行する方法

  • MySQL を SCTとDMSを使ってAuroraに移行する方法の紹介記事です
    • 特に以下のような移行を行う場合に有効です

      バージョンが違うことでネイティブのバイナリログレプリケーションができないときや、追加のデータ変換要件があるときにこの方法が使えます

12、AWS Database Migration Service を使用した Amazon RDS for SQL Serverの継続的なレプリケーションの紹介

以上が今週のアップデートまとめになります。

ゼロから始めるディープラーニング 5章

タダです。

今回は5章の誤差逆伝播法の学習に関する勉強まとめです。

※記事は理解ができるたびに何度もアップデートしていこうと思います。 www.oreilly.co.jp

目次

なお、各章の内容は次の通りです。

5.1

  • 重みパラメータの勾配の計算を効率よく行う手法である、誤差逆伝播法について学ぶ
  • 誤差伝播法の理解の方法として、数式による理解と、計算グラフによる理解があり、本書では後者にフォーカスする
    • 計算グラフとは、計算の過程をグラフによって表したもの
  • 順伝播は、計算を左から右へ進めるステップによる手法
    • 逆伝播はは右から左へ計算を進める
    • 逆伝播は、局所的な微分(自分に関係する小さな範囲)を伝達する

5.2

  • 「局所的な部分」を伝達する原理は、連鎖率によるもの
  • 連鎖率とはある関数が合成関数で表される場合、その合成関数の微分は、合成関数を構成するそれぞれの関数の微分の積によって表される

5.3

  • 加算の逆伝播は、入力信号を次のノードへ出力する
  • 乗算の逆伝播は、入力信号の値をひっくり返した値を乗算する

5.4

※順伝播と逆伝播の実装の解説の節のため、省略

5.5

  • 活性化関数の実装として、ReLU関数とSigmoid関数の層を実装する

5.6

参考

次は6章になります。

『Amazon Web Services 業務システム設計・移行ガイド』 を読んだ

タダです。

先日発売された、『Amazon Web Services 業務システム設計・移行ガイド』をKindle版で購入し、読み終えたので所感を書いていきます。

本書の概要について

本書は以下の引用文にありますように、オンプレミスシステムを初めてAWSへ移行する方にとっては様々なエッセンスが得られる本だと思いました。

社内システムのクラウド化を目指す人に!

オンプレミスからクラウドへ!

ECサイトから基幹システムまで、 企業のデータ・サーバをAWSへ移行するための ネットワーク設計・構築、運用・管理のノウハウを紹介

いきなりナウいサーバーレスでシステムを作るとかって話はなく、まずはリフト&シフトでクラウドへ環境をもっていくことにフォーカスしている内容です。

aws.amazon.com

また、本書は、次の様な章立てになっています。

Chapter1 AWSサービスの概要

Chapter2 全体設計(管理方針と移行計画)

Chapter3 アカウント管理と権限付与

Chapter4 ネットワーク接続の設計・構築・維持管理

Chapter5 システム設計とサービスの導入

Chapter6 移行テクニック

Chapter7 運用監視の設計・実施

読み終えての所感

  • 1章で主要なサービスの概要をしることができるので、AWSのとっかかりが得られる。
  • 3章と4章のあたりがAWSアカウント開設後に、利用者の権限を決めたり、ネットワーク設計する上で必要なエッセンスを学べる。
    • 個人的にはCognitoの話が勉強になった。
  • 5章で主要なシステムアーキテクチャAWSで構成する場合に使うサービスを知ることができる。
    • ECサイト構成パターン
    • Web可用性向上パターン
    • コンテンツキャッシュパターン
    • DB可用性向上パターン
    • インメモリキャッシュパターン
    • ジョブサーバーパターン
    • オンプレミスとのハイブリッド構成パターン(私の業務でもよく目にするパターンです)
    • ファイルサーバーパターン
    • 大規模データ分析パターン etc
  • 6章でオンプレミスにあるサーバーからAWSのサービスへ移行するための手段を紹介されている。
  • 7章で運用周りのサービスが紹介されている。
    • 移行して終わりではなく、AWSの運用管理や監視系サービスを組み合わせて運用していく方法が紹介されている。

まとめ

ざっくり所感を書いてみました。

re:Inventに参加して海外のAWSに対する盛り上がりを感じたのですが、日本でも続々とオンプレからクラウドへの移行の話がでてきています。

これからAWSを勉強する必要性を感じている方にとってお薦めしたい本だなと感じました。