アレックスネットワークの重みの更新について

조회 수: 2 (최근 30일)
創 尾崎
創 尾崎 2022년 1월 25일
댓글: Kenta 2022년 1월 26일
アレックスネットワークのパラメータの更新の仕方について質問です。
添付させていただいた画像のようにアレックスネットワークを利用しました。データセット全150枚のうち、105枚(70%)を学習用に、
45枚(30%)を検証用データとして、ミニバッチサイズを10枚、エポック数を10としています。したがって、画像のように1エポックあたりの反復回数は105/10→10回となっています。
ここで分からないこととしては、ミニバッチあたりの重みの更新の仕方についてです。
私の認識としては、
まず学習用データ1枚分について、逆伝播によって何回かの重みの更新を行う→次の2枚目に重みを引き継ぎ、何回か更新を行う→バッチサイズ10枚分で同じ事を行い、最終的にミニバッチ1単位での重みを決定する。→次のミニバッチに重みを引き継ぐ→・・・
というものなのですが、合っていますでしょうか。また、もし合っている場合、下線部の回数がいくつなのかを知ることは可能でしょうか。
説明がわかりにくく申し訳ないですが、よろしくお願いいたします。

채택된 답변

Kenta
Kenta 2022년 1월 25일
こんにちは、以下私の理解で恐縮なのですが、
10枚分(ミニバッチの数)のデータで推論=>10枚分のクロスエントロピー誤差を計算(損失の計算)=>逆誤差伝搬にてネットワーク全体の重みを更新(回数でいうと1回、というのがよいでしょうか)
という感じではないですかね。
スクリーンショットを見る限り、trainの関数で学習させてると思うのですが、
カスタムループで書く版のドキュメントを見ると参考になるかもしれません。
例えば、以下の関数で入力Xと正解Yがあったときにforwardさせて、さらにそこからロスを計算させて、勾配を求めているのがわかると思います。
質問者さまのおっしゃるように、1枚ずつ勾配を出して更新するのではなくて、10枚の結果をもって更新させています。
10枚だと10枚分の結果が平滑化されるのですが、1枚だとノイジーになって、学習曲線が非常にガタガタした感じになると思います。
function [gradients,state,loss] = modelGradients(dlnet,dlX,Y)
[dlYPred,state] = forward(dlnet,dlX);
loss = crossentropy(dlYPred,Y);
gradients = dlgradient(loss,dlnet.Learnables);
loss = double(gather(extractdata(loss)));
end
https://jp.mathworks.com/help/deeplearning/ug/train-network-using-custom-training-loop.html
  댓글 수: 2
創 尾崎
創 尾崎 2022년 1월 26일
ご回答ありがとうございます!
理解できました!
Kenta
Kenta 2022년 1월 26일
よかったです。細かくて申し訳ないですが、AlexNetと表記した方が、のちに検索に引っかかりやすくなって他の方に有用かもしれません。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 イメージを使用した深層学習에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!