.. _chap_classification_generalization: 分類における汎化 ================ これまで、複数出力と softmax 関数をもつ(線形)ニューラルネットワークを訓練することで、多クラス分類問題にどう取り組むかに焦点を当ててきた。 モデルの出力を確率的予測として解釈し、モデルが(固定されたパラメータ集合に対して)実際のラベルに割り当てる負の対数尤度を計算する交差エントロピー損失関数を動機づけ、導出した。 そして最後に、これらの道具を実際に用いて、訓練集合に対してモデルを当てはめた。 しかし、いつものように、私たちの目標は、これまで見たことのないデータ(テスト集合)で経験的に評価される *一般的なパターン* を学習することである。 訓練集合で高い精度を達成しても、それ自体には何の意味もない。 各入力が一意である場合(そして実際、高次元データセットの大半ではこれは真です)には、最初の訓練エポックでデータセットを丸暗記し、その後は新しい画像を見るたびにラベルを引き当てるだけで、訓練集合に対して完全な精度を達成できる。 しかし、訓練例それぞれに対応する正確なラベルをそのまま記憶しても、新しい例をどう分類すべきかは分からない。 さらなる指針がなければ、新しい例に遭遇するたびに、私たちはランダムに推測するしかないかもしれない。 差し迫ったいくつかの疑問に、すぐに答える必要がある。 1. 母集団全体における分類器の精度をよく推定するには、どれくらいのテスト例が必要だろうか? 2. 同じテスト集合でモデルを繰り返し評価し続けると、何が起こるだろうか? 3. なぜ、線形モデルを訓練集合に当てはめることが、素朴な丸暗記方式よりもうまくいくと期待できるのだろうか? :numref:`sec_generalization_basics` では線形回帰の文脈で過学習と汎化の基礎を紹介したが、本章ではもう少し踏み込み、統計的学習理論の基礎的な考え方をいくつか導入する。 実は、汎化を *a priori* に保証できることがしばしばある。 多くのモデルについて、そして汎化ギャップ :math:`\epsilon` に対する任意の上界を指定すると、訓練集合が少なくとも :math:`n` 個のサンプルを含むなら経験誤差が真の誤差から :math:`\epsilon` 以内に収まるような、必要サンプル数 :math:`n` をしばしば決定できる。 しかもそれは、\ *どのようなデータ生成分布に対しても* 成り立ちる。 残念ながら、こうした保証は知的な構成要素としては非常に重要である一方で、深層学習の実践者にとっては実用上の価値が限られていることも分かっている。 要するに、こうした保証は、深いニューラルネットワークの汎化を *a priori* に保証するには、ばかげたほど大量のデータ例(おそらく兆単位、あるいはそれ以上)が必要であることを示唆する。 一方で、私たちが関心を持つタスクでは、深いニューラルネットワークがはるかに少ないデータ例(数千程度)で驚くほどよく汎化することも分かっている。 そのため深層学習の実践者は、\ *a priori* の保証を完全に諦めることが多く、代わりに過去の類似問題でよく汎化した方法を用い、経験的評価を通じて *post hoc* に汎化を検証する。 :numref:`chap_perceptrons` では、汎化を再び取り上げ、深いニューラルネットワークが実際にうまく汎化する理由を説明しようとする膨大な科学文献への簡単な導入を行う。 テスト集合 ---------- すでにテスト集合を、汎化誤差を評価するためのゴールドスタンダードとして使い始めているので、まずはそのような誤差推定の性質について議論しよう。 ここでは、どのようにして得られたかは気にせず、固定された分類器 :math:`f` に注目する。 さらに、分類器 :math:`f` の訓練には使われていない、新しいデータ例からなるデータセット :math:`\mathcal{D} = {(\mathbf{x}^{(i)},y^{(i)})}_{i=1}^n` を持っていると仮定する。 :math:`\mathcal{D}` 上での分類器 :math:`f` の *経験誤差* とは、予測 :math:`f(\mathbf{x}^{(i)})` が真のラベル :math:`y^{(i)}` と一致しない事例の割合にすぎず、次の式で与えられる。 .. math:: \epsilon_\mathcal{D}(f) = \frac{1}{n}\sum_{i=1}^n \mathbf{1}(f(\mathbf{x}^{(i)}) \neq y^{(i)}). これに対して、\ *母集団誤差* とは、母集団全体における例の *期待* 割合です (確率密度関数 :math:`p(\mathbf{x},y)` で特徴づけられるある分布 :math:`P(X,Y)` において)、 そのデータ例に対して分類器が真のラベルと異なる予測をする割合の期待値である。 .. math:: \epsilon(f) = E_{(\mathbf{x}, y) \sim P} \mathbf{1}(f(\mathbf{x}) \neq y) = \int\int \mathbf{1}(f(\mathbf{x}) \neq y) p(\mathbf{x}, y) \;d\mathbf{x} dy. :math:`\epsilon(f)` は私たちが実際に知りたい量であるが、直接観測することはできない。 大きな母集団の平均身長を、全員を測定しない限り直接観測できないのと同じである。 私たちにできるのは、標本に基づいてこの量を推定することだけである。 テスト集合 :math:`\mathcal{D}` が母集団全体を統計的に代表しているため、\ :math:`\epsilon_\mathcal{D}(f)` を母集団誤差 :math:`\epsilon(f)` の統計的推定量とみなせる。 さらに、私たちが関心を持つ量 :math:`\epsilon(f)` は(確率変数 :math:`\mathbf{1}(f(X) \neq Y)` の)期待値であり、対応する推定量 :math:`\epsilon_\mathcal{D}(f)` は標本平均なので、母集団誤差の推定は、 :numref:`sec_prob` で見た古典的な平均推定の問題にすぎない。 確率論における重要な古典的結果である *中心極限定理* は、平均 :math:`\mu` と標準偏差 :math:`\sigma` をもつ任意の分布から引かれた :math:`n` 個のランダムサンプル :math:`a_1, ..., a_n` があるとき、サンプル平均 :math:`\hat{\mu}` は、サンプル数 :math:`n` が無限大に近づくにつれて、真の平均を中心とし標準偏差が :math:`\sigma/\sqrt{n}` の正規分布に近づくことを保証する。 これだけでも重要なことが分かりる。 データ例の数が大きくなるにつれて、テスト誤差 :math:`\epsilon_\mathcal{D}(f)` は真の誤差 :math:`\epsilon(f)` に :math:`\mathcal{O}(1/\sqrt{n})` の速度で近づくはずである。 したがって、テスト誤差を 2 倍正確に推定したければ、4 倍大きいテスト集合を集めなければならない。 テスト誤差を 100 分の 1 に減らしたければ、1 万倍大きいテスト集合を集める必要がある。 一般に、このような :math:`\mathcal{O}(1/\sqrt{n})` の速度は、統計で期待できる最良のものである。 テスト誤差 :math:`\epsilon_\mathcal{D}(f)` が真の誤差 :math:`\epsilon(f)` に収束する漸近的な速度について分かったので、いくつかの重要な詳細に目を向けよう。 関心のある確率変数 :math:`\mathbf{1}(f(X) \neq Y)` は 0 と 1 の値しか取れないので、ベルヌーイ確率変数である。 その特徴は、1 を取る確率を表すパラメータによって決まりる。 ここで 1 は分類器が誤りを犯したことを意味するので、この確率変数のパラメータは実際には真の誤り率 :math:`\epsilon(f)` である。 ベルヌーイ分布の分散 :math:`\sigma^2` は、そのパラメータ(ここでは :math:`\epsilon(f)`\ )に応じて :math:`\epsilon(f)(1-\epsilon(f))` という式で与えられる。 :math:`\epsilon(f)` は最初は未知であるが、1 を超えることはない。 この関数を少し調べると、分散は真の誤り率が 0.5 に近いときに最大となり、0 や 1 に近いときにはずっと小さくなりうることが分かりる。 これは、誤差 :math:`\epsilon(f)` の推定値 :math:`\epsilon_\mathcal{D}(f)` の漸近標準偏差が(\ :math:`n` 個のテストサンプルの選び方に関して)\ :math:`\sqrt{0.25/n}` を超えないことを意味する。 この速度が、有限個のサンプルしか持たない場合ではなく、テスト集合サイズが無限大に近づくときの振る舞いを特徴づけているという事実を無視すれば、テスト誤差 :math:`\epsilon_\mathcal{D}(f)` が母集団誤差 :math:`\epsilon(f)` を近似し、その 1 標準偏差が :math:`\pm 0.01` の区間に対応するようにしたければ、およそ 2500 サンプルを集めるべきだと分かりる。 その範囲に 2 標準偏差を収め、したがって :math:`\epsilon_\mathcal{D}(f) \in \epsilon(f) \pm 0.01` であると 95% の確信を持ちたければ、1 万サンプルが必要になる! これは、多くの機械学習ベンチマークにおけるテスト集合のサイズに相当する。 毎年、何千もの応用深層学習論文が、\ :math:`0.01` 以下の誤差率改善を大きく取り上げて発表されていると知ると、驚くかもしれない。 もちろん、誤差率が 0 にずっと近い場合には、\ :math:`0.01` の改善は確かに大きな意味を持ちえる。 ここまでの分析の厄介な点の一つは、実際には漸近的なこと、すなわち :math:`\epsilon_\mathcal{D}` と :math:`\epsilon` の関係がサンプルサイズの増加に伴ってどう変化するかしか教えてくれないことである。 幸いなことに、確率変数が有界であるため、Hoeffding(1963)による不等式を適用することで、有効な有限サンプル境界を得ることができる。 .. math:: P(\epsilon_\mathcal{D}(f) - \epsilon(f) \geq t) < \exp\left( - 2n t^2 \right). 推定値 :math:`\epsilon_\mathcal{D}(f)` と真の誤差率 :math:`\epsilon(f)` の距離 :math:`t` が :math:`0.01` を超えないことを 95% の信頼度で結論づけるために必要な最小データセットサイズを解くと、上の漸近解析が示唆した 10,000 例に対して、およそ 15,000 例が必要であることが分かりる。 統計をさらに深く学べば、この傾向は一般に成り立つことが分かるだろう。 有限サンプルでも成り立つ保証は、通常、やや保守的である。 とはいえ、全体として見ると、これらの数値はそれほど離れていない。 これは、厳密な法廷で通用する保証ではなくても、おおよその見積もりを与えるという漸近解析の一般的な有用性を反映している。 テスト集合の再利用 ------------------ ある意味では、これで経験的機械学習研究を進める準備は整った。 実用上のほとんどすべてのモデルは、テスト集合の性能に基づいて開発・検証されており、あなたは今やテスト集合の達人である。 任意の固定された分類器 :math:`f` について、そのテスト誤差 :math:`\epsilon_\mathcal{D}(f)` を評価する方法を知っており、その母集団誤差 :math:`\epsilon(f)` について何が言えて、何が言えないかを正確に理解している。 では、この知識を使って最初のモデル :math:`f_1` を訓練しようとしているとしよう。 分類器の誤り率の性能について、どれだけの確信が必要かを知っているので、上の解析を用いてテスト集合として確保すべき適切なデータ例の数を決める。 さらに、 :numref:`sec_generalization_basics` の教訓を真剣に受け止め、すべての予備解析、ハイパーパラメータ調整、さらには複数の競合するモデルアーキテクチャの選択までも検証集合上で行うことで、テスト集合の神聖さを守ったとしよう。 最後に、モデル :math:`f_1` をテスト集合で評価し、対応する信頼区間付きで母集団誤差の偏りのない推定値を報告する。 ここまではすべて順調に見える。 しかしその夜、あなたは午前 3 時に目を覚まし、新しいモデリング手法についての素晴らしいアイデアを思いつきる。 翌日、その新しいモデルを実装し、検証集合でハイパーパラメータを調整すると、新しいモデル :math:`f_2` は動くだけでなく、その誤り率は :math:`f_1` よりもかなり低いように見える。 しかし、発見の興奮は、最終評価の準備をするにつれて突然薄れていく。 テスト集合がないのです! 元のテスト集合 :math:`\mathcal{D}` はまだサーバ上にあるが、今や 2 つの大きな問題に直面している。 第一に、テスト集合を収集したとき、単一の分類器 :math:`f` を評価するという仮定のもとで必要な精度を決めていた。 しかし、同じテスト集合で複数の分類器 :math:`f_1, ..., f_k` を評価することにすると、偽発見の問題を考えなければならない。 以前は、単一の分類器 :math:`f` について :math:`\epsilon_\mathcal{D}(f) \in \epsilon(f) \pm 0.01` であると 95% の確率で言えるかもしれず、その場合、誤解を招く結果が出る確率はわずか 5% でした。 しかし :math:`k` 個の分類器が混在すると、そのうち少なくとも 1 つについてテスト集合上の性能が誤解を招くものでないことを保証するのは難しくなる。 20 個の分類器を検討していると、少なくとも 1 つが誤解を招くスコアを受け取っていない可能性を排除する力が、まったくないかもしれない。 この問題は多重仮説検定に関係しており、統計学には膨大な文献があるにもかかわらず、科学研究を悩ませ続ける根深い問題である。 それでも十分に心配でないなら、その後の評価で得られる結果を疑うべき特別な理由がある。 テスト集合の性能に関する私たちの解析は、分類器がテスト集合に一切触れずに選ばれたという仮定に基づいており、そのためテスト集合を母集団からランダムに抽出されたものとみなせた。 ここでは、複数の関数をテストしているだけでなく、後続の関数 :math:`f_2` は :math:`f_1` のテスト集合性能を観測した後に選ばれている。 一度テスト集合からの情報がモデル作成者に漏れたら、厳密な意味では、もはや真のテスト集合ではありえない。 この問題は *adaptive overfitting* と呼ばれ、近年、学習理論家や統計学者の間で強い関心を集める話題として浮上している :cite:`dwork2015preserving`\ 。 幸いなことに、ホールドアウト集合からすべての情報を漏らしてしまうことは可能であり、理論上の最悪ケースは暗いものであるが、こうした解析は保守的すぎるのかもしれない。 実践では、本物のテスト集合を作成し、それを参照する頻度をできるだけ少なくし、信頼区間を報告するときには多重仮説検定を考慮し、賭け金が高くデータセットサイズが小さいときには、より強く警戒するのがよいだろう。 一連のベンチマーク課題を実行するときには、各ラウンドの後に古いテスト集合を検証集合へ格下げできるよう、複数のテスト集合を維持するのがよい実践である。 統計的学習理論 -------------- 簡単に言えば、\ *テスト集合こそが私たちに本当にあるもの* である。 しかし、この事実は奇妙なほど満足感に欠ける。 第一に、私たちはめったに *真のテスト集合* を持たない。――もし私たち自身がデータセットを作成しているのでなければ、他の誰かがすでに、私たちが「テスト集合」だと思っているものに対して自分の分類器を評価している可能性が高いからである。 そして、たとえ先に使える立場にあったとしても、その後のモデリング試行を、数値を信頼できないというじわじわした不安なしに評価したいと、すぐに不満を感じるようになる。 さらに、真のテスト集合であっても、分類器が実際に母集団へ汎化したかどうかを *post hoc* に教えてくれるだけで、\ *a priori* に汎化すると期待すべき理由があるかどうかは教えてくれない。 こうした懸念を踏まえると、\ *統計的学習理論* の魅力が十分に見えてくるかもしれない。 これは機械学習の数学的な下位分野であり、その研究者たちは、経験データで訓練されたモデルがなぜ/いつ未見データへ汎化できるのかを説明する根本原理を明らかにしようとしている。 統計的学習研究の主要な目的の一つは、汎化ギャップを上界づけることであり、モデルクラスの性質とデータセット中のサンプル数との関係を明らかにすることである。 学習理論家は、学習された分類器 :math:`f_\mathcal{S}` の *経験誤差* :math:`\epsilon_\mathcal{S}(f_\mathcal{S})` と、同じ分類器の母集団全体における真の誤差 :math:`\epsilon(f_\mathcal{S})` との差を上界づけようとする。 ここで :math:`f_\mathcal{S}` は訓練集合 :math:`\mathcal{S}` 上で訓練され、かつ評価された分類器である。 これは、先ほど扱った評価問題に似ているが、大きな違いがある。 前節では、分類器 :math:`f` は固定されており、私たちに必要だったのは評価目的のデータセットだけでした。 そして実際、任意の固定された分類器は汎化する。 その誤差は、(これまで見たことのない)データセット上で母集団誤差の偏りのない推定値になる。 しかし、分類器が同じデータセットで訓練され、評価されるとき、私たちは何を言えるのだろうか? 訓練誤差がテスト誤差に近いと、いつ確信できるのだろうか? 学習された分類器 :math:`f_\mathcal{S}` が、あらかじめ指定された関数集合 :math:`\mathcal{F}` から選ばれなければならないとしよう。 テスト集合についての議論を思い出すと、単一の分類器の誤差を推定するのは簡単であるが、分類器の集合を考え始めると話が厄介になることが分かりる。 たとえ任意の 1 つの(固定された)分類器の経験誤差が高い確率で真の誤差に近いとしても、分類器の集合を考えると、そのうち *たった 1 つ* がひどく誤って推定された誤差を受け取る可能性を心配しなければならない。 懸念されるのは、そのような分類器を選んでしまい、母集団誤差を大きく過小評価してしまうことである。 さらに、線形モデルでさえ、パラメータが連続値であるため、通常は無限個の関数からなるクラス(\ :math:`|\mathcal{F}| = \infty`\ )から選んでいることになる。 この問題に対する野心的な解決策の一つは、\ *一様収束* を証明するための解析的道具を開発することである。すなわち、高い確率で、クラス内のすべての分類器 :math:`f\in\mathcal{F}` の経験誤差率が、その真の誤差率へ *同時に* 収束することを示すことである。 言い換えれば、少なくとも :math:`1-\delta` の確率で (ある小さな :math:`\delta` に対して)、 クラス :math:`\mathcal{F}` に属するすべての分類器の誤差率 :math:`\epsilon(f)` が、ある小さな量 :math:`\alpha` よりも大きく誤推定されない、と述べられる理論原理を求めているのである。 明らかに、こうした主張をすべてのモデルクラス :math:`\mathcal{F}` に対して行うことはできない。 常に経験誤差 0 を達成する一方で、母集団全体ではランダム推測を上回ることのない、丸暗記マシンのクラスを思い出そう。 ある意味で、丸暗記器のクラスは柔軟すぎるのである。 そのような一様収束結果は、到底成り立ちえない。 一方で、固定された分類器は役に立たない。――それは完全に汎化するが、訓練データにもテストデータにも適合しないからである。 したがって学習の中心問題は歴史的に、訓練データにはよく適合するが過学習の危険がある、より柔軟な(分散の高い)モデルクラスと、うまく汎化するが過小適合の危険がある、より硬直的な(バイアスの高い)モデルクラスとのトレードオフとして定式化されてきた。 学習理論における中心的な課題は、モデルがこのスペクトルのどこに位置するかを定量化し、それに対応する保証を与える適切な数学的解析を発展させることでした。 一連の画期的な論文で、Vapnik と Chervonenkis は、相対頻度の収束に関する理論を、より一般的な関数クラスへ拡張した :cite:`VapChe64,VapChe68,VapChe71,VapChe74b,VapChe81,VapChe91`\ 。 この流れの重要な貢献の一つが Vapnik–Chervonenkis(VC)次元であり、これはモデルクラスの複雑さ(柔軟さ)の一つの尺度を表す。 さらに、彼らの主要な結果の一つは、経験誤差と母集団誤差の差を、VC 次元とサンプル数の関数として上界づける。 .. math:: P\left(R[p, f] - R_\textrm{emp}[\mathbf{X}, \mathbf{Y}, f] < \alpha\right) \geq 1-\delta \ \textrm{ for }\ \alpha \geq c \sqrt{(\textrm{VC} - \log \delta)/n}. ここで :math:`\delta > 0` はこの境界が破られる確率であり、\ :math:`\alpha` は汎化ギャップの上界、\ :math:`n` はデータセットサイズである。 最後に、\ :math:`c > 0` は、被りうる損失のスケールのみに依存する定数である。 この境界の使い方の一つは、望ましい :math:`\delta` と :math:`\alpha` の値を代入して、どれだけのサンプルを集めるべきかを決めることである。 VC 次元は、任意の(二値の)ラベル付けを割り当てることができ、かつその各ラベル付けに一致するモデル :math:`f` がクラス内に存在するような、データ点の最大数を定量化する。 たとえば、\ :math:`d` 次元入力に対する線形モデルの VC 次元は :math:`d+1` である。 2 次元で 3 点に対しては、直線が任意のラベル付けを実現できることは容易に分かりるが、4 点に対してはできない。 残念ながら、この理論はより複雑なモデルに対しては過度に悲観的になりがちで、この保証を得るには、実際に望ましい誤差率を達成するのに必要な数よりもはるかに多くのデータ例が通常必要になる。 また、モデルクラスと :math:`\\delta` を固定すると、誤差率はやはり通常の :math:`\\mathcal{O}(1/\\sqrt{n})` の速度で減少することに注意されたい。 :math:`n` の観点では、これ以上うまくやれるとは思えない。 しかし、モデルクラスを変えると、VC 次元は汎化ギャップについて悲観的な見方を与えることがある。 まとめ ------ モデルを評価する最も直接的な方法は、これまで見たことのないデータからなるテスト集合を参照することである。 テスト集合による評価は真の誤差の偏りのない推定値を与え、テスト集合が大きくなるにつれて望ましい :math:`\mathcal{O}(1/\sqrt{n})` の速度で収束する。 近似的な信頼区間は、厳密な漸近分布に基づいて、あるいは(より保守的な)有限サンプル保証に基づいて、有効な有限サンプル信頼区間として与えられる。 実際、テスト集合による評価は現代機械学習研究の基盤である。 しかし、テスト集合は真のテスト集合であることはまれです(複数の研究者によって何度も使われるため)。 同じテスト集合が複数のモデルの評価に使われると、偽発見の制御が難しくなることがある。 これは理論上、大きな問題を引き起こしえる。 実践では、この問題の重大さは、対象となるホールドアウト集合のサイズや、それが単にハイパーパラメータ選択に使われるだけなのか、それともより直接的に情報が漏れているのかに依存する。 それでも、本物のテスト集合(あるいは複数)を整備し、どれくらいの頻度で使うかについてはできるだけ保守的であるのがよい実践である。 より満足のいく解決策を提供しようとして、統計的学習理論家たちは、モデルクラス全体にわたる一様収束を保証する方法を開発してきた。 もし本当に、すべてのモデルの経験誤差が同時に真の誤差へ収束するなら、訓練誤差を最小化して最もよく性能を示すモデルを自由に選んでも、それがホールドアウトデータ上でも同様によく性能を示すと分かっていることになる。 重要なのは、そのような結果は必ずモデルクラスの何らかの性質に依存するということである。 Vladimir Vapnik と Alexey Chernovenkis は VC 次元を導入し、VC クラスに属するすべてのモデルに対して成り立つ一様収束結果を提示した。 クラス内のすべてのモデルの訓練誤差は、(同時に)その真の誤差に近いことが保証され、さらに :math:`\mathcal{O}(1/\sqrt{n})` の速度でより近づくことが保証される。 VC 次元の革命的な発見に続いて、数多くの代替的な複雑さ尺度が提案され、それぞれが同様の汎化保証を可能にした。 関数の複雑さを測るいくつかの高度な方法についての詳細な議論は :cite:t:`boucheron2005theory` を参照されたい。 残念ながら、これらの複雑さ尺度は統計理論では広く有用な道具となった一方で、深いニューラルネットワークがなぜ汎化するのかを説明するためには、(そのまま適用すると)無力であることが分かっている。 深いニューラルネットワークはしばしば数百万個以上のパラメータを持ち、大量の点にランダムなラベルを容易に割り当てることができる。 それにもかかわらず、実用上の問題ではよく汎化し、しかも驚くべきことに、VC 次元が高くなるにもかかわらず、より大きくより深いほど、しばしばよりよく汎化する。 次章では、深層学習の文脈で汎化を再び取り上げる。 演習 ---- 1. 固定されたモデル :math:`f` の誤差を :math:`0.0001` 以内で、かつ 99.9% を超える確率で推定したいとき、何個のサンプルが必要だろうか? 2. ある人がラベル付きテスト集合 :math:`\mathcal{D}` を持っており、ラベルなしの入力(特徴量)だけを公開しているとする。 いま、各ラベルなし入力に対してモデル :math:`f`\ (モデルクラスに制限はない)を実行し、対応する誤差 :math:`\epsilon_\mathcal{D}(f)` を受け取ることでしか、テスト集合のラベルにアクセスできないとする。 テスト集合全体を漏らしてしまい、その結果、真の誤差に関係なく誤差 0 であるかのように見せられるようになるまでに、何個のモデルを評価する必要があるだろうか? 3. 5 次多項式のクラスの VC 次元はいくつだろうか? 4. 2 次元データ上の軸平行長方形の VC 次元はいくつだろうか?