Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js
MENU

勾配とテンソル(メモ)


勾配(gradient)*1

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

 

 

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

:gradfxy

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

gradf=f=(fx,fy)

 ①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で微分すると…..

f(x(t),y(t))xdx(t)dt+f(x(t),y(t))ydy(t)dt=0

gradf=(fx,fy)(dxdt,dydt)

  内積 = 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θとおいているので、傾きは

df(a+tcosθ,b+tsinθ)dt=fxdxdt+fydydt=fxcosθ+fysinθ

gradf=(fx,fy)α

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

OAOB|OA||OB|=cos(AOB)

 

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

fxcosθ+fysinθ=(fx,fy)(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.


*