AI E資格

ラビットチャレンジでE資格に挑戦 17日目

コロナワクチンの副反応がましになってきた。
熱は下がったけど、全身の筋肉痛のような痛みがつらい。
なんかしんどいし。。。

今日は、3日前に勉強した内容の復習と、Chapter2の残りを学んだ。
数式がむずい。。。
何度も反復するべし。

ようやくChapter2が終わったー

2-5-1_偏微分の計算
2-5-2_パラメータ更新の実装

 

今日学んだこと

偏微分(多変数関数の微分)
wの更新式

偏微分をパイソンで実行

>>> import numpy as np
>>>
#シグモイド関数の定義
>>> def sigmoid(a):
... return 1/(1+np.exp(-a))
...
#2乗誤差の定義(mse: Mean Squared Error)
>>> def mse(y,t):
... return 0.5*(np.sum((y-t)**2))
...
>>>
#各パラメータの定義
>>> w=np.array([[0.3,0.4],[0.7,0.9]])
>>> x=np.array([[2],[1]])
>>> t=np.array([[1],[0]])
>>>
#aの計算
>>> a=w.dot(x)
>>> a
array([[1. ],
[2.3]])
>>>
#yの計算
>>> y=sigmoid(a)
>>> y
array([[0.73105858],
[0.90887704]])
>>>
#Eの計算
>>> E=mse(y,t)
>>> E
0.44919348006145793
>>>
#wの更新式の為の偏微分の関数 diff:Differential(微分)
#大文字Tは行列xの転置 1×2の行列を2×1へ変えている。
>>> def diff(y,t,a,x):
... return ((y-t)*(1-sigmoid(a))*(sigmoid(a))).dot(x.T)
...
>>>
#wの更新式
>>> w=w-diff(y,t,a,x)
#更新されたw
>>> w
array([[0.40575419, 0.45287709],
[0.54945439, 0.8247272 ]])
>>>
#更新されたwにて再計算
>>> a=w.dot(x)
>>> y=sigmoid(a)
>>> y
array([[0.77978012],
[0.87254335]])
>>>
>>> E=mse(y,t)
>>>
#少しEの値が小さくなった。
>>> E
0.4049143428617733
>>>
#100回wの更新を行う。
>>> for _ in range(100):
... w=w-diff(y,t,a,x)
... a=w.dot(x)
... y=sigmoid(a)
...
>>>
>>> E=mse(y,t)
>>>
>>> w
array([[ 1.25203093, 0.87601546],
[-1.55891013, -0.22945507]])
>>> y
array([[0.96707607],
[0.0339845 ]])
>>> a
array([[ 3.38007732],
[-3.34727533]])
#Eがすごく小さくなった。
>>> E
0.0011194658168959491
>>>

 

 

勉強時間

今日: 1.0時間

総勉強時間: 7時間

 

-AI, E資格