ニューラルネットワーク:オーバーフィットできないのはなぜですか?


8

(フィードフォワード単一層)ニューラルネットワークを使用して、2つの財務変数(回帰)から環境関連変数を予測しようとしています。キャレットパッケージの「train」関数を使用します。

nnet()キャレットパッケージのアルゴリズムを使用しています。2つの連続予測子と420のデータポイントがあります。

理論的理解のために、私はわざとモデルをオーバーフィットしようとしています。私の理解では、これは通常すべてのデータセットで機能するはずです。たとえば、「サイズ」(つまり、非表示単位の数)を増やすなどです。ただし、隠れたユニットのサイズを大幅に増やしても、過剰適合にはなりません。

したがって、「サイズ」を増やすことですべてのニューラルネットワークをオーバーフィットできると想定するのは間違っていますか?代わりに、他のどの変数が過剰適合につながる可能性がありますか?

grid <- expand.grid(size = 20
                    )

control <- trainControl(method = "cv", 
                        number = 10,
                        verboseIter = TRUE
                        )

fit <- train(x=train_parametres, y=train_result, 
             method = "mlp", 
             metric = "Rsquared",
             learnFunc = "Std_Backpropagation",
             learnFuncParams = c(0.2, 0.0),
             maxit = 1000,
             trControl = control,
             tuneGrid = grid,
             preProcess = c("center", "scale"), 
             linout = T,
             verbose = T,
             allowParallel = T
)

回答:


2

データセットをオーバーフィットしようとする理由は、データセットを表すために必要なモデル容量を理解するためです。

モデルの容量が低すぎると、データセットを表すことができません。データセットを完全に表現できるようになるまでモデルの容量を増やすと、最小容量を見つけたことになります。

ここでは過剰適合は目標ではなく、副産物です。モデルはおそらくデータセットを表すものであり、必ずしも概念を表すものではありません。このモデルをテストセットで試した場合、パフォーマンスはおそらく低下し、オーバーフィットを示します。

ただし、モデルが概念を表現できないのは、モデルの容量だけではありません。NNが線形であり、概念が線形でない場合のように、概念がモデルによって表される関数のファミリーに属していない可能性があります。入力がサンプル間で異なるほど十分ではないか、最適化アルゴリズムが適切な解決策を見つけられなかった可能性があります。

あなたの場合、予測子は2つしかありません。それらがバイナリの場合は、2つをあまり表現できなかった可能性が高いです。それらが有界でスムーズであると仮定すると、それらをビンに入れることができます。ビン(たとえば、50%から50%の分布を持つビン)で高いエントロピーが得られる場合、これらの機能のみを中継するロジックはそれらを区別できません。


お返事をありがとうございます。モデルの「容量」が十分に大きくないため、(R2を1に近づけるという意味で)オーバーフィットすることはできませんか?NNが使用している関数について:「linout = T」を指定する必要があります-これは、使用しているNNが線形関数に制限されていることを意味します。これが、アルゴリズムがうまく適合できない理由である可能性がありますトレーニングセット?
Requin 2017年

通常、必要な容量を見積もるために、過剰適合に到達しようとします。これは、十分な容量があれば、モデルが実際にデータセットを表すことができる場合に機能します。あなたは小さなデータセットを持っているので、容量はあなたの問題ではないと私は信じています。中途半端になるのは、回答で提案されているビンを使用して確認できる入力が不足しているためです。別の考えられる理由は、異常なサンプルです。電車の中でどのレベルのパフォーマンスに到達しますか。線形関数については、それは一般的な可能性であり、ケースに固有ではありませんでした。私はこのライブラリを使用しておらず、そのパラメータに精通していません。
DaL 2017年

1

同じ問題があり、正則化と最適な学習率をゼロに保ちました。しかし、学習率の減衰はゼロに設定されました。学習率の減衰を0.95のような値に設定すると、機能し、エポックの数が増えます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.