(AI 1) 類神經網路概念

為了實現利用python進行複雜科學運算與人工智慧,參考上圖的書,進行一些重點摘錄,並把文章內容嘗試進行python實現
所謂機器學習 or 深度學習、人工智慧...等,都是由已知資料拿來做訓練,給機器做出學習,實際上怎麼運作呢?
首先我們假設有兩筆真實資料,分別是兩種物體的長跟寬(true data),試想一下,我們是否可以找出一條直線,做出這兩個物體的分類?也就是分類器。

照這樣的思路,最簡單就是做出一條 y = Ax,我們只要找到參數A,就完成了,其中,只要透過2筆觀測(真實)資料,拿來給模式 (y = Ax) 做訓練即可。
在一開始,先給訂一個"初始條件",或是"初始猜測值"給A,假設為0.25,則我們的模式控制方程變為 y = 0.25 x 。
以上圖為例,x 為寬,y為高度,兩筆資料分別為(3, 1)以及(1, 3),照這樣的條件,畫出初始預報,如下:

當然這裡稱為預報並不洽當,但我們先這樣稱呼,由上面的綠色線可以發現,透過初始猜測值做出的分類線非常糟糕,因此我們可以透過觀測資料做修正。
但如果直接拿觀測資料做修正,分類線會直接通過觀測點,這不是我們所樂見的,因為我們並不希望 y = 1 或是 y = 3 。
因此在此處先做一點"偷雞"的事,假設先拿 (3, 1) 做訓練,因為不希望 y = 1,我們希望做出的分類線在y > 1,此處假設,y = 1.1,我們此處稱為目標值,以Y表示。
回過頭來看一開始的初始預報,y = 0.25*x,x帶入3,則y = 0.75,低估。
而與目標值Y之間的誤差為 E = Y - y = 1.1 - 0.75 = 0.35。
而機器學習的核心就在此處,透過誤差做修正,即誤差越小越好。
如何做到誤差修正?
已知,y = Ax,則令 Y = (A + dA)x
故,(Y-y) = E = dA*x
可得修正量dA = E / x,通常為了避免過度修正,會特別乘上調節係數L
因此修正公式為 dA = L (E / x)
既然得到了公式,快速地用python進行操作吧!
首先第一段是引入套件、觀測資料以及畫出觀測資料的分布:

上面的程式會很快地執行出本文的第一張圖。
接著則是初始條件與初始猜測值、預報的建立與結果:

最後則是機器學習:

for 迴圈的建立,代表依序讀取觀測資料,而讀入的觀測資料與目標值之間的誤差量,則能提供模式作修正,得到新的參數A,新的參數A會運用到下一筆觀測資料的修正上。
最後整理一下整個流程的概念:
1. 建立觀測(真實)資料,或稱為訓練資料
2.建立一組初始模式,包含了初始猜測值與初始條件
3. 將觀測資料依序帶入模式中進行訓練
4. 每一個觀測資料進行訓練(預報)時,都會與模式產生誤差,利用誤差量進行 修正,而後再進行新的訓練,直到所有資料都訓練完畢
結果如下:
