深属学習

keras プーリングレイヤー (Pooling layer)

前回の記事は深層学習について解説しました。 今回はディープラーニングのプーリングレイヤー (Pooling layer)を解説します。 Kerasでは様々なレイヤーが事前定義されており、それらをレゴブロックのように組み合わせてモデルを作成していきます。事前定義されてレイヤーを組み合わせてCNN、LSTM、などのニューラルネットワークを作成します。今回はPoolingレイヤーを説明します。 プーリングレイヤーとは プーリング層は通常畳込み層(Convolution Layer)の直後に設置されます。 プーリング層は畳み込み層で抽出された特徴の位置感度を若干低下させることで対象とする特徴量の画像内での位置が若干変化した場合でもプーリング層の出力が普遍になるようにします。 画像の空間サイズの大きさを小さくすることで調整するパラメーターの数を減らし、過学習を防止するようです。 最大プーリング(max pooling)と平均プーリング(average pooling)など様々な種類があるようだが、画像認識への応用では最大プーリングが実用性の面から定番となります。 では、kerasのコートを実験しましょう。 !wget –no-check-certificate \ https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip \ -O /tmp/cats_and_dogs_filtered.zip –2019-07-20 07:15:53–  https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip Resolving storage.googleapis.com (storage.googleapis.com)… 172.217.214.128, 2607:f8b0:4001:c05::80 Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.214.128|:443… connected. HTTP request sent, awaiting response… 200 OK Length: 68606236 (65M) [application/zip] Saving to: ‘/tmp/cats_and_dogs_filtered.zip’ /tmp/cats_and_dogs_ 100%[===================>]  65.43M   250MB/s    in 0.3s 2019-07-20 …

keras プーリングレイヤー (Pooling layer) Read More »

TensorFlow 2.0 主な変更点

前回、【深属学習】について色んな記事を話しました。 今回の記事はGoogleが2019年初に公開したTensorFlow 2.0について紹介します。 本番リリースではないですが、現在の時点TensorFlow 2.0 Betaです。   リリース日のタイムライン: 2019年3月4日 TensorFlow 2.0 Alphaのリリース 2019年6月日8 TensorFlow 2.0 Betaのリリース >  pip install tensorflow==2.0.0-beta0 本記事では、TensorFlow 2.0の変更点についてまとめたいと思います。 Google I/O’19のアナウンスとDesign Documentを参考しました。 TensorFlowのアナウンスにもある通り、TensorFlow 2.0における大きな変更点は以下の4つになります。 1.Eager Modeのデフォルト化 2.Sessionとplaceholder消滅 3.kerasが、TensorFlow標準の高レベルAPIに 4.TensorFlow 2.0の全体構成 1. Eager Modeのデフォルト化 eager executionはDefine-by-runの機能になります。Define by Runでは、計算グラフ(ニューラルネットの構造)の構築とデータを流しながら行います。Define and Runでは、計算グラフを構築してから、そこにデータを流していきます。 従来の tensorflow は Define-and-run で、 PyTorch やChainer は Define-by-run です。 eager execution は tensorflow で …

TensorFlow 2.0 主な変更点 Read More »

AdaBound 新しい深層学習のoptimizer

前回の記事は色々な【深属学習】について話しました。今回の深層学習の最適化手法のAdaBoundを紹介します。AdaBoundはAdamの収束の速さとSGDの汎化性能の良さの良いとこ取りなoptimizerです。   Adamの弱点としては、汎化性能が劣る・未知のデータに弱い・極端な学習率を使うため上手く収束しないことがあります。例えばですが、収束が近くなると学習率は0.01以下の小さすぎる値になったり1000以上の大きすぎる値になったりしてしまうことがあります。逆にメリットとしては、収束が早いという事になります。 この大きすぎたり、小さすぎるを解消するために新しく提案されたのが、AMSBoundという手法になります。   AMSBound の論文はこちらです。   今回はColab(GPU)でKerasのRestNet34のモデルを作成します。Keras-adabound はこちらから参照します。   概要 データセット:cifar10 cifar10は、kerasのdatasetsで提供されている、5万枚の訓練画像と1万枚のテスト画像のデータセットです。画像は32×32のRGBで、画像の下に表示されている数字が正解ラベルです。 0 – airplane  1 – automobile  2 – bird  3 – cat  4 – deer 5 – dog  6 – frog  7 – horse  8 – ship  9 – truck   Optimizer:Adam,と AdaBound のOptimizerを比較します。 モデル評価:速い収束、正解率を確認します。   学習条件 共通設定 モデル:  ResNet34 バッチサイズ = 512 エポック数 = 100 クラス数 = 10   Optimizerの設定 adabound  …

AdaBound 新しい深層学習のoptimizer Read More »

Kerasの Mnistで深層学習入門 正則化 時間/精度比較

前回の記事は「Mnistで深層学習入門 活性化関数 時間/精度比較」でrelu, tanh, sigmoid, eluのパラメーターでの結果を比較しました。今回の記事は正則化について解説します。 KerasからMnistのデータセットの深層学習モデルを実験します。 import numpy as np from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.optimizers import SGD from sklearn import datasets from sklearn.model_selection import train_test_split from tensorflow.examples.tutorials.mnist import input_data   %matplotlib inline import matplotlib.pyplot as plt   mnist = input_data.read_data_sets(‘MNIST_data’, one_hot=True) Extracting MNIST_datatrain-images-idx3-ubyte.gz Extracting MNIST_datatrain-labels-idx1-ubyte.gz Extracting MNIST_datat10k-images-idx3-ubyte.gz Extracting MNIST_datat10k-labels-idx1-ubyte.gz …

Kerasの Mnistで深層学習入門 正則化 時間/精度比較 Read More »

Pythonトップライブラリ2018

Pythonは、学習初期でも先人の作ったライブラリを利用することで、高速に開発が可能になります。 Pythonライブラリを管理する PyPi.org では、現在 100万以上のライブラリが公開され、現在も増加中です。 前回の記事は2018年の大人気のライブラリを紹介します。   年末でKdnuggetsがGithubの「星」と投稿者の人数とコメント数からトップ15のライブラリを発表しました。下記の図はGithubの「星」と投稿者の人数で表します。ては、ライブラリを軽いに紹介します。 1 – TensorFlow (投稿者 – 1757, コメント数 – 25756, 星 – 116765) Googleの機械学習/ディープラーニング/ネットワークライブラリです。柔軟なアーキテクチャにより、1つのAPIを使用してデスクトップ、サーバー、またはモバイルデバイスの1つ以上のCPUまたはGPUに計算を展開できます。またコードはやや書きにくいのが特徴になります。PyTorchおよびChainerの利点はDefine by Run(動的計算グラフ)と呼ばれる特徴です。Define by Runは入力データのサイズや次元数に合わせてニューラルネットワークの形や計算方法を変更することができます。       2 – pandas (投稿者  – 1360, コメント数 – 18441, 星 – 17388) 機械学習やディープラーニングの前処理のために、データの集計をするライブラリになります。数値や時系列のデータの操作や、データ構造をいじったりすることができます。また最近では、可視化も可能になってきています。     3 – scikit-learn (投稿者 – 1218, コメント数 – 23509, 星 – 32326) NumPy, SciPy や Matplotlib と互換性を持つように開発されてクラスタリングや回帰、分類器、次元圧縮、データの前処理をはじめとする、機械学習のアルゴリズムを幅広く実装しているライブラリです。   …

Pythonトップライブラリ2018 Read More »

Azure ML StudioのTune Hyper Parameterのオプション解説

前回の記事は【Azure ML StudioでのTwo class decision forestのパラメータチューニング】を説明しました。 今回の記事では、Azure ML Studioで機械学習モデルのパラメータ最適化の「Tune Hyper Parameter」のお話になります   各アルゴリズムは既定のパラメータを利用して、実験しているため、最適化されていません。ただし、どのパラメータを変更すればいいのは手間になります。そういう時に利用するモジュールが、「Tune Hyper Parameter」です。このモジュールは、適当に何個かのパラメータを用意し、それぞれの組み合わせで試した後、一番精度の高かったパラメータの組み合わせを学習モデルとして利用できるようになります。そのため各パラメータの最適値を見つける時に、用います。   前回のモデルはTwo class decision forestで献血の過去のデータから、献血の分類モデルを作成しました。     テストデータのAUCは0.632の結果の結果から改善できるか試していきます。   ハイパーパラメータ最適化 「Tune Hyper Parameter」とは、適当に何個かのパラメータを用意し、それぞれの組み合わせで試した後、一番精度の高かったパラメータの組み合わせを学習モデルとして利用できます。   設定するときは、検索範囲を定義し、無作為に選択された有限数のパラメータを使用するか、定義したパラメータ空間を網羅した検索を行います。   Random sweep(ランダムスイープ)決められた回数で、値の範囲を指定し、ランダムに検索されます。   Grid sweep(グリッドスイープ)このオプションは、指定した値の範囲内のすべてのパラメータの組み合わせで、値を検索します。このオプションでチューニングを開始すると、複数のモデルがこれらのパラメータの組み合わせを使用して訓練されます。   Entire grid(グリッド全体)全ての組み合わせで、検索していきます。このオプションは最も徹底的だと考えられますが、最も時間がかかります。   Random grid(ランダムグリッド)このオプションを選択すると、すべての組み合わせの中から、指定した回数だけ評価を行っていきます。     今回は「Random grid」を利用します。 Maximum number of runs on randomは120に設定しました。実際に120種類の組み合わせで試してみました。各組合せの結果は「Tune Model Hyperparameters」を右クリックし、「Sweep Results」>「Visualize」で確認できます。 …

Azure ML StudioのTune Hyper Parameterのオプション解説 Read More »

Azure ML studio Two class decision forestのパラメータ解説

前回の記事は【Azure Machine Learning Studioのモデル作成・デプロイするサービス】を説明しました。 この記事では、Azure ML StudioでTwo class decision forestモデルをお話になります   Two class decision forestとは(ランダムフォレスト) 決定木を弱学習器とする集団学習アルゴリズムであり、この名称は、ランダムサンプリングされたトレーニングデータによって学習した多数の決定木を使用しています。つまりランダムフォレストのようなものになります。 詳細の説明はこちらです。 では、下記の献血の過去のデータから、献血の分類モデルを作成します。 「Two class decision forest」のモデルを作成します。 インポートデータを学習とテストを分けます。学習データからモデル作成します。そして、学習したモデルの予測結果とテストに対して評価します。 精度が高くするために、パラメータを変更します。 値が高ければ高いほど色んな組み合わせが試されるため、精度が上がる可能性が高まりますが、その分実行回数も多いため、結果を得られるまでの時間が長くなります。 設定の説明: Resampling method Bagging または、Replicateの木の構築方法を選択することができます。 Bagging(バギング)はブートストラップアグリゲーションとも呼ばれます。この方法では、各ツリーは、元のデータセットのサイズと同じサイズになるまで、元のデータセットを置換しながらランダムにサンプリングすることによって作成された新しいサンプルで作成されます。 Replicate(複製)各ツリーはまったく同じ入力データについてトレーニングされます。どの分割述語が各ツリーノードに使用されるかの決定はランダムなままであり、ツリーは多様になるだろう   Create trainer mode モデルの学習方法を選べます。 Single Parameter(単一パラメータ)モデルの構成方法がわかっている場合は、引数として特定の値のセットを指定できます。 Parameter Range(パラメータ範囲)最適なパラメータがわからない場合は、複数の値を指定し、Tune Model Hyper parametersモジュールを使用して最適な設定を見つけることによって、最適なパラメータを見つけることができます。提供された設定の複数の組み合わせを反復し、最良のモデルを生成する値の組み合わせを決定します。     Number of decision trees アンサンブルに作成する決定木の総数を示します。 より多くの決定木を作成することで、より良い精度を得ることができますが、トレーニング時間が長くなります。この値は、訓練されたモデルを視覚化するときに表示されるツリーの数も制御します。ただし過学習しやすくなります。   Maximum depth of …

Azure ML studio Two class decision forestのパラメータ解説 Read More »

2019年のデータサイエンスのトレンド

2019年はデータサイエンス関連のブームの余波は続きます。機械学習、深層学習、AIなどの言葉は流行語になって、企業規模の大小を問わず、自社の生産性向上やサービス向上にAIを生かす試みを進めており、競争力を保つにはもはやAIの導入が不可欠になります。今回の記事は2019年のデータサイエンスで流行りやそうな話をまとめています。 IoTとAIを活かす製品・サービスが広がる IoTが広がることによって、あらゆるモノがインターネットにつながり、モノと情報をやり取りすることができるようになります。IoTからデータを集め、蓄積して、AI(人工知能:Artificial Intelligence)が活躍します。AIが分析することで、企業は新しい価値を創出し、より良いサービスや商品を提供できるようになるのです。新しいサービスを創り出すこともできるかもしれません。また、既存の商品をIoT化する道もあるでしょう。商品から収集されたデータを、AIが分析することで、商品に付加価値が生まれる可能性もあります。   AIのブラックボックスの解明 ディープラーニングは画像解析などの用途に用いられているが、ブラックボックスが多少あっても実用化に差し支えはないだろう。実はディープラーニングに否定的な人は少なくないんです。理由はブラックボックスの問題があるから。そんななか、ディープランニングの新しい可能性を拓く「説明可能な人工知能XAI(Explainable Artificial Intelligence)」を開発しています。Maximum activation analysis / Lime / Shapなどはブラックボックスの解明する技術の例です。 「説明可能な人工知能」は、どのような特徴を持って猫と判断したのか、その理由まで説明することができる次世代AIを指します。説明可能な人工知能の必要性はより広範でしょう。 自動機械学習 自動深層学習 AIプロジェクトを推進してくには、データ、データサイエンティスト、機械学習エンジニア、業務プロセスに精通する人材と、必要な要素はいくらでもでてきて、さらにコストと時間という問題も重なってきます。機械学習と深層学習は大量のハイパーパラメータ設定と計算資源を要します。計算時間も馬鹿にならなく、どのハイパーパラメータが良いのかを、学習を幾度と無く繰り返して決める必要があります。 機械学習の専門家でなくても高品質な画像分類モデルを生成できるというものですが、その背景にある理論がNeural Architecture Searchです。Neural Architecture Search(略称:NAS)が従来のニューラルネットワーク設計と違うのは、NASはニューラルネットワークのアーキテクチャ自体を最適化するということです。ネットワークの重みを最適化しますが、NASではニューラルネットワークの構造自体やパラメータを最適化したうえで、重みを最適化します。   AIを民主化する データとAI(人工知能)を使いこなす企業が競争上の優位を獲得します。データ量が膨大になると、データの背後にある構造やパターンなどのインサイトを人間が理解できない。そこで、よりデータを理解できるように機械学習や深層学習のようなアルゴリズムが進化しました。   Google、Microsoft、IBMなどのIT大企業のみならず、ベンチャー企業とスタートアップは新たなクラウドでのデータサイエンス支援サービスを提供しています。計算能力(コンピュート)の民主化、(2)アルゴリズムの民主化、(3)データの民主化、(4)才能(タレント)の民主化という四つの民主化を進めていきます。そのためにはAIの民主化、AIを誰でも使えるようになります。   https://hackernoon.com/great-power-great-responsibility-the-2018-big-data-ai-landscape-6a35bcf34f7f https://www.kdnuggets.com/2018/12/predictions-data-science-analytics-2019.html

Kerasでアクティベーションのパラメータチューニング

以前は「Mnistで深層学習入門」を説明しました。今回は、活性化関数(Activation Function)のパラメーター調整を説明します。活性化関数は、入力信号の総和がどのように活性化するかを決定する役割を持ちます。これは、次の層に渡す値を整えるような役割をします。 実験では活性化関数での計算時間及び精度を比較します。   Linear Linear activation(Identityとも呼ばれる)、最も単純な活性化機能の1つです。 これは、入力を出力に線形変換します。 ほとんど使われていませんが、その範囲とドメインは[-Inf; + Inf]になります。   Sigmoid Sigmoid は、[-Inf; + Inf]を(0; 1)の範囲に設定し、S字曲線のように見えます。 また、勾配消失問題が起こる可能性があります。勾配消失(Vanishing gradients)とは。層を増やすにつれて、バックプロパゲーションでは徐々に最初の層に近づくにつれて情報を伝達出来なくなり、学習速度が遅くなっていきます。   Hard Sigmoid 範囲[-Inf; -2.5]で0に等しくなります。 [-2.5,2.5]の範囲で0直線的に増加し、範囲(+2.5; + Inf)で1となる関数です。Hard Sigmoidの計算は、指数関数ではないため、Sigmoidの計算より高速であると考えられ、分類タスクについて合理的な結果が得られます。 しかし、正確には近似値なので、通常のシグモイドよりも誤差がはるかに大きいため、回帰タスクに使用するべきではありません。また勾配消失もおこりやすいとされます。   Hyperbolic Tangent (TanH) TanHはシグモイドのS字曲線によく似ていますが、その範囲は(-1; +1)です。 近年のRelu(ランプ)関数のようなアクティベーション関数が登場する以前にはかなり人気がありました。 Sigmoidの代わりにTanHを使用する利点 より強いグラジエント:データが0の周りに集中している場合、その微分はより高くなります。 範囲(-1; 0)を含むため、勾配の偏りを避ける。 しかし、Sigmoidと同様、TanHは勾配消失問題は起こりうります。   Softsign それは符号関数の連続近似であり、そのグラフはTanHと非常によく似ています。 しかし、TanHは指数関数的(exponential)ですが、Softsignは多項式(polynomial)です。   Rectified Linear Unit (ReLU) 非常に簡単で強力なアクティベーションです。 入力が正の場合は入力を出力し、そうでない場合は0を出力します。現在、SigmoidおよびTanHよりも優れた結果をもたらす事が多いです。勾配消失問題以外では、dying ReLU という問題が発生する可能性があります。 活性化関数ReLUは負の領域では値が0=勾配がないとう関数です。そのため学習時に大きく負側に重みが更新された場合、ReLU関数で活性化する事がなくなる可能性がある。 …

Kerasでアクティベーションのパラメータチューニング Read More »