深属学習

SPOCUの活性化関数

目次 1. SPOCU活性化関数の概要 1.1 SPOCU活性化関数とは 1.2 SPOCU関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 SPOCUの活性化関数を作成 2.5 Reluの活性化関数を作成 2.6 まとめ 関連記事:活性化関数のまとめ   1. SPOCU活性化関数の概要 1.1 SPOCU活性化関数とは SPOCU活性化関数とは scaled polynomial constant unit activationの略称であり、物理学をベースとしているパーコレーションベースの活性化関数です。統計物理学と数学のパーコレーション理論は、スポンジのような媒質に水がしみこむ現象のモデルとして言われています。それ以外にも、パーコレーション理論とモンテカルロシミュレーションの組み合わせる事によって、ハードウェアのアモルファスシステムでのイオン移動と電子伝達をシュミレートできると言われています。 SPOCU活性化関数は、ウィスコンシン診断乳がん(WDBC)データセットや大規模データセットMNISTなど、大規模データセットと小規模データセットの両方でSPOCUの検証に成功しました。 SPOCUの論文 https://link.springer.com/article/10.1007/s00521-020-05182-1 1.2 SPOCU関数 ライブラリのインストール python3 -m pip install spocu Tensorflow from spocu.spocu_tensorflow import SPOCU   alpha = 3.0937 beta = 0.6653 …

SPOCUの活性化関数 Read More »

SHARPNESS-AWARE-MINIMIZATION (SAM)

  目次 1. SAMの概要 1.1 SAMとは 2. 実験 2.1 環境構築 2.2 データセットの準備 2.3 SAM関数 2.4 ResNet20 モデル 2.5 まとめ 1. SAMの概要 1.1 SAMとは SAMはSHARPNESS-AWARE MINIMIZATIONの略称で、Google Researchで深層学習ネットワークの損失を減らす新しい効果的な方法です。損失ランドスケープのジオメトリと一般化を接続する以前の作業によって作成されました。 資料:https://github.com/google-research/sam SAMは、多くの画像データセットベンチマークの最新モデルと比較して損失を改善できます。 左はSGDでトレーニングされたResNetが収束する鋭い最小値です。 右はSAMでトレーニングされたResNetが収束する広い最小値です。SAMは、広く研究されているさまざまなコンピュータービジョンタスク全体でモデルの一般化能力を向上させます。 単にトレーニング損失値LS(w)が低いパラメーター値wを探すのではなく、近隣全体のトレーニング損失値が均一に低いパラメーター値を探します。 論文:SHARPNESS-AWARE MINIMIZATION FOR EFFICIENTLY IMPROVING GENERALIZATION https://openreview.net/pdf?id=6Tm1mposlrM   2. 実験 環境:Google Colab(TPU) データセット:CIFAR-10 は6万枚の10種類の「物体カラー写真」(乗り物や動物など)の画像データセット モデル:SAM、ResNet20   2.1 環境構築 Githubのプロジェクトをダウンロードします。 !git clone https://github.com/sayakpaul/Sharpness-Aware-Minimization-TensorFlow ライブラリのインポート import …

SHARPNESS-AWARE-MINIMIZATION (SAM) Read More »

COCOBの最適化アルゴリズム

  目次 1 . COCOB最適化アルゴリズムの概要 1.1 COCOB最適化アルゴリズムとは 1.2 COCOB定義 2. 実験 2.1 データロード 2.2 データ前処理 2.3 COCOB最適化アルゴリズムのモデル作成 2.4 Adam最適化アルゴリズムのモデル作成 2.5 まとめ   記事:最適化アルゴリズムのまとめ   1.  COCOB最適化アルゴリズムの概要 1.1 COCOB最適化アルゴリズムとは COCOB最適化アルゴリズムはCOntinuous COin Betting (COCOB)の略称で学習率が要らない最適化アルゴリズムです。学習率を適応させたり、目的関数の想定された曲率を使用したりすることはありません。最適化プロセスをコイントスゲームにします。   コイントスゲーム ギャンブラーは初期金額から始まります。各ラウンドtで、彼はコイントスゲームの結果に賭けます。ギャンブラーは、表(ヘッド)または裏(​テイル)のいずれかに任意の金額を賭けることができます。 しかし、彼は追加のお金を借りることは許されていません。 彼が負けた場合、彼は賭けた金額を失います。 彼が勝った場合、彼は賭けた金額を取り戻し、それに加えて、彼は報酬と同じ金額を受け取ります。ラウンドt終了時のギャンブラーの富と、ギャンブラーの報酬にします。 上記のギャンブルアルゴリズムを使用して、劣勾配にアクセスすることにより、滑らかでない目的関数の最小化を見つけました。 COCOBは0から始まり、時間の経過とともに指数関数的に増加します 反対の符号の勾配に達するまで、wtを繰り返します。 ギャンブルの観点からは、これは明らかです。同じ結果のシーケンスがあるため、富は指数関数的に増加し、それによって富が増加し、賭けが増加します。   論文:https://arxiv.org/abs/1705.07795 Tensorflow: https://www.tensorflow.org/addons/api_docs/python/tfa/optimizers/COCOB   2. 実験 データセット:cifar10: 60000枚の32ピクセルx32ピクセルの画像。10クラス([0] airplane (飛行機)、[1] automobile (自動車)、[2] bird …

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

Snakeの活性化関数

目次 1. Snake活性化関数の概要 1.1 Snake活性化関数とは 1.2 Snake関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 Snakeの活性化関数を作成 2.5 LSTMの活性化関数を作成 2.6 まとめ 関連記事:活性化関数のまとめ   1. Snake活性化関数の概要 1.1 Snake活性化関数とは Snakeの活性化関数は、単純な周期関数の外挿を学習できないLSTMに用います。通常の活性化関数であるtanh、sigmoid、reluの弱点を改善するために使用します。LSTMベースのアクティベーションの優れた最適化特性を維持しながら、周期関数を学習するために必要な周期的誘導バイアスを実現する新しいアクティベーション、つまりx + sin2(x)のような学習が難しいタイプで用いられます。   tfa.activations.snake( x: tfa.types.TensorLike, frequency: tfa.types.Number = 1 ) -> tf.Tensor 論文:Neural Networks Fail to Learn Periodic Functions and How to Fix It https://arxiv.org/abs/2006.08195 TensorFlow: …

Snakeの活性化関数 Read More »

Swishの活性化関数

  目次 1. Swish活性化関数の概要 1.1 Swish活性化関数とは 1.2 Swish関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 Swishの活性化関数を作成 2.5 Reluの活性化関数を作成 2.6 まとめ 関連記事:活性化関数のまとめ   1. Swish活性化関数の概要 1.1 Swish活性化関数とは Swishは、線形関数とReLU関数の間を非線形に補間する滑らかな関数です。 Swishは、シグモイド関数とβで定義されます。 βがトレーニング可能なパラメーターとして設定されている場合、補間の程度はモデルによって制御できます。 ReLUと同様に、Swishは上に制限がなく、下に制限があります。 ReLUとは異なり、Swishは滑らかで単調ではありません。 実際、Swishの非単調性は、最も一般的な活性化関数とは異なります。 Swishの導関数は: 論文:Searching for Activation Functions https://arxiv.org/abs/1710.05941 TensorFlow: https://www.tensorflow.org/api_docs/python/tf/keras/activations/swish Pytorch: https://pytorch.org/docs/stable/generated/torch.nn.SiLU.html   1.2 Swish関数 def swish(x): return x * tf.math.sigmoid(x)   2.実験 データセット:CIFAR-10 は、32×32 のカラー画像からなるデータセットで、その名の通り10クラスあります。全体画像数は60000件となり、そのうち50000件が訓練用データ、残り10000件がテスト用データに分けます。 モデル:Swishの活性化関数のモデル …

Swishの活性化関数 Read More »

Yogiの最適化アルゴリズムの解説

目次 1 Yogi最適化アルゴリズムの概要 1.1 Yogi最適化アルゴリズムとは 1.2 Yogi定義 2. 実験 2.1 データロード 2.2 データ前処理 2.3 Yogi最適化アルゴリズムのモデル作成 2.4 Adam最適化アルゴリズムのモデル作成 2.5 まとめ 記事:最適化アルゴリズムのまとめ   1 Yogi最適化アルゴリズムの概要 1.1 Yogi最適化アルゴリズムとは yogiは適応勾配の最適化アルゴリズムであり、ミニバッチサイズを大きいときでも収束が速いと言われておりり、非収束の問題を回避する方法です。 ADAMは、学習率が急速に低下しないようにしながら、適応勾配を使用することです。 これを実現するために、ADAMは本質的に乗法であるEMAを使用します。 これは、過去の勾配がかなり速く忘れられる状況につながります。Yogiは制御された実効学習率の増加を採用することにより、パフォーマンスを向上させています。   MNISTデータの実験から、yogiはより良いパフォーマンスを示しています。   論文:Adaptive Methods for Nonconvex Optimization https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization.pdf Tensorflow: https://www.tensorflow.org/addons/api_docs/python/tfa/optimizers/Yogi PyTorch: https://pytorch-optimizer.readthedocs.io/en/latest/_modules/torch_optimizer/yogi.html   TensorflowのYogi最適化アルゴリズムは下記のパラメータになります。 yogi = tfa.optimizers.Yogi( learning_rate = 0.01, beta1 = 0.9, beta2 = 0.999, epsilon = 0.001, l1_regularization_strength = 0.0001, l2_regularization_strength = 0.0001, initial_accumulator_value = 1e-06, activation = ‘sign’, name = ‘Yogi’, ) …

Yogiの最適化アルゴリズムの解説 Read More »

TanhExpの活性化関数

  目次 1. TanhExp活性化関数の概要 1.1 TanhExp活性化関数とは 1.2 TanhExp関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 TanhExpの活性化関数を作成 2.5 Reluの活性化関数を作成 2.6 まとめ   記事:活性化関数のまとめ   1. TanhExp活性化関数の概要 1.1 TanhExp活性化関数とは TanhExpはTanh Exponential Activation Functionの略称です。名前からわかるようにtanhとexpを使います。TanhExpの定義はf(x) = x tanh(e^x)である。様々なデータセットやネットワークモデルに対してTanhExpのシンプルさ、効率性、ロバスト性を実証し、TanhExpは収束速度と精度の両方で同等のものを凌駕することを示した。また、ノイズを追加したり、データセットを変更したりしても、TanhExpの挙動は安定している。ネットワークのサイズを大きくしなくても、少数の学習エポックと余分なパラメータを追加することなく、TanhExpによって軽量ニューラルネットワークの能力を向上させることができることを示す。 論文:TanhExp: A Smooth Activation Function with High Convergence Speed for Lightweight Neural Networks https://arxiv.org/abs/2003.09855   1.2 TanhExp関数 def tanhexp(x): return x * tf.math.tanh(tf.math.exp(x)) …

TanhExpの活性化関数 Read More »

Rangerの最適化アルゴリズムの解説

  目次 1 Ranger最適化アルゴリズムの概要 1.1 Ranger最適化アルゴリズムとは 2. 実験 2.1 データロード 2.2 データ前処理 2.3 Ranger最適化アルゴリズムのモデル作成 2.4 Adam最適化アルゴリズムのモデル作成 2.5 まとめ   記事:最適化アルゴリズムのまとめ   1 Ranger最適化アルゴリズムの概要 1.1 Ranger最適化アルゴリズムとは Ranger最適化アルゴリズムとは、LookaheadとRADamの統合です。 Lookaheadという名前のとおり,過去の勾配を使うのではなく,先を見据えた更新則を導入しています。具体的には,通常のoptimizer (SGDやAdamなど) によって重みパラメータを更新します。これらのパラメータを “fast weights” を呼びます。これらの “fast weights” を参考に、”slow weights”と呼ばれる,実際に評価に用いる重みパラメータを更新します。 つまり、これまでのoptimizerは”fast weights”の更新で終わっていましたが、Lookahead optimizerはこの更新を参考にした上で本当のパラメータ (slow weights) を更新するというわけです。 Rectified Adam、またはRAdamは、適応学習率の分散を修正するための項を導入するAdam確率オプティマイザーの変形です。 それは、Adam最適化で悪かった収束問題を高速化しています。 論文:Lookahead Optimizer: k steps forward, 1 step back https://arxiv.org/abs/1907.08610v1 論文:RAdam …

Rangerの最適化アルゴリズムの解説 Read More »

AdaDeltaの最適化アルゴリズム

  目次 1. AdaDelta最適化アルゴリズムの概要 1.1 AdaDelta最適化アルゴリズムとは 1.2 AdaDelta関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 AdaDeltaの最適化アルゴリズムを作成 2.3 Adamの最適化アルゴリズムを作成 2.5 まとめ   記事:最適化アルゴリズムのまとめ   1. AdaDelta最適化アルゴリズムの概要 1.1 AdaDelta最適化アルゴリズムとは   AdadeltaはAdagradの拡張版の最適化アルゴリズムです。 過去のすべての勾配を累積するのではなく、勾配更新の固定移動ウィンドウに基づいて、単調に減少する学習率を下げていくような最適化アルゴリズムです。複数の値を保持するのではないのでAdagradに比べるとメモリー効率も良いと言われています。   ADAGRADメソッドでは、分母はトレーニングの開始から始まる各反復からの二乗勾配を累積します。 各項が正であるため、この累積合計はトレーニング全体を通じて増加し続け、各次元の学習率を効果的に縮小します。 何度もイテレーションの繰り返した後、学習率は非常に小さくなります。   下記の計算式になります。注意点としてはステップ5で差分を取っています。これは、無次元かと呼ばれる操作で学習していきます。この無次元かと呼ばれる特徴を用いているため、他のステップでも学習率を設定しないアルゴリズムです。 論文:ADADELTA: An Adaptive Learning Rate Method https://arxiv.org/abs/1212.5701   1.2 AdaDelta関数   Tensorflow tf.keras.optimizers.Adadelta( learning_rate=0.001, rho=0.95, epsilon=1e-07, name=’Adadelta’, …

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

SELUの活性化関数

  目次 1. SELU活性化関数の概要 1.1 SELU活性化関数とは 1.2 SELU定義 1.3 SELUの特徴 2. 実験 2.1 データロード 2.2 データ前処理 2.3 SELU活性化関数のモデル作成 2.4 RELU活性化関数のモデル作成 2.5 まとめ 記事:活性化関数のまとめ   1. SELU活性化関数の概要 1.1 SELU活性化関数とは SELUはScaled Exponential Linear Unitsの英略称で、活性化関数の一つです。 SELUは勾配消失問題(Vanishing Gradient)を対応できます。何故ならばSELUは「0」を基点として、入力値が0以下なら「0」~「-λα」の間の値を、0より上なら「入力値をλ倍した値」を返します。ReLUおよびELUの拡張版です。 論文:https://arxiv.org/pdf/1706.02515.pdf Tensorflow: https://www.tensorflow.org/api_docs/python/tf/nn/selu PyTorch: https://pytorch.org/docs/stable/generated/torch.nn.SELU.html   1.2 SELU定義 xが入力データで、f(x)が出力結果である。 x ≦ 0の場合は、f(x)=λ × α × (ex-1)となる x > 0の場合は、f(x)=λ × xとなる。 …

SELUの活性化関数 Read More »