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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

331閲覧

CNN・NDD 訓練プロセスに関する初歩的な質問

leilei

総合スコア39

深層学習

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

1グッド

1クリップ

投稿2018/05/04 07:24

編集2018/05/04 15:39

御免なさい、
『初歩的な質問』と言っても、相当難しいかも知れません。

まず、学習画像サンプルの分割に関する確認事項2件:
1.L個の学習画像サンプルをM個のbatchに分割:
1 batchに N = L/M 個画像がある。

2.さらに、1batchをP個のmini-batchに分割----この時:Pは "Subdivision"と呼ぶ ? ですよね!
mini-batchに含まれる画像の数 Q = N/P

上記理解が正しいかどうか、まずお伺いしたいですが、
問題がなければ、同じ学習画像セットに対する繰り返し学習する必要らしいので、
その繰り返しの単位を教えていただきたいのです:

 mini-batch中の一つ一つの画像に対してiteration/repeatする;
 mini-batch分の画像に対するiteration/repeat処理する;
 batch分の画像に対するiteration/repeat処理する

どれでしょうか。
#どうぞ宜しくお願い致します。

【Note】

" mini-batch = n iteration = n次のparameters 更新 = n step towards minimizing the loss function."

n = 1 : 通常
n > 1 : 総学習sample数が小さすぎの場合

むー、「repeat」とは各一枚画像に対するrepeat?  ではなさそう。。。
repeat ≠ iteration ?
複数のiteration = repeat?
複数のrepeat = iteration?

でも、repeat と iteration は 言語的に同じ意味なのに、、、

"By default, the software shuffles the data once before training."
shufflesとは総sampleに対して行う、即ちepoch 毎にシャッフルされる。

=========

総sample = 1 epoch  これは明確!
「epochの繰り返し」はrepeat と言うの?

どっち?
総samples = 1 batch ➡ 複数の mini-batch
総samples = 複数の batch ➡ さらに複数の mini-batch

IS.SEKI👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

その繰り返しの単位を教えていただきたい

繰り返しの単位は、学習方法に依存する部分があります。最もシンプルなバッチ学習は、コストを総サンプルで計算して、その結果をもとに所定の学習率に沿ってウェイトの更新をします。つまり1000件のデータがあれば1000件全体で1単位となり、それを複数回繰り返すことでコストを最小にするパラメータを探索します。

このバッチ学習と対極にあるのがオンライン学習で1000件のなかから1件を抽出してコストを計算して、その結果からウェイトの更新を行うというものです。この場合の単位ですが実装例にはいくつかバリエーションがあります。ひとつは1件ずつ学習する処理を全件実施することを1単位とするものです。この場合、学習回数として100回と定義していると、学習そのものは1000件×100回行われることになります。もうひとつは、1件を1単位とするものです。このケースの実装は、常に1000件から1件をランダムにサンプリングするようになっていて、学習回数はそれなりの回数が設定されています。

バッチ学習とオンライン学習の中間にあたるものがミニバッチ学習です。与えられたデータを複数件に分割したミニバッチを作成し、このミニバッチ単位でコストの計算とウェイトの更新を行います。この場合の繰り返し単位も実装例を見るとバリエーションがあります。ひとつはミニバッチ全てを順番に学習させることを1単位とするものです。なお、学習回数が設定されている場合、データ全体をシャッフルすることで毎回のミニバッチの内容が異なるような工夫が実装されています。もうひとつはミニバッチを全体からランダムにサンプリングして学習させ、これを1単位とするものです。

投稿2018/05/06 04:39

編集2018/05/06 08:31
R.Shigemori

総合スコア3376

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

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

IS.SEKI

2018/05/06 07:37 編集

すごい回答ですね。 私はこのトッピクの質問に関連する質問も出していますけれども、 この場を借りてご教授頂きたい事はいくつかありますーーー "学習"とは, NNのweight更新の各ステップの事ですよね? そしてそれは『コスト』の計算結果によります。 因みに、『コスト』とはNNの出力と期待値との差を関数にされたやつですよね?(『ロスト』とも呼ぶ?) ただし、コストの計算方法に2大類があって、 ① 単一入力画像(画像1枚)に対する計算と ② 複数の画像の訓練誤差を総合したコスト計算法 これは間違いないでしょうか。 さらに②の場合、 各学習画像の訓練誤差和を取ってコスト関数の計算に利用する方と、 各学習画像の学習コスト関数の計算を別々に行って、それらの平均コスト値を最終的なコストとするやり方があると想像しますが、 どっちでしょうか。 宜しくお願いします。
R.Shigemori

2018/05/06 08:30

コスト関数は計算方法の相違(最小二乗・クロスエントロピーなど)はあっても件数による相違はありません。オンライン学習の場合は投入対象が1件でありバッチ・ミニバッチは複数件であるだけです。より厳密にいうと、コスト関数はデータ投入件数と独立です。むしろ、コスト関数のバリエーションという意味では数値予測系とクラス識別系はコストの意味合いが大きく違うのでこちらをもって2大分類といったほうがそれらしいと思います。 コスト関数は取り組むタスクによって用いるものが異なります。画像認識のタスクであれば、一般的なものはクロスエントロピー誤差かと思います。tensorflowで実装した場合のクロスエントロピー誤差は以下のような感じになります。 <2値分類の場合> t=tf.placeholder(…略) ニューラルネットワーク構造(略) p=tf.sigmoid(...略) loss=-tf.reduce_sum(t*tf.log(p)+(1-t)*tf*log(1-p)) <他クラス分類の場合> t=tf.placeholder(…略) ニューラルネットワーク構造(略) p=tf.nn.softmax(...略) loss=-tf.reduce_sum(t*tf.log(p))
leilei

2018/05/06 14:12 編集

R.Shigemori様 大変お世話になっております。 さすが詳しい方です。 御免なさいね、以下の問題まだ分かっていません。 一つのmini-batchに対して、一回のNNパラメータ更新を行うとすれば、loss計算も一回だけですね? そうしたら、mini-batchのメンバーとしての"複数の画像"を使ってどうやって一回のloss計算を行うのでしょうか。 つまり、一つの学習画像に一つのloss計算であれば分かりますが、複数の画像(mini-batchに含まれる)はどうやって一つのloss計算に対応しますか。 またどうぞ宜しくお願いします。
R.Shigemori

2018/05/06 18:05

複数のデータを処理する場合、上記の擬似コードでいうとt(正解のラベル)とp(クラスに属する確率)はtensorになります。このtensorを内積、tensor同士の四則演算、関数の適用などを通じて様々な計算を行った上でreduce_sumで全体の総合計(scalar)に変換しています。つまり、ひとつを対象とした計算も複数件の計算も実装上は、scalarかtensorかの相違でしかなく、その相違はplaceholderで行っているインプットデータの定義で吸収してしまうので、計算には影響しません。 お知りになりたい内容は、ベースとなる理論式の実装方法に触れる部分です。したがって、質問する側と答える側で共通の理解をもってQ&Aを成立させるためには、コードを使って質問いただかないと回答しにくいです。iterationやepochも結局のところ、どういうコードとして表現するのかというレベルになると人によって解釈が異なります。(回答に記述した内容は、私が目にしたことがあるコードを整理したものなので学問的に定義されたものではありません。)
leilei

2018/05/07 02:58

とても勉強になりました。 自分が言いたい内容は他人に理解できない処が多かったと思います。 反省しなければなりません。 ただ、実装レベルのソースコードを解読するレベルも抽出できるレベルではないため、 概念上の質問しかできませんでした。 それにもかかわらず、R.Shigemoriさまに適切なお答えをいただいたのは、実に感動的です。 本当にありがとうございました!
guest

0

私の素朴な理解ですが、

  • オンライン学習:データ1件ごとに逆伝播させて重みの更新(更新回数=全データ数*epoch数)
  • バッチ学習:データ全体で逆伝播の更新量を計算して重みの更新(更新回数=epoch数)
  • ミニバッチ学習:データを複数のバッチに分割してそれぞれバッチ学習(更新回数=バッチ数*epoch数=(全データ数/1バッチあたりのデータ数)*epoch数)

まず、学習画像サンプルの分割に関する確認事項2件:

1.L個の学習画像サンプルをM個のbatchに分割:
1 batchに N = L/M 個画像がある。
.さらに、1batchをP個のmini-batchに分割-

というのは違うような気が。

投稿2018/05/04 15:57

編集2018/05/04 15:58
hayataka2049

総合スコア30933

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

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

tachikoma

2018/05/04 23:19

オンライン学習もミニバッチ学習もどちらもSGDに分類されるかと、ミニバッチのサイズが違うだけで。あと、オンライン学習って重みを一度更新するのに使ったら使い捨てするタイプの学習方法じゃありませんでしたっけ。
hayataka2049

2018/05/05 15:34

たしかにオンライン学習をミニバッチでバッチ数=データ数とした場合と捉えることも可能ですね。
leilei

2018/05/06 14:13

勉強になりました。 有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問