凸性
回帰において、解析解を考えたとき、偏微分係数が であることが必要である。しかし、これが必要十分条件であることは述べていない。しかし、平均二乗誤差関数の凸性から、偏微分係数が であることは最適解の十分条件となる。ここではそれを示していく。
凸関数
が以下の条件を満たすとき、 は凸関数(convex function)であるという。
凸関数は任意の二点を結ぶ線分が関数のグラフの上に位置する関数である。凸関数の判定については以下の定理がある。
主張
が微分可能な関数であるとき、任意の に対して
が成り立つとき、 は凸関数である。
証明
任意の 、 に対して、
とおく。すると、上記の仮定について を代入すると、
これらをそれぞれ 倍、 倍して足し合わせると、
よって、 は凸関数である。
以下に、凸関数の証明に用いるためのいくつかの定義を示す。
が二階微分可能な関数であるとき、 のヘッセ行列(Hessian matrix) は以下で定義される。
ヘッセ行列は が 級関数であるとき、対称行列となる。(なぜなら、そのとき であるから)
対称行列 がある内積空間 の全ての に対して
を満たすとき、 は半正定値行列(positive semidefinite matrix)であるという。
現在考えている標準内積空間においては半正定値行列の定義は
であることをいう。
主張
が 階微分可能な関数であるとき、任意の に対して、ある が存在して、
が成り立つ。
証明
略
主張
が 級な関数であるとき、 のヘッセ行列 が半正定値行列であるならば、 は凸関数である。
証明
任意の に対して、
とおく。すると、 は 級な関数であり、テイラーの定理より、ある が存在して、
ここで、連鎖律より、
である。これらを用いると、
さて、ヘッセ行列 は半正定値行列であるから、
である。よって、
が成り立つ。したがって、凸関数の一階微分による判定より、 は凸関数である。
平均二乗誤差関数の凸性
ここまでで凸関数の定義とその判定方法を示した。次に、平均二乗誤差関数が凸関数であることを示すためにヘッセ行列について考えたい。
が各成分 で表されるベクトル値関数であるとき、つまり、
であるとき、 の勾配(gradient) は以下で定義される。
この定義は自然であり、基本的にスカラー値関数に関する微分規則がそのまま適用できる。
主張
が二階微分可能な関数であるとき、 のヘッセ行列 は勾配 の勾配を取ることで計算できる。
証明
の勾配 は
であった。導関数 とおくと、 はベクトル値関数なので
である。ここで、 であるから、これはヘッセ行列と一致する。
すでに、平均二乗誤差関数の一階微分については
であることを示した。これを用いてヘッセ行列を計算すると、
である。ここで、任意の に対して、
であるから、ヘッセ行列 は半正定値行列である。したがって、凸関数の二階微分による判定より、平均二乗誤差関数 は凸関数であることが示された。
勾配法
回帰分析では、損失関数(平均二乗誤差)を最小化するパラメータを数学的に求めていたが、より複雑なケースではそれらは通用しないことがある。主に二つの理由がある。
- 計算が困難である
- 計画行列 が大きくなると、行列積の計算が困難である。 の計算コストは説明変数の数 の二乗に比例する。
- 逆行列を求めることが困難である。 の正方行列の逆行列の計算量は である。
- 数学的に解けない。解析解が存在しない
非線形モデルや正則化項を含む場合、損失関数が凸関数でなくなることがある。この場合、解析的に最適解を求めることができない。
これらの問題を解決するために、勾配法(gradient method)が用いられる。勾配法は、損失関数の勾配を用いて、最適解に向かってパラメータを更新していく反復的な手法である。最適なパラメータ(解という)を直接計算するのではなく、何度もパラメータを更新して解に近づいていくのである。ここでは、最も基本的な勾配降下法(gradient descent)について説明する。
勾配降下法
勾配降下法は、損失関数の勾配を用いてパラメータを更新していく手法である。損失関数 を下げることを考えたい。現在のパラメータ について
であるならこれは が から増加すると損失関数が増加することを意味する。したがって、損失関数を下げるためには を減少させる必要がある。逆に、
であるならこれは が から増加すると損失関数が減少することを意味する。したがって、損失関数を下げるためには を増加させる必要がある。これらをまとめると、損失関数を下げるためには
と更新すればよい。ここで、 は更新幅または学習率(learning rate)と呼ばれるパラメータであり、更新の大きさを調整する役割を持つ。また、 は次のパラメータである。これをパラメータ全体 に対して行うと、
となる。この更新式が正確に動くことを確かめてみよう。すなわち、 が成り立つことを示す。 を
とお。 は 級関数であるから、テイラーの定理より、ある が存在して、
ここで、 と が十分に近いとき、
なる近似が成り立つ。したがって、
が成り立つ。よって、勾配降下法の更新式は損失関数を下げることが示された。ただ、これが成り立つのは と が十分に近いときである。したがって、学習率 が大きすぎるとこの近似が成り立たなくなり、損失関数が増加してしまうことがある。また、学習が進むにつれて必要な の小ささも変化するため、反復していくうちに飛び越えてしまうこともある。これらを防ぐために、学習率を徐々に小さくしていく手法や、モーメンタムを導入する手法などがあるが、ここでは詳述しない。
重回帰分析における勾配降下法
重回帰分析において、勾配降下法の更新式を考えてみると であったから、
となる。
確率的勾配降下法
勾配降下法は全てのデータ点を用いて勾配を計算するため、データセットが大きい場合、計算コストが高くなる。これを改善するために、確率的勾配降下法(stochastic gradient descent, SGD)が用いられる。SGDでは、各反復でランダムに選ばれた一つのデータ点(またはミニバッチ)を用いて勾配を計算し、パラメータを更新する。これにより、各反復の計算コストが大幅に削減される。
訓練データ が与えられたとき、その損失関数は各事例に対する損失 の和あるいは平均として表されることが多い。
これを分解可能目的/損失(decomposable objective/loss)と呼ぶ。例えば、平均二乗誤差関数は 現在、考えられている損失関数のうち大部分は分解可能である。なぜなら、事例間にの独立性を仮定する、つまり訓練データは大きな母集団から独立にサンプリングされたと考えることが多いからである。一方で、そうではない損失もありそれらは非分解可能目的/損失(non-decomposable objective/loss)と呼ばれる。例えば、ランキング学習における損失関数などがある。
ここでは分解可能な損失関数に対してSGDを適用する方法を示す。各事例に対する損失関数 の勾配を とすると、損失関数 の勾配は
である。SGDでは、各反復でランダムに選ばれた事例 に対して、
と近似し、パラメータを更新する。すなわち、
と更新する。これにより、各反復の計算コストが大幅に削減される。
ミニバッチ確率的勾配降下法
SGDでは各反復で一つの事例を用いて勾配を計算するが、これにより勾配の分散が大きくなり、収束が遅くなることがある。これを改善するために、ミニバッチ学習(mini-batch learning)が用いられる。ミニバッチ学習では、各反復でランダムに選ばれた複数の事例(ミニバッチ)を用いて勾配を計算し、パラメータを更新する。ミニバッチ学習も確率的勾配降下法の一種である。これにより、勾配の分散が減少し、収束が速くなることがある。具体的には、ある反復で選ばれたミニバッチ を用いて、
と更新する。ここで、ミニバッチのサイズ はハイパーパラメータとして設定される。
重回帰分析における確率的勾配降下法
ミニバッチサイズを の場合、非ミニバッチの確率的勾配降下法であるのでここでは一般的にミニバッチ確率的勾配降下法について述べる。重回帰分析において、平均二乗誤差関数は
であった。各事例に対する損失関数 は
のように分解可能である。したがって、その勾配は
である。ミニバッチ確率的勾配降下法の更新式は
となる。ただし、 はミニバッチ に対応する計画行列、 はミニバッチ に対応する目的変数ベクトルである。 とし、 に選ばれた事例のインデックスを とすると、
である。
勾配法の収束性
勾配法の収束性については様々な研究がなされている。一般に、損失関数が凸関数であり、学習率が適切に選ばれている場合、勾配降下法は全体で最も良い解に収束することが知られている。この解を大域的最適解(global optimum)と呼ぶ。一方で、損失関数が非凸関数である場合、勾配降下法は局所的に最も良い解に収束することがある。この解を局所的最適解(local optimum)と呼ぶ。局所的最適解は大域的最適解とは異なる場合があるため、注意が必要である。
深層学習では、損失関数が非凸関数であることが多いが、勾配法は実際には良好な性能を示すことが多い。これは、深層学習における損失関数の特性や、勾配法のランダム性などが影響していると考えられている。