深属学習

GELUの活性化関数の解説

  目次 1. GELU活性化関数の概要 1.1 GELU活性化関数とは 1.2 GELU定義 1.3 GELUの違い 2. 実験 2.1 データロード 2.2 データ前処理 2.3 GELU活性化関数のモデル作成 2.4 ReLU活性化関数のモデル作成 2.5 まとめ   1.  GELU活性化関数の概要 1.1 GELU活性化関数とは GELU活性化関数は、Gaussian Error Linear Unit functionsの略称です。GELUはOpenAI GPTやBERTなどの有名なモデルで使われている活性化関数です。 GELUはReLU、ELU、PReLUなどのアクティベーションにより、シグモイドよりも高速で優れたニューラルネットワークの収束が可能になったと言われています。コツとしては、Dropoutに似た要素を入れている事です。Dropoutとは、いくつかのアクティベーションに0をランダムに乗算することにより、モデルを頑強します。   1.2 GELU定義 Geluは以下のように定義されます。 Computes gaussian error linear: approximateがFalse場合は、 approximateがTrue場合は、 論文:https://arxiv.org/abs/1606.08415   1.3 GELUの違い GELUとReLUとELUは非凸(non-convex)、非単調(non-monotonic)関数ですが、GELUは正の領域で線形ではなく、曲率があります。 GELUは単調増加ではありません。 GELUは確率的な要素を加味しています(Dropout)。 ライブラリ: Tensorflow/Keras https://www.tensorflow.org/addons/api_docs/python/tfa/activations/gelu#returns PyTorch …

GELUの活性化関数の解説 Read More »

Nadamの最適化アルゴリズム

目次 1. Nadam最適化アルゴリズムの概要 1.1 Nadam最適化アルゴリズムとは 1.2 TensorflowのNadam関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 Nadamの最適化アルゴリズムを作成 2.3 Adamの最適化アルゴリズムを作成 2.5 まとめ   前回の記事は「最適化アルゴリズムのまとめ」を解説しました。今回の記事はNadamを解説と実験したいと思います。   1. Nadam 1.1 Nadam最適化アルゴリズムとは Nadam (Nesterov-accelerated Adaptive Moment Estimation)はAdamとNAGを組み合わせます。 このことにより、前のタイムステップmt-1の運動量ベクトルにおけるバイアス補正された推定値を置き換えるだけで、以前と同じようにネステロフ運動量を追加できます。 現在の運動量ベクトルmtのバイアス補正された推定値を使用するのが、Nadam更新ルールを取得します。 1.2 TensorflowのNadam関数 Tensorflowの詳細 tf.keras.optimizers.Nadam( learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, name=’Nadam’, **kwargs )   Learning_rate テンソルまたは浮動小数点値。 学習率。   beta_1 浮動小数点値または定数浮動小数点テンソル。 一次モーメント推定の指数関数的減衰率。   …

Nadamの最適化アルゴリズム Read More »

深層学習の最適化アルゴリズムまとめ

  目次 1. 最適化アルゴリズムとは 2. 最適化アルゴリズムのまとめ ・確率的勾配降下法(SGD) ・Adams ・Adamax ・Nadam ・AMSGrad ・AdamW 3.その他 AdaDelta, AdaGrad, A2GradExp, A2GradInc, A2GradUni, AccSGD, AdaBelief, AdaMod, Adafactor, Adahessian, AdamP, AggMo, Apollo, DiffGrad, RMSProp, AveragedOptimizerWrapper, ConditionalGradient, CyclicalLearningRate, ExponentialCyclicalLearningRate, extend_with_decoupled_weight_decay, LAMB, LazyAdam, Lookahead, MovingAverage, NovoGrad, ProximalAdagrad, RectifiedAdam, SGDW, SWA, Triangular2CyclicalLearningRate, TriangularCyclicalLearningRate, Yogi, AdaBound, AMSBound, Shampoo, SWATS, SGDP, Ranger, RangerQH, RangerVA, PID, QHAdam, …

深層学習の最適化アルゴリズムまとめ Read More »

活性化関数のまとめ

目次 1 活性化関数とは 2. 活性化関数のまとめ – ReLu関数 – Leaky ReLU関数 – PReLU関数 – ELU関数 – sigmoid関数 – TanH関数 – softmax 関数 – GELU関数 -その他まとめ 1 活性化関数とは 活性化関数は、(英: Activation functions)ニューラルネットワークの出力を決定する数式です。この関数はネットワーク内の各ニューロンに関連付けられており、各ニューロンの入力がアクティブ化(「起動」)するかどうかを決定します。各ニューロンの出力を1〜0または-1〜1の範囲に正規化するのにも役立ちます。 2. 活性化関数のまとめ   ReLu関数 ReLu関数(「ランプ」と読む)はRectified Linear Unitの略称で、ランプ関数もと呼ばれています。関数への入力値が0以下の場合には出力値が常に0、入力値が0より上の場合には出力値が入力値と同じ値となる関数です。 ReLUのメリット ・非常に迅速に収束するネットワークなので、処理が速いです。 ・勾配消失問題に強いです。勾配消失問題は層が深くなるにつれ勾配が消えてしまう。 ・linear関数のように見えますが、ReLUには微分関数があり、バックプロパゲーションが可能です。 ReLUのデメリット ・入力がゼロに近づくか、負の場合、関数の勾配はゼロになり、ネットワークはバックプロパゲーションを実行できず、学習できません。 ライブラリ: Tensorflow/Keras https://www.tensorflow.org/api_docs/python/tf/keras/activations/relu PyTorch https://pytorch.org/docs/stable/generated/torch.nn.ReLU.html   Leaky ReLU関数 Leaky ReLU関数はLeaky Rectified Linear Unitの略称で、ReLUの拡張版です。関数への入力値が0より下の場合には出力値が入力値をα倍した値(※αの値は基本的に0.01)、入力値が0以上の場合には出力値が入力値と同じ値となる関数です。 …

活性化関数のまとめ Read More »

KerasでのFReLU活性化関数

目次 1. FReLU 2. 実験 _2.1 データロード _2.2 FReLU活性化関数 _2.3 モデル作成 _2.4 モデル学習 _2.5 モデル評価 1. FReLU Megvii ResearchInstituteが新しい活性化関数成果を紹介します。活性化関数の分野での革新て画像分類タスクでReLUを大幅に超える新しい活性化関数ファンネル活性化(FReLU)が提案されています。 Megvii Research Instituteは、ごくわずかなspace conditionを追加することにより、ReLUとPReLUを2D活性化関数に拡張しました。 ReLUとPReLUは、それぞれy = max(x、0)とy = max(x、px)として表されますが、FReLUの形式はy = max(x、T(x))です。ここで、T(・)は2D spatial conditionです。   spatial conditions は、ピクセルレベルのモデリング機能を簡単な方法で実装し、従来の畳み込みによって複雑な視覚的レイアウトをキャプチャします。 最後に、ImageNetデータセット、COCOデータセット検出タスク、およびセマンティックセグメンテーションタスクで実験が行われ、視覚認識タスクにおけるFReLU活性化関数の大幅な改善と堅牢性が実証されました。   論文:FReLU: Flexible Rectified Linear Units for Improving Convolutional Neural Networks https://arxiv.org/abs/1706.08098 論文:Funnel Activation for Visual Recognition https://arxiv.org/abs/2007.11824 …

KerasでのFReLU活性化関数 Read More »

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】

2020年9月23日GoogleはTensorFlow Recommenders (TFRS)のレコメンデーション システムのパッケージを発表しました。この記事は、TensorFlowレコメンダーのパッケージを紹介したいと思います。 目次 1. TensorFlowのレコメンダーとは 2. tensorflow-recommendersの特徴 3. 実験 _3.1 データロード _3.2 レコメンデーションモデルの定義 _3.3 モデル評価の関数 _3.4 モデル学習 _3.5 モデル評価 1. TensorFlowのレコメンダーとは TensorFlow Recommendationsは、TensorFlowを使用してレコメンダーシステムモデルを構築するためのオープンソースライブラリです。 これは、レコメンダーシステムを構築するための完全なワークフロー(データの準備、モデルの定式化、トレーニング、評価、および展開)に役立ちます。 Kerasに基づいて構築されており、複雑なモデルを構築する柔軟性を提供しながら、穏やかな学習曲線を持つことを目的としています。 2. tensorflow-recommendersの特徴 ・柔軟な候補者指名モデルを構築して評価します。 ・アイテム、ユーザー、およびコンテキスト情報を推奨モデルに自由に組み込みます。 ・複数の推奨目標を共同で最適化するマルチタスクモデルをトレーニングします。 ・TensorFlow Servingを使用する事が出来ます。 3. 実験 環境:Google Colab データセット:MovieLens 100Kデータセット TFRSをインポート pip install -q tensorflow-recommenders pip install -q –upgrade tensorflow-datasets ライブラリインポート import os import pprint …

TensorFlowでのレコメンダー【tensorflow-recommenders (TFRS)】 Read More »

画像分類・物体検出・セグメンテーションの比較

関連記事: U-net(画像セグメンテーション)の解説 先日の記事はU-net(画像セグメンテーション)の解説について解説しました。画像認識技術は画像分類・物体検出・セグメンテーションなどの技術があります。今回の記事は画像認識技術の違いを開設したいと思います。 目次 1. 画像認識(Image Recognition)とは 2. 画像分類(Image Classification)とは 3. 画像分類・物体位置特定(Image Classification・Localization)とは 4. 物体検出(Object Detection)とは 5. セグメンテーション(Segmentation) _5.1 セマンティック・セグメンテーション(Semantic Segmentation)とは _5.2 インスタント・セグメンテーション(Instant Segmentation)とは _5.3 パノプティック・セグメンテーション(Panoptic Segmentation)とは 6. まとめ 1. 画像認識(Image Recognition)とは 画像認識(Image Recognition)とは、画像や動画データから特徴をつかみ、対象物を識別するパターン認識技術の一つです。画像データから、対象物や、対象物の特徴(形状、寸法、数、明暗、色など)を抽出/分析/識別して認識検出する手法です。 コンピュータが画像認識を行うためには、前段階として、画像から対象物を抽出する必要があります。 下記の8ビットのグレースケール画像から、すべてのデジタル画像は0〜255の範囲の値を持つピクセルによって形成されます。0は黒、255は白です。 カラフルな画像の場合は、赤、緑、青の3つのマップと、0〜255の範囲のすべてのピクセルが含まれます。 画像認識を利用することで、顔認証システムや不審者検知、文字認識(OCR)、不適切画像の検出、 工場でのイレギュラー検知など幅広い分野で活用することができます。 今回の記事は物体検出の分野を中心にします。 2. 画像分類(Image Classification)とは 画像分類とは、機械学習やディープラーニングモデルで、画像を何らかの主題に基づき分類する処理方法です。いくつかの分類手法があります。教師あり学習では、ラベル付けされたデータセットを用いて、モデルを学習させていきます。 画像分類の結果は各クラスの予測信頼度です。 classes = [“dog”, “cat”, “nothing”] prediction = [ 0.8 , 0.1 …

画像分類・物体検出・セグメンテーションの比較 Read More »

U-netによる画像セグメンテーション(Image segmentation)の解説

         関連記事: OpenCVで顕著性検出(Saliency Detection) 先日の記事はOpenCVに入っている顕著性(Saliency)について解説しました。今回は、深層学習を用いた 教師有り学習で行う場合の画像Segmentationについて紹介していきます。 画像セグメンテーションとは、画像を複数の部分または領域に分割する処理です。画像全体や画像の一部の検出ではなくピクセル1つひとつに対して、そのピクセルが示す意味をラベル付けしていきます。 目次 1. U-Netの概要 2. 実験・コード __2.1 環境設定 __2.2 データ読み込み __2.3. データ前処理 __2.4. ネットワーク設定 __2.5. モデル学習 __2.6. 推論 1. U-Netの概要 U-Netとは U-Netは、ドイツのフライブルク大学( Freiburg)のコンピュータサイエンスが開発された生物医学的な画像セグメンテーション(物体がどこにあるか)のための全層畳み込みネットワーク (Fully Convolution Networkです。 ネットワークの構成は、縮小したネットワーク層を連続して反対において拡大の情報を付加していきます。ただしプーリング操作はアップサンプリングオペレーターに置き換えられます。 したがってこれらのレイヤーは出力の解像度を高めていきます。 後続の畳み込み層は、この情報に基づいて正確な出力を組み立てることを学習できます。つまり、畳み込まれた画像を decode する際に,encode で使った情報を活用している点が挙げられます。 左右対象でアルファベットの「U」に似ていることから、「U-net」と呼ばれているそうです。 2. 実験・コード 環境:Google Colab GPU データセット:オックスフォード大学のペットデータセット(37カテゴリー) モデル:U-netネットワーク モデル評価:Accuracy 2.1 環境設定 Tensoflowのサンプルデータをインストールします。 !pip install -q …

U-netによる画像セグメンテーション(Image segmentation)の解説 Read More »

tf-keras-visでの特徴部位特定(Saliency・GradCAM)

  関連記事: OpenCVで顕著性検出(Saliency Detection)  TensorFlow 2.0 主な変更点 前回の記事はOpenCVに入っている顕著性(Saliency)について解説しました。今回の記事はkeras-visでの特徴部位特定(Saliency・GradCAM)について解説したいと思います。 目次 1. tf-keras-visの特徴部位特定の概要 __1.1 Saliencyとは __1.2 tf-keras-visのSaliencyのライブラリ 2. 実験・コード __2.1 環境の準備 __2.2 モデルの読み込み __2.3. データロード __2.4. Vanilla Saliency __2.5. SmoothGrad __2.6. GradCAM 1.keras-visの特徴部位特定の概要 1.1 Saliencyとは Saliencyの背景にあるアイデアは今となっては かなりシンプルです。 入力画像に対する出力カテゴリの勾配(変化率)を計算します。入力の小さな変化に関して出力値がどのように変化するかを可視化します。 出力の最も大きな変化の要因となる入力領域を強調するために、勾配(変化率)を使うことができます。 1.2  tf-keras-visのライブラリ tf-keras-visは、Tensorflow2でtf.kerasモデルを可視化するための視覚化ツールキットです。ただしtf-keras-visの機能はkeras-visに基づいていますが、tf-keras-visのAPIは通常のTensorflowのラッパーの独立していた時のKerasとのAPIとの互換性を備えていません。 tf-keras-visの可視化は3つの大きな特徴があります。 1. 高密度レイヤーを視覚化(Visualize Dense Layer) 2. 畳み込みレイヤーの可視化(Visualize Convolutional Filer) 3. 顕著性マップとGradCAM(Saliency Map and GradCAM) 今回は3番目の変化率の計算をしている顕著性マップ(Sileancy Map) …

tf-keras-visでの特徴部位特定(Saliency・GradCAM) Read More »

ニューラルネットワークのプルーニング(Pruning・枝刈り)

  関連記事:TensorFlow 2.0 主な変更点 今回の記事はTensorFlow モデル最適化ツールキットにあるPruning APIを解説と実験を行います。 目次 1.  ニューラルネットワークのプルーニングとは ___1.1 プルーニングの概要 ___1.2 TensorFlow モデル最適化ツールキット — Pruning API 2. 実験 ___2.1 環境構築 ___2.2 データのロード ___2.3 NNモデル ___2.4 プルーニングモデル ___2.5 モデルの評価 ___2.6 TensorFlow Liteでモデル圧縮 3. まとめ 1. ニューラルネットワークのプルーニング(枝刈り)とは 1.1 プルーニングの概要 ニューラルネットワークのプルーニングとは、機械学習アルゴリズムを最適化する方法の一つとして、ニューラル ネットワークのレイヤー間のつながり(パラメーター)を削除することです。これにより、パラメーターの数を減らして計算を高速化します。 実際には、ニューラル ネットワークのパラメーターの値をゼロにすることで、ニューラル ネットワークのレイヤー間の不要なつながりと見なしたものを削除します。この処理はトレーニング プロセスで行います。繋がりを消すもの以外に、重みを0にすることでプルーニング(枝刈り)とも言います。 1.2 TensorFlow モデル最適化ツールキット — Pruning API 重みのプルーニングを行う API は、Keras をベースに構築されています。そのため、このテクニックはどんな既存の Keras …

ニューラルネットワークのプルーニング(Pruning・枝刈り) Read More »