人工智能學會在20秒內成倍增長
如今,人工智能正在完成曾經被認為是人類無法勝任的任務。 從檢測視網膜病變的眼睛到威脅生命的腫瘤,AI很快就可以處理所有復雜任務。
今天,我們走下坡路,看看AI如何完成現代計算機最簡單的任務之一:乘法。
> Stock Image by Canva.com
在本文中,我們將嘗試講授機器學習模型以進行乘法運算并觀察其性能。 帖子將以最少的代碼(精確到14行)朝著ML的初學者側傾斜。
免責聲明:在現實生活中,您永遠不會希望ML算法為您執行乘法。 這篇文章僅引導您完成一個實驗,嘗試建立一個執行算術的機器學習模型。 讓我們開始吧。
我們的目標是開發一個模型,該模型將整數作為輸入并給出輸出乘以某個數字的輸入,讓我們將此數字設為5。因此,如果輸入10作為輸入,則必須 期望輸出50。 確實知道我們不會告訴模型我們正在尋找的任務是一個簡單的乘法; 它必須自己解決。
> Image by Author
第一件事
我們的第一項工作是通過查看模型來創建示例數據集,模型可以了解我們正在尋找的任務是乘以5。我們將使用1k至300之間的10k個隨機生成的數據點。因此,我們有10k個輸入 數據點[20,120 ….. 5,15]和10k輸出數據點[100,600 ….. 25,75],即輸入點乘以5。Python中相同的代碼如下。
import random
X=[]
Y=[]
for i in range(10000):
n = random.randint(0,300)
X.Append(n)
Y.append(n*5)
#X is the input array and Y is the output array
答對了! 我們已經準備好數據集。 現在,讓我們設計一個可以學習任務的神經網絡。 基本的教科書ANN設計看起來像下面的圖(圖1),其中有許多隱藏層和許多神經元,但這是用于諸如數字分類之類的復雜任務的。 對于我們的簡單乘法任務,僅具有一個隱藏層和一個隱藏神經元的簡單神經網絡可能就可以工作。
> Image by Author
架構時間
讓我們在圖2中編寫該架構的代碼,看看該模型是否可以學習乘以5。我們在Tensorflow之上使用Keras(高級ML庫)。 我們了解到,我們試圖構建的架構是一個簡單的順序網絡。 我們添加一個帶有一個神經元的密集層,這將是我們的隱藏層,然后再添加一個帶有一個神經元的層,它將保留我們的輸出答案。 我們對所有神經元使用" relu"優化功能。
我們使用均方誤差來查看模型預測和每個步驟的真實情況之間的誤差,并使用" Adam"優化器優化損失。 啟用"指標"參數后,它會顯示訓練過程中模型的統計信息。 設置好架構,現在該模型就可以學習了。 我們最終使用model.fit()函數,其中模型試圖理解輸入和輸出之間的關系。
我們傳遞輸入(X),輸出(Y),批大小:重置模型權重和偏差之前要查看的數據點數,驗證分割:用于驗證和時期的數據集的比例:模型經過的次數 通過整個集合。
from keras.models import Sequential
#using Keras Library
model=Sequential()
model.add(Dense(1,activation='relu',input_shape=(1,)))
model.add(Dense(1,activation='relu'))
model.compile(loss='MSE', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, batch_size=50, validation_split=0.1,
epochs=100, verbose=1,shuffle=1)
讓我們看一下訓練模型時打印的一些統計數據。
#From 10k samples, since validation_split=0.1, we trrain on 0.9*10k i.e. 9k samples.After First iteration
Epoch 1/1009000/9000 [==============================] - 1s 148us/step - loss: 625973.1757 - acc: 0.0038 - val_loss: 577468.6391 - val_acc: 0.0020After 74th iteration
Epoch 74/1009000/9000 [==============================] - 0s 24us/step - loss: 0.0723 - acc: 0.9583 - val_loss: 0.0595 - val_acc: 1.0000
看一下第1步和第74步之間的精度差異。 開始時的準確度為0.0038或0.38%,這表明模型不知道開始時輸入和輸出之間的關系是什么。 一開始的損失也是巨大的。 隨著訓練的繼續,模型開始具有數據意義,并且準確性提高,并且損失(錯誤)減少。
在執行第74步之后,該模型的準確度為0.9583或95.83%,即能夠以95.83%的確信度判斷該任務是乘以5。我們可以看到,驗證損失在74內也從0.20%提高到100% 迭代。 經過100次迭代后,訓練精度(acc)和驗證精度(val_acc)均達到100%,表明我們的模型成功發現該關系乘以5。
在配備16 GB RAM的NVidia 940 MX 4 GB GPU上,訓練過程大約需要20秒才能完成100次迭代。 確實,這是快速的學習。
結果
最后,該測試我們的模型了。 讓我們在test_array中獲取任何五個數字,并使用上面構建的模型來獲取預測。 理想情況下,輸出應為test_array元素乘以5。
test_array=np.array([4,27,100,121,9])
print(model.predict([test_array]))
做出最終預測的時間。
[[19.9995174407959], [134.9995880126953], [499.9997253417969], [604.9998168945312], [44.99952697753906]]
我們看到我們的模型幾乎就在那里。 實際值為[20,135,500,605,45],如果將預測四舍五入到小數點后兩位,我們將看到預測與預期結果相同。
> Canva.com
這樣就可以了,一個簡單的AI現在已經學習了乘法。 但是,要考慮:嘗試給定負值并檢查輸出,您會得到什么? 我想讓您嘗試,試驗并提出使算法更準確的技術。 另外,嘗試更改體系結構,例如添加更多的層和神經元,并查看指標的差異。 如果您有任何疑問,請在評論中讓我知道。
我希望您喜歡這篇文章,并幻想構建一個AI,該AI被編程為執行非常簡單的乘法任務。 下次見。
(本文翻譯自Nemath Ahmed的文章《AI Learns to Multiply in 20 Seconds》,參考:
https://towardsdatascience.com/ai-learns-to-multiply-ce844c68aefe)