勾配とテンソル(メモ)


勾配(gradient)*1

xy平面上の等高線をz軸方向に立ち上げてお山を作ってみます。

 

 

お山の中腹にいる人(P)がある方向に進むとします。

$$このベクトル:grad f はxy平面に矢印として表され、平面上の各点で方角を表しているします。$$

 スカラー場:f(x,y)

$$勾配ベクトル:grad f = \nabla f = \left( \frac {\partial f}{\partial x},\frac {\partial f}{\partial y}\right)について$$

 ①grad f は、等高線と直交する

 ②grad f は、傾きが一番大きくなる向きを表す

 ③|grad f |は、傾きの最大値を表す

 

つまり、Pはgrad fの指し示す方角に進む時、傾きが一番きつくなります。

 

なんで?かというと……

等高線を媒介変数tを用いて表し、点(x(t),y(t))の集合とみなします

等高線はf(x,y) = C(定数)と表せます(等高線だからね)。

f(x(t),y(t)) = C

tで微分すると…..

$$\frac{\partial f(x(t),y(t))}{\partial x} \cdot \frac{dx(t)}{dt} + \frac {\partial f(x(t),y(t))}{\partial y} \cdot \frac{dy(t)}{dt} = 0\hspace{55pt }$$

$$左辺をgrad f = \left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right)と等高線の接線 \left( \frac{dx}{dt},\frac{dy}{dt} \right)の内積とみなすと$$

  内積 = 0で、両者は直交していることになります。

つまり、grad f は等高線の法線ベクトル

 

②、③

点(a,b,f(a,b))での最大の傾きを求めてみます。

x軸とθの角をなす直線L->点(a+tcosθ,b+tsinθ,0)の集合を設定

Lを含みxy平面に垂直な面Πで曲面(お山)を切断すると、切り口には曲線が現れます。

この曲線の(a,b,f(a,b))での傾きを求めてみます。

媒介変数t=1に対応する点には1、t=2に対応する点に2、というようにL上に目盛をふると、

単位ベクトル

|(cosθ,sinθ)| = 1

ですから、Lにはx軸y軸と同じ間隔で目盛がふられます。

切り口の曲線は、平面Π (tz座標平面)でtの関数として

z = f(a+tcosθ,b+tsinθ)

と表わされます。

従って、切り口での曲線の傾きは f(a+tcosθ,b+tsinθ)を媒介変数tで微分することで得られます。

f(x,y)で、x = a + tcosθ、y = b + tsinθとおいているので、傾きは

$$\begin{eqnarray}\frac{df(a+tcosθ,b+tsinθ)}{dt} &=& \frac{\partial f}{\partial x} \cdot \frac{dx}{dt} + \frac{\partial f}{\partial y} \cdot \frac{dy}{dt} \\ &=& \frac{\partial f}{\partial x}cosθ + \frac{\partial f}{\partial y}sinθ \end{eqnarray}$$

$$ここでgrad f = \left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right)をxy平面のベクトルとして捉え、これとx軸のなす角をαとすると$$

2つのベクトルのなす角度の公式を思い出しましょう。

$$\frac{\overrightarrow{\mathrm{OA}}\cdot \overrightarrow{\mathrm{OB}}} {| \overrightarrow{\mathrm{OA}}| \cdot|\overrightarrow{\mathrm{OB}}|} = \cos\left(\angle \mathrm{AOB}\right)$$

 

傾きを内積で表してみます。

$$ \frac{\partial f}{\partial x}cosθ + \frac{\partial f}{\partial y}sinθ = \left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right) \cdot (cosθ,sinθ)$$

 

 

傾きベクトルと単位ベクトルとのなす角度を公式にあてはめて、

$$\frac {\left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right) \cdot (cosθ,sinθ)}{ \left|\left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y}  \right)\right|  \vert cosθ,sinθ)\vert} = cos(θ – α) $$

 

従って傾きはこうなる。

$$\begin{eqnarray}\frac{\partial f}{\partial x}cosθ + \frac{\partial f}{\partial y}sinθ  &=& \left|\left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y}  \right)\right|  \vert cosθ,sinθ)\vert cos(θ – α) \\ &=& \left|\left( \frac{\partial f}{\partial x},\frac{\partial f}{\partial y}  \right)\right|  cos(θ – α) \end{eqnarray}$$

 

-1  ≦ cos(θ – α) ≦ 1

傾きが最大になるのはθ = α、すなわちgrad fの方角で切断したときで

最大値は|grad f|

 

ここでは最大値について記述していますが、機械学習でいう勾配は「お山」を逆さにして考えるとイメージしやすい。求めるのは最小値。

 


テンソル(tensor)

アタリマエに使うには、ある程度の訓練と慣れが必要です。

「テンソルは多次元の配列で、階数0のスカラーや階数1のベクトル、階数2の行列などの階数nへの一般化を与えているものと見なされる。テンソルの「成分」は配列の要素の値によって与えられることになる。この考えはテンソル場として一般化され、テンソルの成分として関数やその微分が取り扱われるようになる。」(Wikipedia)

テンソル->型を有するn次元の多次元配列

TensorFlowではこうなる

 

このように記述することで,「n次元の多次元配列」の要素に任意の値を設定することができます.

 

テンソルの演算

四則演算ならこんな感じ

 

では、なぜテンソルなのかは、この方のブログ参照


*1

勾配については「一般相対性理論を一歩一歩数式で理解する」(石井俊全 著)からほぼ引用

この本はテンソルを理解したいという(数学寄り、物理寄り双方の)方にもお奨め。

もし買う気になったら、正誤表はこちら(なんでこうなるんだ?としばし悩む手間が省けます)


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*