隨著AI的突破持續吸引公眾注意,人們開始不加區別地使用“人工智能”、“機器學習”、“深度學習”等術語。然而,了解這些術語的區別,有助于把握AI技術的發展趨勢。
人工智能同心圓
我們可以把這三個術語想象成三個同心圓,其中人工智能包含了機器學習,機器學習又包含了深度學習。
簡單來說,有一些任務,傳統上認為需要通過人類認知活動才能完成,開發執行這些任務的計算機系統,即為人工智能。
而機器學習則是創建從大規模數據集中學習模式,并提供洞見的系統。機器學習本身可以分為三大類:
監督學習(supervised learning),理解一組數據點和標簽之間的關系,并在未標注的數據點上給出預測。例如,分類是否會出現不良貸款,預測未來股價。
無監督學習(unsupervised learning)則直接基于數據集的相似特征識別有意義的模式。例如,根據購物行為的相似程度聚類消費者。
強化學習(reinforcement learning)讓智能體在定義良好的環境中選擇可能的行動,并最大化目標函數(獎勵)。我們可以把自動駕駛看成一個強化學習問題,在公路上(環境)自動行駛的汽車(智能體),最大化其目標——不要出事故(獎勵)。
最后,深度學習是一種機器學習技術,該技術利用大規模數據和多層神經網絡以理解數據集的模式。最近在計算機視覺和語音識別等領域的AI突破都是由深度學習研究以及算力的日常商品化驅動的。
什么是卷積神經網絡?
深度學習有眾多架構和技術,以適應不同的使用場景,其中一種主要的架構和技術是卷積神經網絡。卷積神經網絡,受到哺乳動物視覺腦皮層方面的研究的啟發,參考了哺乳動物使用不同層次的神經元感知世界的方式。可以將這一模型想象成視覺皮層的模型,專門設計的不同神經元組識別不同的形狀。每個神經元組看到相應目標后激活,并和其他神經元組互相交流,以發展出感知目標的總體理解。
這一系統可以解釋為分層的神經元組,檢測輸入刺激的低層特性,并互相交流,以發展對目標的高層檢測。
第一組神經元結構識別低層特征(例如,臉部的輪廓)
第二組神經元結構識別顏色和形狀(例如,膚色和頜骨轉角)
第三組神經元結構識別細節(例如,耳朵、鼻子、眼睛)
第四組神經元結構整體識別整個目標(例如,臉部和對應之人)
簡單來說,看到給定目標后,系統中的不同神經元組因目標的不同方面而激活,并互相交流以形成整體圖景。
Yann Lecun從這一視覺腦皮層的層次模型中汲取了靈感,研發了卷積神經網絡:
局部連接:每層共享一個連接,以互相傳遞所學特征。
層次結構:在不同網絡層之間有一個很明顯的層次結構——從低層特征(例如,鼻子,眼睛)到高層特征(臉部、具體的人)。
空間不變性:模型可以適應輸入的平移等變換,仍然能夠完成識別。(人類能夠識別顛倒或經過其他變換的圖像。)
因此,卷積神經網絡的架構如下圖所示:
典型的卷積神經網絡架構
其中,輸入數據為四維矩陣(樣本數字,高,寬,頻道)。其中頻道對應色彩,彩圖有3個頻道(R、G、B),而灰度圖像只有1個頻道。
輸入數據將連接到一個隱藏層(卷積層),應用多個任意尺寸(通常為3x3或5x5)的過濾器至圖像。可以將過濾器想象為一個大小為3x3(或5x5)的小手電,照在輸入圖像上,嘗試提取特征映射。基于特征映射,算法可以理解數據中的局部特征(眼、耳……),不管其位置如何(平移不變性)。如下圖所示:
池化是一個降采樣操作,通過應用任意尺寸(步長)的窗口,在窗口中根據用戶指定,提取和、最大值、平均值,以降低提取的特征映射的維度。在下面的示意圖中,我們使用的是最大池化,在特征映射的2x2窗口中提取最大值。這一技術有助于在保留信息的前提下降低維度。
最后是傳統的全連接層,對卷積習得的表示進行softmax操作,并輸出預測。簡單來說,全連接層包含觀察到特定模式后會“點亮”的節點。
從直覺上說,卷積神經網絡將圖像作為輸入,嘗試使用一系列數學運算(卷積、池化)辨認不同的小特征(局部連接),不管其位置如何(空間不變性),以理解整個圖像的內容。這些數學運算牽涉到建模圖像為一系列數字,其中每個數字表示像素亮度(假設輸入為灰度圖像)。
實例
我們的數據集是72x72網格中的一組幾何圖形(三角形、圓形、矩形)。由于這些是灰度圖像,因此它們只有一個頻道。下面是一些樣本:
我們將使用python的Keras包實現一個卷積神經網絡,該網絡在分類這些形狀時可以達到98%精確度。
導入依賴:
import numpy as np
import keras
from keras importSequential, optimizers
from keras.layers importDense, Activation
from keras.callbacks importEarlyStopping
from sklearn.metrics import confusion_matrix, accuracy_score
from keras.layers importConv2D, MaxPooling2D, Flatten, Dropout
from keras.utils import np_utils
生成訓練數據集和測試數據集:
[X_train, Y_train] = generate_dataset_classification(1000, 20, True)
[X_test, Y_test] = generate_test_set_classification()
根據keras的要求轉換標簽至類別矩陣,并重整訓練集中圖像的形狀:
Y_train = keras.utils.to_categorical(Y_train, 3)
X_train = X_train.reshape(1000,72,72,1)
構建模型:
conv_model = Sequential()
conv_model.add(Conv2D(16, (5,5), activation = 'relu', input_shape = (72,72,1)))
conv_model.add(MaxPooling2D((2,2)))
conv_model.add(Conv2D(16, (5,5), activation = 'relu'))
conv_model.add(MaxPooling2D((2,2)))
conv_model.add(Conv2D(16, (5,5), activation = 'relu'))
conv_model.add(MaxPooling2D((2,2)))
conv_model.add(Flatten())
conv_model.add(Dense(3, activation = 'sigmoid'))
編譯、訓練模型:
conv_model.compile(optimizer = 'Adam', loss = 'categorical_crossentropy')
conv_model.fit(X_train, Y_train, validation_split = 0.3, epochs = 100, batch_size = 32)
重整測試集數據的形狀,在測試集上進行預測,并評估精確度:
X_test = X_test.reshape(300,72,72,1)
predictions = conv_model.predict_classes(X_test)
print("精確度評分為 {} %".format(accuracy_score(Y_test, predictions) * 100))
結果:
精確度評分為 97.33333333333334 %
結語
卷積神經網絡代表了圖像識別中的重大突破。卷積神經網絡在自動駕駛汽車,人臉識別系統,醫學診斷等場景都有廣泛應用。然而,值得注意的是,卷積神經網絡仍有提升的空間,而卷積網絡的適用領域也出現了一些新技術,比如膠囊網絡。
-
人工智能
+關注
關注
1805文章
48936瀏覽量
248284 -
卷積神經網絡
+關注
關注
4文章
369瀏覽量
12259
原文標題:卷積網絡背后的直覺
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論