电子说
动机
与其他机器学习技术相比,深度学习的主要优势在于它能够自动学习输入数据的抽象表示。 但是,并非总是如此。 早在1969年,Minsky和Papert出版了一本书,该书(除其他事项外)证明了单层感知器(人工神经网络的祖先)无法解决XOR问题。 对于我们这些没有计算机科学背景的人,XOR问题的任务是接受两个二进制输入A和B,并且仅当A或B中只有一个为真时才返回true,因此名称为“ 异或”或XOR。 单层感知器无法解决此问题的原因是它们只能解析线性可分离的类。 如果要为XOR问题及其输出绘制可能的输入,则该空间应如下所示:
The world’s worst game of tic-tac-toe (source: wikimedia commons)
现在,您可以在此图像上绘制一条直线并将圆与十字分开吗? 剧透:您不能,感知器也不能。 幸运的是,勇敢的先驱者拥有将两个感知器结合在一起的见识,并且深度学习领域诞生了(或多或少)。 之所以可行,是因为神经网络的每一层都可以看作是前一层的嵌入。 尽管上图中的圆圈和十字可能无法以其原始形式线性分离,但可以通过简单的编码进行线性分离。 拍摄图像的左上角和右下角,并将它们保持在您的脑海中。 然后,借助您的想象力,将图像对折至第三维的一半,将右上角拖出屏幕,然后将其向下压回到左下角。 如果操作正确,它将看起来像这样:
If you look closely, you may notice I’m not an artist
现在,您可以在此图像上绘制一条直线并将圆与十字分开吗? 我衷心希望如此。 这种获取信息并将其编码为其他更有用形式的动作是神经网络擅长的主要任务。 实际上,训练神经网络不是为了具有预测能力,而是为了发现它们所获得的学习表现,已经成为深度学习研究的主要内容。
学会看
卷积神经网络(CNN)是将深度学习应用于图像数据的最受欢迎的体系结构。 简而言之,CNN可以学习许多过滤器,它们适用于图像的每个像素及其层。 通过将这些过滤器应用于图像以及重复进行下采样,神经网络将学会在其第一层中识别简单的低层特征,并在其最后一层中识别复杂的高层特征。 至少,这就是通常的解释方式。
Image Source: Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations, by Lee et al.
如您所见,模型学会了识别各种边缘,然后识别出面部特征,然后识别出整个面部(去除了许多中间层)。 如果您使用Google“卷积神经网络层可视化”,则会发现大量上述图片。 但是,我从未在训练过程中看到CNN图层的可视化,所以我想我会看到它们的外观。 在此探索中,我使用了常见的MNIST数据集,即一组60,000个黑白手绘数字,每个数字的高度和宽度为28像素。 我使用了一个简单的卷积模型,如下所示:
The network architecture, including 6 convolutional layers and 3 dense layers
可视化
对神经网络进行了五个时期的训练,最小批量为1024个图像,总共290个训练步骤。 在每个步骤之后,将一组预先选择的十个样本图像(每个数字之一)输入模型,并保存每个卷积层的激活。 尽管tanh近年来它不再流行,而是支持更易于训练的,但我还是决定将tanh用作卷积层中的激活函数。 这是因为tanh限制在-1和1之间,使其易于可视化。 将第一层的激活应用于红蓝色色图时,结果如下:
Conv1: The input images (top row) and the activations of the four channels in convolutional layer 1. Activations range from +1 (blue) to 0 (white) to -1 (red). Frame (top left) is the number of training steps applied.
Conv1似乎已学会识别第一和第二通道的笔划宽度,因为每个数字的内部为深红色,而外部为浅红色。在第三和第四通道中,似乎已经学会了边缘的概念,其中数字为蓝色,背景为粉红色,数字边缘为白色。然而,这些激活是深度学习规范所建议的一个长远目标,那就是每个通道都将学习一个清晰而独特的功能,例如垂直和水平边缘。 Conv1在很大程度上复制带有少量注释的原始输入。
Conv2: The same setup as Conv1.
与Conv1相似,Conv2也似乎正在再现原始输入。 通道1、2和4彼此几乎相同,并且与Conv1中看到的边缘突出显示行为几乎相同,通道3只是输入的模糊再现。
Conv3: The same setup as Conv1, except with eight channels instead of four. This layer has half the resolution as the original image, so activations were upscaled without interpolation for visualization.
在Conv3中,我们看到了可能是第一个真正了解的功能。在第六个通道中,在训练即将结束时,我们看到数字是蓝色的,大多数背景是粉红色的,而数字每个部分正下方的背景是红色。这表明该通道已学会识别水平边缘的底部。同样,第七个通道在每个数字上方都有红色数字,粉红色背景和白色水平边缘。但是,其他通道似乎只是原始图像的简单复制。
Conv4: The same setup as Conv3.
在Conv4中,我们看到了更清晰定义的功能。 特别是,我们看到了不同角度的边缘。 第一,第二和第六通道标识水平边缘的顶部。 第三,第七和第八通道标识对角线边缘。 其他两个通道是原始图像的粗略复制。
Conv5: The same setup as Conv1, except with sixteen channels instead of four. This layer has one-quarter the resolution of the original image, so activations were upscaled without interpolation for visualization.
Conv5进行了大幅下采样,分辨率仅为7x7像素,但似乎具有有意义的特征提取。 在训练的最早步骤中,每个通道都是粉红色的,几乎没有任何信息。 到了步骤70,该层已学会产生模糊地类似于输入的斑点。 但是,在训练结束时,通道之间已经明显地区分开,并且在激活方面显示出急剧的变化。 由于分辨率低和我们称之为独立功能的纠结,目前尚不清楚在这里学到了哪些功能,但是很显然,这里的每个通道都有一些有用的功能。
Conv6: The gif was too large for Medium, so these are the activations after training has completed.
不幸的是,Conv6文件太大,没有上传动图。与Conv5相似,学习到的功能清晰可见,但是几乎无法分辨出它们实际对应的含义。
Accuracy and loss (categorical_crossentropy) during training
得到教训
那么这个故事的寓意是什么?我建议有三个。
首先,深度学习成果很少像教科书所建议的那样清晰。许多教科书,包括深度学习(Goodfellow等人),都将低级卷积层比作Gabor滤镜和其他手工制作的计算机视觉滤镜。尽管该模型在测试数据上的准确性达到了95%以上,但是就特征提取而言,前四个卷积层所做的很少。当然,对于一个非常简单的任务来说,这是一个非常简单的模型,而且为一个更艰巨的任务而训练的更复杂的模型可能至少学到了一些有用的低级功能,但是通常采用深度学习的方式进行教学(在我的经验)表明,即使对于简单的任务,特征的优化和提取也是不可避免的;显然不是这样。
第二个教训是,学习的功能不太可能是人类可能会选择的直观,独立的特质。 Conv5和Conv6清楚地学到了一些东西,并且原始图像的编码方式使得网络的密集层可以按数字类型对它们进行分类,但是他们学会了检测的内容并不能立即显而易见。 这是深度学习中的一个常见问题,尤其是在生成建模中,模型可能会学习将两个或多个看似无关的特质嵌入为单个功能。
这是第三课,这是我作为数据科学家在工作中每天都想起的一课,那就是可视化所有内容。 我参加了这个项目,期望写一篇非常不同的文章。 我很高兴展示从低级边缘检测到高级循环和旋转的网络学习和优化功能。 取而代之的是,我发现一个懒散的漫步,直到第11个小时才具有完善的功能。 最值得注意的是,我惊讶地发现,一旦各层学会了输入的某种表示形式,它们在训练过程中几乎就不会改变。 可视化增强了我对卷积神经网络训练的理解。 希望您也从这里学到了一些东西。
全部0条评论
快来发表一下你的评论吧 !