Deep learning学习记录(课程4)

257 阅读4分钟

标题:卷积神经网络

这节课程的重要性和实战价值毋庸置疑了,cnn是目前图像领域的state of art,极大的改变了这个领域,在海量数据的加持下,性能远远超出了传统的算法。应用层出不穷,每年都有很多新的论文和进展涌现出来。当前热门的人脸识别、自动驾驶、目标检测等应用中都有它的身影。下面我们就具体的看一看课程里有哪些内容。

1.卷积神经网络主要应用于计算机视觉领域。对于图像作为输入的神经网络来说,1000*1000的图像就需要至少300万个输入参数,那么构建一个相当数量的全连接层需要多少连接?需要多少次计算?如果这个网络是深度的,也就是说比如要有100层,这个计算量哪怕是现在最先进的计算机也无力负荷。卷积就是应对这个问题的解决方案,通过卷积我们完成了层之间的连接,大大减少了计算量。
我们这里的卷积和图像/传统的卷积不同,更准确来说是互相关,可以通过较少的操作对图像输入进行变换,提取特征。

2.卷积层+池化层+密度层(全连接层)。cnn可能有很多的block构成,block由卷积层+池化层构成,总体来说channel数量越来越大,图像的大小越来越小;前面的层表达的特征较为局部、简单,越往后面的层所表达的特征越复杂,可能表达一些整体的特征,比如一条狗、一辆车。

3.lenet->alexnet->goolenet->vgg->inceptionv1/v2/v3/resnet。其中resnet通过skip连接使得非常深度网络的训练变得可行(此前面临的深度网络梯度接近于0难以收敛)。1*1的卷积在inception中使用,network in network的思想,可以用来升降channel的维度。 inception(全面启动/盗梦空间),很棒的设计。

4.因为卷积神经网络的训练需要非常大量的数据和庞大的计算能力、很长的训练时间,所以我们常常使用别人训练好的模型(pretrained model)进行tune。利用了迁移学习的思想。

5.对于复杂的模型,建议使用开源的实现作为基础。数据增广也是常用的手段(卷积神经网络一般较深,模型很复杂,需要大量数据才能变的更好)。

6.目标识别是cnn领域一个比较复杂的应用。目标定位+特征点检测+滑动窗口法(起源,非常耗时的方法,实际操作中已经基本不再使用)的介绍。
现实应用中的目标识别分两类,单步骤和两步骤。两步骤中多了一个region proposal的阶段,faster-rcnn(比较先进的方法)中使用整张图片的cnn来找出region proposal然后在此基础上进行识别。
yolo(you look only once)+ssd(single shot multibox): iou(交并比)+nms(最大值抑制,关键,否则就是一大堆的框)+anchorboxes(检测多类别,不同形状)+ 对坐标/偏移的回归. 其中yolov2使用k-means方法选择anchorboxes,ssd需要手工选择。
总体来说,2阶段的速度无法达到实时,1阶段广泛应用于实时场景,2阶段的效果较好。

7.人脸识别。主要思想是对人脸图片编码成一个多维(比如128)的向量,通过两者之间的距离判定是否是同一个人。 one shot learning + siamese network + triplet loss(训练的方法,选择3张图,anchor+po(正)+ne(负))。应该也有另外一种基于分类的训练方法。
人脸验证:1:1,人脸识别:1:K。实际应用中可以预先计算出对比用的样例的特征向量,验证/识别时只需要对一张照片进行predict得到新的特征向量,然后比对即可。

8.neural style transfer的想法很有创意,需要注意的是它的训练过程,参数没有任何变化,input随着迭代不断的被更新,完成以后的input即是我们需要的output。
content loss: 神经网络中/后某一层的激励差异;
style loss: 神经网络某一层channels的矩阵点乘后的差异,这个点乘矩阵用来表达图片的style;为了更好的表达,实际操作中会使用多层加权叠加的方式得到一个最终的差异。
total loss = alpha content_loss + betastyle_loss,作者设计了两个超参数(实际1个也可以了)。