吴恩达深度学习笔记——十二、第四课第四周:卷积神经网络的重要应用
1 人脸识别
1.1 人脸识别简介
人脸验证与人脸识别不同:
同时人脸识别中一个很重要的方向就是检测是否是活的人脸,还是一张图片,这就需要我们训练神经网络时训练集带有这样的标签。
1.2 one-shot学习
人脸识别的一个难点就是我们的学习器需要仅仅通过一张该人物的图片学习到识别人脸,我们的解决办法是使用d函数表示来客和数据集中图片的相似度:
1.3 Siamese network
给出了如何定义d函数来衡量两张图片的相似度:
那么我们该如何训练这两个网络呢?需要注意的是上图中的两个神经网络有相同的参数,我们只需要训练一个神经网络即可:
1.4 Tirplet 损失函数
则损失函数定义为:
如果我们有1000个人的10,000张图片,那么我们就利用这些图片生成m个A、P、N的三元组,放入模型中进行训练。
我们制作训练集时要谨慎选择A、P和N,尽可能让:
这样训练出的模型对相近的人脸才有最高的分辨性能。
相关的思想可以读读论文FaceNet
2 神经风格迁移(Neural style transfer)
2.1 Neural style transfer举例
2.2 深度卷积网络
本小节中我们将探讨深层神经网络的每一层都在做什么,并可视化的表达出来。
在论文Visualing and understanding convolutional networks中有介绍本小节相关知识。
从第一层的隐藏单元开始,假设我们遍历的训练集,发现了哪些图片或者哪些图片块(patches)最大化地激活了那个运算单元。注意到第一层的神经元只能看到小部分卷积,如果画出来哪些激活了激活单元,只有一小块图块是有意义的,因为这就是特定神经元所能看到的全部。例如我们选了一个神经元,发现一共有9张图块最大化第激活了该神经元,那么这9张图块很可能如下图所示:
即这个神经元看到了斜向右下的边缘或者线。
然后再在第一层里找另一个神经元,假设也有9张图块最大化第激活了该神经元,那么这9张图块有可能如下图所示:
即这个神经元看到了斜向左下的边缘或者线。
在神经网络的深层部分,神经网络可以看到一张图片更大的部分,极端情况下,输入图像的每个像素都会影响该层神经网络的输出:
2.3 代价函数
JContent用来衡量C和G的内容相似度有多高,JStyle用来衡量S和G的风格相似度有多高:
关于风格迁移的论文并不难读:A neural algorithm of artistic style
算法步骤为:
2.3.1 内容代价函数JContent
其中l的选择比较靠经验。
2.3.1 风格代价函数JStyle
选定某一层,我们把风格定义为不同输出通道之间激活项的相关系数,假设下图中的红色的通道(第一个通道),代表下图中用红色框框圈起来的神经元;下图中的黄色的通道(第二个通道),代表下图中用黄色框框圈起来的神经元。
也就是有很多竖直条纹的图块,如果他们高度相关,那么无论图像的哪一部分有这种的垂直纹理,该部分可能会有这种橙色的色调;如果他们是不相关的,那么,图像中有条纹的地方很大概率不是橙色的。
即相关系数表示了图块同时有l层中两个通道提取到特征的的性质的概率,我们在此处使用相关系数来测量生成图片的第一个通道是否和第二个通道相关
为了计算相关性,我们定义风格矩阵,其维度等于第l层的通道数nc,k和k’=1, 2, …, nc:
则风格代价函数JStyle定义为,下式的计算方法又称为Frobenius范数:
我们也可以定义风格代价函数
3 对一维和三维数据进行卷积
3.1 1D
3.2 2D