勾配降下法
勾配降下法は、人工知能の一分野とされる機械学習のうち「深層学習」と呼ばれる分野でディープニューラルネットワークのパラメータの最適化手法としてよく用いられます。重みを少しずつ更新して勾配が最小になる点を探索するアルゴリズムです。
関数 $f(x)$ の数値微分は次のように計算できます。
$$f'(x) = \frac{f(x+h) - f(x-h)}{2 h}$$
学習率を $r_l$ (Learning Rate) としたとき、
$$x_{t+1} = x_t - r_l f'(x)$$
のようにして順次 $x$ の位置を更新していきます。
ラムダ式
Pythonでは関数は次のような形で表せますが
def f(x):
return x**2 + 2 * x + 1
簡単な式だと、次のような「ラムダ式」という表現でも表せます。
f = lambda x: x**2 + 2 * x + 1
上の2つのコードは、同じ意味になります。
np.linspace
折れ線グラフの書き方は課題22で取り扱いましたが、numpy
のlinspace
を使うと関数のグラフが簡単に表現できます。以下のコードを動かしてみてください。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x_latent = np.linspace(-5, 5, 100)
plt.plot(x_latent, f(x_latent))
plt.grid()
課題58:1変数の勾配降下法
以下に示す関数の最小値を、勾配降下法で求めてください。また、パラメータを変化させた時の挙動の変化も説明してください。
- $f(x) = x ^ 2 + 2 x + 1$
- $g(x) = x^4 − 4 x^3 − 36 x^2$
課題提出方法
-
基本的にGoogle Colaboratoryを用いてプログラミングしてください。どうしても Google Colaboratory を用いることができない場合のみ、Jupyter Notebook または Jupyter Lab を用いてください。
-
課題1つごとに、ノートブックを新規作成してください。1つのノートブックで複数の課題を解かないでください。
-
ノートブックを新規作成すると「Untitled.ipynb」のような名前になりますが、それを「学籍番号・氏名・課題番号」のような名前に変更してください。
-
質問・感想・要望などございましたらぜひ書き込んでください。
-
もし課題を解くにあたって参考になったウェブサイトがあれば、それについても触れてください。
-
課題を計算し終わった ipynb ファイルを提出するときは、指定したメールアドレスに Google Drive で共有する形で授業担当者に提出してください。