質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

280閲覧

mini batchでNNのparametersを更新する仕組み

insecticide

総合スコア315

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/04/09 23:02

編集2022/04/10 03:25

自分が深層学習の理論勉強段階にあって、実装に関してはまったく”文明未開”の状態で鬱陶しい毎日。
例えば、
mini batchでNNのparametersを更新するには2種類の方式:mini batch単位で目標関数の【誤差の累積】を取るか、各NNのparamterが各サンプルデータ毎の目標関数の誤差に対する【gradientの累積】を取るか
のいずれかで実現できると思いますが、

実際どの方式で実現されるのでしょうか。

具体に
方式1.
訓練目標関数の誤差をmini batchで累算して、累算した目標関数の誤差に対してoptimizer.backward() callか, model.backward() callによって【💛注】,  loss.backward() callによってNNの各parameterのgradientが算出され、NNの各parameterのgrad 変数に【加算せず】セットされる。

💛注:NN model 自体がNN parametersを保持しているはずだし、optimizer.step()の実行によって全NN parametersの更新もできるので、optimizerを通してもNN parametersのgradient値の更新もできるはずだが、やはりloss関数情報を持たないと行けないので、loss classでNN parametersのgradientを更新するのは自然。

方式2.
mini batchの個々サンプルデータに関する訓練目標関数の誤差を算出して(累算せず)、loss.backward() callでNNの各parameterに対するgradientを計算し、NNの各parameterのgrad 変数に【加算】する。

=============

上記処理の後、optimizer.step() で、(mini batch単位での)一括更新が実行される。


さて、果たして実際はどの方式でしょうか。
この辺明るい方ご説明お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

insecticide

2022/04/10 03:55 編集

1.Tensor classが持っている能力を生かして、batch(tensor object)単位でDNNに入力し処理可能なので、batch単位で目的関数のlossの累積値の算出も容易である。 2.DNNのparameterもTensorだけど、batchの形状(dim)とは関係ないし、どうせ、先にlossを算出してからDNNのparameterのgradientを算出しなければならないので、batch単位で目的関数のlossの累積値を用いてDNNの各parameterのgradientを計算すれば、自然にbatch毎の『累積的な』gradient値になる。 さようなら、loss.backward()のgradient累積機能はまったく余計だし、そのせいで、毎回、loss.backward()を実行する直前にmodel.zero_grad()を実行しなければならないのは愚か❣
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問