75

第4章

数値計算

総じて機械学習のアルゴリズムは膨大な量の計算を必要とする.これは典型的には数学的
問題に対して正しい解を記号表現として与える数式を解析的に導出するのではなく,逐次的
に解の推定値を更新することで問題を解くアルゴリズムのことを指す.よくある処理として
は最適化(関数を最大化あるいは最小化する引数の値を見つける)や連立一次方程式の求解
がある.デジタルなコンピュータ上では数学的関数を評価することですら難しいことがある.
なぜなら実数を扱う関数は有限なメモリを使って正確に表現できないからである.

4.1 オーバーフローとアンダーフロー
デジタルコンピュータ上で連続値の計算を実行する場合,その基本的な難点は無数にある実
数を有限のビットパターンで表現しなければならないという点である.ほとんどすべての実
数についてコンピュータで数値を表現した場合に近似による誤差が発生する.この誤差は多
くの場合丸め誤差である.丸め誤差は特に計算を多数回組み合わせるときに問題となる.丸
め誤差の累積を小さくするようにアルゴリズムが設計されていなければ理論的には動作する
はずのアルゴリズムでも実際には動作しなくなる場合がある.

特に問題となる丸め誤差の 1 つにアンダーフロー(underflow)がある.アンダーフロー
は 0 に近い数値が 0 に丸められてしまうことで発生する.引数が正の小さい値ではなく 0 の
場合,多くの関数は定性的に異なる動作をする.通常は例えばゼロ除算(これが生じると例
外を発生させるソフトウェア環境もあれば NaN を返すものもある)や 0 の対数(通常これは
−∞ として扱われ,さらに他の数値演算でこの値を使用すると NaN になる)は避けたい事象
である.
第 4. 数値計算

もう 1 つ大きく問題となる数値誤差にオーバーフロー(overflow)がある.オーバーフ
ローは巨大な数値が ∞ あるいは −∞ に近似されるときに発生する.さらに計算を実行する
とこの無限大の数値は通常 NaN になる.

アンダーフローやオーバーフローに対して安定した動作が求められる関数の一例としてソ
フトマックス関数が挙げられる.ソフトマックス関数はマルチヌーイ分布の予測に使用され
ることが多い.ソフトマックス関数の定義は次の通りである.

exp(xi )
softmax(x)i = !n . (4.1)
j=1 exp(xj )

1
ここですべての xi がある定数 c に等しいとどうなるかを考える.解析的には出力はすべて n
になるはずだと分かる.数値計算的には c が非常に大きい場合そうはならない可能性がある.
もし c が非常に大きな負の値であれば exp(c) ではアンダーフローを生じる.この場合ソフト
マックス関数の分母は 0 となり,最終的な結果は未定義となる.c が非常に大きな正の値の場
合,exp(c) はオーバーフローしこれも同様に結果は未定義となる.この問題はいずれも代わ
りに z = x − maxi xi として softmax(z) を計算することで解決できる.ソフトマックス関数
の値は入力ベクトルから定数を加減しても変化しないことが解析的に簡単な代数計算で示さ
れる.入力ベクトルから maxi xi を引くと exp の引数の最大値は 0 となりその結果オーバー
フローの可能性は無くなる.また同様に分母は最低でも一つの項が 1 となる.したがってア
ンダーフローの可能性も無くなり結果としてゼロ除算が発生することもない.

他にもまだ小さな問題がある.分子がアンダーフローしてしまうと計算結果が 0 と評価
されてしまう.log softmax(x) の実装において最初にソフトマックスのサブルーチンを実
行しその結果を log 関数に渡す場合,誤って −∞ が得られる可能性がある.その代わり
log softmax を数値的に安定した方法で計算する別の関数を実装する必要がある.これにはソ
フトマックス関数を安定化させるために利用したものと同じトリックが使用できる.

本書で説明している様々なアルゴリズムを実装する際に注意すべき数値計算上の考慮事
項はほとんどの場合詳述されていない.低レベルのライブラリの開発者は深層学習のアル
ゴリズムを実装する際に数値的な問題を念頭に置くべきである.本書の大部分の読者は安
定的な実装を提供する低レベルのライブラリを単に利用すればよいだろう.場合によって
は新しいアルゴリズムを実装する際にその実装を自動的に安定させることが可能である.
Theano (Bergstra et al., 2010; Bastien et al., 2012) は深層学習での利用の際に発生する数
値計算上不安定な計算式の多くを自動的に検知して安定化させるソフトウェアパッケージの
一例である.

76
第 4. 数値計算

4.2 悪条件
条件(Condition)とは入力値の小さな変化に対して関数がどれだけ急激に変化するかを表
すものである.入力値がわずかに変化するだけで急激に変化する関数は入力値の丸め誤差が
出力に大きな変化をもたらすため科学的な計算をする上では問題となる.

次の関数 f (x) = A−1 x を考える.A ∈ Rn×n が固有値分解できる場合,この関数の条件
数(condition number)は以下で表される.
! !
! λi !
max !! !! (4.2)
i,j λj

これは最大固有値と最小固有値の大きさの比である.この値が大きい場合,逆行列は入力値
の誤差に特に敏感となる.

この敏感さは行列そのものに固有の性質であり逆行列の計算中に生じた丸め誤差によるも
のではない.悪条件の行列の場合,その逆行列を掛けると既存の誤差は増幅する.実際には
逆行列の計算自体によって誤差はさらに蓄積される.

4.3 勾配に基づく最適化
深層学習のアルゴリズムではほとんどの場合にある種の最適化をおこなう.最適化とは x
を変更することで関数 f (x) の最小化あるいは最大化を行う処理のことである.通常ほとんど
の最適化問題は関数 f (x) の最小化を指す.最大化は −f (x) の最小化問題として実現できる
場合がある.

最小化あるいは最適化したい関数のことを目的関数(Objective Function)あるいは基
準(criterion)と呼ぶ.これを最小化する場合はコスト関数(cost function),損失関数
(loss function),あるいは誤差関数(error function)とも呼ぶこともある.本書ではこ
れらの単語を同列に扱うが他の機械学習の本ではそれぞれの単語に特別な意味を持たせてい
る場合もある.

関数を最小化あるいは最大化する値には上に ∗ をつけて表すことが多い.例えば x∗ =
arg min f (x) のように書く.

既に読者は微積分に精通していると想定しているが微積分の概念が最適化にどのように関
係しているかをここで簡単に説明する.

77
第 4. 数値計算

2.0

1.5 Global minimum at x = 0.
Since f 0 (x) = 0, gradient
descent halts here.
1.0

0.5

0.0
For x < 0, we have f 0 (x) < 0, For x > 0, we have f 0 (x) > 0,
so we can decrease f by so we can decrease f by
0.5 moving rightward. moving leftward.

1.0
f (x) = 12 x2
1.5
f 0 (x) = x
2.0
2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2.0
x
図 4.1: 勾配降下法.勾配降下法が関数の下り坂に沿って極小値に到達するために微分をどう利用するか
示した図.

関数 y = f (x) を考える.ここで x と y は共に実数である.この関数の微分(Derivative)
dy
を f ′ (x) あるいは dx と表す.微分 f ′ (x) は f (x) の点 x における勾配を与える.言い換
えると,微分によって入力値の微小な変化に対応する出力値の変化が得られる.つまり
f (x + ϵ) ≈ f (x) + ϵf ′ (x) である.

したがって微分は関数を最小化するのに有用である.なぜなら y を少しだけ改善するに
はどのように x を変化させればよいかが分かるからである.例えば f (x − ϵ sign(f ′ (x))) は
ϵ が十分小さい場合,f (x) よりも小さくなる.したがって x を微分の符号と反対の方向に
小さいステップだけ動かすことで f (x) を減少させることができる.この手法は勾配降下法
(gradient descent)(Cauchy, 1847) と呼ばれる.図4.1にこの手法の例を示す.

f ′ (x) = 0 の場合,微分からはどちらの方向に移動すべきか分からない.f ′ (x) = 0 である
点は臨界点(critical points)あるいは停留点(stationary points)として知られる.f (x)
がその点の近傍にあるすべての点の値よりも小さい場合,その点を極小値(local minimum)
と呼ぶ.したがってその点から無限小だけ移動しても f (x) の値がさらに小さくなることはな
い.f (x) がその点の近傍にあるすべての点の値よりも大きい場合,その点を極大値(local
maximum)と呼ぶ.したがってその点から無限小だけ移動しても f (x) の値がさらに大き
くなることはない.臨界点の中には極大値にも極小値にもならない点がある.そのような点

78
第 4. 数値計算

Minimum Maximum Saddle point

図 4.2: 臨界点の種類.3 種類の臨界点それぞれを 1 次元で図示した例.臨界点は勾配が 0 の点である.
そのような点は近傍の点よりも値が小さい極小値,近傍の点よりも値が大きい極大値,あるいは近傍の
点に値が大きい点と小さい点の両方が存在する鞍点のいずれかになる.

は鞍点(saddle points)と呼ばれる.図4.2に,それぞれの臨界点の例を示す.

f (x) 全体で最も小さい値となる点を最小値(global minimum)という.関数の最小値は
1 つだけの場合も複数存在する場合もある.また,極小値であっても大域的最適解ではない場
合もありえる.深層学習での活用においては多くの最小ではない極小値と非常に平坦な領域
に囲まれた多くの鞍点を有する可能性がある関数を最適化することになる.これらの特徴が
あると最適化は非常に難しくなる.特に関数の入力が多次元の場合は難しい.そこで通常は
必ずしも真の最小値でなくても非常に小さな f の値を見つけることで十分とする. 図4.3に
例を示す.

入力が複数ある関数 f : Rn → R を最小化することがよくある.「最小化」の概念を意味あ
るものにするためには出力は依然としてただ1つ(スカラー)でなければならない.

複数の入力を持つ関数には偏微分(partial derivatives)の概念を用いる必要がある.

偏微分 ∂xi f (x) は点 x において変数 xi のみが増加した場合の f の変化量を表す.勾配
(gradient)は微分の概念をベクトルに関する微分へ一般化したものである.すなわち f の
勾配は f に関する偏微分すべてを要素とするベクトルであり,∇x f (x) と表す.勾配の i 番
目の要素は f の xi に関する偏微分である.多次元の場合,臨界点は勾配のすべての要素が 0
になる点である.

u(単位ベクトル)の方向に関する方向微分(directional derivative)は u 方向の f の
傾きを表す.言い換えると,方向微分は関数 f (x + αu) の α に関する微分を α = 0 で評価し

79
第 4. 数値計算

This local minimum
performs nearly as well as
the global one,
so it is an acceptable
f (x) halting point.
Ideally, we would like
to arrive at the global
minimum, but this
might not be possible.
This local minimum performs
poorly and should be avoided.

x

図 4.3: 近似的な最小化.極小値や鞍点が複数存在すると最適化アルゴリズムは最小値の探索に失敗する
ことがある.深層学習での活用では見つかった値が真の最小値でなくてもコスト関数の値が十分小さけ
れば通常はその解を受け入れる.


たものである.連鎖律を使用すると ∂α f (x + αu) は α = 0 の場合,u⊤ ∇x f (x) となる.

f を最小化するために f が最も速く減少する方向を見つけたい.これには方向微分を使用
することができる.

min u⊤ ∇x f (x) (4.3)
u,u⊤ u=1

= min ||u||2 ||∇x f (x)||2 cos θ. (4.4)
u,u⊤ u=1

ここで θ は u と勾配の間の角度である.||u||2 = 1 を代入し u に依存しない項を無視すると
この式は minu cos θ へと簡素化される.これは u と勾配が反対方向を向いているときに最小
になる.この場合は勾配は真っ直ぐ上り方向を向いており,負の勾配は真っ直ぐ下り方向を
向いている.負の勾配方向へ移動することで f を減少させることができる.この手法は最急
降下法(method of steepest descent),あるいは勾配降下法(gradient descent)と
して知られる.

最急降下法から以下のような新しい点が考えられる.

x′ = x − ϵ∇x f (x) (4.5)

ここで ϵ は学習率(learning rate)と呼ばれるステップ幅を決める正のスカラー値である.ϵ
の決め方には複数の方法がある.代表的な方法は ϵ を小さい定数にすることである.これによ
り方向微分が 0 になるステップ幅を求めることができる場合がある. 他には f (x − ϵ∇x f (x))
80
第 4. 数値計算

をいくつかの ϵ に対して計算し,評価関数の値が最小となるものを選択する方法もある.この
最後の戦略は直線探索(line search)と呼ばれる.

最急降下法は勾配の全要素が 0 になった場合(実際には 0 に非常に近くなった場合)に収
束する.場合によっては,この反復アルゴリズムを利用せず,∇x f (x) = 0 を x について解
くことで直接的に臨界点を求めることができる.

最急降下法は連続空間での最適化にしか使用できないが,より良い状態に向けて小さい
ステップの移動(近似的に最良の小さな移動)を繰り返すという一般的な考えは離散空間
に対しても適用できる.離散パラメータを取る評価関数を登っていく方法を山登り法(hill
climbing)(Russel and Norvig, 2003) という.

4.3.1 勾配を超えて:ヤコビ行列とヘッセ行列

入力も出力も共にベクトルである関数の偏微分をすべて求めなければならない場合がある.
そのような偏微分すべてを要素として持つ行列はヤコビ行列(Jacobian matrix)と呼ばれ
る.特に関数 f : Rm → Rn について f のヤコビ行列 J ∈ Rn×m は Ji,j = ∂
∂xj f (x)i と定義
される.

微分の微分が必要になる場合もある.これは二階微分と呼ばれる.例えば関数 f : Rn → R
∂2 d2
について xi に関する f の微分の xj に関する微分を ∂xi ∂xj f と表す.1 次元の場合 dx2 f を
f ′′ (x) と書くことができる.二階微分を使用することで入力を変化させた場合に一次微分が
どう変化するを求めることができる.これにより勾配に沿った 1 ステップの移動が勾配のみ
に基づいて予測した場合の改善を実際にもたらすかどうかが分かるため,二階微分は重要で
ある.二階微分は曲率(curvature)を測るものと考えることができる.二次関数について
考えるとしよう(実際に目にする関数の多くは二次関数ではないが,少なくとも局所的には二
次関数で良く近似できる).もしこの関数の二階微分が 0 ならば曲率は 0 になる.この場合,
関数は完全に平坦な直線でその値は勾配のみを利用して正確に予測することができる.もし
勾配が 1 ならステップ幅 ϵ で負の勾配方向に移動させるとコスト関数は ϵ の値だけ減少する.
二階微分が負の場合,関数は下向きに曲がることになる.したがって実際にはコスト関数は
ϵ の値より大きく減少する.最後に二階微分が正の場合は関数は上向きに曲がることになる.
したがって実際にはコスト関数は ϵ の値よりも小さく減少する.図4.4は勾配から予測される
コスト関数の値と真の値の関係に曲率の違いがどのように影響するかを示している.

関数の入力が多次元の場合,二階微分が多数存在する.これらの二階微分をまとめて行列
にしたものをヘッセ行列(Hessian matrix)と呼ぶ.H(f )(x) のヘッセ行列は次式で定義

81
第 4. 数値計算

Negative curvature No curvature Positive curvature

f (x)

f (x)

f (x)
x x x

図 4.4: 二階微分は関数の曲率を決定する.ここに曲率の違う二次関数の例を示す.点線は勾配法の 1
ステップで下方向へ移動する場合に勾配の情報のみから予測したコスト関数の値を示している.負の曲
率の場合,コスト関数の値は勾配で予測したものよりも大きく減少する.曲率が 0 の場合,勾配から予
測される減少値は正しい.曲率が正の場合,関数は予測よりもゆっくり減少し最終的には増加しはじめ
る.したがってステップ幅を大きくしすぎると意図せず関数を増加させることになってしまう.

される.
∂2
H(f )(x)i,j = f (x). (4.6)
∂xi ∂xj
ヘッセ行列は勾配のヤコビ行列と等価である.

二階微分が連続である領域ではどこでも微分演算子は可換である.つまり微分順序を入れ
替えることが可能であり,以下が成り立つ.

∂2 ∂2
f (x) = f (x). (4.7)
∂xi ∂xj ∂xj ∂xi
この場合 Hi,j = Hj,i となるためこのような点ではヘッセ行列は対称行列となる.深層学習に
関連して扱う関数の大部分は対称なヘッセ行列をほとんど至るところで持つ.ヘッセ行列は
実対称行列であるためヘッセ行列を実数の固有値の集合と固有ベクトルの直交基底に分解で
きる.単位ベクトル d で表現された方向に関する二階微分は d⊤ Hd である.d が H の固有
ベクトルである場合,この方向の二階微分は対応する固有値で与えられる.その他の d の方
向については方向二階微分はすべての固有値の加重平均(このときの重みは 0 ∼ 1 の間)で
あり,d との間の角度が小さい固有ベクトルほど重み付けが大きくなる.最大の固有値が最大
の二階微分を決定し,最小の固有値が最小の二階微分を決定する.

(方向)二階微分によって最急降下法の 1 ステップがどの程度うまく機能するかを予測でき
る.関数 f (x) について現在の点 x(0) の周りで二次のテイラー級数近似をすると次式のよう
82
第 4. 数値計算

になる.
1
f (x) ≈ f (x(0) ) + (x − x(0) )⊤ g + (x − x(0) )⊤ H(x − x(0) ). (4.8)
2
ここで g と H はそれぞれ x(0) における勾配とヘッセ行列である.学習率が ϵ の場合,新し
い点 x は x(0) − ϵg になる.これを上の近似式に代入すると以下のようになる.

1
f (x(0) − ϵg) ≈ f (x(0) ) − ϵg ⊤ g + ϵ2 g ⊤ Hg (4.9)
2
ここでは 3 つの項がある.それは関数の元の値,関数の傾きから予測される改善の値,そし
てこの関数の曲率に対応するために適用しなければならない補正値である.最後の項が大
きすぎると最急降下法のステップは実際には関数を登るように移動してしまうことがある.
g ⊤ Hg が 0 あるいは負の場合,テイラー級数近似では ϵ が無限に大きくなれば f は無限に
小さくなる.実際には大きい ϵ に対してテイラー級数近似は正確ではなくなるためこの場合
はもっとヒューリスティックな方法を選択する必要がある.g ⊤ Hg が正の場合,関数のテイ
ラー級数近似を減少させる最適なステップ幅は次式で求めることができる.

g⊤ g
ϵ∗ = . (4.10)
g ⊤ Hg
最悪の場合は g が H の最大固有値 λmax に対応する固有ベクトルと同じ方向の場合で,その
1
最適なステップ幅は λmax となる.最小化する関数が二次関数で良く近似できる場合はこのよ
うにヘッセ行列の固有値で学習率の大きさを決定することができる.

二階微分を使って臨界点が極大値,極小値,鞍点のいずれであるか判断できる.臨界点では
f (x) = 0 であることを思い出そう.二階微分で f ′′ (x) > 0 の場合,一次微分 f ′ (x) は右側に

移動すれば増加し左側に移動すれば減少する.つまり十分小さい ϵ に対して f ′ (x − ϵ) < 0 で
あり, f ′ (x + ϵ) > 0 である.言い換えると,傾斜は右方向には上を向き左方向には下を向く
ような形になっている.このように f ′ (x) = 0 かつ f ′′ (x) > 0 の場合,x で極小であると結
論付けることができる.同様に f ′ (x) = 0 かつ f ′′ (x) < 0 の場合,x で極大であると結論付
けられる.この手法は二階微分による極値判定法(second derivative test)として知られ
る.残念ながら f ′′ (x) = 0 の場合はこの手法では判定できない.その場合は x は鞍点かもし
れないし,あるいは平坦な領域の一部かもしれない.

多次元の場合は関数のすべての二階微分について調べる必要がある.ヘッセ行列の固有
値分解を使用して二階微分による極値判定法を多次元の場合へ一般化することができる.
∇x f (x) = 0 となる臨界点ではヘッセ行列の固有値を調べることでその臨界点が極小か,極
大か,あるいは鞍点かを判別できる.そのヘッセ行列が正定値(すべての固有値が正)の場
合,その点は極小である.これは方向二階微分がどの方向に対しても正になる必要があるこ

83
第 4. 数値計算

500

f(x1 ,x1 )
0
−500

15
−15 0 x1
x1 0 −15
15

図 4.5: 正と負の両方の曲率を持つ鞍点の例.この例での関数は f (x) = x21 − x22 である.x1 軸に沿っ
てこの関数は上方に曲がっている.この軸はヘッセ行列の正の固有値を持つ固有ベクトルである.x2 軸
に沿ってこの関数は下方に曲がっている.この方向はヘッセ行列の負の固有値を持つ固有ベクトルであ
る.「鞍点」という名称はこの関数の鞍のような形状に由来している.この図は鞍点を持つ関数の典型的
な例である.多次元の場合,0 になる固有値がなくても正と負の両方の固有値を持てば鞍点は存在する.
鞍点の固有値に両方の符号があれば 1 つの断面で極大となりもう 1 つの断面で極小となる.

とと一変量の場合の二階微分による極値判定を参考に考えると理解できる.同様にヘッセ行
列が負定値(全ての固有値が負)の場合,その点は極大である.多次元の場合にはその点が鞍
点である明確な根拠を見つけることが可能である.少なくとも 1 つの固有値が正かつ少なく
とも 1 つの固有値が負の場合,f の断面の 1 つで x は極大となりもう 1 つの断面で x は極小
となる.図4.5に例を示す.最後に,多次元の二階微分による極値判定法は一変量の場合と同
様に判定不能になる場合がある.少なくとも1つの固有値が 0 でそれ以外の 0 でない固有値
の符号がすべて同じである場合は判定不能になる.なぜなら 0 の固有値に対応する断面では
一変量の二階微分による極値判定法では判定不能だからである.

多次元の場合,ある点の各方向に対してそれぞれ異なる二階微分が存在する.この点での
ヘッセ行列の条件数は二階微分が相互にどの程度差があるかを測る指標である.ヘッセ行列
の条件数が悪い場合,最急降下法はうまく機能しない. なぜならある方向には勾配が急激に
大きくなる一方で別の方向にはゆっくりとしか大きくならないからである.最急降下法では
微分の中に現れるこのような勾配の変化が分からないので勾配がより長く負である方向を優
先的に探索すべきであるという判断ができない.悪条件の場合は良いステップ幅を選択する
ことも難しくなる.ステップ幅を十分小さくして最小値を通り越したり大きな正の曲率を持
つ方向に上昇することを避けなければならない.しかし,通常このステップ幅は他のもっと
小さな曲率を持つ方向に対しては小さ過ぎることになる.図4.6に例を示す.

84
第 4. 数値計算

20

10

0

x2
10

20

30
30 20 10 0 10 20
x1

図 4.6: 最急降下法ではヘッセ行列が持つ曲率の情報を活用することができない.ここでは最急降下法を
使用してヘッセ行列の条件数が 5 である二次関数 f (x) を最小化している.これは曲率が最も大きい方
向の曲率は最も小さい方向の曲率の 5 倍あることを意味している.今回最大曲率の方向は [1, 1]⊤ ,最小
曲率の方向は [1, −1]⊤ である.赤い線は最急降下法が辿る道筋を示している.この非常に細長い二次関
数は長い渓谷に似ている.この渓谷の壁は急峻であるために最急降下法は谷を下るために時間の無駄を
繰り返している.ステップ幅が幾分大きすぎるため関数の底を通り過ぎてしまいやすい.その結果,次
の反復では反対側の渓谷の壁を下らなければならなくなる.この方向の固有ベクトルに対応するヘッセ
行列の固有値は正の大きな値であり,方向微分が急激に大きくなることを示している.したがってヘッ
セ行列に基づく最適化アルゴリズムはこの関数では最も急な勾配方向は有望でない探索方向だと予測で
きる.

この問題はヘッセ行列の情報を探索に使用することで解決できる.ヘッセ行列を使用する
最も簡単な方法はニュートン法(Newton’s method)と呼ばれる.ニュートン法は点 x(0)
近傍の f (x) の二次テイラー級数展開に基づくものである.

1
f (x) ≈ f (x(0) ) + (x − x(0) )⊤ ∇x f (x(0) ) + (x − x(0) )⊤ H(f )(x(0) )(x − x(0) ). (4.11)
2
この関数の臨界点を求めると以下になる.

x∗ = x(0) − H(f )(x(0) )−1 ∇x f (x(0) ) (4.12)

f が正定値の二次関数である場合,ニュートン法では式4.12を一度適用すれば直接関数の最
小値に移動できる.f が実際には二次関数でなくても局所的に正定値の二次関数に近似でき
る場合,ニュートン法では式4.12を複数回適用する.近似関数の更新とその近似関数の最小
値への移動を繰り返すことで最急降下法よりもずっと早く臨界点を見つけることができる.
これは極小値の近傍では有用な性質であるが近くに鞍点がある場合には有害な性質となる.
8.2.3節で説明するようにニュートン法は近くの臨界点が極小(ヘッセ行列の固有値すべてが
85
第 4. 数値計算

正)の場合にのみ適している.一方最急降下法では勾配が鞍点の方向を向いていない限り鞍
点に移動することはない.

最急降下法のように勾配のみを利用する最適化アルゴリズムは一次最適化アルゴリズム
(first-order optimization algorithms)と呼ばれる.ニュートン法のようにヘッセ行列
も利用する最適化アルゴリズムは二次最適化アルゴリズム(second-order optimization
algorithms)(Nocedal and Wright, 2006) と呼ばれる.
本書のほとんどの場面で使用される最適化アルゴリズムは幅広い関数に適用できるものの,
一方でほとんど何の保証もない.深層学習で使用される関数族は非常に複雑であるため深層
学習のアルゴリズムで保証があるものは少ない.他の多くの分野では限られた関数族に対し
て最適化アルゴリズムを設計することが有力な最適化手法となっている.

深層学習においてはリプシッツ連続(Lipschitz continuous)である関数あるいはリプ
シッツ連続微分(Lipschitz continuous derivatives)を持つ関数に限定することである程度の
保証を得られる場合がある.リプシッツ連続な関数とはある関数 f の変化率がリプシッツ定
数(Lipschitz constant)L で以下のように抑えられる関数のことである.

∀x, ∀y, |f (x) − f (y)| ≤ L||x − y||2 . (4.13)

この性質は有用でる.なぜなら勾配降下法のようなアルゴリズムで入力値を小さく動かし
た場合に出力値も小さく変化するという仮定を定量化できるからである.リプシッツ連続は
極めて弱い制約であり深層学習における最適化問題の多くは比較的小さな修正によってリプ
シッツ連続にすることができる.

おそらく最適化の特定分野で最も成功したのは凸最適化(convex optimization)だろ
う.凸最適化アルゴリズムではさらに強い制約を課すことでもっと多くの保証を提供できる.
凸最適化アルゴリズムは凸関数,つまりヘッセ行列が至る所で半正定値である関数にのみ適用
できる.そのような関数には鞍点が存在せずまたすべての極小値が必然的に最小値となるた
め行儀が良い.しかしながら,深層学習におけるほとんどの問題は凸最適化の形で表すこと
が困難である.凸最適化は一部の深層学習アルゴリズムのサブルーチンとしてしか使用され
ていない.凸最適化における解析から得られるアイディアは深層学習アルゴリズムの収束性
の証明には有用であるが,一般的に深層学習においては凸最適化の重要性は大幅に減少する.
凸最適化に関してさらに詳しい情報はBoyd and Vandenberghe (2004) あるいはRockafellar
(1997) を参照されたい.

86
第 4. 数値計算

4.4 制約付き最適化
場合によっては f (x) を取りうる x の値すべてを対象に最大化あるいは最小化をするので
はなく,ある集合 S に含まれる x のみを対象に最大化あるいは最小化をしたい場合がある.
これは制約付き最適化(constrained optimization)と呼ばれる.S に含まれる点 x は制
約付き最適化の用語で実現可能(feasible)点と呼ばれる.

しばしば小さい解を求めたい場合がある.その場合の一般的な手法は ||x|| ≤ 1 のようなノ
ルムの制約を課すことである.

制約付き最適化をおこなうためのの単純な方法の一つは制約条件を考慮するように単に勾
配降下法を修正することである.ステップ幅 ϵ として小さい定数を使う場合,勾配降下法の 1
ステップを実施した後でその結果を S に戻すように写像する.直線探索を利用する場合は新
たな実現可能点 x を生成するステップ幅 ϵ についてのみ探索するか,あるいは直線上の各点
を制約のある領域へ戻すように写像する.この方法ではステップの移動や直線探索の開始前
に実現可能領域の接空間へ勾配を写像することで効率が上昇する場合がある (Rosen, 1960).

さらに洗練された方法として解が元の制約付きの最適化問題に対する解へと変換可能と
なるような,制約のない別な最適化問題を設計する方法がある.例えば x ∈ R2 の x が
厳密に単位 L2 ノルムであるという制約の下で関数 f (x) を最小化したい場合,代わりに
g(θ) = f ([cos θ, sin θ]⊤ ) を θ に関して最小化し,その後 [cos θ, sin θ] を元の問題の解として
返すことができる.この方法には創造力が必要となる.最適化問題の間の変換は扱う問題そ
れぞれについて個別に設計しなければならない.

カルーシュ・クーン・タッカー(Karush-Kuhn-Tcuker,KKT)*1 法は制約付き最適化
問題に対する非常に一般的な解を与える.KKT 法では一般化ラグランジアン(generalized
Lagrangian)あるいは一般化ラグランジュ関数(generalized Lagrange function)と
呼ばれる新しい関数を使用する.

ラグランジアンを定義するためにまずは S を等式と不等式で表現する必要がある.S を m
個の関数 g (i) と n 個の関数 h(j) を使って S = {x | ∀i, g (i) (x) = 0 及び ∀j, h(j) (x) ≤ 0} と
表す.g (i) に関する等式は等式制約(equality constraints),h(j) に関する不等式は不等
式制約(inequality constraints)と呼ばれる.

*1 KKT 法はラグランジュの未定乗数法(Lagrange multipliers)を一般化したもので,等式制約を許容し
不等式制約は許容しない.

87
第 4. 数値計算

それぞれの制約に対して KKT 乗数と呼ばれる新しい変数 λi と αj を導入する.一般的ラ
グランジアンは以下のように定義される.
! !
L(x, λ, α) = f (x) + λi g (i) (x) + αj h(j) (x). (4.14)
i j

これで制約付きの最小化問題が一般化ラグランジアンの制約なしの最適化問題として解け
るようになる.実現可能点が少なくとも 1 つ存在し f (x) が ∞ の値を取らない場合,

min max max L(x, λ, α) (4.15)
x λ α,α≥0


min f (x) (4.16)
x∈S

と同じ最適点 x と最適値を持つ.これが成り立つ理由は制約が満たされる場合は必ず

max max L(x, λ, α) = f (x) (4.17)
λ α,α≥0

であり,一方で制約が満たされない場合は

max max L(x, λ, α) = ∞ (4.18)
λ α,α≥0

となるからである.この性質により実現不可能な点は最適点にならず,実現可能点の中での
最適値が変化しないことが保証される.

制約付き最大化をおこなうためには −f (x) の一般化ラグランジュ関数を構成しそれにより
以下の最適化問題に行き着く.
! !
min max max −f (x) + λi g (i) (x) + αj h(j) (x). (4.19)
x λ α,α≥0
i j

この式を外側のループにおける最大化問題に変換することもできる.
! !
max min min f (x) + λi g (i) (x) − αj h(j) (x). (4.20)
x λ α,α≥0
i j

等式制約項の符号は重要ではない.最適化では各 λi の符号を自由に選択できるため,加算で
も減算でも好きなように定義できる.

とりわけ興味深いのが不等式制約である.制約 h(i) (x) が h(i) (x∗ ) = 0 である場合は.活性
(active)という.制約が活性でない場合,その制約を使って解いた問題の解は少なくともそ
の制約を取り除いた問題の局所解になる.不活性な制約により他の解が除外される可能性が
ある.例えば,大域的に最適となる点から構成される領域(同じコストの幅広い平坦な領域)

88
第 4. 数値計算

全体に対する凸問題は,制約によって除外されたこの領域の部分集合を解として持つことがあ
る.あるいは非凸問題では収束点で不活性となる制約によりより良い局所停留点が除外され
てしまうこともある.しかしながら,不活性な制約があってもなくても収束で求められた点
は停留点のままである.不活性な h(i) は負の値を持つため minx maxλ maxα,α≥0 L(x, λ, α)
の解では αi = 0 となる.したがって,解において α ⊙ h(x) = 0 である.言い換えると,解
においてはすべての i に対して αi ≥ 0, h(i) (x) ≤ 0 の少なくとも一つの制約は活性となるは
ずである.この考えの直感的な説明としては解は不等式制約による境界上にあり,KKT 乗数
を使って x の解に影響を与えるようにするか,あるいは不等式制約は解に何の影響も与えな
いため,KKT 乗数を 0 にすることでそれを表現している,と説明することができる.

制約付き最適化問題の最適点はいくつかの単純な性質で記述できる.この性質は Karush-
Kuhn-Tucker (KKT) 条件 (Karush, 1939; Kuhn and Tucker, 1951) と呼ばれる.ある点が
最適となるためには KKT 条件は必要条件であるが常に十分条件であるわけではない.KKT
条件を以下に示す.

• 一般化ラグランジアンの勾配が 0.
• x および KKT 乗数の両方に関する制約がすべて満たされている.
• 不等式制約が「相補性(complementary slackness)」α ⊙ h(x) = 0 を持つ.

KKT 法に関してさらに詳細な情報はNocedal and Wright (2006) を参照されたい.

4.5 例:線形最小二乗法
次式の関数を最小化する x の値を求めたいとする.

1
f (x) = ||Ax − b||22 . (4.21)
2
この問題は特殊な線形代数のアルゴリズムを使って効率的に解くことができるが,ここでは
勾配に基づく最適化手法の簡単な例としてその手法の最適化過程を示す.

まず,勾配を計算する必要がある.

∇x f (x) = A⊤ (Ax − b) = A⊤ Ax − A⊤ b. (4.22)

するとその勾配に沿って小さなステップで下方に移動できる.そのアルゴリズムの詳細を
アルゴリズム4.1に示す.

ニュートン法を使ってこの問題を解くこともできる.その場合,実際の関数が二次関数で
89
第 4. 数値計算

Algorithm 4.1 勾配降下法を用い,x の任意の値から始めて f (x) = 12 ||Ax − b||22 を x に
ついて最小化するアルゴリズム.
ステップ幅(ϵ)と許容誤差(δ )を正の小さい値に設定する.
while ||A⊤ Ax − A⊤ b||2 > δ do
! "
x ← x − ϵ A⊤ Ax − A⊤ b
end while

あるためニュートン法による二次関数近似は厳密であり,1 回のステップでアルゴリズムは最
小値へと収束する.

同じ関数を x に対する制約 x⊤ x ≤ 1 の下で解くことを考える.そのために以下のラグラ
ンジアンを導入する. ! "
L(x, λ) = f (x) + λ x⊤ x − 1 . (4.23)

そして以下の問題を解く.
min max L(x, λ). (4.24)
x λ,λ≥0

非制約の最小二乗問題に対する最小ノルム解はムーア・ペンローズ擬似逆行列 x = A+ b を
利用して解ける場合がある.この点が実現可能であればそれは制約付き最適化問題に対する
解となる.そうでなければ条件が活性である解を求める必要がある.ラグランジアンを x に
関して微分すると次式が得られる.

A⊤ Ax − A⊤ b + 2λx = 0. (4.25)

この式から解は以下の形になることが分かる.

x = (A⊤ A + 2λI)−1 A⊤ b. (4.26)

λ の大きさは結果が制約を満たすように選ばなければならない.この値は λ に対する勾配上
昇法を使って求められる.そのために以下を計算する.


L(x, λ) = x⊤ x − 1. (4.27)
∂λ
x のノルムが 1 より大きくなる場合,この微分は正となる.したがって微分を上方に移動さ
せ λ についてラグランジアンを増加させるために λ の値を増加させる.このときペナルティ
項 x⊤ x の係数が大きくなるため,x の線形方程式を解くとさらに小さなノルムを持つ解が得
られる.この線形方程式を解いて λ を調節する手順を x が正しいノルムを持ち λ の微分が 0
になるまで繰り返す.

90
第 4. 数値計算

ここまで機械学習のアルゴリズムを開発するために必要な数学的基礎について説明してき
た.これで本格的な学習システムの構築と解析のための準備が整った.

91

Sign up to vote on this title
UsefulNot useful