[关闭]
@ksc010 2018-12-29T10:20:24.000000Z 字数 5919 阅读 844

深度学习笔记

参考学习资料:

[!video!卷积神经网络之卷积计算层] http://www.julyedu.com/video/play/42/206
[!video! pytorch] https://morvanzhou.github.io/tutorials/machine-learning/torch
[!blog! 数学系的数据挖掘民工] https://www.cnblogs.com/charlotte77/

[近年来深度学习的重要研究成果] (https://www.jiqizhixin.com/articles/Recent-Advances-in-Deep-Learning-An-Overview)

[如何通俗易懂地解释卷积?] https://www.zhihu.com/question/22298352
[大话卷积神经网络(CNN)] https://my.oschina.net/u/876354/blog/1620906
[斯坦福公开课 CS231n: Convolutional Neural Networks for Visual Recognition] http://cs231n.stanford.edu/
[cs231:卷积网络笔记]    http://cs231n.github.io/convolutional-networks/

名词

PS: 下面是学习过程用接触到的一些名词概念

AI的“状态树”可以描述为“在某状态下”执行“某行为”的一整套规则

归一化
正则化

无监督学习: 是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。

有监督学习(supervised learning): 分为两类 回归分析(Regression Analysis) ,分类(Classification)

机器学习:是人工智能的一个分支

深度学习:是机器学习中一种基于对数据进行表征学习的方法

自然语言处理(Natural Language Processing; NLP )

梯度下降法
代价函数 cost function

线性方程 linear
非线性方程 nonlinear

SVM (支持向量机,支持向量网络) 是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法

神经网络 回归 和 分类classfication
regularization

状态机 State Machine
有限状态机 https://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA

行为树 Behavior Tree

predict 预测

逻辑回归(Logistic regression)

Softmax回归模型: 是logistic回归模型在多分类问题上的推广

生成对抗网络(Generative Adversarial Network, GAN)

动态图vs静态图计算:

程序将按照我们编写命令的顺序进行执行。这种机制将使得调试更加容易,并且也使得我们将大脑中的想法转化为实际代码变得更加容易。而静态计算则意味着程序在编译执行时将先生成神经网络的结构,然后再执行相应操作。
从理论上讲,静态计算这样的机制允许编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果计算图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它)

朴素贝叶斯分类器
https://zh.wikipedia.org/wiki/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%86%E7%B1%BB%E5%99%A8
http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html

协同过滤
https://zh.wikipedia.org/wiki/%E5%8D%94%E5%90%8C%E9%81%8E%E6%BF%BEs

聚类分析(Cluster analysis)

K-MEANS 算法 http://coolshell.cn/articles/7779.html

支持向量机 SVM (support vector machine)


深度学习框架

深度神经网络 (deep neuron networks, DNN)
卷积神经网络 (Convolutional Neural Network, CNN)
深度信念网络 (deep belief networks,DBN)
递归(循环)神经网络 (RNN) 是两种人工神经网络的总称
    时间递归神经网络(recurrent neural network)
    结构递归神经网络(recursive neural network)

机器学习框架

Tensorflow https://www.tensorflow.org/?hl=zh-cn

Google, 支持分布式,主要静态计算图(貌似也可以通过扩展支持动态图计算)

Pytorch https://pytorch-cn.readthedocs.io/zh/

Facebook, 动态图计算

Caffe http://caffe.berkeleyvision.org/

C++/CUDA架构,速度快,通过配置文件定义网络层级

MXnet https://mxnet.apache.org/

PS: 这些框架能更容易开发大型的网络结构, 目前一些一些大型的网络有上百层,靠人工编写非常繁琐低效

神经网络

就是由简单的函数构成的一组函数在顶层堆叠在一起,我们用一种层次化的方式把它们堆叠起来 为了形成更复杂的非线性函数

典型的人工神经网络有三个部分:
- 结构(Architecture)结构指定了网络中的变量和它们的拓扑关系。例如,神经网络中的变量可以是神经元连接的权重(weights)和神经元的激励值(activities of the neurons)。
- 激励函数(Activity Function)大部分神经网络模型具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。一般激励函数依赖于网络中的权重(即该网络的参数)。
- 学习规则(Learning Rule)学习规则指定了网络中的权重如何随着时间推进而调整

理解: 神经网络就是大量的 函数 Y = X*W + b 组成。
训练(学习)过程就是计算更新 W(这个可能数量据大,需要耗费大量的时间来计算)使 Y 符合预期。
目前的研究就是怎么加速优化这一计算过程

激励函数

激活函数(Activation Function)是用来加入非线性因素的,因为线性模型的表达能力不够所不能解决的问题。

常见激活函数:

sigmoid 采用S形函数,取值范围[0,1]
tanh 双切正切函数,取值范围[-1,1]
relu 简单而粗暴,大于0的留下,否则一律为0。

损失函数

损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好
也叫做代价函数(cost function)?

Ref:

一文读懂机器学习常用损失函数(Loss Function)

常见损失函数:

LogLoss对数损失函数
平方损失函数(最小二乘法, Ordinary Least Squares )
指数损失函数(Adaboost)
Hinge损失函数(SVM)
mean squared error (MSE)

卷积(Convolution)

卷积过程-动图
公式1
公式2

输出大小计算公式

output_width = (input_width − kernel_size + 2*padding )/stride+1

池化(pooling)

池化过程-max pooling

常见池化方法:

Mean pooling(均值采样)
Max pooling(最大值采样)
Overlapping (重叠采样)
L2 pooling(均方采样)
Local Contrast Normalization(归一化采样)
Stochasticpooling(随即采样)
Def-pooling(形变约束采样)

全连接层(Fully Connected Layer)

CNN网络的最后级几层一般是 全连接层,
目的是把一个NxM大小的特征向量 映射为1xZ的 向量

全连接

参数W更新方法? 加速

SGD
Adam
Adagrad
Rprop

公开数据集

MNIST: Fashion-MNIST等
CIFAR10/CIFAR100 10个类型的图片。该数据集有60000张尺寸为 32 x 32 的彩色图片
STL-10
SVHN
ImageNet http://www.image-net.org/
PascalVOC http://host.robots.ox.ac.uk/pascal/VOC/ xml
COCO http://cocodataset.org  JSON Microsoft COCO: Common Objects in Context
VisualGenome  http://visualgenome.org/  斯坦福大学人工智能实验室 last version 1.4 July 12, 2017

CNN模型

图片分类网络模型

AlexNet
ResNet 深度残差网络 Deep residual network : ResNet101
Inception v1(GoogleNet) - v4
VGGNet: VGG16
LeNet

[R-CNN: Region-based Convolutional Neural Networks] https://github.com/rbgirshick/rcnn
[Fast R-CNN: Fast Region-based Convolutional Networks for object detection] https://github.com/rbgirshick/fast-rcnn

开放数据集

下面是一些整理好的开发数据集,都已经按照特定格式标注好。

pytroch中的torchvision.datasets 大部分都可以直接加载

MNIST: http://yann.lecun.com/exdb/mnist/ Fashion-MNIST等,二进制格式
CIFAR10/CIFAR100 10个类型的图片。该数据集有60000张尺寸为32x32的彩色图片
STL-10 用于开发无监督特征学习、深度学习、自学习算法的图像识别数据集
SVHN 谷歌街景的门牌号码图像
ImageNet http://www.image-net.org/
PascalVOC http://host.robots.ox.ac.uk/pascal/VOC/ xml
COCO http://cocodataset.org  JSON Microsoft COCO: Common Objects in Context
VisualGenome  http://visualgenome.org/  斯坦福大学人工智能实验室 Version 1.4 of dataset completed as of July 12, 2017.

目标检测

Object Detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。
所以object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。

Ref:

一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

目标检测的两种方法

候选区域/窗 + 深度学习分类

通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案

PS: 简单说就是先 找到图片可能的区域,然后对该区域进行 分类识别判断

R-CNN (Selective Search + CNN + SVM); 2013.11
SPP-net(ROI Pooling); 2015
Fast R-CNN(Selective Search + CNN + ROI); 2015
Faster R-CNN(RPN + CNN + ROI); 2016.6
R-FCN; 2016.5
Mask R-CNN; 2017.5  Faster-RCNN的基础上 目标检测的同时,把目标像素分割出来

Faster R-CNN 的实现:
1. https://github.com/jwyang/faster-rcnn.pytorch

支持pytorch-1.0 CNN网络: VGG/Res

  1. https://github.com/ruotianluo/pytorch-faster-rcnn

Mask R-CNN的实现:
https://github.com/facebookresearch/Detectron

深度学习的回归方法

YOLO
SSD ( Single Shot MultiBox Detector)
DenseBox
RRC detection
Deformable CNN

训练过程中的一些概念

batch , epoch, iteration
[神经网络训练中,傻傻分不清Epoch、Batch Size和迭代]https://www.jiqizhixin.com/articles/2017-09-25-3
[训练神经网络中最基本的三个概念:Epoch, Batch, Iteration] https://zhuanlan.zhihu.com/p/29409502

比如你有1000个数据,这个数据集可能太大了,全部跑一次再调参很慢,于是可以分成100个为一个数据集,这样有10份。
batch_size=100 这100个数据组成的数据集叫batch
每跑完一个batch都要更新参数,这个过程叫一个iteration
epoch指的就是跑完这10个batch(10个iteration)的这个过程

准确率(Accuracy), 精确率(Precision), 召回率(Recall)

[准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure] https://www.cnblogs.com/sddai/p/5696870.html

PS: 评估一个模型并不能只是看准确率怎么样,举一个例子说 一批图片共有100个 要设计一个分类器 识别图片是否包含人
这一批图片 含有人的假设就有99个, 假如我设计个分类器很简单 就有一行代码 return true; 这个分类器也能达到 99%的准确率

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注