深属学習

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

  目次 1 LAMB最適化アルゴリズムの概要 1.1 LAMB最適化アルゴリズムとは 1.2 LAMB定義 2. 実験 2.1 データロード 2.2 データ前処理 2.3 LAMB最適化アルゴリズムのモデル作成 2.4 Adam最適化アルゴリズムのモデル作成 2.5 まとめ 記事:最適化アルゴリズムのまとめ   1 LAMB最適化アルゴリズムの概要 1.1 LAMB最適化アルゴリズムとは LAMBは、LARSに触発されて、大きなミニバッチを使用してディープニューラルネットワークのトレーニングを加速するための手法です。 LAMBの適応性は2つあります。(i)ADAMで使用される2次モーメントの平方根に関する次元ごとの正規化、および(ii)層ごとの適応性によって得られる層ごとの正規化です。 LAMBのアルゴリズムは下記になります。 以下の表は、ResNet-50ネットワークを使用したImageNetデータセットの実験結果です。 LAMBは高精度を実現できます。 論文: https://arxiv.org/abs/1904.00962 Tensorflow: https://www.tensorflow.org/addons/api_docs/python/tfa/optimizers/LAMB?hl=ja PyTorch: https://github.com/cybertronai/pytorch-lamb/blob/master/pytorch_lamb/lamb.py   2. 実験 データセット:cifar10: 60000枚の32ピクセルx32ピクセルの画像。10クラス([0] airplane (飛行機)、[1] automobile (自動車)、[2] bird (鳥)、[3] cat (猫)、[4] deer (鹿)、[5] dog (犬)、[6] frog (カエル)、[7] …

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

HARDSHRINKの活性化関数

目次 1. HARDSHRINK活性化関数の概要 1.1 HARDSHRINK活性化関数とは 1.2 HARDSHRINK関数 2. 実験 2.1 ライブラリインポート 2.2 データ読み込み 2.3 データ加工 2.4 HARDSHRINKの活性化関数を作成 2.5 Reluの活性化関数を作成 2.6 まとめ 関連記事:活性化関数のまとめ 1. HARDSHRINK活性化関数の概要 1.1 HARDSHRINK活性化関数とは HARDSHRINK活性化関数とは入力データと出力データは原点の周りは、0だがそれ以外では値のある関数です。下記の関数になります。 関数 の形をしており、変数lower/upperのデフォルト値は0.5です。 1.2 HARDSHRINK関数 TensorFlowの関数 tfa.activations.hardshrink( x: tfa.types.TensorLike, lower: tfa.types.Number = -0.5, upper: tfa.types.Number = 0.5 ) -> tf.Tensor TensorFlowの資料: https://www.tensorflow.org/addons/api_docs/python/tfa/activations/hardshrink?hl=ja   PyTorchの資料: https://pytorch.org/docs/stable/generated/torch.nn.Hardshrink.html   2. 実験 データセット:CIFAR-10 …

HARDSHRINKの活性化関数 Read More »

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 »