卷积神经网络背后的直觉探索

电子说

1.2w人已加入

描述

随着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 %

结语

卷积神经网络代表了图像识别中的重大突破。卷积神经网络在自动驾驶汽车,人脸识别系统,医学诊断等场景都有广泛应用。然而,值得注意的是,卷积神经网络仍有提升的空间,而卷积网络的适用领域也出现了一些新技术,比如胶囊网络。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分