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

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

ただいまの
回答率

90.50%

  • 機械学習

    684questions

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

  • TensorFlow

    676questions

  • 深層学習

    146questions

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 303

leilei

score 31

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

まず、学習画像サンプルの分割に関する確認事項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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/06 16:28 編集

    すごい回答ですね。
    私はこのトッピクの質問に関連する質問も出していますけれども、
    この場を借りてご教授頂きたい事はいくつかありますーーー
    "学習"とは, NNのweight更新の各ステップの事ですよね?
    そしてそれは『コスト』の計算結果によります。
    因みに、『コスト』とはNNの出力と期待値との差を関数にされたやつですよね?(『ロスト』とも呼ぶ?)

    ただし、コストの計算方法に2大類があって、
    ① 単一入力画像(画像1枚)に対する計算と
    ② 複数の画像の訓練誤差を総合したコスト計算法
    これは間違いないでしょうか。

    さらに②の場合、
    各学習画像の訓練誤差和を取ってコスト関数の計算に利用する方と、
    各学習画像の学習コスト関数の計算を別々に行って、それらの平均コスト値を最終的なコストとするやり方があると想像しますが、
    どっちでしょうか。

    宜しくお願いします。

    キャンセル

  • 2018/05/06 17: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))

    キャンセル

  • 2018/05/06 23:08 編集

    R.Shigemori様
    大変お世話になっております。
    さすが詳しい方です。

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

    またどうぞ宜しくお願いします。

    キャンセル

  • 2018/05/07 03:05

    複数のデータを処理する場合、上記の擬似コードでいうとt(正解のラベル)とp(クラスに属する確率)はtensorになります。このtensorを内積、tensor同士の四則演算、関数の適用などを通じて様々な計算を行った上でreduce_sumで全体の総合計(scalar)に変換しています。つまり、ひとつを対象とした計算も複数件の計算も実装上は、scalarかtensorかの相違でしかなく、その相違はplaceholderで行っているインプットデータの定義で吸収してしまうので、計算には影響しません。

    お知りになりたい内容は、ベースとなる理論式の実装方法に触れる部分です。したがって、質問する側と答える側で共通の理解をもってQ&Aを成立させるためには、コードを使って質問いただかないと回答しにくいです。iterationやepochも結局のところ、どういうコードとして表現するのかというレベルになると人によって解釈が異なります。(回答に記述した内容は、私が目にしたことがあるコードを整理したものなので学問的に定義されたものではありません。)

    キャンセル

  • 2018/05/07 11:58

    とても勉強になりました。
    自分が言いたい内容は他人に理解できない処が多かったと思います。
    反省しなければなりません。
    ただ、実装レベルのソースコードを解読するレベルも抽出できるレベルではないため、
    概念上の質問しかできませんでした。

    それにもかかわらず、R.Shigemoriさまに適切なお答えをいただいたのは、実に感動的です。

    本当にありがとうございました!

    キャンセル

+1

私の素朴な理解ですが、

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/05 08:19

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

    キャンセル

  • 2018/05/06 00:34

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

    キャンセル

  • 2018/05/06 23:13

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

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • 機械学習

    684questions

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

  • TensorFlow

    676questions

  • 深層学習

    146questions