ディープラーニングについてディープにラーニング。

思いっきり、自分が学んだことのアウトプットしていきますが、何分初心者。もし何かアドバイス等頂けましたら幸いです!

線形変換

いよいよきました線形変換。
なんか人工知能感が増してきたなぁ…

ではアウトプット。

線形変換

ベクトルを行列と掛け算することで、違うベクトルに変換すること。
線形変換はニューラルネットワークで情報を伝播させる際によく使うみたい。


例えば、こんな行列があったとしよう。

A = [2,-1]
[2,-2]

次にこんなベクトルがあったとしよう。

→a = [2 , 3]

このベクトルと、Aの行列を使って、ベクトルの変換(線形変換)を行う。

f:id:kawam0t0:20191220215356p:plain

積自体はもちろん行列積で計算。

一応パイソンで書いた時のコードも載せておく

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

a = np.array([2,3])
#行列
b = np.array([[2,-1],
              [2,-2]])
#線形変換
c = np.dot(b,a)

print("a:",a)
print("b:",b)

def arrow(start , size , color):
    plt.quiver(start[0],start[1],size[0],size[1],angles="xy",scale_units="xy",scale=1,color=color)

#始点
s = np.array([0,0])
    
arrow(s , a , "red")
arrow(s , c , "blue")

plt.xlim([-3,3])
plt.ylim([-3,3])
plt.grid()

f:id:kawam0t0:20191220215518p:plain

本来の赤線が線形変換により、青のベクトルに変わった。


標準基底

言葉は難しいが、要はベースになる、超入門ベクトルを標準基底っていう。

f:id:kawam0t0:20191220215644p:plain
↑標準基底


例えば、こんなベクトルがあったとしよう。

→a = [2 , 3]
これを標準基底で分解すると、こんな風になる。

f:id:kawam0t0:20191220215912p:plain

ここで言いたいのは、
ベクトルは標準基底と定数の積の和として表現することができる

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

#ベクトル
a = np.array([1,3])
#行列
A = np.array([[1,-1],[2,-1]])
#線形変換→線形変換させるときは、行列×ベクトル
b = np.dot(A,a)

def arrow(start , size , color):
    #始点のx座標,始点のy座標,ベクトルのx座標,ベクトルのy座標
    plt.quiver(start[0],start[1],size[0],size[1],angles="xy",scale_units="xy",scale=1,color=color)

s = np.array([0,0])

arrow(s,a,"red")
arrow(s,b,"blue")

plt.ylim([-3,3])
plt.xlim([-3,3])
plt.grid()

f:id:kawam0t0:20191220220347p:plain