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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

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

Python

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

Q&A

解決済

1回答

2055閲覧

機械学習において層数について教えて欲しいです

watchdogs

総合スコア54

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

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

Python

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

0グッド

0クリップ

投稿2021/01/25 13:19

機械学習初心者です。
ニューラルネットワークで層数をと精度がどの様な関係にあるのか
活性化関数を使わずに実験を行なっていました。
実験とはMNISTの画像分類をしています。
そうすると、
2層から4層までは精度は上昇していましたが、
5層目から急に精度が落ちてしまい
5層目以降では飽和してしまいました。
なお、検証は10層まで行いました。

5層目から急に精度が落ちた原因の考察がわからず悩んでいます。

何かアドバイスまたは参考になるサイトや文献がありましたら
教えていただけると助かります。

よろしくお願い致します。

ソースは下記です。

Python

1from __future__ import print_function 2import numpy as np 3from keras.datasets import mnist 4from keras.models import Sequential 5from keras.layers.core import Dense, Dropout, Activation 6from keras.optimizers import SGD 7from keras.utils import np_utils 8from make_tensorboard import make_tensorboard 9 10 11np.random.seed(1671) # for reproducibility 12 13# network and training 14NB_EPOCH = 20 15BATCH_SIZE = 128 16VERBOSE = 1 17NB_CLASSES = 10 # number of outputs = number of digits 18OPTIMIZER = SGD() # optimizer, explained later in this chapter 19N_HIDDEN = 128 20VALIDATION_SPLIT = 0.2 # how much TRAIN is reserved for VALIDATION 21DROPOUT = 0.3 22 23# data: shuffled and split between train and test sets 24(X_train, y_train), (X_test, y_test) = mnist.load_data() 25 26# X_train is 60000 rows of 28x28 values --> reshaped in 60000 x 784 27RESHAPED = 784 28# 29X_train = X_train.reshape(60000, RESHAPED) 30X_test = X_test.reshape(10000, RESHAPED) 31X_train = X_train.astype('float32') 32X_test = X_test.astype('float32') 33 34# normalize 35X_train /= 255 36X_test /= 255 37print(X_train.shape[0], 'train samples') 38print(X_test.shape[0], 'test samples') 39 40# convert class vectors to binary class matrices 41Y_train = np_utils.to_categorical(y_train, NB_CLASSES) 42Y_test = np_utils.to_categorical(y_test, NB_CLASSES) 43 44# M_HIDDEN hidden layers 45# 10 outputs 46# final stage is softmax 47 48model = Sequential() 49model.add(Dense(N_HIDDEN, input_shape=(RESHAPED,))) 50 51model.add(Dense(N_HIDDEN)) 52model.add(Dense(N_HIDDEN))#この行のみを増やして実験 53 54 55model.add(Dense(NB_CLASSES)) 56model.add(Activation('softmax')) 57model.summary() 58 59model.compile(loss='categorical_crossentropy', 60 optimizer=OPTIMIZER, 61 metrics=['accuracy']) 62 63callbacks = [make_tensorboard(set_dir_name='keras_MINST_V3')] 64 65model.fit(X_train, Y_train, 66 batch_size=BATCH_SIZE, epochs=NB_EPOCH, 67 callbacks=callbacks, 68 verbose=VERBOSE, validation_split=VALIDATION_SPLIT) 69 70score = model.evaluate(X_test, Y_test, verbose=VERBOSE) 71print("\nTest score:", score[0]) 72print('Test accuracy:', score[1]) 73

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

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

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

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

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

guest

回答1

0

ベストアンサー

5層目から急に精度が落ちた原因の考察がわからず悩んでいます。

層を増やすほど、調整しなければならないパラメータが増えて学習は難しくなります。

層数を増やすことによるデメリット

  • 学習するパラメータ数が多くなり、調整するためにより大量のデータが必要になる
  • 過学習が起こりやすくなり、汎化性能が落ちる
  • 勾配消失問題が起こって学習が進まなくなる
  • 計算量が増える

etc...

なので、層を増やすほど精度が上がるというわけではありません。質問のように全結合層を重ねただけのモデルでは3層ぐらいが限界でしょう。

タスクの難しさ (MNIST は簡単) やデータ量に応じて、適した層の数というのは変わり、どのくらいがよいかは実験しなければわかりません。
今回、4層のときが一番良かったのであれば、それが適した層数だったということです。

ショートカット構造を導入した ResNet を使うと層数をもう少し増やしても学習はうまくいくかもしれません。

投稿2021/01/25 13:39

編集2021/01/25 13:42
tiitoi

総合スコア21956

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

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

watchdogs

2021/01/25 14:04

早速のご返答ありがとうございます。 頂いた回答を元に もう少し教えていただけますか。 >学習するパラメータ数が多くなり、調整するためにより大量のデータが必要になる >計算数が増える 総数を増やすことで計算量が増えることは安易に理解できます。 それが精度低下にどの様な関係をもたらすのか知りたいです。 >過学習が起こりやすくなり、汎化性能が落ちる 過学習が起こっている判断はどのデータをどの様にみたらわかりますか。 >勾配消失問題が起こって学習が進まなくなる これは活性化関数の勾配曲線の認識でよろしいですか。 お手数おかけします。 よろしくお願い致します。
tiitoi

2021/01/25 14:25 編集

> それが精度低下にどの様な関係をもたらすのか知りたいです。 「層数を増やすことのデメリット」として上げたので、精度低下とは関係ないです。 計算量が増えて、学習時間が長くなるというのもデメリットではあるので挙げました。 > 過学習が起こっている判断はどのデータをどの様にみたらわかりますか。 訓練データに対する精度は上がっているのに、学習に使っていないテストデータ対する精度が頭打ちもしくは悪くなっていたら過学習です。 > これは活性化関数の勾配曲線の認識でよろしいですか。 逆伝搬時のデルタの計算は出力層から乗算していくだけなので、順伝搬時に途中の層で0もしくは小さい値が出力されていたら、勾配の値が逆伝搬途中で消失します。 以下の記事の「勾配消失問題」の説明がわかりやすいと思います。 たぶん、今回の質問のように精度が悪くなった一番の要因はこれじゃないかと https://nnadl-ja.github.io/nnadl_site_ja/chap5.html
watchdogs

2021/01/26 02:25

記事の参照及びわかりやすい解説ありがとうございました。 これらの情報を基にまた勉強します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問