ディープラーニングG検定の勉強中 その21(行列と行列計算)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、行列と行列計算について見ていきます。


参考サイト
Wild Data Chase -データを巡る冒険([ 機械学習 ] 単層パーセプトロンの実装)

ベクトルの成分表示の内積の考え方を利用して、機械学習方法の1つであるパーセプトロンを作ることができます。

図1 2入力・1出力ノードの単層パーセプトロン
3-7-1-1.png

ベクトルのコサイン類似度が図1の y に相当し、x1 と x2 はそれぞれの向きと大きさを持つベクトルです。
パーセプトロンでは、出力結果の閾値が1なら「正の例」、0なら「負の例」として分類します。

例えば、動画に映っている動物の分類をするときに、x1が鳴き声(犬か猫)、x2が顔の形(犬か猫)という入力で、鳴き声と顔の形のそれぞれの重みづけによって出力結果の閾値が1なら「犬」、そうでなければ「猫」と分類するイメージです。

図1の y は式1で算出され、

式1
3-7-1-2.png

この式は行列としては式2のように表されます。

式2
3-7-1-3.png

この式は、行列をW、ベクトルをベクトル x とすることで、

式3
3-7-1-11.png

式4として表すことができます。

式4
3-7-1-10.png


単層パーセプトロンの入力・出力ノードが増えたときには以下のようになります。

図2 2入力・3出力の単層パーセプトロン
3-7-1-5.png

各出力ノードの表示成分の内積は式5となります。

式5
3-7-1-6.png

これを行列で表すと式5となります。

式5
3-7-1-8.png

行列をW、ベクトルをベクトル x とすることで、

式6
3-7-1-9.png

上記の式4のように表すことができます。



今回でテキストの第3章が終わりました。
次回からは、第4章の「多変数関数の微分」について見ていきます。


進捗状況

最短コースでわかるディープラーニングの数学
104/328(31.7%)

ディープラーニングG検定の受験日まで、あと41日

ドラゴンズクラウンPROをプレイ中

PS4で、サイドビューのアクションゲームをプレイしています。


日曜日、勉強の合間にPS4に触りました。
最初は途中まで進んでいるDOOMをプレイしてみたのですが、久々ということで、敵が強くて少しも進めず。
それと、コントローラーのアナログボタンの効きが弱くなってきていて、思うようにキャラを動かしにくくもあったので、新しいコントローラーを入手するまでは再度中断としました。

それで、他のやりかけのゲームということで、アトラス/ヴァニラウェアのドラゴンズクラウンPROを本格的に進めていくことにしました。

このゲームは、同じメーカーの「プリンセスクラウン」の系譜に連なるゲームで、その後に出た「オーディンスフィア」の系統のゲームでもあります。

2Dで奥行きもあるタイプのサイドビューのゲームで、とある城下町の酒場から出発して、

20190929-1.jpg

そこで仲間を最大3人まで連れて、

城下町を移動し、

20190929-2.jpg

城やギルドで依頼を受けて、

20190929-3.jpg

街の魔術師にも挨拶をしつつ、

20190929-4.jpg

街外れのダンジョンに、

20190929-6.jpg

剣士や

20190929-7.jpg

魔法使いなどの仲間とともに

20190929-8.jpg

探索に行ったりします。

ダンジョンでは、敵を倒しつつ、宝箱を開けて金品を入手して、

20190929-9.jpg

帰還した際に店で鑑定してもらってからよりいい武具に買い替えたりします。


城下町のシステムはウィザードリィに良く似てて、酒場、死者の復活をする寺院や依頼を受ける訓練場・ギルドを利用するようになっています。
店主による鑑定ではボルタック商店ほどではないですが結構な金額を取られるので、冒険でのゴールドの入手はかなり重要です。


今回は私は初心者向けである剣士(ファイター)を選びました。
その場合は、自キャラが剣士で、NPCの仲間として魔法使いや僧侶をダンジョンに連れていく感じになります。
剣士はタフなのが初心者向けらしい感じです。でも、敵の攻撃にあたるつもりがない人は、最初から体力のない魔法使いを選ぶのもありだと思います。

という感じで、まだ序盤ですが、プレイを続けていきます。








久々に聴いた曲


SOFT BALLET - メルヘンダイバー


この曲を聴いているとくらくらしてくる


Boom Boom Dollar (Red Monster Mix) (2000)


ユーロビートっていうのも懐かしい響きになってしまった


SPIRITUAL 「lasting LONG」


好きな曲






HI! VEVO Vol.170

AURORA - Walking In The Air


イギリスのバラッド風の曲。聴き入る。







クラシック曲を忘れない Vol.70

ダンソン 第2番

アルトゥロ・マルケス作曲。ラテンアメリカの雰囲気を持つ曲。








ニコニコ動画のリンク


タマムシ




令和のドール。すごい




大ちゃんが突っ込みなのは必然



90%果汁のチューハイはジュース感覚で飲める(少し酔う)

ディープラーニングG検定の勉強中 その20(コサイン類似度)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、コサイン類似度について見ていきます。

参考サイト
高校数学の美しい物語(コサイン類似度)


ベクトル r とベクトル x の2つがあるとき、

式1
3-6-1-1.png

その2つのベクトルの向きがどれぐらい類似しているかを調べるときは、式2からcosθでの比を算出することになるのですが、

式2
3-6-1-2.png

これは、ディープラーニングG検定の勉強中 その19(成分表示による内積)で出てきた式3と組み合わせることで実現できます。

式3
3-5-2-2.png

つまり、式4を

式4
3-6-1-3.png

式5に変形して cosθによる比を算出できるようにします。

式5
3-6-1-4.png

このとき、分母のベクトルは、図1から

図1
3-6-1-5.png

三平方の定理により式6が成り立つため、

式6
3-6-1-6.png

式5を式7に変形することができます。

式7
3-6-1-7.png

これで計算可能となりましたので、実際に数値を代入してコサイン類似度を確認してみます。


図2
3-6-1-8.png

図2の目盛りを「1」としたとき、ベクトル r とベクトル x の成分表示は式8となるので、

式8
3-6-1-9.png

これを式7に代入して、式8の cosθ = 0.6 と算出されました。

式8
3-6-1-10.png

コサイン類似度は、cosθの値が 1 に近いほど2つのベクトルの向きが類似していることになるので、0.6 は半分よりはちょっと近い、というところです。

図3
3-6-1-11.png

図3では図2のときよりも2つのベクトルの向きが近づいています。
式9より、

式9
3-6-1-12.png

これを式7に代入して、cosθによる比が 0.894427190999916 と出ました。より 1 に近い値となっています。

式10
3-6-1-13.png

図4
3-6-1-14.png

今度はさらにベクトル r とベクトル x の向きが近くなっています。式11から、

式11
3-6-1-15.png

式7に代入して、式12の cosθ = 0.96561575852067 と出ました。

式12
3-6-1-16.png

というように、2つのベクトルの向きが近いほど 1 に近付くことが分かりました。


なお、2つのベクトルの向きが全く同じ場合は、cosθ = 1 となり、2つのベクトルの向きが90°の場合は cosθ = 0 となります。正反対の向きの場合はcosθ = -1 となります。


ちなみに、ベクトル類似度は多次元ベクトルにも適用できるため、式13が成立し、

式13
3-6-1-17.png

これを簡略化して総和∑で表すと、式14となります。

式14
3-6-1-18.png

ディープラーニングG検定の勉強中 その19(成分表示による内積)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、成分表示による内積について見ていきます。


前回は、2つのベクトルが作る角の角度θが分かっている状態で、各ベクトルの量が判明している場合の内積について見ましたが、
今回は、角度が分からず、各ベクトルの成分…2次元の場合は、ベクトル r (r1, r2)、ベクトル x (x1, x2)が判明している場合の内積の算出方法です。

ベクトル r とベクトル x の成分表示が式1のとき、

式1
3-5-2-1.png

式2で成分表示による内積を算出できます。

式2
3-5-2-2.png


それでは、実際に内積を計算してみます。

図1
3-5-2-3.png

図1のベクトル r とベクトル x の成分が式3のとき、

式3
3-5-2-4.png

式4の内積となります。

式4
3-5-2-5.png


今度は、ベクトルが直角三角形になっていない場合の内積です。

図2
3-5-2-6.png

図2の目盛りが「1」の場合、式5の内積が算出されます。

式5
3-5-2-7.png


なお、式2は、多次元にも拡張できるため、式6が成り立ちます。

式6
3-5-2-8.png

式6を簡略化して総和∑で表すと、式7となります。

式7
3-5-2-9.png


成分表示による内積をPythonで確認してみます。

参考サイト
DeepAge(ベクトルの内積や行列の積を求めるnumpy.dot関数の使い方)

--------------------
import numpy as np

r = np.array([-1, 3]) # ベクトル r の成分(r1, r2)
x = np.array([4, 2]) # ベクトル x の成分(x1, x2)

rx = np.dot(r, x)  # 1次元内積の計算(r1・x1 + r2・x2)

print("rx = " + str(rx))

--------------------
出力結果
rx = 2


内積を算出するAPIがあるとは本当に便利なものですね。

ディープラーニングG検定の勉強中 その18(内積)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、内積について見ていきます。


内積は、ベクトル間の積を求めるものです。

参考サイト
Studyplus(【内積とは】ベクトルの内積の意味や公式・計算方法を知って大学合格へ!)

図1
3-5-1-1.png

図1のように、ベクトル r とベクトル x があるとき、
ベクトル x と、ベクトル r の向きと大きさをベクトル x と同じ向きの大きさに換算したもの(ここでは ベクトル x' とする)を掛けることでこの2つのベクトルの内積を算出することができます。

上記の太字は、つまりはベクトル r とベクトル x の比を求めようとしているわけで、要するに、この式は、cosに相当します。

式1 直角三角形で、θ = 30°のときのx / r
3-5-1-2.png

式1によって比が算出されたら、後はベクトル r の式1の比を掛け合わせることで、ベクトル x と同じ向きの大きさベクトル x' が算出されるので、

式2 ベクトル r = 2、ベクトル x = √3 のとき
3-5-1-3.png

図2
3-5-1-4.png

あとは、ベクトル x と、ベクトル x' をかけると、内積が算出されます。

式3
3-5-1-5.png

ベクトル x' は、ベクトル r のことなので、式4となります。

式4
3-5-1-6.png


なお、2つのベクトルは、それぞれが直角三角形の2辺を構成している必要はなく、要は、ベクトル r からのベクトル x と直角になる垂線で新たな直角三角形を作って計算するイメージなので、例えば、
ベクトル r = 3、ベクトル x = 4の場合でも、式5のように内積を算出することができます。

式5 θ = 30°の場合
3-5-1-7.png

この式を一般化すると式6になります。

式6
3-5-1-8.png


なお、ベクトル r とベクトル x の角度θについて、

角度0°のときが最も内積の値が大きくなり(比が1となるため)、
角度180°のときに内積が最小となります(比が-1となるため)。
角度90°のときは、内積は0となります。

ディープラーニングG検定の勉強中 その17(三角関数)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、三角関数について見ていきます。


直角三角形の特徴

直線 x の2倍の長さの直線 r

図1
3-4-1-1.png

で直角三角形を作ると、その内角が、90°、60°、30°の直角三角形になります。

図2
3-4-1-2.png

このとき、y の長さが不明ですが、三平方の定理で計算すると、

式1
3-4-1-3.png

y の長さが導き出されます。
なお、直角以外の角の角度が同じ場合は相似が成立するため、x と r が接する角度が60°の場合には、いつも式3の比率が成り立つわけです。

式3
3-4-1-4.png

そして、このように直角三角形の3辺の比率をsin(正弦)、cos(余弦)、tan(正接)で表したものが「三角比」です。


三角比

式4 三角比
3-4-1-5.png

つまり、θが60°のときには、sin、cos、tanの比率は式5となります。

式5
3-4-1-6.png

ところで、なぜsinを正弦、cosを余弦、tanを正接と呼ぶのかについては、下記のサイトに説明があります。

CinderellaJapan(「正弦」の意味)


三角関数

三角比では、内角についてのみの比率が算出されるだけですが、
単位円を用いると、三角比が外角にも拡張されます。
単位円は、半径 r が「1」の円です。

図3 単位円と直角三角形
3-4-1-7.png

円に接する直角三角形の角の座標は(cosθ, sinθ)となるのですが、
外角となる座標に設定することができ、

図4
3-4-1-8.png

r が 1 で、x が -1/2 とするなら、θは120°となり、つまりは、式6となります。

式6 θ = 120°
3-4-1-9.png

このように、三角比の考え方を拡張したものを「三角関数」といいます。


三角関数のグラフ

Pythonを使って単位円での三角関数のグラフを描画してみます。

ソースの引用サイト
Qiita([python]グラフ描画のためのライブラリMatplotlibの使い方)

--------------------
import numpy as np
import matplotlib.pyplot as plt

# 描画範囲の指定
x = np.arange(0, 4.1, 0.1)

# 計算式
y1 = np.sin(x)  # xの単位はラジアン
y2 = np.cos(x)

# グラフ描画設定
plt.plot(x, y1, label="sin")
plt.plot(x, y2, label="cos")

plt.xlabel("x")
plt.xlabel("y")
plt.title('sin & cos')

# グラフのグリッドを表示
plt.grid()

# ラベルの描画
plt.legend()
# グラフの描画実行
plt.show()

--------------------
出力結果
3-4-1-10.png

ラジアンと度数の関係については把握しきれていないので、ラジアンを度数に変換するソース等は、このことがきちんと把握できたら後日作るかもしれません。

ディープラーニングG検定の勉強中 その16(ベクトル間の距離)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、ベクトル間の距離について見ていきます。


2つのベクトルを式1のように(x軸に進んだ量, y軸に進んだ量)として成分表示したとき、

式1
3-3-3-1.png

の距離dは、式2が成り立ちます。

式2
3-3-3-2.png


それでは実際の値を代入して、距離dを算出してみます。

図1
3-3-3-3.png

図1のの距離d(青い点線の始点と終点の距離)は、図1の目盛りを「1」としたときに、式3となります。

式3
3-3-3-4.png

図1を見ると分かりますが、三平方の定理で斜辺を求めたのと同じ結果になっています。


図2
3-3-3-5.png

図2のの距離dは、式4となります。

式4
3-3-3-6.png


図3
3-3-3-7.png

図3のの距離dは、式5となります。

式5
3-3-3-8.png

図2と図3は一見直角三角形になっていないように見えますが、距離dの青い点線を斜辺と見ると、直角三角形ができているのが分かると思います。その「隠れた」直角三角形から、三平方の定理によって斜辺(距離d)を求めることができます。


ちなみに、式2が成り立つということは、多次元でも成り立つことになります。それを総和∑で表したのが式6となります。

式6
3-3-3-9.png


式5をPythonで確認してみます。

参考サイト
Qiita([Python]Numpyの参照、抽出、結合)

--------------------
import numpy as np
import math

a = np.array([1, 3])
b = np.array([4, 1])

d = math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)

print("d = " + str(d))

--------------------
出力結果
d = 3.605551275463989

google検索に√13と入力した計算結果です。

式7
3-3-3-10.png

同じ結果となりました。



進捗状況

最短コースでわかるディープラーニングの数学
89/328(27.1%)

ディープラーニングG検定の試験日まであと45日

ディープラーニングG検定の勉強中 その15(ベクトルの長さ(絶対値))

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、ベクトルの長さについて見ていきます。

ベクトルの長さは、正とした向きのベクトルをそのまま正反対にしても同じであるため、ベクトルaについて、
式1のように絶対値で表します。

式1
3-3-1-1.png

このとき、図1のように各ベクトルが直角三角形になっている場合には、三平方の定理がそのまま当てはまります。

図1
3-3-1-2.png

斜辺の長さの2乗は、他の2つの辺の長さのそれぞれ2乗と等しいので、式3が成立します。

式3
3-3-1-3.png

つまり、斜辺の長さは式4となるわけです。

式4
3-3-1-4.png


このことは、3次元でも成り立ちます。
図2のとき、

図2
3-3-1-5.png

△OABと、△OBCは、それぞれが直角三角形になっているので、その2つの三角形のそれぞれで三平方の定理が成り立ちます。

式5
3-3-1-6.png

式6
3-3-1-7.png

この式5と式6から、式7も成り立つことになります。

式7
3-3-1-8.png

図2により、式8となるため、

式8
3-3-1-10.png

3次元においても、式9のように三平方の定理が成り立つことになります。同様にして式10のように多次元でも三平方の定理が成り立ちます。

式9
3-3-1-11.png

式10
3-3-1-14.png

この式10を総和∑で書くと式11になります。

式11
3-3-1-15.png


実際に数値を入れて計算してみます。

図2の目盛りを「1」とすると、式12がOCの長さということになります。

式12
3-3-1-12.png


これをPythonでも確認してみます。
参考サイト
UNPySide(【Python】三平方の定理)

--------------------
import math

OA = 3
AB = 4
BC = 2
OB = math.sqrt(OA**2 + AB**2)
OC = math.sqrt(OA**2 + AB**2 + BC**2)

print("OC = " + str(OC))

--------------------
出力結果
OC = 5.385164807134504

式10の√29と一致するかどうか、googleの検索窓に入れて検索してみると、自動的に計算されて、式13となり、Pythonの出力結果と同じとなりました(小数点以下の桁数は違いますが、小数第11位までは一致しています)。

式13
3-3-1-13.png


出力結果をルート記号のままで出力できそうですが、いろいろなサイトを見ても、概数で表示していることがほとんどのようです。
そういうものなんでしょうか。

ディープラーニングG検定の勉強中 その14(ベクトルの和と差)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回からは、テキストの第3章のベクトル・行列に取り掛かります。
今回は、ベクトルの和と差について見ていきます。

参考サイト
ベクトルのいろいろ(2.ベクトルの演算について その1(和と差、実数倍))

ベクトルとは、「向きと大きさを持つ量」のことです。

ベクトルの表記は、このブログではという表記に統一します。

ベクトルの特徴

の移動距離と向きがまったく同じ場合は、2つのベクトルは等しい

図1
3-1-1.png

図1でみると、a’、あるいは、b’は等しいです。


ベクトルの成分表示

x軸の向きとy軸の向きとそれぞれの大きさを(a, b)のように表します。
図1でのは、(0, 3)、とは、と(3, 1)と表します。


ベクトルの和

ベクトルの和、は、図1で見ると、

図1
3-1-1.png

・点Aから点Bに進み、その点Bから点Cに進む
・点Aから点Cに直接進む

のでは、その量は同じと考えます。
よって、式1が成り立ちます。

式1
3-1-3.png

計算は、各ベクトルのx軸ごと、y軸ごとに行いますが、それを式1に当てはめると、式2も成立します。

式2
3-1-2.png

なお、式2は多次元にも当てはまるため、それぞれのベクトルにz軸を追加しても和を計算することが可能です。

それでは、図1を使ってベクトルの和を計算します。グラフの目盛りは1単位ごととします。

式3
3-1-4.png

ちなみに、a’b’の和もの量と等しくなります。

式4
3-1-5.png


ベクトルの差

図1において、からを引いたものは、と等しくなります。

式5
3-1-6.png

これを計算すると、式6となります。

式6
3-1-7.png

このときのは、元々のの値と同じです。


ベクトルのスカラー倍

と向きが同じで、のk倍のをスカラー倍と呼び、式7のように表記する。

式7
3-1-8.png

成分表示では、式8となる。

式8
3-1-9.png


それでは、今回の計算をPythonでも実施してみます。

参考サイト
Math Python(NumPyでベクトルの足し算と引き算を行う)

--------------------
import numpy as np

a = np.array([0, 3])  # ベクトルaの成分表示
b = np.array([3, 1])
c = a + b   # ベクトルの和
b = c - a   # ベクトルの差
k = 3    # 倍数
d = a * k   # ベクトルaのスカラー倍

print("c = a+b = " + str(c))
print("b = c-a = " + str(b))
print("d = a*k = " + str(d))

--------------------
出力結果
c = a+b = [3 4]
b = c-a = [3 1]
d = a*k = [0 9]


Pythonだと多次元のベクトルの計算がすごく簡単そうですね。



進捗状況

最短コースでわかるディープラーニングの数学
85/328(25.9%)

ディープラーニングG検定まであと47日

【悲報】アズールレーン クロスウェーブをもうクリアしたぁ

PS4で可愛い女の子が艦船の艤装を付けてバトルを繰り広げるゲーム「アズールレーン クロスウェーブ」をプレイしていたのですが、

あっさりクリアしてしまいました!w

スタッフロール
20190922-1.jpg

プレイ時間は、15時間あるかないかというところです。

ただし、これはストーリーモードの話で、このゲームには、

20190922-2.jpg

上の画像のように、エクストリームバトルや様々なKAN-SENのエピソード編があり、

エピソード(未着手)
20190922-3.jpg

それに加えて、KAN-SENとのケッコン? 的なやり込み要素もあるため、全体的には30~50時間かそれ以上は楽しめるようです。


それでは、ストーリーモードで遊んでみた感想を書いてみます。


1.キャラクター
このゲームのメインは何と言っても4ヶ国(日本、アメリカ、イギリス、ドイツ)の艦船を模した架空の国の様々なKAN-SENでしょう。
それぞれ特色のある女の子の姿をしていて、どのキャラクターもとても可愛らしかったです。

提督の好みを全て押さえた完璧なKAN-SEN
20190922-4.jpg

そのハムマンを見せろ(爆)
20190922-6.jpg

それになかなかKAN-SENのデザインもいいと思います。

20190922-5.jpg

全体的に、私を含めたプレイヤーのツボを完璧にリサーチしたような感じなので、「たまんねぇな!」とプレイしながら思ってました。


2.アクション
このゲームでは、秘書艦を自キャラとして、3Dバトルを楽しむことができます。
海外のFPS・TPSのようなガチ殺戮バトルではないので、ややゆるい感じではあるのですが、
第5章以降は、しっかりプレイしないとゲームオーバーになることも出てきます。

私の場合、第5章に入るまで、魚雷を撃たずにプレイしており、そのため第5章の敵に全く勝てなかったのですが、
魚雷を含めた全ての兵装をきちんと使い、敵の攻撃から素早く逃げることで、クリアできました。
まあ、逆に言えば、それさえきちんとできれば、エンディングは誰もが見れる難易度だと思います。


3.音楽
どの曲もよかったです。
本家のBGMと同じものもあるようで、今回のプレイでの私のお気に入り曲は、この曲でした。

【アズールレーンBGM】背水の戦い



4.プレイのリズム
序章~第1章のほとんどは会話シーンなので、アクションバトルを楽しみたい人にはかなりじらされる感じになると思います。
まあ、シナリオ自体はとても楽しい内容なので、可愛い女の子の振る舞いを楽しむことができればいいのではないかと思います。
第2、3章以降は各国KAN-SENとのバトルを楽しめるし、途中からは、エクストリームバトルも開幕するので、そちらでいくらでもバトルを楽しめますよ。


5.総評
まだストーリーモードしかクリアしてないので、あくまでその時点での評価ですが、
よくできた内容だとは思いました。が、もうちょっとストーリーモードが長くてもよいかなぁと思いました。

アプリ版をプレイしたことがないのでよく分からないのですが、もしかしたら、むしろこのゲームではエクストリームバトルがメインなのかもなぁというところです。
せっかく定価で購入したので、今後は他のゲームをしながら、時々、このゲームも続けようかと思います。
私は特にラフィちゃんが好きすぎるので、この子をケッコンまで成長させてみたいです。

というところで、星10個満点でこのゲームを評価するなら、

☆☆☆☆☆☆☆☆

というところでしょうか。メインストーリーに主眼を置くなら星6個くらいですが、エンドゲームの役割も果たすエピソード編やエクストリームバトルでのやり込み要素や、ラフィちゃんとオブザーバーの可愛さで星2個追加しました。


さて、今後は、未クリアのゲームが、

・DOOM
・ボーダーランズ2
・プリンセスクラウン
・ドラゴンズクラウンPRO
・ブラッドボーン
・その他

とたくさんあるし、
さらに、最近PS4で発売されたトラック運転ゲームかバス運転ゲームもプレイしてみたくはあるのですが、
んーーー、まずはDOOMを片付けるべく(ボリュームがやたらある)、プレイを再開してみますかね☆







最近聴いた曲

通常運転


サムネで選んだ


後半の盛り上がりがよい








HI! VEVO Vol.169

Billie Eilish - all the good girls go to hell


よろよろ歩く天使の行く末が気になるMV






クラシック曲を忘れない Vol.69

カンタータ「お願いだ、もうやめてくれ」より、「ああ、いつも不幸な人」


ヴィヴァルディ作曲。この作曲家の作品には四季以外にもたくさん名曲がありますが、そのうちの1曲。









ニコニコ動画のリンク


サムネで選んだ




待ってたよ~




RTA(リアル登山アタック)



ファミレスで居酒屋メニューを注文して過ごすのが好き

ディープラーニングG検定の勉強中 その13(商の微分)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、商の微分についてです。

f(x)をg(x)で割ったものを微分したもの

式1
2-8-1.png

について見ていきます。

参考サイト
KIT数学ナビゲーション(基本的な関数の微分 1/x)
KIT数学ナビゲーション(合成関数を微分する手順)

式1の、

式2
2-8-2.png

となります。

よって、積の微分の公式により、

式3
2-8-3.png

が成り立ちます。
ただし、h'(x)のままでは計算できないため、一旦式を分解してから、合成関数の形にして計算できるようにします。

まずは、式2のg(x)の分数表示を、分数の指数表示にします。

式4
2-8-4.png

ここで、g(x)を u に置き換えて、2つの関数に分解します。

式5
2-8-5.png

①をdy/duとして、微分します。

式6
2-8-6.png

②をdu/dxとして、微分します。

式7
2-8-7.png

①と②に分解した微分を合成関数の微分の公式に代入します。

式8 合成関数の微分の公式
2-8-8.png

式9
2-8-9.png

これで、計算可能な形になったので、式3に代入して、

式10
2-8-10.png

この式10で導き出された式が商の微分の公式となります。


それでは、商の微分の公式に、実際の関数を代入してみます。

以下の2つの関数があるときに、

式11
2-8-12.png

商の微分の公式、
式12
2-8-11.png

に代入すると、式13となり、

式13
2-8-13.png

これを計算すると、式14の、2つの関数による商の微分の結果となります。

式14
2-8-14.png


この計算結果の検算として、Pythonでも確かめてみます。

--------------------
import sympy as sym

x = sym.Symbol('x')

fx = 2 * x**3 + 4 * x**2  #f(x)
gx = 3 * x**4      # g(x)

fxd = sym.diff(fx)    # f '(x)
gxd = sym.diff(gx)   # g '(x)

fxgx = ((fxd * gx) - (fx * gxd))   # 商の微分の公式の分子の計算

sym.Eq(sym.Derivative(fx/gx), sym.expand(fxgx / (gx**2)))

--------------------
出力結果
2-8-15.png


Pythonで商の微分をsympy.diff()だけで行おうとすると、出力結果が分かりにくいものとなるため、
今回は、計算が単純になるようにしてから微分しています。


商の微分の次は積分ですが、テキストの第6章までは特に活用されないみたいなので、
先に次の章となる、ベクトル・行列の勉強に進みます。


ディープラーニングG検定の勉強の進捗状況

最短コースでわかるディープラーニングの数学
76/328(23.2%)

ディープラーニングG検定の勉強中 その12(逆関数の微分)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、逆関数の微分についてです。

y = f(x) のグラフの接点が(a, b)であるときの接線の傾きは、

式1
2-7-2-1.png

となります。

f(x)の逆関数 y = g(x)のグラフの接点が(b, a)である接線の傾きは、

式2
2-7-2-2.png

となります。

実際の関数 f(x) = x^2 - 2x + 1 で見てみます。

式3
2-7-2-3.png

以上です。

ディープラーニングG検定の勉強中 その11(合成関数の微分)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、合成関数の微分についてです。

f(x)という関数の出力結果をg(x)という関数として使い、その結果を出力するのが合成関数で、
その合成関数の微分の公式は以下となります。

式1
2-7-1-1.png

実際の合成関数(式2)にこの公式を当てはめてみます。

合成関数の最初の関数が①、その出力を関数として使ったのが②で、
その最終的な結果が y として出力される場合は、

式2
2-7-1-6.png

微分の公式を利用して、

式3 rは実数
2-7-1-3.png

まずは、式2の②の出力 y を微分します。

式4
2-7-1-4.png

u に①を代入して式5となります。

式5
2-7-1-5.png

次に①の関数を微分して、式6です。

式6
2-7-1-7.png


これでdy/duとdu/dxが分かったので、式1の合成関数の微分の公式に当てはめて、

式8
2-7-1-8.png

合成関数の微分の結果が導き出されました。


これをPythonで確認してみます。

--------------------
import sympy as sym

x = sym.Symbol('x')

u = x**2 - 2 * x + 1
y = u ** (1/2)

sym.Eq(sym.Derivative(y), sym.diff(y))

--------------------
出力結果
2-7-1-9.png

()の0.5乗というのは、平方根のことです。Pythonでは、計算結果として平方根が出る場合は、自動でルートの記号で表示してくれるみたいなのですが、平方根の計算そのものだとルート記号を使ってくれないみたいで……(方法を見つけたら更新するかも)。

アズールレーン クロスウェーブをプレイ中 その3

PS4でいろいろな艦船(女の子)が出てくるアクションゲームをプレイしています。


連休の最終日、数学の勉強の傍らでアズレンをプレイしました。
何とか第4章の最初まで進めました。

ストーリーが進むことで、

「重桜」以外の国のKAN-SENと出会ったり、

プリケツが面白いサングラスしてる
20190916-1.jpg

しようや(直球)
20190916-4.jpg


汎用艦船と戦ってみたり、

敵のKAN-SENをフォローするモブ敵。でも放置すると面倒なので適宜やっつける必要あり。
20190916-2.jpg

セイレーンの人物と出会ってしまったり、

北斎漫画かな?
20190916-3.jpg

しています。

また、合同演習が進むと、「Aポイント」を使って、仲間のKAN-SENも増やすことができ、

しようか(直球)
20190916-6.jpg

森に行こうか
20190916-7.jpg

踏んでください! お願いします!
20190916-8.jpg

という感じで、アズレン各国のKAN-SENを仲間にできて嬉しいです。


バトルでは、メインの攻撃艦を3艦まで、修復等のフォロー艦も3艦までメンバーにすることができるのですが、
敵の構成が分からないときには、駆逐艦、軽巡か重巡と空母か戦艦、という風にいろいろな種類を入れておくと、どのような敵にも対処しやすいと思いました。
でも、イベントバトルの後は、同じ敵と何度でも戦えるので、敵の構成が分かっているときには、同じ艦種で一気に片を付けるのもありです。


うん、だんだん面白くなってきました。バトル時の艦種の選択を誤ると、轟沈させられることも出てきたので、歯ごたえも感じてきています。

という感じでプレイを進めていきます。










最近聴いた音楽












HI! VEVO(とか) Vol.168

YesSongs #7: YES - Roundabout


アニメジョジョのED曲。クリアな音質版はこちら





クラシック曲を忘れない Vol.68

トリッチ・トラッチ・ポルカ


ヨハン・シュトラウス2世作曲。運動会御用達。







ニコニコ動画のリンク


沢蟹は美味しそうだ




キャラはパルムだし、GODモードだしで完璧だな




MMDの種類にもいろいろあるね



ゆべしはなかなかうまいね

ディープラーニングG検定の勉強中 その10(積の微分)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、積の微分についてです。

関数と関数を掛けたものを微分する……えっ、何でそんな面倒なことするの?

と思ったりもしておりますが、計算は可能なので、見ていきます。

積の微分では、f(x)とg(x)を掛け合わせたものを微分するわけですが、
その際に、f '(x)の接線の接触部分である接点を中心に拡大すると直線とほとんど同じになることから、

ディープラーニングG検定の勉強中 その9(微分と関数値の近似、極大・極小)
の中で、関数と微分の近似の式を導き出しています。


であれば、g'(x)も同様に当てはまることになります。それが式1です。

式1
2-6-1.png

積の微分では、式1を利用して2つの関数から算出します。
式1をf(x)とg(x)の積の形に変形します。

式2
2-6-2.png

そもそもの微分の式は、以下ですが、

式3
2-3-1-7.png

その式の分子をf(x)とg(x)の積に応用します。

式4
2-6-3.png

この式4は、式2に置き換えることができるので、これを計算すると、式5となります。

式5
2-6-4.png

式5に置き換えているのは、積の微分を計算可能とするためです。
この式は、積の微分の式の分子部分となります。


ここで、式3を積の微分に応用した式6によって、計算しますが、

式6
2-6-5.png

このままでは、計算し辛いため(※)、

※このことを説明しているサイト
高校数学の美しい物語(積の微分公式とその証明の味わい)

分子を式5と入れ替えて計算を行い、積の微分を算出します。

式7
2-6-6.png


それでは、実際に異なる2つの関数(式8)を代入して計算してみます。

式8
2-6-7.png

式9
2-6-8.png

式9で算出された積の微分が正しいかどうか、Pythonで検算してみます。

参考サイト
note.nkmk.me(Python, SymPyの使い方(因数分解、方程式、微分積分など))
Python 数値計算入門([SymPy] 多項式の展開と因数分解)

--------------------
import sympy as sym

x = sympy.Symbol('x')

fx = x**2 + 4 * x    # f(x)
gx = x**3 + 3 * x ** 2  #g(x)

fxgx = sym.expand(fx * gx)  # f(x) × g(x)

sym.Eq(sym.Derivative(fx*gx), sym.diff(fxgx))  # 積の微分の式、その計算結果とその出力

--------------------
出力結果

2-6-9.png

式9と同じ結果となりました。
Pythonでは式や計算結果を整形して出力する機能があるのでこれも便利ですね。
積の微分では、今回の方法の他に「仲介役」を挟んで計算する方法もあるので(上記数学サイトに記載があります)、こちらも理解しておきます。

進捗状況

最短コースでわかるディープラーニングの数学
66/328(20.1%)

ディープラーニングG検定の試験日まであと54日

ディープラーニングG検定の勉強中 その9(微分と関数値の近似、極大・極小)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、まずは微分と関数値の近似についてです。

関数の直線について、2点(x, f(x))、(x+h, f(x+h))を結んだ関数の直線の傾きをグラフにすると、以下となります。

2-3-2-1.png

このとき、xに、x+hと微少の値を増やしたとき、f(x)の変化量との間には、以下の式が成り立ちます。

式1
2-4-3.png

例えば、f(x)=2 * x のとき、xが1でその増加量が、0.000000001のときには、
f(x)は、の増加量は0.000000002になるので、

2.000000002 ≅ 2 * 1.000000001 が成り立ちます。つまり、xの微量の増加によるf(x)の変化量は、hf '(x)と等しくなります。

接線についても、

2-3-2-2.png

dxがhと同様に微少の値が増加するときのf(x)の変化量は、f '(x)dxと等しくなり、式2が成立します。

式2
2-4-4.png

つまりは、式3が成立することになります。

式3
2-4-5.png

なお、上記の式から、f '(x)の値が0になるときには、f(x)の変化量も0となります。
そして、f '(x)=0となるxの地点(接線の傾き0)では、関数の形が山頂になっていたり、谷底になっていたりします。
関数の形が山頂のときには「極大」、谷底のときには「極小」といいます。

2-4-1.png

ただし、f '(x)=0のときに極大にも極小にもならない関数もあります。

2-4-2.png


なお、f '(x)=0のときに、極大または極小になるという原理は、ディープラーニングで用いられる「勾配降下法」に関連してくるとのことです。

ディープラーニングG検定の勉強中 その8(接線の方程式)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

今回は、接線の方程式を求めますが、まずは直線の方程式から。


傾きがm、切片がbの直線の方程式は、以下の式となります。

式1
2-3-3-2.png

次に、点(p, q)を通る、傾きがm、切片がbの直線の方程式は、以下の式となります。
pはx座標の数値、qはy座標の数値なので、

2-3-3-3.png

このとき、bは以下のように置き換えることができます。

2-3-3-4.png

よって、求める方程式は以下となります。

式2
2-3-3-5.png


この式を元に、単なる直線ではなく、とある曲線の接点を通る接線の方程式にするには、
上記のp、q、mを以下のように置き換えて、

2-3-3-6.png

点(a, f(a))=接点 を通る方程式ができあがります。

式3
2-3-3-7.png


では、ここで、a=2のときの、接線の式を算出してみます。

関数のxに2を代入して、f(2) = 1
2-3-3-9.png

関数を微分して、xに2を代入して、f '(2) = 2
2-3-3-10.png

上記の値を接線の方程式に代入して、y = 2x - 3
2-3-3-11.png


それでは、関数と接線の方程式の直線をPythonを使ってグラフにしてみます。

--------------------
import matplotlib.pyplot as plt
import numpy as np

def main():
 x = np.arange(0, 3.1, 0.1)
 x2 = np.arange(0, 3.1, 0.1)

 y = np.arange(-2, 3, 0.1)
 y2 = np.arange(0, 3, 0.1)

 f = x**2 -2 * x + 1  #関数の曲線
 f2 = 2 * x2 - 3    #接線の直線

 y = f
 y2 = f2

 plt.plot(x, y)
 plt.plot(x2, y2)

 plt.grid(color='0.8')
 plt.show()

if __name__ == '__main__':
 main()

--------------------
出力結果

y = x^2 - 2x +1と、y = 2x - 3のグラフ
2-3-3-1.png

どうやら正解のようです。

ディープラーニングG検定の勉強中 その7(ディーワイディーエックス)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って勉強しています。

まずは、前回の微分の公式

公式1
2-3-1-7.png

に関数を当てはめて、接線の傾きを算出してみます。

関数1
2-3-1-9.png

公式1に関数1を当てはめて計算すると、

計算結果1
2-3-1-10.png

となります。

この計算結果には、以下の公式が当てはまります。

公式2
2-3-1-11.png

つまり、関数の指数の数をxの倍数にして、xの指数を1引くと、

計算結果2
2-3-1-12.png

計算結果1と同じ結果となります。

このことの証明はこちらのサイトで確認できます。

高校数学の美しい物語(べき関数(y=x^n)の微分公式の3通りの証明)


計算結果、f'(x)=2x - 2の「xを少しだけ増加したとき」をΔx、そのときの「f'(x)の増加量」をΔyとすると、

2-3-1-13.png

と表記できますが、これをさらに簡略化すると、以下の表記となります。

2-3-1-14.png

そして、この式の読み方は、「ディーワイディーエックス」となります。


この微分の公式での上記の関数1の計算をPythonのソースにすると、以下となります。

参考サイト
Qiita(微分や微分方程式をPythonで理解する)

--------------------
import sympy as sym
sym.init_printing(use_unicode=True)

a, b, c, x, y = sym.symbols("a b c x y")

# 関数
expr = x ** 2 - 2 * x + 1

# 関数を微分
#sym.Derivative(expr)

# 微分とその結果の出力 出力結果:2x - 2
#sym.Derivative(expr).doit()

# 微分の実施、微分の式とその計算結果の出力
sym.Eq(sym.Derivative(expr), sym.diff(expr))

--------------------
出力結果
2-3-1-15.png


微分の計算と出力が1行だけ! Pythonの数学モジュールはすごいですね~

アズールレーン クロスウェーブをプレイ中 その2

PS4版の3D艦船アクションゲームをプレイしています。


ようやく第1章の4ヶ国合同演習に取り掛かったところで、
模擬戦に出てみて、

20190910-1.jpg

完全勝利したり、

デーデデーデーデ↓ーデ↑ーデー(違
20190910-2.jpg

他国のKAN-SENが挨拶したりして、

20190910-3.jpg

合同演習が今まさに始まろうとしています。

……でも、何て言うか、ちょっと会話シーンが長いかな~
PSVITAの聖魔導物語の序章を思い出しましたよ…

でもまあ、それ込みで楽しむのもまた一興というところでしょうか。

声優さんの声も可愛いし、ここはニヤニヤしながら各KAN-SENの会話を楽しみ尽くすとしましょう。

と言う感じで、

20190910-4.jpg

ストーリーが先に進みそうな予感を得つつ、プレイを続けていきます。









最近聴いた曲











HI! VEVO(とか) Vol.167

DJ Snake & Zhu - No More (Lyric Video)


静かなテンションですが、聴き入ります。





クラシック曲を忘れない Vol.67

くるみ割り人形より、「金平糖の踊り」


チャイコフスキー作曲。短いVerはこちら










ニコニコ動画のリンク


きりたん動画




レーション、いつか食べてみたい




パケットを(あまり)殺さない動画をようやく見つけた(プレイは03:20ごろから)。
うまいプレイはこちら




面白かった(語彙力



梨のチューハイ大好き

ディープラーニングG検定の勉強中 その6(微分)

書籍「最短コースでわかるディープラーニングの数学」の内容に沿って今回も進めていきます。

2-3-1 微分の定義

とある曲線のある点(座標)を通る線、しかもその点だけが触れている線のことを接線と言います。

曲線と、曲線の1点のみに接した線(接線)
2-3-1-4.png

そして、曲線には、接線が触れている点(接点)を中心に拡大を続けると、ほぼ直線と同じになる、という特徴があります。

曲線とそれを拡大した図の説明サイト
Sci-pursuit(微分とは何か? - 中学生でも分かる微分のイメージ)

では、実際の直線と、拡大すると限りなく直線に近付く曲線との違いは何か。
それは、直線にはその線上に常に同じ傾きしかないのに対し、曲線には、その接点ごとに違う傾きを持つ直線(接線)が存在するということです。

曲線と、接点の場所ごとに異なる傾きを持つ接線
2-3-1-1.png

そして、曲線上のある接点ごとの傾きを数値として表したものが「微分」です。


それで、接点ごとの接線の傾きが微分……なのはいいとして、だから、それが何?

と私も思ってしまうのですが、例えば、
x軸を時間、y軸を距離としたときに、
距離/時間で速度が算出されるのですが、この速度が上記の「傾き」に相当します。

つまり、とある事象(車のレース)において、一定時間(x秒)ごとに車が進んだ距離(yメートル)と、その比としての速度がその都度算出されるのなら、その車のレース中の挙動について、速度の観点から分析できるようになるわけです。

そして、グラフでは、とある地点での速度を、傾きを持った直線で表すのです。
ちなみに、速度の場合なら、接線の傾きが大きければ大きいほど、速いことになります(同じ時間でも、より長い距離を走るほうが速い)。


なお、2つの点(始点:x1, y1)、(終点:x2, y2)を通る直線の傾きaは、この式で算出され、

2-3-1-5.png

その直線をグラフで表すと、以下のようになりますが、

始点(5, 15) 終点(15, 35)を通る直線(y = 2x + 5) 傾き2 切片5
2-3-1-6.png

単なる直線だけではなく、曲線のとある接点を通過する接線の傾きを一般式で表すと以下のようになります。

2-3-1-7.png

2つの点を結ぶ直線の傾きという考えは同じで、始点:(x1, y1) 終点:(x2, y2)に当てはめるなら、
始点:(x, f(x)) 終点:(x+h, f(x+h)) となります。

つまり、f(x)はyを意味し、hはx2 - x1を意味しているわけです。


ところで、なぜ傾きの算出にはこの式1があるのに、

式1
2-3-1-5.png

なぜわざわざ別の一般式
式2
2-3-1-7.png

があるのかと思われるかもしれません。この違いは、
式1だと、必ずしも接線にはならない場合があるのに対し、

2-3-1-8.png

式2、つまり微分を計算するための式では

2-3-1-4.png

必ず接線になる傾きが算出される、というところにあるのです。

必ず接線が算出される理由は、式2の極限(lim h→0)にあります。
hは、つまりはxの長さ(x2-x1)なのですが、hを限りなく0に近づける(h→0)ということは、
接点に限りなく近いことを意味するのです。
そして、接点のみを通過する直線は、すなわち接線になるし、
接点を中心にグラフを拡大していくと、それは限りなく接線そのものとなるのです。


というわけで、以下pythonで、2点間を通る直線を描画するグラフのソースと微分の式による二次曲線と接線のグラフを描画するソースとなります。

参考サイト
Qiita([python]算数・数学①~関数と方程式~)
GGE清須電脳倶楽部(05.04 微分)

1.連立一次方程式で2点間を通る直線を描画する
--------------------
import numpy as np
import matplotlib.pyplot as plt
from sympy import Symbol,solve

# Figureを設定
fig = plt.figure()

# Axesを追加
ax = fig.add_subplot(111)

# x軸の目盛設定
ax.set_xticks([-10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50])

# y軸の目盛設定
ax.set_yticks([-10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50])

x1 = 5 # 始点x
y1 = 15 # 始点y
x2 = 15 # 終点x
y2 = 35 # 終点y

#直線の傾き
a = (y2 - y1)/(x2 - x1)   # yの長さをxの長さで割ると傾きが求められる
print("直線の傾きa= " + str(a))

#2点の座標から、直線の式とグラフを求める
a1 = Symbol("a1")
b1 = Symbol("b1")
ex1 = x1*a1 + b1 - y1  # 始点(x1, y1)
ex2 = x2*a1 + b1 - y2  # 終点(x2, y2)
ans = solve((ex1,ex2))
print("傾き=" + str(ans[a1]),"切片=" + str(ans[b1])) # 2点を通る一次直線の式 y = a1 * x + b1

plt.plot(x1,y1,marker="x",color="red") # 始点
plt.plot(x2,y2,marker="x",color="red") # 終点

y = ans[a1] * x + ans[b1]
print("y = " + str(ans[a1]) + "x + " + str(ans[b1]))

#グラフの描画
x = np.arange(0,20) # xの取る数値の範囲
plt.plot(x,y)  # 直線の描画
plt.plot(x1,y1,marker="x",color="red") # 始点の描画
plt.plot(x2,y2,marker="x",color="red") # 終点の描画
plt.grid()
--------------------
出力結果
直線の傾きa= 2.0
傾き=2 切片=5
y = 2x + 5

グラフ
2-3-1-6.png



2.微分の式による、様々なxの値での接線の描写
--------------------
import numpy as np
import matplotlib.pylab as plt

def numerical_diff(f, x):  #傾きを求める
 h = 1e-4 # 0.0001
 return (f(x+h) - f(x-h)) / (2*h)

def function_1(x):    #曲線を求める
 return 0.01*x**2 + 0.1*x

def tangent_line(f, x):  #接線を求める
 d = numerical_diff(f, x)
 print("接線の傾き= " + str(d))
 y = f(x) - d*x
 return lambda t: d*t + y

x = np.arange(-40.0, 40.0, 0.1)  #点描でxが値を取る範囲
y = function_1(x)
plt.xlabel("x")
plt.ylabel("f(x)")

tf = tangent_line(function_1, 5)  #x=5の接線
tf2 = tangent_line(function_1, 0)
tf3 = tangent_line(function_1, -5)
tf4 = tangent_line(function_1, 10)
y2 = tf(x)
y3 = tf2(x)
y4 = tf3(x)
y5 = tf4(x)
plt.plot(x, y) #曲線の描写
plt.plot(x, y2) #接線 x=5 の描写
plt.plot(x, y3)
plt.plot(x, y4)
plt.plot(x, y5)
plt.show()

--------------------
出力結果
接線の傾き= 0.1999999999990898
接線の傾き= 0.1
接線の傾き= -1.3877787807814457e-13
接線の傾き= 0.2999999999986347

グラフ
2-3-1-1.png


進捗状況
最短コースで分かるディープラーニングの数学
54/328ページ まで読了(16.5%)

試験まであと62日

ディープラーニングG検定の勉強中 その5(逆関数)

書籍「最短コースでわかるディープラーニングの数学」に沿って学習していきます。

今回は2-2-2の逆関数についてです。

入力した内容に何らかの処理をして出力したときの「何らかの処理」が関数ですが、
出力した内容を元の入力の内容に戻す働きをするのが「逆関数」です。

下記の関数について、

式1
2-2-2-1.png

逆関数にしてみます。
ただし、この関数は、xの値が2つ(±x)存在するため、xの範囲を「x≧-2」に限定して、f(x)=yを満たすxを決める逆関数に変換します。

2-2-2-2.png

逆関数の表記は以下となります。

2-2-2-3.png


この内容をPythonで作成して、グラフも作ってみました。

参考サイト
Python 数値計算入門(平方根の演算)
アシベパンチ([Python] Matplotlibで2つの折れ線グラフを表示する)
Matplotlib 超入門(3)文字の大きさ,グリッド幅

--------------------
import matplotlib.pyplot as plt
import numpy as np

def main():
 var("a:z")
 x = np.arange(-2, 0.1, 0.1)  #グラフのx軸の表示範囲
 x2 = np.arange(-2, 4.1, 0.1)
 #x3 = np.arange(-2, 4.1, 0.1)
 x4 = np.arange(-2, 4.1, 0.1)
 y = np.arange(-2, 4, 0.1)   #グラフのy軸の表示範囲
 y2 = np.arange(-2, 4, 0.1)
 #y3 = np.arange(-2, 4, 0.1)
 y4 = np.arange(-2, 4, 0.1)
 f = x**2 + 4 * x + 4     #関数f(x)
 f2 = pow(x2, 0.5) - 2     #平方根の計算
 #f3 = -(pow(x3, 0.5)) - 2
 f4 = x4
 y = f
 y2 = f2
 #y3 = f3
 y4 = f4
 plt.plot(x, y)        #グラフの表示
 plt.plot(x2, y2)
 #plt.plot(x3, y3)
 plt.plot(x4, y4)
 plt.grid(color='0.8')
 plt.show()

if __name__ == '__main__':
 main()
--------------------

式1 x≧-2 のグラフ ※橙色が逆関数のグラフ
2-2-2-4.png

x≦-2 のグラフも追加 ※緑色が追加分
2-2-2-5.png


関数と逆関数のグラフがy=xのグラフに対して対象となっています。


Pythonで平方根を使ったときに、負数が含まれていると、Warningが出てしまうのですが、ネットを検索しても解決に結びつくものがなかったです。んんー? 探し方が悪かったかなぁ?


進捗状況
最短コースで分かるディープラーニングの数学
51/328ページ まで読了(15.5%)

試験まであと68日

ディープラーニングG検定の勉強中 その4(合成関数)

最短コースでディープラーニングの数学を進めていきます。

式1
2-2-1-1.png

①の出力を得た後に、その結果を使って②を出力する場合(この式では、ルートの中を計算してからその答えをルートする)、それを1つにまとめたものを「合成関数」と言います。

この①②を合成した関数h(x)は、

式2
2-2-1-2.png

と書けますが、これを合成関数として書くと、以下のようになります。

式3
2-2-1-3.png

出力順は右からなので、先にf(x)を出力して、その結果をg(x)に通して出力することになります。

これを計算してみると、f(x)がx=4のとき、以下のようになります。

式4
2-2-1-4.png


ん、把握しました。

この合成関数の考え方は、後の複雑な微分を解くときに役に立つとのことです。


それで、この合成関数をPythonで組んでみました。
式1の関数で、f(x)のxに4を代入した場合です。

参考サイト
Samurai Blog(Pythonで関数型プログラミングのエッセンスに触れてみよう)

--------------------
import math
import toolz

def main():
 g = lambda x: math.sqrt(x)  #g(x)
 f = lambda x: x**2 - 2*x + 1  #f(x)
 
 h = toolz.compose(g,f)    #h(x)=g◦f(x)
 print("f(4)="+str(h(4)))

if __name__ == '__main__':
 main()
--------------------

出力結果
f(4)=3.0


Pythonにはきちんと合成関数を計算できるモジュールがあるんですね。便利です。


進捗状況
最短コースで分かるディープラーニングの数学
48/328ページ まで読了(14.6%)

試験まであと68日