LoginSignup
0
0

More than 1 year has passed since last update.

2.5 コスト関数と勾配降下法について

Last updated at Posted at 2022-08-10

コスト関数とは

どのぐらい学習が正確に駅ているかを判断する指標となる。誤差関数や狭義ではあるが目的関数とも呼ばれる。

アルゴリズムの評価

下図のようなデータを適当に作って、直線で近似することを想定する。

横軸を$x$(入力値)、縦軸を$y$(出力値)とする。
スクリーンショット 2019-02-28 14.19.58.png
今回はものすごく単純化するためにユニット数1で1層のADALINEで考える。
IMG_6504.jpg
$w$を重み、$x$を入力値とすると、そう総入力関数は

$
f(x) = wx
$

のようにただの実数の積となる(ユニット数1のため)。この$f(x)$とデータの真値$y$を比較すると、
その差(誤差)$d$は次のようになる

$
d = |y - f(x)|
$

最小二乗法をここで用いるためこの誤差$d$を二乗し、またサンプル数$n$だけすべて足すと

$
J(w) = \sum_{i = 0}^{n}(y_n-f(x_n))^2
$

この$J(w)$をコスト関数といい、予測がどれだけ真値に近いかを示すものになる。$w$が変化すると$f(x_n)$が変化するので、**誤差(誤差平方和)**が大きくなったり小さくなったりする。
通常は上の式に$\frac{1}{2}$をかけて

$
J(w) = \frac{1}{2}\sum_{i = 0}^{n}(y_n-f(x_n))^2
$

とすることが多いらしい。

誤差を最小化したい

最終目標はこのコスト関数の値(誤差平方和)を小さくすること

例:w=5のとき

df = pd.read_csv('2.5_test.csv',header=None,names=['x', 'y'])
x = df['x']
y = df['y']

def gosagosa(a,b):
    return (a-b)*(a-b)/2

w = 5
fx = w*x
J = 0
for i in range(0,20):
    J += gosagosa(fx[i],y[i])
print("w = {0} : J = {1}".format(w,J))


誤差の二乗をすべて足した値Jは

w = 5 : J = 1653.5

となった

wがほかの値のときは?

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv('2.5_test.csv',header=None,names=['x', 'y'])
x = df['x']
y = df['y']


#誤差の二乗を計算する関数
def gosagosa(a,b):
    return (a-b)*(a-b)/2

# w = 0.0-10.0まで0.1刻みで誤差平方和を計算する
for j in range(0,100):
    w = j/10.0
    fx = w*x
    J = 0
    for i in range(0,20):
        J += gosagosa(fx[i],y[i])
    print("w = {0} : J = {1}".format(w,J))
    plt.plot(w,J,marker="+")


plt.show()

スクリーンショット 2019-02-28 17.22.44.png 誤差の二乗をすべて足した値Jは

w = 0.0 : J = 22538.5

w = 0.1 : J = 21417.65

w = 0.2 : J = 20325.5

w = 0.3 : J = 19262.05

w = 0.4 : J = 18227.3

w = 0.5 : J = 17221.25

...

となり、plotしてみると$w = 4$あたりで最小値となるすることがわかる。つまり今回は重み$w = 4$で最高の精度が現れるということが理解できる。
また、関数は二次曲線を描くため、微分で傾きを求めて最小化の方向へ持っていくことができる。

w = 5

$f(x) = wx$ より、$f(x) = 5x$
スクリーンショット 2019-02-28 17.46.06.png

w = 4

$f(x) = wx$ より、$f(x) = 4x$
スクリーンショット 2019-02-28 17.45.50.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0