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

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

ただいまの
回答率

89.22%

勾配法で局所解が発生するときの次数は4以上か?

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,492

ads3hcgff

score 16

機械学習で例えば回帰を行うとします。
回帰曲線が非線形の場合では勾配法を用いますが、勾配法で局所解が生じる場合の回帰曲線の形が知りたいです。
回帰ではなく分類をする際の決定境界のモデルを決めるときの勾配法での局所解のできる形もできれば知りたいですが
話が複雑そうになるのでまず回帰から行きたいと思います。

まず回帰曲線を
イメージ説明
とし目的関数Eを
イメージ説明
とします。
ここで勾配法の更新式は
イメージ説明

ここで多項式回帰をするとし回帰曲線を
イメージ説明
とします。多項式回帰の更新式は
イメージ説明
となりますが
多項式回帰では図では次数が3次です。なので局所解は発生しませんが
次数が4次の場合の回帰曲線について
イメージ説明
となるので次数が4次のパラメータで目的関数Eを微分すると勾配法の解が局所解に陥ってしまう
この際確率的勾配法が有効なのかなと思いました。
あってますか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2019/01/27 21:47

    >回帰曲線が非線形の場合では勾配法を用いますが
    とありますが、回帰曲線が次数2の多項式なら普通の(非線形ではない)最小二乗法を使い、正規方程式を解く方法でフィッティングできるのでは?

    キャンセル

  • ads3hcgff

    2019/01/27 22:02 編集

    確かに次数2であれば線形であるので解析的に解くことができると思います。
    勾配法を用いる必要性はないですね。今調べてみたところ3次4次でも解の公式があるらしく
    次数4までは解析で解けるので勾配法を用いる必要はないんですかね?
    ここで私が知りたいのは勾配法を使うと仮定して
    真のパラメータθ1θ2θ3・・・等を求める際どのような時に局所解ができるのかということです。
    回帰曲線を3次関数の次数3のパラメータで微分する際、勾配が真の解に向いてくれないということであっていますか?なので更新式で用いる一番最初のパラメータを決める場合、次数3であれば最低でも二回はパラメータを決めなおす必要があるということでしょうか

    キャンセル

  • hayataka2049

    2019/01/27 22:18 編集

    別に回帰曲線が10次でも100次でも、パラメータで偏微分して連立一元方程式になれば行列で解けます。なので、もう少し複雑な問題を持ってこないと議論しづらい気がします。

    キャンセル

回答 2

checkベストアンサー

+1

理解が間違っていたらすみません。
teratail は数式入力できないので画像で失礼します。


最小二乗法の定式化

以下でいう最小二乗法の目的関数 J(a) は凸関数なので、局所解が大域解となるので、勾配法を使っても求まる解は大域解となるのではないでしょうか。

イメージ説明

最小二乗法の目的関数が凸関数であることの証明

示すべきこと

J(a) が凸関数であることの証明は以下の不等式を示す必要があります。

イメージ説明

式展開してゴリゴリ計算すれば導出できます。(わからなければ補足します。)

証明

イメージ説明

画像はクリックすると拡大できます。

正規方程式

hayataka2049 さんがコメントしてくださった正規方程式との関係は以下のようになります。

イメージ説明

Summary

  • 最小二乗法の目的関数は凸関数
  • 凸関数なので、局所解は大域解になる。
  • なので、勾配法で解いても必ず大域解に収束する。
  • 勾配法以外の方法として、正規方程式を解いても求められる。

追記

ここでいう線形、線形でないというのは、近似関数を推定するパラメータ a の関数として見たときの話です。

例えば、f(x) = a_1 x^4 + a_2 x^2 という関数で近似する場合、
x の関数としてみた場合非線形関数ですが、a の関数として見た場合線形関数です。
以下、損失関数を描画した例です。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import FancyArrowPatch
from mpl_toolkits.mplot3d import Axes3D, proj3d

xs = np.array([2.8, 2.9, 3.0, 3.1, 3.2, 3.2, 3.2, 3.3, 3.4])
ys = np.array([30, 26, 33, 31, 33, 35, 37, 36, 33])

# 近似関数 a1 x^4 + a2 x^2
def f1(a1, a2):
    return a1 * xs**4 + a2 * xs ** 2

# 近似関数 sin(a1) x^4 + a2 x^2
def f2(a1, a2):
    return np.sin(a1) * xs**4 + a2 * xs ** 2

# 2乗誤差関数
def loss(a1, a2, f):
    return ((ys - f(a1, a2)) ** 2).sum()

# 各点での関数 loss の値を計算する。
A1, A2 = np.mgrid[-10:11, -10:11]
L = np.array([loss(a1, a2, f2) for a1, a2 in zip(A1.ravel(), A2.ravel())])
L = L.reshape(A1.shape)

fig = plt.figure(figsize=(7, 7))
ax = fig.add_subplot(111, projection='3d')
# 各軸のラベルを設定する。
ax.set_xlabel('$a_1$', fontsize=15)
ax.set_ylabel('$a_2$', fontsize=15)
ax.set_zlabel('$loss$', fontsize=15)
# グラフを作成する。
ax.plot_surface(A1, A2, L, alpha=0.4, antialiased=False)
ax.view_init(elev=50, azim=120)

イメージ説明
f(x) = a1 x^4 + a2 x^2 の2乗誤差関数
→ 凸なので局所解 = 大域解

イメージ説明
f(x) = sin(a1) x^4 + a2 x^2 の2乗誤差関数
→ 局所解あり

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/28 01:40

    回答の議論が成り立つ: f(x) = a x + b
    → a, b の関数としてみると、線形

    回答の議論が成り立たない: f(x) = a^2 x + b
    → a, b の関数としてみると、線形でない
    → 局所解に陥る可能性もある

    なので、推定パラメータでない部分が x^4 とかでもそこは関係ありません。重要なのは近似関数がパラメータの線形結合として表されるかどうかです。

    キャンセル

  • 2019/01/28 02:22

    詳しく教えていただきありがとうございます!
    じっくり考えてみます。

    キャンセル

  • 2019/01/28 03:16

    自分も認識不足の部分があり、当初、線形な場合の最小二乗法しか考えていなかったため、説明がわかりづらくなって申し訳ないです。
    一応まとめておきます。

    * 最小二乗法は線形、非線形にわけられる。
    * このとき、線形、非線形というのは、推定パラメータに関して線形か非線形かを指す
    → 「線形、非線形とは何に対してのことか」この部分を理解するとこれまでの議論が見えてくると思います。↓同じ内容の質問
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11108629276
    * 線形の場合は、回答の議論で局所解に陥ることはない
    * 非線形の場合は、局所解に陥ることがある

    キャンセル

+1

解決済みですが、機械学習の立場からコメントします。
機械学習においてモデルパラメーターはコスト関数(質問記載します関数Eに相当)の最小化によって求められます。その際、機械学習ではこのコスト関数の形状はわからない(つまり、定式化できない)ことを前提にアプローチします。tiitoiさんが解説する最小二乗法とはこの点が明らかに異なります。
最小二乗法が解析的にパラメーターが求められるのに対し、機械学習は数値計算によって近似解を求めます。この数値計算ですが、大まかにいうと前回のパラメーターで求められたコスト関数の結果と今回の結果の差、今回のデータにおける微分値の正負、を基準にパラメーターの更新を繰り返してコスト関数の最小値を求めます。
よって、局所解が求められる条件は機械学習の立場からするとわからないということになると思います。

当然のことながら、コスト関数の形状が分からなければ、局所値と最小値の区別ができません。そこで、機械学習は確率的勾配法やミニバッチ学習などの方法が考案されました。これらは、先のパラメーター更新のルールである前回と今回の値の差に確率的な紛れを起こさせることで局所解の谷からジャンプさせるイメージです。
よって、質問の最後の部分は局所解回避という点であっていますが、コスト関数の形状不明が理由と考えるべきでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る