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

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

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

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

深層学習

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

機械学習

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

Q&A

解決済

1回答

10879閲覧

ResNetが勾配問題を解決する理由

a_boy

総合スコア54

Keras

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

深層学習

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

機械学習

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

0グッド

3クリップ

投稿2019/06/01 09:51

編集2019/06/01 10:10

ResNetを使った学習によって勾配消失が解消できるという原理がいまいち理解できないでいます。
こちらのスライドの11ページには

H(x) = F(x) + xという関数を通すが、この微分が1に非常に近く、勾配計算時に他のノードをほぼ素通りできるから。

との記述があるのですが、まず計算時にこのH(x)の微分をなぜ計算するのかかがわかりません。

普通のDenseレイヤーをつかった勾配の計算時(損失関数を各重み・バイアスで偏微分した値を計算するとき)では、主に重要となるのは活性化関数を微分した値であり、このようなH(x)にあたる値を微分することもなかったので、なぜResNetではH(x)を微分するのか、と思ってしまいます。

またこちらのサイトのResNetについて説明したパートでは、

逆伝播の際に出力層側から誤差をそのまま入力層側に伝えることで、勾配が消失しにくいネットワーク構造をつくっていると考えることができます。

と書かれていますが、これはF(x)を誤差逆伝播における「誤差」とみなすことでこれを用いて各勾配を求めていくという意味でしょうか?
だとするとはじめに引用したサイトに書かれていた、「微分をする」という計算は行われないので、上記二つのサイト間で矛盾があるように思います。

非常に伝わりづらい質問になってしまい申し訳ないのですが、わかる方がおられればお答えいただきたく思います。

上記の質問と少し内容は異なるのですが、ResNetはCNN以外にも使われるのですか?
こちらも併せてご回答いただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

1つ目の質問について

ResNetを使った学習によって勾配消失が解消できるという原理がいまいち理解できないでいます。

原論文 Deep Residual Learning for Image Recognition を参照してください。
ResNet が勾配消失問題は言及されているものの、それを解決するために ResNet を開発したとは一言も書かれていません。ResNet で取り組んだ問題は「degradation 問題」と言われるものです。

In this paper, we address the degradation problem by

introducing a deep residual learning framework.

訳: この論文では、残差学習の仕組みを導入することで劣化問題に取り組みました。

Is learning better networks as easy as stacking more layers?
An obstacle to answering this question was the notorious problem of vanishing/exploding gradients [1, 9], which hamper convergence from the beginning. This problem, however, has been largely addressed by normalized initialization [23, 9, 37, 13] and intermediate normalization layers

[16], which enable networks with tens of layers to start converging for stochastic gradient descent (SGD) with backpropagation [22].

層を深くすることにより生じる問題として「勾配消失問題」「劣化 (degradation) 問題」の2つが挙げられており、勾配消失問題に関しては、ResNet が作られた時点でこの問題は広く研究されており、初期化方法や正規化によりほぼ解決していると書かれています。

When deeper networks are able to start converging, a

degradation problem has been exposed: with the network
depth increasing, accuracy gets saturated (which might be
unsurprising) and then degrades rapidly.

もう1つの「劣化問題」とは、勾配消失が起こらず学習できるが、層が深くすると却って精度が劣化してしまう問題と書かれています。

層を深くすれば、パラメータが増えるので、少なくとも層が浅いモデルより表現力が増えるので精度が悪化することはないはずなのに、実際はなってしまう。

degradation is not caused by overfitting
We argue that this optimization difficulty is unlikely to

be caused by vanishing gradients

(「学習誤差の問題なので過学習は関係ない」、「逆伝搬時のデルタのノルムを確認することで勾配消失が原因ではない」ことも確認されています。)

ResNet の著者はこの問題の原因を「恒等写像を学習するのが難しいのが原因で、shortcut を加えれば、問題が簡単になり学習しやすくなるのではないか」と推測し、実際、実験により効果が確かめられたというのがこの論文の趣旨です。

Deep Learning - ResNet の仕組みについて

2つ目の質問について

上記の質問と少し内容は異なるのですが、ResNetはCNN以外にも使われるのですか?

基本的には CNN でしか使われていないです。
(CNN 以外 (例えば、全結合層のみのモデルなど) で何十層も深くすることはないので)

投稿2019/06/03 10:33

編集2019/06/03 10:34
tiitoi

総合スコア21960

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問