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

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

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

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

機械学習

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

Q&A

2回答

7646閲覧

DNNの各層のノード数と層数を決めるための指針のような物はない?

IS.SEKI

総合スコア28

深層学習

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

機械学習

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

3グッド

2クリップ

投稿2018/04/18 11:24

編集2018/04/18 11:25

最近DNNに関して時間ある限り懸命に勉強してきたつもりですが、
まだ、基本設計でさえ分かっていないような虚しさを感じます。

例えば、最初は何に基づいて、DNNの各層のノード数と層数を決めるのでしょうか。
tuning必要があると分かりますが、層数と各層上のノード数はそれぞれ莫大で、
全組み合わせで試すのは不可能ですね。
基本的な構成はないでしょうか。
そしてその基本的な構成は訓練用のサンプルとは関係あるでしょう。

このような実用的な話があまり議論されていないような感じです。
##情報有れば是非ご提供いただきたいです
(単刀直入、明瞭明快なものが理想です)

oookabe, Ataracsia, insecticide👍を押しています

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

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

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

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

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

guest

回答2

0

実装経験が、業務システムのデータを使ったclassificationやregressionだけと少し偏った経験ですが、(1)ノードを増やすほど高次な関数を表現できる、(2)層を深くすると複数の線を重ねないと実現できないような複雑なもの(例えば排他論理和・円の内側と外側)を表現できる、と理解しています。

そのため、識別モデルの実装の際は、
1)とりあえず、特徴量の次元削減して2次元にプロット
2)心の目で結果を眺め、高次の関数になりそうであれば、その次元数(極大値・極小値の数)を数える。
3)同様に飛び地になりそうな部分の数を数える。
4)項番2)の10倍~20倍をノード数に、項番3)に+1~2したものを階層数にして学習
5)結果を見ながらチューニング(基本、多めにしているつもりなので減らす方向)
という手順で行っています。

画像の場合は、上記のような話に行く前の畳み込み層などの前処理部分をどうするかを考える必要があります。

投稿2018/04/19 19:26

R.Shigemori

総合スコア3376

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

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

IS.SEKI

2018/04/20 01:52

R.Shigemori様 ご教授有難うございます。 非常に勉強になりました。
IS.SEKI

2018/04/20 02:06 編集

大変大切な話だと思いますが、下記2点についてもう少しご説明頂ければ幸いです。 > 2) その次元数(極大値・極小値の数)を数える (↑どうして関数の「次元数」と「極値数」と同列にされたかという) > 1) 特徴量の次元削減して2次元にプロット これは自分にとって至難な技ですね。 数十次元の特徴量vectorを (x,y)座標平面へ射影するという話でしょうか。 何か良い方法あれば、是非お願い致します。
R.Shigemori

2018/04/20 21:46

> どうして関数の「次元数」と「極値数」と同列にされたか 数学的にいうと、全ての関数は高次の多項式(a1*x^n+a2*x^(n-1)+…an*x^0)で近似できることがわかっています。これを1次関数の形で近似させようとすると、ノード数を増やすとうまくいきます。 ここからは理論的にでもなんでもないのですが、より高次である(極値が多い)であれば、それに従ってノード数を増やしたほうがうまく、正負が逆転する状況をうまく表現できるのではないかと考えた次第です。実際には、ノード数2でも3次の多項式くらいであれば近似できますし、確率密度関数のような数式的には複雑なものでもそれほどのノードは必要ありませんでした。 ただ、ノードが多すぎると過学習になることはあっても未学習にはならないだろうとの判断のもと、次数とノード数を基準に考えています。 > 数十次元の特徴量vectorを (x,y)座標平面へ射影するという話でしょうか その通りです。 この段階では、モデルの形状のあたりを付けるという目的なので深く考えることはしません。問題の前提が業務システムが保有するデータを使ったClassificationなので、何となくそれらしくなったのかもしれません。このあたりはいろいろと手を動かすことが答えの近道かと思います。
IS.SEKI

2018/04/21 10:59

なるほど、、、大変勉強になりました! 本当に有難うございます。
IS.SEKI

2018/04/21 11:13 編集

NOTE: ちょっと『次元数』という言葉に惑わされました。 前文中の『次元数』➡『次数』に修正すべき。 次数(order) ≠次元数 (dimension) 要は、 回帰しようとする関数の”次数”が高いほど、極値点も多くなり、形状が複雑です。 形状の複雑な関数を精確にfittingするために、NNの係数・ノード数を増やさないと学習能力が足りない。
insecticide

2022/08/05 00:51

🌠 データをより高次元(dimension)空間へ射影する事によって、class分界線(面)の関数の次数(order)が減らされるという話は分類テクニックにおいて一般的な原理ですね.🤩
guest

0

単純なものだと、過去に性能が良いと言われているネットワーク構造を使うことですね。

例えば、AlexNetなど。


ノードを増やすと、教師データの学習度合いがよくなっていきます。
ここですでに精度が出ないなどとなるとお話にならないので、過学習覚悟でノードを増やします。

深くしていくのであれば、途中で初期の入力を合流させたり。

とりあえず教師データをそれなりに学習できるようにしてから、過学習を抑えるようにします。
Dropout層を入れたり、ボトルネックとなるような層を入れたりします。

ここまでやればデータの学習しやすさなどについて感覚がつかめるかと思います。

投稿2018/04/18 21:37

mkgrei

総合スコア8560

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

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

oookabe

2018/04/19 02:02

> ノードを増やすと、教師データの学習度合いがよくなっていきます。 『ノードを増やす』とは「各層の面積を増やす」事を指されていますか、 それとも層数を増やすというのでしょうか。
mkgrei

2018/04/19 02:04

各層のノード数を増やすことです。 層数は容易には増やせません。 学習の雰囲気が大きく変わります。
oookabe

2018/04/19 10:46 編集

先ずは過学習ができるかどうかですね。【金言】 これは基本だ、とよく理解できます。 きちんと学習さえできなければ、話がなりませんから。 それから『汎化性』を調整していくわけ( 好きなように)。 そして、層数を変えたら、もう、、、想像できますね。
mkgrei

2018/04/19 10:58

> そして、層数を変えたら、もう、、、想像できますね。 話の流れから結論が読みきれませんでしたが、層数をいたずらに増やすと学習ができなくなっていきますね。
IS.SEKI

2018/04/19 13:48 編集

皆さん有難うございます。 考え方は分かりましたが、自分の認識では層のノード数(neuron)は 入力画像によって決められるもんで、自在に増やしたり減らしたりするのができるのでしょうか。 そして、もし各層のノード数を強引に元の入力画像のサイズより大きくすれば、所謂『wide』DNNになるのでしょうか。 (以前DNNがdeepのほう有利か、wideのほうが有利かという論争があったような記憶ありますが)
mkgrei

2018/04/19 14:53

ノード数というものと、伝搬していくデータそのものを勘違いしていませんか。(特に畳み込みの場合) 畳み込み層のカーネルの枚数は好きなだけ増やせますし、入力画像によりません。(入力画像のサイズよりも大きくなりません) 分類問題であれば一度FlattenしてからDense層を通すので、そのときにノードの数を好きなものにできます。(経験上Flattenした直後の次元よりもDense層のノード数を大きくすることは珍しいと思います。MaxPoolingしまくって、1x1x128とかになっていなければ…) 1000クラスの分類でも4056x4056x4056で十分学習できますし、それを1024x128x1024にすることで無理やり圧縮をかけることもできます。 Deepの方が圧倒的に学習させることが難しく、複雑な関係性を持って過学習するし学習コストも高いです。 Wideの方は一度過学習し始めると、あからさまにテストスコアが下がる傾向にあります。 Wideにするとノードを減らすことで次元削減の要領でテストスコアを上げることが容易です。 Deepだと、思考停止して学習をうまくさせるためには、入力データを再合流させれば良いのですが、精度の向上は僅かであり、はっきりと過学習しかしておらず、層数を増やした後に減らすご利益を見出すことが難しいです。 ResNetなどを見ると、層の数を増やしたまま、BatchNormalizationなどのテクニックを使って過学習を抑制します。(リソースと経験が必要です) いずれのケースも、想像することは不可能なので、実際にやってみて感覚をつかむしかないと思います。
IS.SEKI

2018/04/20 03:37

mkgreiさん 貴重な経験談ありがとうございます。 見識の高さに感服!
IS.SEKI

2018/04/20 07:00 編集

> Wideにするとノードを減らすことで すみません。自分のイメージとして、 wideとはDNNの各層にneuron/ノードを「増やす」ということですが、 違うんでしょうか。 それとも、層数の少ない複数のCNNを並列に構成し、各CNNの最終出力をまとめて直列化(flatten)して、全連結層(dense層)に繋ぐというやりかたでしょうか。 どうぞ宜しくお願い致します。
mkgrei

2018/04/20 09:35

わかりにくい表現になってしまい申し訳ありません。 wideにして過学習したモデルに対して、今度はノードを減らすことで… という意味です。
IS.SEKI

2018/04/21 11:09 編集

本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問