人工智能如此簡單(1)—— 關於權重與偏置

1、人工智能的本質

         人工智能是使用程序模擬人類神經感知的技術,他從根本上改變了傳統程序的思維。傳統程序採用斷言的方式來進行,而人工智能則採用抽取規律來實現對應的功能。

        這種方式其實是對分析歸納法的一種體現,隨着算力與數據量的提升使得人工智能技術變得可能。人工智能涵蓋很多領域、如機器學習、深度學習、神經網絡等。本文的內容默認都在神經網絡的架構下采用tensorflow進行實現。

2、從線性方程說起

    線性方程是我們開到的最簡單的數學公式,在二維空間中可以表示爲一條直線、直線的特徵可以用權重 W 與 偏置 b 來確定,從數學角度也可以表示爲斜率與截距。只要這兩個特徵確定,那麼直線也就確定了。所以權重 W 與 偏置 b是這個直線分佈的關鍵特徵。

  

    人工智能可以通過給定一系列的訓練值來確定整體分佈狀態,假如我們預先設置頂這個方程爲

    

3、關於求解模型

    我們可以模擬一些符合這個分佈的x值與y值用於確定這個分佈狀態、如下圖所示:


4、關於代價函數

    我們需要衡量我們學習到的參數值W與b是否真實的反應了直線的狀態,需要有一個值來衡量誤差,這個往往是一個數學函數,在這裏我們選擇最爲常見的方差函數。

    在人工智能進行訓練的時候是要是的代價函數最小,也就是使預測值更加接近真實值。可以採用梯度下降方法來進行此操作。關於梯度下降算法不再本文的涉及範圍之內。可以這樣簡單粗暴的理解。
    如果要想讓C越來越小,那麼W,B必須適當的進行調整,C的最快變小的方向W與b調整的方向,這個方向我們稱之爲梯度。如下圖所示,代價函數是一個關於y’的拋物線。y'是關於W與b的線性函數。


5、編程實現求解線性方程

1、 假定數據分佈遵循下面方程


可以生成部分訓練數據

# 生成測試數據
# 生成測試數據
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
x = np.random.random(100)
y = x*3.0+2.0
plt.scatter(x,y)

訓練數據的分佈如下:


2、使用訓練數據訓練模型

# 訓練模型
# 生成測試數據
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
x = np.random.random(100)
y = x*3.0+2.0
W = tf.Variable(.0,name='W',dtype=tf.float32)
b = tf.Variable(.0,name='b',dtype=tf.float32)
predict_y = W*x+b
cost = tf.reduce_mean(tf.square(predict_y-y),name='cost')
train = tf.train.GradientDescentOptimizer(0.1).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(500):
        sess.run(train)
        if epoch%50 == 0:
            print("%s epoch, W = %s , b= %s, loss = %s"%(str(epoch),sess.run(W),sess.run(b),sess.run(cost))) 
    plt.plot(x,y,'bo',x,sess.run(predict_y),'r--')
    plt.show() 

輸出效果如下圖所示:

0 epoch, W = 0.41552162 , b= 0.70811063, loss = 7.437216
50 epoch, W = 2.2709901 , b= 2.4014246, loss = 0.04669827
100 epoch, W = 2.6302414 , b= 2.2036057, loss = 0.012013537
150 epoch, W = 2.8124554 , b= 2.1032705, loss = 0.003090607
200 epoch, W = 2.9048762 , b= 2.0523794, loss = 0.0007950832
250 epoch, W = 2.9517522 , b= 2.0265675, loss = 0.00020454536
300 epoch, W = 2.9755278 , b= 2.0134754, loss = 5.262348e-05
350 epoch, W = 2.9875872 , b= 2.006835, loss = 1.3538471e-05
400 epoch, W = 2.9937046 , b= 2.0034666, loss = 3.4824436e-06
450 epoch, W = 2.9968069 , b= 2.0017583, loss = 8.9590014e-07

擬合效果如下圖所示:


    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章