L1ノルム:ベクトル成分の絶対値の和 最短距離を測る…各成分の絶対値
L2ノルム:ベクトルのユークリッド距離
||a||[2] = √nΣi=1 a^2i
L1ノムル、L2ノムルは線形回帰モデルで正則化項として使われる
線形回帰モデルで正則化項を付けることで係数の絶対値または2乗値が大きくならない→過学習が起こらない
ノムルからcosθを求めることもできる
cos(a, b)
cos類似度が高い方がベクトルが似ている
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
対応する成分同士を掛け算してそれらの和を取る
ベクトルとベクトルの内積はスカラーになる
内積の記号はが多い
直行条件とは、なす数が90°(cos90°=0)
法線ベクトル:全ての接線と直交するベクトル
データを複数個収めることができるように、要素を1列に並べたものをベクトルと呼ぶ
単語をベクトル化するWord2Vecという概念がある
Word2Vecは、単語一つ一つを1列に並べたベクトルに変換
ベクトルに変換すると、足し算、引き算を行うことができる
同じような意味の単語群から、同じような周辺語を予測している??
ベクトルは有向線分で視覚化できる。スカラー倍も考えうる。
ベクトルの足し算、引き算は矢印で考える
x^r: rx^r-1
e^x : e^x
a^x : a^x log[e]a
log[e]x : 1/x
sinx : cos x
cos x : -sing x
tan x : 1/cos^2x
sinx → cos x -> -sin x -> -cos x
合成関数の微分
y = f(x), dy/dx = dy/du * du/dx
合成関数(多変数) z = f(x, y)の微分法
(3x – 4)^50 を微分すると、50(3x – 4)^49 * 3 = 150(3x – 4)^49
(3x + 1)^2 + (x + y + 1)^3
2(3x + 1)* 3 + 3(x + y + 1)^2
xe^x -> 1e^x + x*e^x
正解データとニューラルネットワークの出力が合うように、ニューラルネットワークの重み(w)を調整
ニューラルネットワークの重みの調整量は誤差の値を重みで偏微分した値を考慮したもの
チェーンルールを使う
シグモイド関数
Sa(x) = 1 / 1 + exp(-ax)
dSa(x)/dx = a*exp(-ax) / {1 + exp(-ax)}^2 = aSa(x){1 – Sa(x)}
これ(aSa(x){1 – Sa(x)})をさらにxで微分する
ReLU関数
max(0, x) = {x(x > 0), 0(x <= 0)
= 1(x > 0), 0(x < 0)
標準シグモイド関数は微分すると、最大値が0.25 ニューラルネットワークの層が不快と、誤差が伝播しなくなる。その解決値としてReLU関数が多く使用されている
=> これあれだな、基礎数学もプログラミングみたいに、基礎本を10冊くらいやらんとあかんな。。
最小2乗法とは、誤差の2乗和が最小になるような関係式を求める
線形回帰と呼ばれる基本的な機械学習アルゴリズム
→ つまり微分した際の「極値」ってことか。。
微分とは、滑らかなグラフの一瞬の変化の割合を示す
極限(lim)とは一定の値に極限まで近づけること
f(x) = (x^2 – 1)/(x – a)
xの値をある一定値αに限りなく近づけると、関数f(x)が一定値αに限りなく近く 収束という
limx-1 (x^2 – 1)/(x – 1) = limx→1 (x + 1) = 2
速度 v = limΔt→0 Δx / Δt = limΔt→0 x(t- Δt) – x(t)/ Δt
Δの代わりにdを用いる
dx(x)/dt
df(x)/dx = limΔx→0 df(x)/dx = limh→0 f(x + h) – fx(x)/h
人工知能では、どの地点で最小値を取るのか調べることが多い
変数が1つのみ 常微分
変数が2つ以上 yを定数(Δy = 0)としてxを変化させる Δx → 0
→ 偏微分
f(x) = ax^2 + bx + c
→微分すると 2ax + b
f(x,y) = 3x^2 + 5xy + 3y^3
xで偏微分すると 6x + 5y
yで偏微分すると 5x + 9y^2
速度v = dx/dtは位置xを時刻tで微分したもの
加速度α=dv/dtは速度vを時刻tで微分
極大値、極小値は微分値の正負が入れ替わる点
2階微分で加速度を把握する
an = a + (n – 1)d
等差数列の和
S = 1/2n(a + l)
等比数列
an = ar^(n-1)
等比数列和
Sn = a(1-r^n)/(1-r) = a(r^n – 1)/(r – 1)
Σ(シグマ)… 総和
π(パイ)… 総乗
数列の和
nΣk=1[k] = 1/2n(n+1)
nΣk=1[k]^2 = 1/6n(n+1)(2n+1)
nΣk=1[k]^3 = {1/2n(n+1)}^2
nΣk=1 = nc
nΣk=1(ak + bk) = nΣk=1ak + nΣk=1bk
二次元
√(a1 – b1)^2 + (a2 – b2)^2
三次元
√(a1 – b1)^2 + (a2 – b2)^2 + (a3 – b3)^2
ユークリッド距離は||A||もしくは||A-B||と表せる
K-NNでも使われる
正解ラベルとのユークリッド距離で判別する
function distance($data1, $data2){
$num = 0;
for($i = 0; $i < sizeof($data1); $i++){
$num += pow($data1[$i] - $data2[$i], 2);
}
return sqrt($num);
}
var_dump(distance(array(1, 1), array(4, 5)));
[/php]
float(5)
うん、これは簡単
半径rの円で、中心角の大きさ一定で1radと表す。
円周は2π
0° 0
30° 1/6π
45° 1/4π
60° 1/3π
90° 1/2π
120° 2/3π
180° π
360° 2π
これはわかります。
2/6π
sinθ 1/2
cosθ √3/2
tanθ √3/2
1/4π
sinθ √2/2
cosθ √2/2
tanθ 1
で、これの何が役に立つの??
音声認識を行う際に、音の波を解析するため、フーリエ変換が行われる
フーリエ変換は、複雑な波形を持つ関数を三角関数の足し算で表現する
よくわからんから、とりあえずgoogl home mini買ったわ
echo "30度"; echo sin(deg2rad(30)). "<br>"; echo cos(deg2rad(30)). "<br>"; echo tan(deg2rad(30)). "<br>"; echo "60度"; echo sin(deg2rad(60)). "<br>"; echo cos(deg2rad(60)). "<br>"; echo tan(deg2rad(60)). "<br>";
まず、libraryを入れます。
[vagrant@localhost fann]$ sudo yum install fann-devel
あれ、全然うまくいってない。。
$num_input = 2; $num_output = 1; $num_layers = 3; $num_neurons_hidden = 3; $desired_error = 0.001; $max_epochs = 500000; $epochs_between_reports = 1000; $ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output); if ($ann) { fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC); fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC); $filename = dirname(__FILE__) . "/xor.data"; if (fann_train_on_file($ann, $filename, $max_epochs, $epochs_between_reports, $desired_error)) fann_save($ann, dirname(__FILE__) . "/xor_float.net"); fann_destroy($ann); }
ぬ、やっぱり。
[Fri Aug 30 08:52:09 2019] 192.168.33.1:60110 [500]: / – Call to undefined function fann_create_standard() in /home/vagrant/local/fann/index.php on line 10
ぐ。。